PL_InitArenaPool:
   32|   139k|                 PRUint32 align) {
   33|       |  /*
   34|       |   * Look-up table of PR_BITMASK(PR_CeilingLog2(align)) values for
   35|       |   * align = 1 to 32.
   36|       |   */
   37|   139k|  static const PRUint8 pmasks[33] = {
   38|   139k|      0, /*  not used */
   39|   139k|      0,  1,  3,  3,  7,  7,  7,  7,
   40|   139k|      15, 15, 15, 15, 15, 15, 15, 15, /*  1 ... 16 */
   41|   139k|      31, 31, 31, 31, 31, 31, 31, 31,
   42|   139k|      31, 31, 31, 31, 31, 31, 31, 31 /* 17 ... 32 */
   43|   139k|  };
   44|       |
   45|   139k|  if (align == 0) {
  ------------------
  |  Branch (45:7): [True: 0, False: 139k]
  ------------------
   46|      0|    align = PL_ARENA_DEFAULT_ALIGN;
  ------------------
  |  |   28|      0|#define PL_ARENA_DEFAULT_ALIGN sizeof(double)
  ------------------
   47|      0|  }
   48|       |
   49|   139k|  if (align < sizeof(pmasks) / sizeof(pmasks[0])) {
  ------------------
  |  Branch (49:7): [True: 139k, False: 0]
  ------------------
   50|   139k|    pool->mask = pmasks[align];
   51|   139k|  } else {
   52|      0|    pool->mask = PR_BITMASK(PR_CeilingLog2(align));
  ------------------
  |  |  147|      0|#define PR_BITMASK(n)   (PR_BIT(n) - 1)
  |  |  ------------------
  |  |  |  |  146|      0|#define PR_BIT(n)       ((PRUint32)1 << (n))
  |  |  ------------------
  ------------------
   53|      0|  }
   54|       |
   55|   139k|  pool->first.next = NULL;
   56|       |  /* Set all three addresses in pool->first to the same dummy value.
   57|       |   * These addresses are only compared with each other, but never
   58|       |   * dereferenced. */
   59|   139k|  pool->first.base = pool->first.avail = pool->first.limit =
   60|   139k|      (PRUword)PL_ARENA_ALIGN(pool, &pool->first + 1);
  ------------------
  |  |  146|   139k|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  ------------------
   61|   139k|  pool->current = &pool->first;
   62|       |  /*
   63|       |   * Compute the net size so that each arena's gross size is |size|.
   64|       |   * sizeof(PLArena) + pool->mask is the header and alignment slop
   65|       |   * that PL_ArenaAllocate adds to the net size.
   66|       |   */
   67|   139k|  if (size > sizeof(PLArena) + pool->mask) {
  ------------------
  |  Branch (67:7): [True: 139k, False: 0]
  ------------------
   68|   139k|    pool->arenasize = size - (sizeof(PLArena) + pool->mask);
   69|   139k|  } else {
   70|      0|    pool->arenasize = size;
   71|      0|  }
   72|       |#ifdef PL_ARENAMETER
   73|       |  memset(&pool->stats, 0, sizeof pool->stats);
   74|       |  pool->stats.name = strdup(name);
   75|       |  pool->stats.next = arena_stats_list;
   76|       |  arena_stats_list = &pool->stats;
   77|       |#endif
   78|   139k|}
PL_ArenaAllocate:
   99|   697k|PR_IMPLEMENT(void*) PL_ArenaAllocate(PLArenaPool* pool, PRUint32 nb) {
  100|   697k|  PLArena* a;
  101|   697k|  char* rp; /* returned pointer */
  102|   697k|  PRUint32 nbOld;
  103|       |
  104|   697k|  PR_ASSERT((nb & pool->mask) == 0);
  ------------------
  |  |  208|   697k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 697k, False: 0]
  |  |  ------------------
  ------------------
  105|       |
  106|   697k|  nbOld = nb;
  107|   697k|  nb = (PRUword)PL_ARENA_ALIGN(pool, nb); /* force alignment */
  ------------------
  |  |  146|   697k|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  ------------------
  108|   697k|  if (nb < nbOld) {
  ------------------
  |  Branch (108:7): [True: 0, False: 697k]
  ------------------
  109|      0|    return NULL;
  110|      0|  }
  111|       |
  112|       |  /* attempt to allocate from arenas at pool->current */
  113|   697k|  {
  114|   697k|    a = pool->current;
  115|   697k|    do {
  116|   697k|      if (nb <= a->limit - a->avail) {
  ------------------
  |  Branch (116:11): [True: 0, False: 697k]
  ------------------
  117|      0|        pool->current = a;
  118|      0|        rp = (char*)a->avail;
  119|      0|        a->avail += nb;
  120|      0|        return rp;
  121|      0|      }
  122|   697k|    } while (NULL != (a = a->next));
  ------------------
  |  Branch (122:14): [True: 0, False: 697k]
  ------------------
  123|   697k|  }
  124|       |
  125|       |  /* attempt to allocate from the heap */
  126|   697k|  {
  127|   697k|    PRUint32 sz = PR_MAX(pool->arenasize, nb);
  ------------------
  |  |  159|   697k|#define PR_MAX(x,y)     ((x)>(y)?(x):(y))
  |  |  ------------------
  |  |  |  Branch (159:26): [True: 692k, False: 5.75k]
  |  |  ------------------
  ------------------
  128|   697k|    if (PR_UINT32_MAX - sz < sizeof *a + pool->mask) {
  ------------------
  |  |  302|   697k|#define PR_UINT32_MAX PR_UINT32(4294967295)
  |  |  ------------------
  |  |  |  |  282|   697k|#define PR_UINT32(x) x ## U
  |  |  ------------------
  ------------------
  |  Branch (128:9): [True: 0, False: 697k]
  ------------------
  129|      0|      a = NULL;
  130|   697k|    } else {
  131|   697k|      sz += sizeof *a + pool->mask; /* header and alignment slop */
  132|   697k|      a = (PLArena*)PR_MALLOC(sz);
  ------------------
  |  |   55|   697k|#define PR_MALLOC(_bytes) (PR_Malloc((_bytes)))
  ------------------
  133|   697k|    }
  134|   697k|    if (NULL != a) {
  ------------------
  |  Branch (134:9): [True: 697k, False: 0]
  ------------------
  135|   697k|      a->limit = (PRUword)a + sz;
  136|   697k|      a->base = a->avail = (PRUword)PL_ARENA_ALIGN(pool, a + 1);
  ------------------
  |  |  146|   697k|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  ------------------
  137|   697k|      PL_MAKE_MEM_NOACCESS((void*)a->avail, a->limit - a->avail);
  138|   697k|      rp = (char*)a->avail;
  139|   697k|      a->avail += nb;
  140|   697k|      PR_ASSERT(a->avail <= a->limit);
  ------------------
  |  |  208|   697k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 697k, False: 0]
  |  |  ------------------
  ------------------
  141|       |      /* the newly allocated arena is linked after pool->current
  142|       |       *  and becomes pool->current */
  143|   697k|      a->next = pool->current->next;
  144|   697k|      pool->current->next = a;
  145|   697k|      pool->current = a;
  146|   697k|      if (NULL == pool->first.next) {
  ------------------
  |  Branch (146:11): [True: 0, False: 697k]
  ------------------
  147|      0|        pool->first.next = a;
  148|      0|      }
  149|   697k|      PL_COUNT_ARENA(pool, ++);
  150|   697k|      COUNT(pool, nmallocs);
  151|   697k|      return (rp);
  152|   697k|    }
  153|   697k|  }
  154|       |
  155|       |  /* we got to here, and there's no memory to allocate */
  156|      0|  return (NULL);
  157|   697k|} /* --- end PL_ArenaAllocate() --- */
PL_ArenaGrow:
  160|  26.0k|PL_ArenaGrow(PLArenaPool* pool, void* p, PRUint32 size, PRUint32 incr) {
  161|  26.0k|  void* newp;
  162|       |
  163|  26.0k|  if (PR_UINT32_MAX - size < incr) {
  ------------------
  |  |  302|  26.0k|#define PR_UINT32_MAX PR_UINT32(4294967295)
  |  |  ------------------
  |  |  |  |  282|  26.0k|#define PR_UINT32(x) x ## U
  |  |  ------------------
  ------------------
  |  Branch (163:7): [True: 0, False: 26.0k]
  ------------------
  164|      0|    return NULL;
  165|      0|  }
  166|  26.0k|  PL_ARENA_ALLOCATE(newp, pool, size + incr);
  ------------------
  |  |  150|  52.0k|    PR_BEGIN_MACRO \
  |  |  ------------------
  |  |  |  |  123|  26.0k|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  151|  52.0k|        PLArena *_a = (pool)->current; \
  |  |  152|  52.0k|        PRUint32 _nb = PL_ARENA_ALIGN(pool, (PRUint32)nb); \
  |  |  ------------------
  |  |  |  |  146|  26.0k|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  |  |  ------------------
  |  |  153|  52.0k|        PRUword _p = _a->avail; \
  |  |  154|  52.0k|        if (_nb < (PRUint32)nb) { \
  |  |  ------------------
  |  |  |  Branch (154:13): [True: 0, False: 26.0k]
  |  |  ------------------
  |  |  155|      0|            _p = 0; \
  |  |  156|  26.0k|        } else if (_nb > (_a->limit - _a->avail)) { \
  |  |  ------------------
  |  |  |  Branch (156:20): [True: 2.41k, False: 23.6k]
  |  |  ------------------
  |  |  157|  2.41k|            _p = (PRUword)PL_ArenaAllocate(pool, _nb); \
  |  |  158|  23.6k|        } else { \
  |  |  159|  23.6k|            _a->avail += _nb; \
  |  |  160|  23.6k|        } \
  |  |  161|  52.0k|        p = (void *)_p; \
  |  |  162|  52.0k|        if (p) { \
  |  |  ------------------
  |  |  |  Branch (162:13): [True: 26.0k, False: 0]
  |  |  ------------------
  |  |  163|  26.0k|            PL_MAKE_MEM_UNDEFINED(p, (PRUint32)nb); \
  |  |  164|  26.0k|            PL_ArenaCountAllocation(pool, (PRUint32)nb); \
  |  |  165|  26.0k|        } \
  |  |  166|  52.0k|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|  26.0k|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|  26.0k|  if (newp) {
  ------------------
  |  Branch (167:7): [True: 26.0k, False: 0]
  ------------------
  168|  26.0k|    memcpy(newp, p, size);
  169|  26.0k|  }
  170|  26.0k|  return newp;
  171|  26.0k|}
PL_ClearArenaPool:
  173|  6.47k|PR_IMPLEMENT(void) PL_ClearArenaPool(PLArenaPool* pool, PRInt32 pattern) {
  174|  6.47k|  PLArena* a;
  175|       |
  176|   338k|  for (a = pool->first.next; a; a = a->next) {
  ------------------
  |  Branch (176:30): [True: 331k, False: 6.47k]
  ------------------
  177|   331k|    PR_ASSERT(a->base <= a->avail && a->avail <= a->limit);
  ------------------
  |  |  208|   663k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:7): [True: 331k, False: 0]
  |  |  |  Branch (208:7): [True: 331k, False: 0]
  |  |  ------------------
  ------------------
  178|   331k|    a->avail = a->base;
  179|   331k|    PL_CLEAR_UNUSED_PATTERN(a, pattern);
  ------------------
  |  |  191|   331k|    PR_BEGIN_MACRO \
  |  |  ------------------
  |  |  |  |  123|   331k|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  192|   331k|        PR_ASSERT((a)->avail <= (a)->limit); \
  |  |  ------------------
  |  |  |  |  208|   331k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 331k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|   331k|        PL_MAKE_MEM_UNDEFINED((void*)(a)->avail, (a)->limit - (a)->avail); \
  |  |  194|   331k|        memset((void*)(a)->avail, (pattern), (a)->limit - (a)->avail); \
  |  |  195|   331k|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|   331k|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|   331k|    PL_MAKE_MEM_NOACCESS((void*)a->avail, a->limit - a->avail);
  181|   331k|  }
  182|  6.47k|}
PL_ArenaRelease:
  207|  39.2k|PR_IMPLEMENT(void) PL_ArenaRelease(PLArenaPool* pool, char* mark) {
  208|  39.2k|  PLArena* a;
  209|       |
  210|  35.9M|  for (a = &pool->first; a; a = a->next) {
  ------------------
  |  Branch (210:26): [True: 35.9M, False: 0]
  ------------------
  211|  35.9M|    if (PR_UPTRDIFF(mark, a->base) <= PR_UPTRDIFF(a->avail, a->base)) {
  ------------------
  |  |  188|  35.9M|#define PR_UPTRDIFF(p,q) ((PRUword)(p) - (PRUword)(q))
  ------------------
                  if (PR_UPTRDIFF(mark, a->base) <= PR_UPTRDIFF(a->avail, a->base)) {
  ------------------
  |  |  188|  35.9M|#define PR_UPTRDIFF(p,q) ((PRUword)(p) - (PRUword)(q))
  ------------------
  |  Branch (211:9): [True: 39.2k, False: 35.8M]
  ------------------
  212|  39.2k|      a->avail = (PRUword)PL_ARENA_ALIGN(pool, mark);
  ------------------
  |  |  146|  39.2k|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  ------------------
  213|  39.2k|      FreeArenaList(pool, a);
  214|  39.2k|      return;
  215|  39.2k|    }
  216|  35.9M|  }
  217|  39.2k|}
PL_FreeArenaPool:
  219|   118k|PR_IMPLEMENT(void) PL_FreeArenaPool(PLArenaPool* pool) {
  220|   118k|  FreeArenaList(pool, &pool->first);
  221|   118k|  COUNT(pool, ndeallocs);
  222|   118k|}
PL_FinishArenaPool:
  224|  21.1k|PR_IMPLEMENT(void) PL_FinishArenaPool(PLArenaPool* pool) {
  225|  21.1k|  FreeArenaList(pool, &pool->first);
  226|       |#ifdef PL_ARENAMETER
  227|       |  {
  228|       |    PLArenaStats *stats, **statsp;
  229|       |
  230|       |    if (pool->stats.name) {
  231|       |      PR_DELETE(pool->stats.name);
  232|       |    }
  233|       |    for (statsp = &arena_stats_list; (stats = *statsp) != 0;
  234|       |         statsp = &stats->next) {
  235|       |      if (stats == &pool->stats) {
  236|       |        *statsp = stats->next;
  237|       |        return;
  238|       |      }
  239|       |    }
  240|       |  }
  241|       |#endif
  242|  21.1k|}
plarena.c:FreeArenaList:
  188|   178k|static void FreeArenaList(PLArenaPool* pool, PLArena* head) {
  189|   178k|  PLArena* a = head->next;
  190|   178k|  if (!a) {
  ------------------
  |  Branch (190:7): [True: 71.7k, False: 106k]
  ------------------
  191|  71.7k|    return;
  192|  71.7k|  }
  193|       |
  194|   106k|  head->next = NULL;
  195|       |
  196|   697k|  do {
  197|   697k|    PLArena* tmp = a;
  198|   697k|    a = a->next;
  199|   697k|    PL_CLEAR_ARENA(tmp);
  ------------------
  |  |  200|   697k|    PR_BEGIN_MACRO \
  |  |  ------------------
  |  |  |  |  123|   697k|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  201|   697k|        PL_MAKE_MEM_UNDEFINED((void*)(a), (a)->limit - (PRUword)(a)); \
  |  |  202|   697k|        memset((void*)(a), PL_FREE_PATTERN, (a)->limit - (PRUword)(a)); \
  |  |  ------------------
  |  |  |  |  197|   697k|#define PL_FREE_PATTERN 0xDA
  |  |  ------------------
  |  |  203|   697k|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|   697k|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  200|   697k|    PL_COUNT_ARENA(pool, --);
  201|   697k|    PR_DELETE(tmp);
  ------------------
  |  |  110|   697k|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
  202|   697k|  } while (a);
  ------------------
  |  Branch (202:12): [True: 590k, False: 106k]
  ------------------
  203|       |
  204|   106k|  pool->current = head;
  205|   106k|}

PL_NewHashTable:
   58|     17|                void* allocPriv) {
   59|     17|  PLHashTable* ht;
   60|     17|  PRSize nb;
   61|       |
   62|     17|  if (n <= MINBUCKETS) {
  ------------------
  |  |   22|     17|#define MINBUCKETS (1 << MINBUCKETSLOG2)
  |  |  ------------------
  |  |  |  |   21|     17|#define MINBUCKETSLOG2 4
  |  |  ------------------
  ------------------
  |  Branch (62:7): [True: 10, False: 7]
  ------------------
   63|     10|    n = MINBUCKETSLOG2;
  ------------------
  |  |   21|     10|#define MINBUCKETSLOG2 4
  ------------------
   64|     10|  } else {
   65|      7|    n = PR_CeilingLog2(n);
   66|      7|    if ((PRInt32)n < 0) {
  ------------------
  |  Branch (66:9): [True: 0, False: 7]
  ------------------
   67|      0|      return 0;
   68|      0|    }
   69|      7|  }
   70|       |
   71|     17|  if (!allocOps) {
  ------------------
  |  Branch (71:7): [True: 9, False: 8]
  ------------------
   72|      9|    allocOps = &defaultHashAllocOps;
   73|      9|  }
   74|       |
   75|     17|  ht = (PLHashTable*)((*allocOps->allocTable)(allocPriv, sizeof *ht));
   76|     17|  if (!ht) {
  ------------------
  |  Branch (76:7): [True: 0, False: 17]
  ------------------
   77|      0|    return 0;
   78|      0|  }
   79|     17|  memset(ht, 0, sizeof *ht);
   80|     17|  ht->shift = PL_HASH_BITS - n;
  ------------------
  |  |   19|     17|#define PL_HASH_BITS 32  /* Number of bits in PLHashNumber */
  ------------------
   81|     17|  n = 1 << n;
   82|     17|  nb = n * sizeof(PLHashEntry*);
   83|     17|  ht->buckets = (PLHashEntry**)((*allocOps->allocTable)(allocPriv, nb));
   84|     17|  if (!ht->buckets) {
  ------------------
  |  Branch (84:7): [True: 0, False: 17]
  ------------------
   85|      0|    (*allocOps->freeTable)(allocPriv, ht);
   86|      0|    return 0;
   87|      0|  }
   88|     17|  memset(ht->buckets, 0, nb);
   89|       |
   90|     17|  ht->keyHash = keyHash;
   91|     17|  ht->keyCompare = keyCompare;
   92|     17|  ht->valueCompare = valueCompare;
   93|     17|  ht->allocOps = allocOps;
   94|     17|  ht->allocPriv = allocPriv;
   95|     17|  return ht;
   96|     17|}
PL_HashTableDestroy:
   99|     17|PL_HashTableDestroy(PLHashTable* ht) {
  100|     17|  PRUint32 i, n;
  101|     17|  PLHashEntry *he, *next;
  102|     17|  const PLHashAllocOps* allocOps = ht->allocOps;
  103|     17|  void* allocPriv = ht->allocPriv;
  104|       |
  105|     17|  n = NBUCKETS(ht);
  ------------------
  |  |   18|     17|#define NBUCKETS(ht) (1 << (PL_HASH_BITS - (ht)->shift))
  |  |  ------------------
  |  |  |  |   19|     17|#define PL_HASH_BITS 32  /* Number of bits in PLHashNumber */
  |  |  ------------------
  ------------------
  106|  1.05k|  for (i = 0; i < n; i++) {
  ------------------
  |  Branch (106:15): [True: 1.04k, False: 17]
  ------------------
  107|  1.47k|    for (he = ht->buckets[i]; he; he = next) {
  ------------------
  |  Branch (107:31): [True: 437, False: 1.04k]
  ------------------
  108|    437|      next = he->next;
  109|    437|      (*allocOps->freeEntry)(allocPriv, he, HT_FREE_ENTRY);
  ------------------
  |  |   39|    437|#define HT_FREE_ENTRY   1               /* free value and entire entry */
  ------------------
  110|    437|    }
  111|  1.04k|  }
  112|     17|#ifdef DEBUG
  113|     17|  memset(ht->buckets, 0xDB, n * sizeof ht->buckets[0]);
  114|     17|#endif
  115|     17|  (*allocOps->freeTable)(allocPriv, ht->buckets);
  116|     17|#ifdef DEBUG
  117|     17|  memset(ht, 0xDB, sizeof *ht);
  118|     17|#endif
  119|     17|  (*allocOps->freeTable)(allocPriv, ht);
  120|     17|}
PL_HashTableRawLookup:
  128|   166k|PL_HashTableRawLookup(PLHashTable* ht, PLHashNumber keyHash, const void* key) {
  129|   166k|  PLHashEntry *he, **hep, **hep0;
  130|   166k|  PLHashNumber h;
  131|       |
  132|       |#ifdef HASHMETER
  133|       |  ht->nlookups++;
  134|       |#endif
  135|   166k|  h = keyHash * GOLDEN_RATIO;
  ------------------
  |  |  125|   166k|#define GOLDEN_RATIO 0x9E3779B9U /* 2/(1+sqrt(5))*(2^32) */
  ------------------
  136|   166k|  h >>= ht->shift;
  137|   166k|  hep = hep0 = &ht->buckets[h];
  138|   217k|  while ((he = *hep) != 0) {
  ------------------
  |  Branch (138:10): [True: 131k, False: 85.7k]
  ------------------
  139|   131k|    if (he->keyHash == keyHash && (*ht->keyCompare)(key, he->key)) {
  ------------------
  |  Branch (139:9): [True: 80.7k, False: 51.1k]
  |  Branch (139:35): [True: 80.7k, False: 52]
  ------------------
  140|       |      /* Move to front of chain if not already there */
  141|  80.7k|      if (hep != hep0) {
  ------------------
  |  Branch (141:11): [True: 12.6k, False: 68.1k]
  ------------------
  142|  12.6k|        *hep = he->next;
  143|  12.6k|        he->next = *hep0;
  144|  12.6k|        *hep0 = he;
  145|  12.6k|      }
  146|  80.7k|      return hep0;
  147|  80.7k|    }
  148|  51.2k|    hep = &he->next;
  149|       |#ifdef HASHMETER
  150|       |    ht->nsteps++;
  151|       |#endif
  152|  51.2k|  }
  153|  85.7k|  return hep;
  154|   166k|}
PL_HashTableRawLookupConst:
  161|   442k|                           const void* key) {
  162|   442k|  PLHashEntry *he, **hep;
  163|   442k|  PLHashNumber h;
  164|       |
  165|       |#ifdef HASHMETER
  166|       |  ht->nlookups++;
  167|       |#endif
  168|   442k|  h = keyHash * GOLDEN_RATIO;
  ------------------
  |  |  125|   442k|#define GOLDEN_RATIO 0x9E3779B9U /* 2/(1+sqrt(5))*(2^32) */
  ------------------
  169|   442k|  h >>= ht->shift;
  170|   442k|  hep = &ht->buckets[h];
  171|   462k|  while ((he = *hep) != 0) {
  ------------------
  |  Branch (171:10): [True: 443k, False: 19.5k]
  ------------------
  172|   443k|    if (he->keyHash == keyHash && (*ht->keyCompare)(key, he->key)) {
  ------------------
  |  Branch (172:9): [True: 423k, False: 19.8k]
  |  Branch (172:35): [True: 422k, False: 641]
  ------------------
  173|   422k|      break;
  174|   422k|    }
  175|  20.4k|    hep = &he->next;
  176|       |#ifdef HASHMETER
  177|       |    ht->nsteps++;
  178|       |#endif
  179|  20.4k|  }
  180|   442k|  return hep;
  181|   442k|}
PL_HashTableRawAdd:
  185|  33.0k|                   const void* key, void* value) {
  186|  33.0k|  PRUint32 i, n;
  187|  33.0k|  PLHashEntry *he, *next, **oldbuckets;
  188|  33.0k|  PRSize nb;
  189|       |
  190|       |  /* Grow the table if it is overloaded */
  191|  33.0k|  n = NBUCKETS(ht);
  ------------------
  |  |   18|  33.0k|#define NBUCKETS(ht) (1 << (PL_HASH_BITS - (ht)->shift))
  |  |  ------------------
  |  |  |  |   19|  33.0k|#define PL_HASH_BITS 32  /* Number of bits in PLHashNumber */
  |  |  ------------------
  ------------------
  192|  33.0k|  if (ht->nentries >= OVERLOADED(n)) {
  ------------------
  |  |   25|  33.0k|#define OVERLOADED(n) ((n) - ((n) >> 3))
  ------------------
  |  Branch (192:7): [True: 8, False: 33.0k]
  ------------------
  193|      8|    oldbuckets = ht->buckets;
  194|      8|    nb = 2 * n * sizeof(PLHashEntry*);
  195|      8|    ht->buckets =
  196|      8|        (PLHashEntry**)((*ht->allocOps->allocTable)(ht->allocPriv, nb));
  197|      8|    if (!ht->buckets) {
  ------------------
  |  Branch (197:9): [True: 0, False: 8]
  ------------------
  198|      0|      ht->buckets = oldbuckets;
  199|      0|      return 0;
  200|      0|    }
  201|      8|    memset(ht->buckets, 0, nb);
  202|       |#ifdef HASHMETER
  203|       |    ht->ngrows++;
  204|       |#endif
  205|      8|    ht->shift--;
  206|       |
  207|    616|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (207:17): [True: 608, False: 8]
  ------------------
  208|  1.14k|      for (he = oldbuckets[i]; he; he = next) {
  ------------------
  |  Branch (208:32): [True: 532, False: 608]
  ------------------
  209|    532|        next = he->next;
  210|    532|        hep = PL_HashTableRawLookup(ht, he->keyHash, he->key);
  211|    532|        PR_ASSERT(*hep == 0);
  ------------------
  |  |  208|    532|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 532, False: 0]
  |  |  ------------------
  ------------------
  212|    532|        he->next = 0;
  213|    532|        *hep = he;
  214|    532|      }
  215|    608|    }
  216|      8|#ifdef DEBUG
  217|      8|    memset(oldbuckets, 0xDB, n * sizeof oldbuckets[0]);
  218|      8|#endif
  219|      8|    (*ht->allocOps->freeTable)(ht->allocPriv, oldbuckets);
  220|      8|    hep = PL_HashTableRawLookup(ht, keyHash, key);
  221|      8|  }
  222|       |
  223|       |  /* Make a new key value entry */
  224|  33.0k|  he = (*ht->allocOps->allocEntry)(ht->allocPriv, key);
  225|  33.0k|  if (!he) {
  ------------------
  |  Branch (225:7): [True: 0, False: 33.0k]
  ------------------
  226|      0|    return 0;
  227|      0|  }
  228|  33.0k|  he->keyHash = keyHash;
  229|  33.0k|  he->key = key;
  230|  33.0k|  he->value = value;
  231|  33.0k|  he->next = *hep;
  232|  33.0k|  *hep = he;
  233|  33.0k|  ht->nentries++;
  234|  33.0k|  return he;
  235|  33.0k|}
PL_HashTableAdd:
  238|  33.1k|PL_HashTableAdd(PLHashTable* ht, const void* key, void* value) {
  239|  33.1k|  PLHashNumber keyHash;
  240|  33.1k|  PLHashEntry *he, **hep;
  241|       |
  242|  33.1k|  keyHash = (*ht->keyHash)(key);
  243|  33.1k|  hep = PL_HashTableRawLookup(ht, keyHash, key);
  244|  33.1k|  if ((he = *hep) != 0) {
  ------------------
  |  Branch (244:7): [True: 71, False: 33.0k]
  ------------------
  245|       |    /* Hit; see if values match */
  246|     71|    if ((*ht->valueCompare)(he->value, value)) {
  ------------------
  |  Branch (246:9): [True: 0, False: 71]
  ------------------
  247|       |      /* key,value pair is already present in table */
  248|      0|      return he;
  249|      0|    }
  250|     71|    if (he->value) {
  ------------------
  |  Branch (250:9): [True: 71, False: 0]
  ------------------
  251|     71|      (*ht->allocOps->freeEntry)(ht->allocPriv, he, HT_FREE_VALUE);
  ------------------
  |  |   38|     71|#define HT_FREE_VALUE   0               /* just free the entry's value */
  ------------------
  252|     71|    }
  253|     71|    he->value = value;
  254|     71|    return he;
  255|     71|  }
  256|  33.0k|  return PL_HashTableRawAdd(ht, hep, keyHash, key, value);
  257|  33.1k|}
PL_HashTableRawRemove:
  260|  32.6k|PL_HashTableRawRemove(PLHashTable* ht, PLHashEntry** hep, PLHashEntry* he) {
  261|  32.6k|  PRUint32 i, n;
  262|  32.6k|  PLHashEntry *next, **oldbuckets;
  263|  32.6k|  PRSize nb;
  264|       |
  265|  32.6k|  *hep = he->next;
  266|  32.6k|  (*ht->allocOps->freeEntry)(ht->allocPriv, he, HT_FREE_ENTRY);
  ------------------
  |  |   39|  32.6k|#define HT_FREE_ENTRY   1               /* free value and entire entry */
  ------------------
  267|       |
  268|       |  /* Shrink table if it's underloaded */
  269|  32.6k|  n = NBUCKETS(ht);
  ------------------
  |  |   18|  32.6k|#define NBUCKETS(ht) (1 << (PL_HASH_BITS - (ht)->shift))
  |  |  ------------------
  |  |  |  |   19|  32.6k|#define PL_HASH_BITS 32  /* Number of bits in PLHashNumber */
  |  |  ------------------
  ------------------
  270|  32.6k|  if (--ht->nentries < UNDERLOADED(n)) {
  ------------------
  |  |   28|  32.6k|#define UNDERLOADED(n) (((n) > MINBUCKETS) ? ((n) >> 2) : 0)
  |  |  ------------------
  |  |  |  |   22|  32.6k|#define MINBUCKETS (1 << MINBUCKETSLOG2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   21|  32.6k|#define MINBUCKETSLOG2 4
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (28:25): [True: 2, False: 32.6k]
  |  |  ------------------
  ------------------
  |  Branch (270:7): [True: 2, False: 32.6k]
  ------------------
  271|      2|    oldbuckets = ht->buckets;
  272|      2|    nb = n * sizeof(PLHashEntry*) / 2;
  273|      2|    ht->buckets =
  274|      2|        (PLHashEntry**)((*ht->allocOps->allocTable)(ht->allocPriv, nb));
  275|      2|    if (!ht->buckets) {
  ------------------
  |  Branch (275:9): [True: 0, False: 2]
  ------------------
  276|      0|      ht->buckets = oldbuckets;
  277|      0|      return;
  278|      0|    }
  279|      2|    memset(ht->buckets, 0, nb);
  280|       |#ifdef HASHMETER
  281|       |    ht->nshrinks++;
  282|       |#endif
  283|      2|    ht->shift++;
  284|       |
  285|     98|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (285:17): [True: 96, False: 2]
  ------------------
  286|     97|      for (he = oldbuckets[i]; he; he = next) {
  ------------------
  |  Branch (286:32): [True: 1, False: 96]
  ------------------
  287|      1|        next = he->next;
  288|      1|        hep = PL_HashTableRawLookup(ht, he->keyHash, he->key);
  289|      1|        PR_ASSERT(*hep == 0);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  290|      1|        he->next = 0;
  291|      1|        *hep = he;
  292|      1|      }
  293|     96|    }
  294|      2|#ifdef DEBUG
  295|      2|    memset(oldbuckets, 0xDB, n * sizeof oldbuckets[0]);
  296|      2|#endif
  297|      2|    (*ht->allocOps->freeTable)(ht->allocPriv, oldbuckets);
  298|      2|  }
  299|  32.6k|}
PL_HashTableRemove:
  302|  32.6k|PL_HashTableRemove(PLHashTable* ht, const void* key) {
  303|  32.6k|  PLHashNumber keyHash;
  304|  32.6k|  PLHashEntry *he, **hep;
  305|       |
  306|  32.6k|  keyHash = (*ht->keyHash)(key);
  307|  32.6k|  hep = PL_HashTableRawLookup(ht, keyHash, key);
  308|  32.6k|  if ((he = *hep) == 0) {
  ------------------
  |  Branch (308:7): [True: 0, False: 32.6k]
  ------------------
  309|      0|    return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  310|      0|  }
  311|       |
  312|       |  /* Hit; remove element */
  313|  32.6k|  PL_HashTableRawRemove(ht, hep, he);
  314|  32.6k|  return PR_TRUE;
  ------------------
  |  |  437|  32.6k|#define PR_TRUE 1
  ------------------
  315|  32.6k|}
PL_HashTableLookup:
  318|   100k|PL_HashTableLookup(PLHashTable* ht, const void* key) {
  319|   100k|  PLHashNumber keyHash;
  320|   100k|  PLHashEntry *he, **hep;
  321|       |
  322|   100k|  keyHash = (*ht->keyHash)(key);
  323|   100k|  hep = PL_HashTableRawLookup(ht, keyHash, key);
  324|   100k|  if ((he = *hep) != 0) {
  ------------------
  |  Branch (324:7): [True: 47.9k, False: 52.1k]
  ------------------
  325|  47.9k|    return he->value;
  326|  47.9k|  }
  327|  52.1k|  return 0;
  328|   100k|}
PL_HashTableLookupConst:
  334|   442k|PL_HashTableLookupConst(PLHashTable* ht, const void* key) {
  335|   442k|  PLHashNumber keyHash;
  336|   442k|  PLHashEntry *he, **hep;
  337|       |
  338|   442k|  keyHash = (*ht->keyHash)(key);
  339|   442k|  hep = PL_HashTableRawLookupConst(ht, keyHash, key);
  340|   442k|  if ((he = *hep) != 0) {
  ------------------
  |  Branch (340:7): [True: 422k, False: 19.5k]
  ------------------
  341|   422k|    return he->value;
  342|   422k|  }
  343|  19.5k|  return 0;
  344|   442k|}
PL_HashTableEnumerateEntries:
  352|      4|PL_HashTableEnumerateEntries(PLHashTable* ht, PLHashEnumerator f, void* arg) {
  353|      4|  PLHashEntry *he, **hep;
  354|      4|  PRUint32 i, nbuckets;
  355|      4|  int rv, n = 0;
  356|      4|  PLHashEntry* todo = 0;
  357|       |
  358|      4|  nbuckets = NBUCKETS(ht);
  ------------------
  |  |   18|      4|#define NBUCKETS(ht) (1 << (PL_HASH_BITS - (ht)->shift))
  |  |  ------------------
  |  |  |  |   19|      4|#define PL_HASH_BITS 32  /* Number of bits in PLHashNumber */
  |  |  ------------------
  ------------------
  359|    164|  for (i = 0; i < nbuckets; i++) {
  ------------------
  |  Branch (359:15): [True: 160, False: 4]
  ------------------
  360|    160|    hep = &ht->buckets[i];
  361|    169|    while ((he = *hep) != 0) {
  ------------------
  |  Branch (361:12): [True: 9, False: 160]
  ------------------
  362|      9|      rv = (*f)(he, n, arg);
  363|      9|      n++;
  364|      9|      if (rv & (HT_ENUMERATE_REMOVE | HT_ENUMERATE_UNHASH)) {
  ------------------
  |  |   28|      9|#define HT_ENUMERATE_REMOVE     2       /* remove and free the current entry */
  ------------------
                    if (rv & (HT_ENUMERATE_REMOVE | HT_ENUMERATE_UNHASH)) {
  ------------------
  |  |   29|      9|#define HT_ENUMERATE_UNHASH     4       /* just unhash the current entry */
  ------------------
  |  Branch (364:11): [True: 0, False: 9]
  ------------------
  365|      0|        *hep = he->next;
  366|      0|        if (rv & HT_ENUMERATE_REMOVE) {
  ------------------
  |  |   28|      0|#define HT_ENUMERATE_REMOVE     2       /* remove and free the current entry */
  ------------------
  |  Branch (366:13): [True: 0, False: 0]
  ------------------
  367|      0|          he->next = todo;
  368|      0|          todo = he;
  369|      0|        }
  370|      9|      } else {
  371|      9|        hep = &he->next;
  372|      9|      }
  373|      9|      if (rv & HT_ENUMERATE_STOP) {
  ------------------
  |  |   27|      9|#define HT_ENUMERATE_STOP       1       /* stop enumerating entries */
  ------------------
  |  Branch (373:11): [True: 0, False: 9]
  ------------------
  374|      0|        goto out;
  375|      0|      }
  376|      9|    }
  377|    160|  }
  378|       |
  379|      4|out:
  380|      4|  hep = &todo;
  381|      4|  while ((he = *hep) != 0) {
  ------------------
  |  Branch (381:10): [True: 0, False: 4]
  ------------------
  382|      0|    PL_HashTableRawRemove(ht, hep, he);
  383|      0|  }
  384|      4|  return n;
  385|      4|}
PL_CompareValues:
  468|   380k|PL_CompareValues(const void* v1, const void* v2) { return v1 == v2; }
plhash.c:DefaultAllocTable:
   33|     28|static void* PR_CALLBACK DefaultAllocTable(void* pool, PRSize size) {
   34|     28|  return PR_MALLOC(size);
  ------------------
  |  |   55|     28|#define PR_MALLOC(_bytes) (PR_Malloc((_bytes)))
  ------------------
   35|     28|}
plhash.c:DefaultFreeTable:
   37|     28|static void PR_CALLBACK DefaultFreeTable(void* pool, void* item) {
   38|     28|  PR_Free(item);
   39|     28|}
plhash.c:DefaultAllocEntry:
   41|  21.5k|static PLHashEntry* PR_CALLBACK DefaultAllocEntry(void* pool, const void* key) {
   42|  21.5k|  return PR_NEW(PLHashEntry);
  ------------------
  |  |   65|  21.5k|#define PR_NEW(_struct) ((_struct *) PR_MALLOC(sizeof(_struct)))
  |  |  ------------------
  |  |  |  |   55|  21.5k|#define PR_MALLOC(_bytes) (PR_Malloc((_bytes)))
  |  |  ------------------
  ------------------
   43|  21.5k|}
plhash.c:DefaultFreeEntry:
   46|  21.6k|                                         PRUintn flag) {
   47|  21.6k|  if (flag == HT_FREE_ENTRY) {
  ------------------
  |  |   39|  21.6k|#define HT_FREE_ENTRY   1               /* free value and entire entry */
  ------------------
  |  Branch (47:7): [True: 21.5k, False: 71]
  ------------------
   48|  21.5k|    PR_Free(he);
   49|  21.5k|  }
   50|  21.6k|}

PL_strcasecmp:
   41|  8.80k|PL_strcasecmp(const char* a, const char* b) {
   42|  8.80k|  const unsigned char* ua = (const unsigned char*)a;
   43|  8.80k|  const unsigned char* ub = (const unsigned char*)b;
   44|       |
   45|  8.80k|  if ((const char*)0 == a) {
  ------------------
  |  Branch (45:7): [True: 0, False: 8.80k]
  ------------------
   46|      0|    return ((const char*)0 == b) ? 0 : -1;
  ------------------
  |  Branch (46:12): [True: 0, False: 0]
  ------------------
   47|      0|  }
   48|  8.80k|  if ((const char*)0 == b) {
  ------------------
  |  Branch (48:7): [True: 0, False: 8.80k]
  ------------------
   49|      0|    return 1;
   50|      0|  }
   51|       |
   52|  9.45k|  while ((uc[*ua] == uc[*ub]) && ('\0' != *a)) {
  ------------------
  |  Branch (52:10): [True: 655, False: 8.80k]
  |  Branch (52:34): [True: 655, False: 0]
  ------------------
   53|    655|    a++;
   54|    655|    ua++;
   55|    655|    ub++;
   56|    655|  }
   57|       |
   58|  8.80k|  return (PRIntn)(uc[*ua] - uc[*ub]);
   59|  8.80k|}
PL_strncasecmp:
   62|   210k|PL_strncasecmp(const char* a, const char* b, PRUint32 max) {
   63|   210k|  const unsigned char* ua = (const unsigned char*)a;
   64|   210k|  const unsigned char* ub = (const unsigned char*)b;
   65|       |
   66|   210k|  if ((const char*)0 == a) {
  ------------------
  |  Branch (66:7): [True: 0, False: 210k]
  ------------------
   67|      0|    return ((const char*)0 == b) ? 0 : -1;
  ------------------
  |  Branch (67:12): [True: 0, False: 0]
  ------------------
   68|      0|  }
   69|   210k|  if ((const char*)0 == b) {
  ------------------
  |  Branch (69:7): [True: 0, False: 210k]
  ------------------
   70|      0|    return 1;
   71|      0|  }
   72|       |
   73|   235k|  while (max && (uc[*ua] == uc[*ub]) && ('\0' != *a)) {
  ------------------
  |  Branch (73:10): [True: 234k, False: 1.03k]
  |  Branch (73:17): [True: 25.6k, False: 209k]
  |  Branch (73:41): [True: 25.6k, False: 0]
  ------------------
   74|  25.6k|    a++;
   75|  25.6k|    ua++;
   76|  25.6k|    ub++;
   77|  25.6k|    max--;
   78|  25.6k|  }
   79|       |
   80|   210k|  if (0 == max) {
  ------------------
  |  Branch (80:7): [True: 1.03k, False: 209k]
  ------------------
   81|  1.03k|    return (PRIntn)0;
   82|  1.03k|  }
   83|       |
   84|   209k|  return (PRIntn)(uc[*ua] - uc[*ub]);
   85|   210k|}

PL_strlen:
   12|     67|PL_strlen(const char* str) {
   13|     67|  size_t l;
   14|       |
   15|     67|  if ((const char*)0 == str) {
  ------------------
  |  Branch (15:7): [True: 0, False: 67]
  ------------------
   16|      0|    return 0;
   17|      0|  }
   18|       |
   19|     67|  l = strlen(str);
   20|       |
   21|       |  /* error checking in case we have a 64-bit platform -- make sure
   22|       |   * we don't have ultra long strings that overflow an int32
   23|       |   */
   24|     67|  if (sizeof(PRUint32) < sizeof(size_t)) {
  ------------------
  |  Branch (24:7): [Folded - Ignored]
  ------------------
   25|     67|    if (l > PR_INT32_MAX) {
  ------------------
  |  |  300|     67|#define PR_INT32_MAX PR_INT32(2147483647)
  |  |  ------------------
  |  |  |  |  281|     67|#define PR_INT32(x)  x
  |  |  ------------------
  ------------------
  |  Branch (25:9): [True: 0, False: 67]
  ------------------
   26|      0|      PR_Assert("l <= PR_INT32_MAX", __FILE__, __LINE__);
   27|      0|    }
   28|     67|  }
   29|       |
   30|     67|  return (PRUint32)l;
   31|     67|}

_PR_Getfd:
   43|      3|PRFileDesc* _PR_Getfd(void) {
   44|      3|  PRFileDesc* fd;
   45|       |  /*
   46|       |  ** $$$
   47|       |  ** This may look a little wasteful. We'll see. Right now I want to
   48|       |  ** be able to toggle between caching and not at runtime to measure
   49|       |  ** the differences. If it isn't too annoying, I'll leave it in.
   50|       |  ** $$$$
   51|       |  **
   52|       |  ** The test is against _pr_fd_cache.limit_high. If that's zero,
   53|       |  ** we're not doing the extended cache but going for performance.
   54|       |  */
   55|      3|  if (0 == _pr_fd_cache.limit_high) {
  ------------------
  |  Branch (55:7): [True: 0, False: 3]
  ------------------
   56|      0|    goto allocate;
   57|      3|  } else {
   58|      3|    do {
   59|      3|      if (NULL == _pr_fd_cache.head) {
  ------------------
  |  Branch (59:11): [True: 3, False: 0]
  ------------------
   60|      3|        goto allocate; /* nothing there */
   61|      3|      }
   62|      0|      if (_pr_fd_cache.count < _pr_fd_cache.limit_low) {
  ------------------
  |  Branch (62:11): [True: 0, False: 0]
  ------------------
   63|      0|        goto allocate;
   64|      0|      }
   65|       |
   66|       |      /* we "should" be able to extract an fd from the cache */
   67|      0|      PR_Lock(_pr_fd_cache.ml); /* need the lock to do this safely */
   68|      0|      fd = _pr_fd_cache.head;   /* protected extraction */
   69|      0|      if (NULL == fd)           /* unexpected, but not fatal */
  ------------------
  |  Branch (69:11): [True: 0, False: 0]
  ------------------
   70|      0|      {
   71|      0|        PR_ASSERT(0 == _pr_fd_cache.count);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   72|      0|        PR_ASSERT(NULL == _pr_fd_cache.tail);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   73|      0|      } else {
   74|      0|        _pr_fd_cache.count -= 1;
   75|      0|        _pr_fd_cache.head = fd->higher;
   76|      0|        if (NULL == _pr_fd_cache.head) {
  ------------------
  |  Branch (76:13): [True: 0, False: 0]
  ------------------
   77|      0|          PR_ASSERT(0 == _pr_fd_cache.count);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   78|      0|          _pr_fd_cache.tail = NULL;
   79|      0|        }
   80|      0|        PR_ASSERT(&_pr_faulty_methods == fd->methods);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   81|      0|        PR_ASSERT(PR_INVALID_IO_LAYER == fd->identity);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   82|      0|        PR_ASSERT(_PR_FILEDESC_FREED == fd->secret->state);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   83|      0|      }
   84|      0|      PR_Unlock(_pr_fd_cache.ml);
   85|       |
   86|      0|    } while (NULL == fd); /* then go around and allocate a new one */
  ------------------
  |  Branch (86:14): [True: 0, False: 0]
  ------------------
   87|      3|  }
   88|       |
   89|      3|finished:
   90|      3|  fd->dtor = NULL;
   91|      3|  fd->lower = fd->higher = NULL;
   92|      3|  fd->identity = PR_NSPR_IO_LAYER;
  ------------------
  |  |  454|      3|#define PR_NSPR_IO_LAYER (PRDescIdentity)0
  ------------------
   93|      3|  memset(fd->secret, 0, sizeof(PRFilePrivate));
   94|      3|  return fd;
   95|       |
   96|      3|allocate:
   97|      3|  fd = PR_NEW(PRFileDesc);
  ------------------
  |  |   65|      3|#define PR_NEW(_struct) ((_struct *) PR_MALLOC(sizeof(_struct)))
  |  |  ------------------
  |  |  |  |   55|      3|#define PR_MALLOC(_bytes) (PR_Malloc((_bytes)))
  |  |  ------------------
  ------------------
   98|      3|  if (NULL != fd) {
  ------------------
  |  Branch (98:7): [True: 3, False: 0]
  ------------------
   99|      3|    fd->secret = PR_NEW(PRFilePrivate);
  ------------------
  |  |   65|      3|#define PR_NEW(_struct) ((_struct *) PR_MALLOC(sizeof(_struct)))
  |  |  ------------------
  |  |  |  |   55|      3|#define PR_MALLOC(_bytes) (PR_Malloc((_bytes)))
  |  |  ------------------
  ------------------
  100|      3|    if (NULL == fd->secret) {
  ------------------
  |  Branch (100:9): [True: 0, False: 3]
  ------------------
  101|      0|      PR_DELETE(fd);
  ------------------
  |  |  110|      0|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
  102|      0|    }
  103|      3|  }
  104|      3|  if (NULL != fd) {
  ------------------
  |  Branch (104:7): [True: 3, False: 0]
  ------------------
  105|      3|    goto finished;
  106|      3|  } else {
  107|      0|    return NULL;
  108|      0|  }
  109|       |
  110|      3|} /* _PR_Getfd */
_PR_InitFdCache:
  166|      1|void _PR_InitFdCache(void) {
  167|       |  /*
  168|       |  ** The fd caching is enabled by default for DEBUG builds,
  169|       |  ** disabled by default for OPT builds. That default can
  170|       |  ** be overridden at runtime using environment variables
  171|       |  ** or a super-wiz-bang API.
  172|       |  */
  173|      1|  const char* low = PR_GetEnv("NSPR_FD_CACHE_SIZE_LOW");
  174|      1|  const char* high = PR_GetEnv("NSPR_FD_CACHE_SIZE_HIGH");
  175|       |
  176|       |  /*
  177|       |  ** _low is allowed to be zero, _high is not.
  178|       |  ** If _high is zero, we're not doing the caching.
  179|       |  */
  180|       |
  181|      1|  _pr_fd_cache.limit_low = 0;
  182|      1|#if defined(DEBUG)
  183|      1|  _pr_fd_cache.limit_high = FD_SETSIZE;
  184|       |#else
  185|       |  _pr_fd_cache.limit_high = 0;
  186|       |#endif /* defined(DEBUG) */
  187|       |
  188|      1|  if (NULL != low) {
  ------------------
  |  Branch (188:7): [True: 0, False: 1]
  ------------------
  189|      0|    _pr_fd_cache.limit_low = atoi(low);
  190|      0|  }
  191|      1|  if (NULL != high) {
  ------------------
  |  Branch (191:7): [True: 0, False: 1]
  ------------------
  192|      0|    _pr_fd_cache.limit_high = atoi(high);
  193|      0|  }
  194|       |
  195|      1|  if (_pr_fd_cache.limit_low < 0) {
  ------------------
  |  Branch (195:7): [True: 0, False: 1]
  ------------------
  196|      0|    _pr_fd_cache.limit_low = 0;
  197|      0|  }
  198|      1|  if (_pr_fd_cache.limit_low > FD_SETSIZE) {
  ------------------
  |  Branch (198:7): [True: 0, False: 1]
  ------------------
  199|      0|    _pr_fd_cache.limit_low = FD_SETSIZE;
  200|      0|  }
  201|       |
  202|      1|  if (_pr_fd_cache.limit_high > FD_SETSIZE) {
  ------------------
  |  Branch (202:7): [True: 0, False: 1]
  ------------------
  203|      0|    _pr_fd_cache.limit_high = FD_SETSIZE;
  204|      0|  }
  205|       |
  206|      1|  if (_pr_fd_cache.limit_high < _pr_fd_cache.limit_low) {
  ------------------
  |  Branch (206:7): [True: 0, False: 1]
  ------------------
  207|      0|    _pr_fd_cache.limit_high = _pr_fd_cache.limit_low;
  208|      0|  }
  209|       |
  210|      1|  _pr_fd_cache.ml = PR_NewLock();
  211|      1|  PR_ASSERT(NULL != _pr_fd_cache.ml);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  212|       |
  213|      1|} /* _PR_InitFdCache */

_PR_InitLayerCache:
  693|      1|void _PR_InitLayerCache(void) {
  694|      1|  memset(&identity_cache, 0, sizeof(identity_cache));
  695|      1|  identity_cache.ml = PR_NewLock();
  696|      1|  PR_ASSERT(NULL != identity_cache.ml);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  697|      1|} /* _PR_InitLayerCache */

_PR_InitLog:
  186|      1|void _PR_InitLog(void) {
  187|      1|  char* ev;
  188|       |
  189|      1|  _pr_logLock = PR_NewLock();
  190|       |
  191|      1|  ev = PR_GetEnv("NSPR_LOG_MODULES");
  192|      1|  if (ev && ev[0]) {
  ------------------
  |  Branch (192:7): [True: 0, False: 1]
  |  Branch (192:13): [True: 0, False: 0]
  ------------------
  193|      0|    char module[64]; /* Security-Critical: If you change this
  194|       |                      * size, you must also change the sscanf
  195|       |                      * format string to be size-1.
  196|       |                      */
  197|      0|    PRBool isSync = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  198|      0|    PRIntn evlen = strlen(ev), pos = 0;
  199|      0|    PRInt32 bufSize = DEFAULT_BUF_SIZE;
  ------------------
  |  |  139|      0|#define DEFAULT_BUF_SIZE 16384
  ------------------
  200|      0|    while (pos < evlen) {
  ------------------
  |  Branch (200:12): [True: 0, False: 0]
  ------------------
  201|      0|      PRIntn level = 1, count = 0, delta = 0;
  202|      0|      count = sscanf(
  203|      0|          &ev[pos],
  204|      0|          "%63[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-"
  205|      0|          "]%n:%d%n",
  206|      0|          module, &delta, &level, &delta);
  207|      0|      pos += delta;
  208|      0|      if (count == 0) {
  ------------------
  |  Branch (208:11): [True: 0, False: 0]
  ------------------
  209|      0|        break;
  210|      0|      }
  211|       |
  212|       |      /*
  213|       |      ** If count == 2, then we got module and level. If count
  214|       |      ** == 1, then level defaults to 1 (module enabled).
  215|       |      */
  216|      0|      if (strcasecmp(module, "sync") == 0) {
  ------------------
  |  Branch (216:11): [True: 0, False: 0]
  ------------------
  217|      0|        isSync = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  218|      0|      } else if (strcasecmp(module, "bufsize") == 0) {
  ------------------
  |  Branch (218:18): [True: 0, False: 0]
  ------------------
  219|      0|        if (level >= LINE_BUF_SIZE) {
  ------------------
  |  |  138|      0|#define LINE_BUF_SIZE 512
  ------------------
  |  Branch (219:13): [True: 0, False: 0]
  ------------------
  220|      0|          bufSize = level;
  221|      0|        }
  222|      0|      } else if (strcasecmp(module, "timestamp") == 0) {
  ------------------
  |  Branch (222:18): [True: 0, False: 0]
  ------------------
  223|      0|        outputTimeStamp = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  224|      0|      } else if (strcasecmp(module, "append") == 0) {
  ------------------
  |  Branch (224:18): [True: 0, False: 0]
  ------------------
  225|      0|        appendToLog = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  226|      0|      } else {
  227|      0|        PRLogModuleInfo* lm = logModules;
  228|      0|        PRBool skip_modcheck =
  229|      0|            (0 == strcasecmp(module, "all")) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
                          (0 == strcasecmp(module, "all")) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  |  Branch (229:13): [True: 0, False: 0]
  ------------------
  230|       |
  231|      0|        while (lm != NULL) {
  ------------------
  |  Branch (231:16): [True: 0, False: 0]
  ------------------
  232|      0|          if (skip_modcheck) {
  ------------------
  |  Branch (232:15): [True: 0, False: 0]
  ------------------
  233|      0|            lm->level = (PRLogModuleLevel)level;
  234|      0|          } else if (strcasecmp(module, lm->name) == 0) {
  ------------------
  |  Branch (234:22): [True: 0, False: 0]
  ------------------
  235|      0|            lm->level = (PRLogModuleLevel)level;
  236|      0|            break;
  237|      0|          }
  238|      0|          lm = lm->next;
  239|      0|        }
  240|      0|      }
  241|       |      /*found:*/
  242|      0|      count = sscanf(&ev[pos], " , %n", &delta);
  243|      0|      pos += delta;
  244|      0|      if (count == EOF) {
  ------------------
  |  Branch (244:11): [True: 0, False: 0]
  ------------------
  245|      0|        break;
  246|      0|      }
  247|      0|    }
  248|      0|    PR_SetLogBuffering(isSync ? 0 : bufSize);
  ------------------
  |  Branch (248:24): [True: 0, False: 0]
  ------------------
  249|       |
  250|      0|    ev = PR_GetEnvSecure("NSPR_LOG_FILE");
  251|      0|    if (ev && ev[0]) {
  ------------------
  |  Branch (251:9): [True: 0, False: 0]
  |  Branch (251:15): [True: 0, False: 0]
  ------------------
  252|      0|      if (!PR_SetLogFile(ev)) {
  ------------------
  |  Branch (252:11): [True: 0, False: 0]
  ------------------
  253|       |#ifdef XP_PC
  254|       |        char* str = PR_smprintf("Unable to create nspr log file '%s'\n", ev);
  255|       |        if (str) {
  256|       |          OutputDebugStringA(str);
  257|       |          PR_smprintf_free(str);
  258|       |        }
  259|       |#else
  260|      0|        fprintf(stderr, "Unable to create nspr log file '%s'\n", ev);
  261|      0|#endif
  262|      0|      }
  263|      0|    } else {
  264|       |#ifdef _PR_USE_STDIO_FOR_LOGGING
  265|       |      logFile = stderr;
  266|       |#else
  267|      0|      logFile = _pr_stderr;
  268|      0|#endif
  269|      0|    }
  270|      0|  }
  271|      1|}
PR_NewLogModule:
  353|     11|PR_IMPLEMENT(PRLogModuleInfo*) PR_NewLogModule(const char* name) {
  354|     11|  PRLogModuleInfo* lm;
  355|       |
  356|     11|  if (!_pr_initialized) {
  ------------------
  |  Branch (356:7): [True: 0, False: 11]
  ------------------
  357|      0|    _PR_ImplicitInitialization();
  358|      0|  }
  359|       |
  360|     11|  lm = PR_NEWZAP(PRLogModuleInfo);
  ------------------
  |  |   99|     11|#define PR_NEWZAP(_struct) ((_struct*)PR_Calloc(1, sizeof(_struct)))
  ------------------
  361|     11|  if (lm) {
  ------------------
  |  Branch (361:7): [True: 11, False: 0]
  ------------------
  362|     11|    lm->name = strdup(name);
  363|     11|    lm->level = PR_LOG_NONE;
  364|     11|    lm->next = logModules;
  365|     11|    logModules = lm;
  366|     11|    _PR_SetLogModuleLevel(lm);
  367|     11|  }
  368|     11|  return lm;
  369|     11|}
prlog.c:_PR_SetLogModuleLevel:
  311|     11|static void _PR_SetLogModuleLevel(PRLogModuleInfo* lm) {
  312|     11|  char* ev;
  313|       |
  314|     11|  ev = PR_GetEnv("NSPR_LOG_MODULES");
  315|     11|  if (ev && ev[0]) {
  ------------------
  |  Branch (315:7): [True: 0, False: 11]
  |  Branch (315:13): [True: 0, False: 0]
  ------------------
  316|      0|    char module[64]; /* Security-Critical: If you change this
  317|       |                      * size, you must also change the sscanf
  318|       |                      * format string to be size-1.
  319|       |                      */
  320|      0|    PRIntn evlen = strlen(ev), pos = 0;
  321|      0|    while (pos < evlen) {
  ------------------
  |  Branch (321:12): [True: 0, False: 0]
  ------------------
  322|      0|      PRIntn level = 1, count = 0, delta = 0;
  323|       |
  324|      0|      count = sscanf(
  325|      0|          &ev[pos],
  326|      0|          "%63[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-"
  327|      0|          "]%n:%d%n",
  328|      0|          module, &delta, &level, &delta);
  329|      0|      pos += delta;
  330|      0|      if (count == 0) {
  ------------------
  |  Branch (330:11): [True: 0, False: 0]
  ------------------
  331|      0|        break;
  332|      0|      }
  333|       |
  334|       |      /*
  335|       |      ** If count == 2, then we got module and level. If count
  336|       |      ** == 1, then level defaults to 1 (module enabled).
  337|       |      */
  338|      0|      if (lm != NULL) {
  ------------------
  |  Branch (338:11): [True: 0, False: 0]
  ------------------
  339|      0|        if ((strcasecmp(module, "all") == 0) ||
  ------------------
  |  Branch (339:13): [True: 0, False: 0]
  ------------------
  340|      0|            (strcasecmp(module, lm->name) == 0)) {
  ------------------
  |  Branch (340:13): [True: 0, False: 0]
  ------------------
  341|      0|          lm->level = (PRLogModuleLevel)level;
  342|      0|        }
  343|      0|      }
  344|      0|      count = sscanf(&ev[pos], " , %n", &delta);
  345|      0|      pos += delta;
  346|      0|      if (count == EOF) {
  ------------------
  |  Branch (346:11): [True: 0, False: 0]
  ------------------
  347|      0|        break;
  348|      0|      }
  349|      0|    }
  350|      0|  }
  351|     11|} /* end _PR_SetLogModuleLevel() */

_PR_InitMW:
  171|      1|void _PR_InitMW(void) {
  172|       |#ifdef WINNT
  173|       |  /*
  174|       |   * We use NT 4's InterlockedCompareExchange() to operate
  175|       |   * on PRMWStatus variables.
  176|       |   */
  177|       |  PR_ASSERT(sizeof(LONG) == sizeof(PRMWStatus));
  178|       |  TimerInit();
  179|       |#endif
  180|      1|  mw_lock = PR_NewLock();
  181|      1|  PR_ASSERT(NULL != mw_lock);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  182|      1|  mw_state = PR_NEWZAP(_PRGlobalState);
  ------------------
  |  |   99|      1|#define PR_NEWZAP(_struct) ((_struct*)PR_Calloc(1, sizeof(_struct)))
  ------------------
  183|      1|  PR_ASSERT(NULL != mw_state);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  184|      1|  PR_INIT_CLIST(&mw_state->group_list);
  ------------------
  |  |  100|      1|    PR_BEGIN_MACRO     \
  |  |  ------------------
  |  |  |  |  123|      1|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  101|      1|    (_l)->next = (_l); \
  |  |  102|      1|    (_l)->prev = (_l); \
  |  |  103|      1|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|      1|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  185|      1|  max_polling_interval = PR_MillisecondsToInterval(MAX_POLLING_INTERVAL);
  ------------------
  |  |   15|      1|#define MAX_POLLING_INTERVAL 100
  ------------------
  186|      1|} /* _PR_InitMW */

PR_smprintf:
 1166|  10.8k|PR_IMPLEMENT(char*) PR_smprintf(const char* fmt, ...) {
 1167|  10.8k|  va_list ap;
 1168|  10.8k|  char* rv;
 1169|       |
 1170|  10.8k|  va_start(ap, fmt);
 1171|  10.8k|  rv = PR_vsmprintf(fmt, ap);
 1172|  10.8k|  va_end(ap);
 1173|  10.8k|  return rv;
 1174|  10.8k|}
PR_smprintf_free:
 1179|  10.8k|PR_IMPLEMENT(void) PR_smprintf_free(char* mem) { PR_DELETE(mem); }
  ------------------
  |  |  110|  10.8k|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
PR_vsmprintf:
 1181|  10.8k|PR_IMPLEMENT(char*) PR_vsmprintf(const char* fmt, va_list ap) {
 1182|  10.8k|  SprintfState ss;
 1183|  10.8k|  int rv;
 1184|       |
 1185|  10.8k|  ss.stuff = GrowStuff;
 1186|  10.8k|  ss.base = 0;
 1187|  10.8k|  ss.cur = 0;
 1188|  10.8k|  ss.maxlen = 0;
 1189|  10.8k|  rv = dosprintf(&ss, fmt, ap);
 1190|  10.8k|  if (rv < 0) {
  ------------------
  |  Branch (1190:7): [True: 0, False: 10.8k]
  ------------------
 1191|      0|    if (ss.base) {
  ------------------
  |  Branch (1191:9): [True: 0, False: 0]
  ------------------
 1192|      0|      PR_DELETE(ss.base);
  ------------------
  |  |  110|      0|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
 1193|      0|    }
 1194|      0|    return 0;
 1195|      0|  }
 1196|  10.8k|  return ss.base;
 1197|  10.8k|}
prprf.c:dosprintf:
  677|  10.8k|static int dosprintf(SprintfState* ss, const char* fmt, va_list ap) {
  678|  10.8k|  char c;
  679|  10.8k|  int flags, width, prec, radix, type;
  680|  10.8k|  union {
  681|  10.8k|    char ch;
  682|  10.8k|    int i;
  683|  10.8k|    long l;
  684|  10.8k|    PRInt64 ll;
  685|  10.8k|    double d;
  686|  10.8k|    const char* s;
  687|  10.8k|    int* ip;
  688|       |#ifdef WIN32
  689|       |    const WCHAR* ws;
  690|       |#endif
  691|  10.8k|  } u;
  692|  10.8k|  const char* fmt0;
  693|  10.8k|  static char* hex = "0123456789abcdef";
  694|  10.8k|  static char* HEX = "0123456789ABCDEF";
  695|  10.8k|  char* hexp;
  696|  10.8k|  int rv, i;
  697|  10.8k|  struct NumArg* nas = NULL;
  698|  10.8k|  struct NumArg* nap = NULL;
  699|  10.8k|  struct NumArg nasArray[NAS_DEFAULT_NUM];
  700|  10.8k|  char pattern[20];
  701|  10.8k|  const char* dolPt = NULL; /* in "%4$.2f", dolPt will point to . */
  702|       |#ifdef WIN32
  703|       |  char* pBuf = NULL;
  704|       |#endif
  705|       |
  706|       |  /*
  707|       |  ** build an argument array, IF the fmt is numbered argument
  708|       |  ** list style, to contain the Numbered Argument list pointers
  709|       |  */
  710|       |
  711|  10.8k|  nas = BuildArgArray(fmt, ap, &rv, nasArray);
  712|  10.8k|  if (rv < 0) {
  ------------------
  |  Branch (712:7): [True: 0, False: 10.8k]
  ------------------
  713|       |    /* the fmt contains error Numbered Argument format, jliu@netscape.com */
  714|      0|    PR_ASSERT(0);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  ------------------
  ------------------
  715|      0|    return rv;
  716|      0|  }
  717|       |
  718|  65.8k|  while ((c = *fmt++) != 0) {
  ------------------
  |  Branch (718:10): [True: 55.0k, False: 10.8k]
  ------------------
  719|  55.0k|    if (c != '%') {
  ------------------
  |  Branch (719:9): [True: 34.5k, False: 20.4k]
  ------------------
  720|  34.5k|      rv = (*ss->stuff)(ss, fmt - 1, 1);
  721|  34.5k|      if (rv < 0) {
  ------------------
  |  Branch (721:11): [True: 0, False: 34.5k]
  ------------------
  722|      0|        return rv;
  723|      0|      }
  724|  34.5k|      continue;
  725|  34.5k|    }
  726|  20.4k|    fmt0 = fmt - 1;
  727|       |
  728|       |    /*
  729|       |    ** Gobble up the % format string. Hopefully we have handled all
  730|       |    ** of the strange cases!
  731|       |    */
  732|  20.4k|    flags = 0;
  733|  20.4k|    c = *fmt++;
  734|  20.4k|    if (c == '%') {
  ------------------
  |  Branch (734:9): [True: 0, False: 20.4k]
  ------------------
  735|       |      /* quoting a % with %% */
  736|      0|      rv = (*ss->stuff)(ss, fmt - 1, 1);
  737|      0|      if (rv < 0) {
  ------------------
  |  Branch (737:11): [True: 0, False: 0]
  ------------------
  738|      0|        return rv;
  739|      0|      }
  740|      0|      continue;
  741|      0|    }
  742|       |
  743|  20.4k|    if (nas != NULL) {
  ------------------
  |  Branch (743:9): [True: 0, False: 20.4k]
  ------------------
  744|       |      /* the fmt contains the Numbered Arguments feature */
  745|      0|      i = 0;
  746|      0|      while (c && c != '$') { /* should improve error check later */
  ------------------
  |  Branch (746:14): [True: 0, False: 0]
  |  Branch (746:19): [True: 0, False: 0]
  ------------------
  747|      0|        i = (i * 10) + (c - '0');
  748|      0|        c = *fmt++;
  749|      0|      }
  750|       |
  751|      0|      if (nas[i - 1].type == TYPE_UNKNOWN) {
  ------------------
  |  |   88|      0|#define TYPE_UNKNOWN 20
  ------------------
  |  Branch (751:11): [True: 0, False: 0]
  ------------------
  752|      0|        if (nas && (nas != nasArray)) {
  ------------------
  |  Branch (752:13): [True: 0, False: 0]
  |  Branch (752:20): [True: 0, False: 0]
  ------------------
  753|      0|          PR_DELETE(nas);
  ------------------
  |  |  110|      0|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
  754|      0|        }
  755|      0|        return -1;
  756|      0|      }
  757|       |
  758|      0|      nap = &nas[i - 1];
  759|      0|      dolPt = fmt;
  760|      0|      c = *fmt++;
  761|      0|    }
  762|       |
  763|       |    /*
  764|       |     * Examine optional flags.  Note that we do not implement the
  765|       |     * '#' flag of sprintf().  The ANSI C spec. of the '#' flag is
  766|       |     * somewhat ambiguous and not ideal, which is perhaps why
  767|       |     * the various sprintf() implementations are inconsistent
  768|       |     * on this feature.
  769|       |     */
  770|  20.4k|    while ((c == '-') || (c == '+') || (c == ' ') || (c == '0')) {
  ------------------
  |  Branch (770:12): [True: 0, False: 20.4k]
  |  Branch (770:26): [True: 0, False: 20.4k]
  |  Branch (770:40): [True: 0, False: 20.4k]
  |  Branch (770:54): [True: 0, False: 20.4k]
  ------------------
  771|      0|      if (c == '-') {
  ------------------
  |  Branch (771:11): [True: 0, False: 0]
  ------------------
  772|      0|        flags |= FLAG_LEFT;
  ------------------
  |  |   90|      0|#define FLAG_LEFT 0x1
  ------------------
  773|      0|      }
  774|      0|      if (c == '+') {
  ------------------
  |  Branch (774:11): [True: 0, False: 0]
  ------------------
  775|      0|        flags |= FLAG_SIGNED;
  ------------------
  |  |   91|      0|#define FLAG_SIGNED 0x2
  ------------------
  776|      0|      }
  777|      0|      if (c == ' ') {
  ------------------
  |  Branch (777:11): [True: 0, False: 0]
  ------------------
  778|      0|        flags |= FLAG_SPACED;
  ------------------
  |  |   92|      0|#define FLAG_SPACED 0x4
  ------------------
  779|      0|      }
  780|      0|      if (c == '0') {
  ------------------
  |  Branch (780:11): [True: 0, False: 0]
  ------------------
  781|      0|        flags |= FLAG_ZEROS;
  ------------------
  |  |   93|      0|#define FLAG_ZEROS 0x8
  ------------------
  782|      0|      }
  783|      0|      c = *fmt++;
  784|      0|    }
  785|  20.4k|    if (flags & FLAG_SIGNED) {
  ------------------
  |  |   91|  20.4k|#define FLAG_SIGNED 0x2
  ------------------
  |  Branch (785:9): [True: 0, False: 20.4k]
  ------------------
  786|      0|      flags &= ~FLAG_SPACED;
  ------------------
  |  |   92|      0|#define FLAG_SPACED 0x4
  ------------------
  787|      0|    }
  788|  20.4k|    if (flags & FLAG_LEFT) {
  ------------------
  |  |   90|  20.4k|#define FLAG_LEFT 0x1
  ------------------
  |  Branch (788:9): [True: 0, False: 20.4k]
  ------------------
  789|      0|      flags &= ~FLAG_ZEROS;
  ------------------
  |  |   93|      0|#define FLAG_ZEROS 0x8
  ------------------
  790|      0|    }
  791|       |
  792|       |    /* width */
  793|  20.4k|    if (c == '*') {
  ------------------
  |  Branch (793:9): [True: 0, False: 20.4k]
  ------------------
  794|      0|      c = *fmt++;
  795|      0|      width = va_arg(ap, int);
  796|  20.4k|    } else {
  797|  20.4k|      width = 0;
  798|  20.4k|      while ((c >= '0') && (c <= '9')) {
  ------------------
  |  Branch (798:14): [True: 20.4k, False: 0]
  |  Branch (798:28): [True: 0, False: 20.4k]
  ------------------
  799|      0|        width = (width * 10) + (c - '0');
  800|      0|        c = *fmt++;
  801|      0|      }
  802|  20.4k|    }
  803|       |
  804|       |    /* precision */
  805|  20.4k|    prec = -1;
  806|  20.4k|    if (c == '.') {
  ------------------
  |  Branch (806:9): [True: 0, False: 20.4k]
  ------------------
  807|      0|      c = *fmt++;
  808|      0|      if (c == '*') {
  ------------------
  |  Branch (808:11): [True: 0, False: 0]
  ------------------
  809|      0|        c = *fmt++;
  810|      0|        prec = va_arg(ap, int);
  811|      0|      } else {
  812|      0|        prec = 0;
  813|      0|        while ((c >= '0') && (c <= '9')) {
  ------------------
  |  Branch (813:16): [True: 0, False: 0]
  |  Branch (813:30): [True: 0, False: 0]
  ------------------
  814|      0|          prec = (prec * 10) + (c - '0');
  815|      0|          c = *fmt++;
  816|      0|        }
  817|      0|      }
  818|      0|    }
  819|       |
  820|       |    /* size */
  821|  20.4k|    type = TYPE_INTN;
  ------------------
  |  |   76|  20.4k|#define TYPE_INTN 2
  ------------------
  822|  20.4k|    if (c == 'h') {
  ------------------
  |  Branch (822:9): [True: 0, False: 20.4k]
  ------------------
  823|      0|      type = TYPE_INT16;
  ------------------
  |  |   74|      0|#define TYPE_INT16 0
  ------------------
  824|      0|      c = *fmt++;
  825|  20.4k|    } else if (c == 'L') {
  ------------------
  |  Branch (825:16): [True: 0, False: 20.4k]
  ------------------
  826|       |      /* XXX not quite sure here */
  827|      0|      type = TYPE_INT64;
  ------------------
  |  |   80|      0|#define TYPE_INT64 6
  ------------------
  828|      0|      c = *fmt++;
  829|  20.4k|    } else if (c == 'l') {
  ------------------
  |  Branch (829:16): [True: 12.6k, False: 7.77k]
  ------------------
  830|  12.6k|      type = TYPE_INT32;
  ------------------
  |  |   78|  12.6k|#define TYPE_INT32 4
  ------------------
  831|  12.6k|      c = *fmt++;
  832|  12.6k|      if (c == 'l') {
  ------------------
  |  Branch (832:11): [True: 454, False: 12.1k]
  ------------------
  833|    454|        type = TYPE_INT64;
  ------------------
  |  |   80|    454|#define TYPE_INT64 6
  ------------------
  834|    454|        c = *fmt++;
  835|    454|      }
  836|  12.6k|    } else if (c == 'z') {
  ------------------
  |  Branch (836:16): [True: 0, False: 7.77k]
  ------------------
  837|      0|      if (sizeof(size_t) == sizeof(PRInt32)) {
  ------------------
  |  Branch (837:11): [Folded - Ignored]
  ------------------
  838|      0|        type = TYPE_INT32;
  ------------------
  |  |   78|      0|#define TYPE_INT32 4
  ------------------
  839|      0|      } else if (sizeof(size_t) == sizeof(PRInt64)) {
  ------------------
  |  Branch (839:18): [Folded - Ignored]
  ------------------
  840|      0|        type = TYPE_INT64;
  ------------------
  |  |   80|      0|#define TYPE_INT64 6
  ------------------
  841|      0|      }
  842|      0|      c = *fmt++;
  843|      0|    }
  844|       |
  845|       |    /* format */
  846|  20.4k|    hexp = hex;
  847|  20.4k|    switch (c) {
  848|      0|      case 'd':
  ------------------
  |  Branch (848:7): [True: 0, False: 20.4k]
  ------------------
  849|      0|      case 'i': /* decimal/integer */
  ------------------
  |  Branch (849:7): [True: 0, False: 20.4k]
  ------------------
  850|      0|        radix = 10;
  851|      0|        goto fetch_and_convert;
  852|       |
  853|      0|      case 'o': /* octal */
  ------------------
  |  Branch (853:7): [True: 0, False: 20.4k]
  ------------------
  854|      0|        radix = 8;
  855|      0|        type |= 1;
  856|      0|        goto fetch_and_convert;
  857|       |
  858|  12.6k|      case 'u': /* unsigned decimal */
  ------------------
  |  Branch (858:7): [True: 12.6k, False: 7.77k]
  ------------------
  859|  12.6k|        radix = 10;
  860|  12.6k|        type |= 1;
  861|  12.6k|        goto fetch_and_convert;
  862|       |
  863|      0|      case 'x': /* unsigned hex */
  ------------------
  |  Branch (863:7): [True: 0, False: 20.4k]
  ------------------
  864|      0|        radix = 16;
  865|      0|        type |= 1;
  866|      0|        goto fetch_and_convert;
  867|       |
  868|      0|      case 'X': /* unsigned HEX */
  ------------------
  |  Branch (868:7): [True: 0, False: 20.4k]
  ------------------
  869|      0|        radix = 16;
  870|      0|        hexp = HEX;
  871|      0|        type |= 1;
  872|      0|        goto fetch_and_convert;
  873|       |
  874|  12.6k|      fetch_and_convert:
  875|  12.6k|        switch (type) {
  ------------------
  |  Branch (875:17): [True: 0, False: 12.6k]
  ------------------
  876|      0|          case TYPE_INT16:
  ------------------
  |  |   74|      0|#define TYPE_INT16 0
  ------------------
  |  Branch (876:11): [True: 0, False: 12.6k]
  ------------------
  877|      0|            u.l = nas ? nap->u.i : va_arg(ap, int);
  ------------------
  |  Branch (877:19): [True: 0, False: 0]
  ------------------
  878|      0|            if (u.l < 0) {
  ------------------
  |  Branch (878:17): [True: 0, False: 0]
  ------------------
  879|      0|              u.l = -u.l;
  880|      0|              flags |= FLAG_NEG;
  ------------------
  |  |   94|      0|#define FLAG_NEG 0x10
  ------------------
  881|      0|            }
  882|      0|            goto do_long;
  883|      0|          case TYPE_UINT16:
  ------------------
  |  |   75|      0|#define TYPE_UINT16 1
  ------------------
  |  Branch (883:11): [True: 0, False: 12.6k]
  ------------------
  884|      0|            u.l = (nas ? nap->u.i : va_arg(ap, int)) & 0xffff;
  ------------------
  |  Branch (884:20): [True: 0, False: 0]
  ------------------
  885|      0|            goto do_long;
  886|      0|          case TYPE_INTN:
  ------------------
  |  |   76|      0|#define TYPE_INTN 2
  ------------------
  |  Branch (886:11): [True: 0, False: 12.6k]
  ------------------
  887|      0|            u.l = nas ? nap->u.i : va_arg(ap, int);
  ------------------
  |  Branch (887:19): [True: 0, False: 0]
  ------------------
  888|      0|            if (u.l < 0) {
  ------------------
  |  Branch (888:17): [True: 0, False: 0]
  ------------------
  889|      0|              u.l = -u.l;
  890|      0|              flags |= FLAG_NEG;
  ------------------
  |  |   94|      0|#define FLAG_NEG 0x10
  ------------------
  891|      0|            }
  892|      0|            goto do_long;
  893|      0|          case TYPE_UINTN:
  ------------------
  |  |   77|      0|#define TYPE_UINTN 3
  ------------------
  |  Branch (893:11): [True: 0, False: 12.6k]
  ------------------
  894|      0|            u.l = (long)(nas ? nap->u.ui : va_arg(ap, unsigned int));
  ------------------
  |  Branch (894:26): [True: 0, False: 0]
  ------------------
  895|      0|            goto do_long;
  896|       |
  897|      0|          case TYPE_INT32:
  ------------------
  |  |   78|      0|#define TYPE_INT32 4
  ------------------
  |  Branch (897:11): [True: 0, False: 12.6k]
  ------------------
  898|      0|            u.l = nas ? nap->u.i32 : va_arg(ap, PRInt32);
  ------------------
  |  Branch (898:19): [True: 0, False: 0]
  ------------------
  899|      0|            if (u.l < 0) {
  ------------------
  |  Branch (899:17): [True: 0, False: 0]
  ------------------
  900|      0|              u.l = -u.l;
  901|      0|              flags |= FLAG_NEG;
  ------------------
  |  |   94|      0|#define FLAG_NEG 0x10
  ------------------
  902|      0|            }
  903|      0|            goto do_long;
  904|  12.1k|          case TYPE_UINT32:
  ------------------
  |  |   79|  12.1k|#define TYPE_UINT32 5
  ------------------
  |  Branch (904:11): [True: 12.1k, False: 454]
  ------------------
  905|  12.1k|            u.l = (long)(nas ? nap->u.ui32 : va_arg(ap, PRUint32));
  ------------------
  |  Branch (905:26): [True: 0, False: 12.1k]
  ------------------
  906|  12.1k|          do_long:
  907|  12.1k|            rv = cvt_l(ss, u.l, width, prec, radix, type, flags, hexp);
  908|  12.1k|            if (rv < 0) {
  ------------------
  |  Branch (908:17): [True: 0, False: 12.1k]
  ------------------
  909|      0|              return rv;
  910|      0|            }
  911|  12.1k|            break;
  912|       |
  913|  12.1k|          case TYPE_INT64:
  ------------------
  |  |   80|      0|#define TYPE_INT64 6
  ------------------
  |  Branch (913:11): [True: 0, False: 12.6k]
  ------------------
  914|      0|            u.ll = nas ? nap->u.ll : va_arg(ap, PRInt64);
  ------------------
  |  Branch (914:20): [True: 0, False: 0]
  ------------------
  915|      0|            if (!LL_GE_ZERO(u.ll)) {
  ------------------
  |  |   78|      0|#define LL_GE_ZERO(a)       ((a) >= 0)
  ------------------
  |  Branch (915:17): [True: 0, False: 0]
  ------------------
  916|      0|              LL_NEG(u.ll, u.ll);
  ------------------
  |  |  104|      0|#define LL_NEG(r, a)        ((r) = -(a))
  ------------------
  917|      0|              flags |= FLAG_NEG;
  ------------------
  |  |   94|      0|#define FLAG_NEG 0x10
  ------------------
  918|      0|            }
  919|      0|            goto do_longlong;
  920|    454|          case TYPE_UINT64:
  ------------------
  |  |   81|    454|#define TYPE_UINT64 7
  ------------------
  |  Branch (920:11): [True: 454, False: 12.1k]
  ------------------
  921|    454|            u.ll = nas ? nap->u.ull : va_arg(ap, PRUint64);
  ------------------
  |  Branch (921:20): [True: 0, False: 454]
  ------------------
  922|    454|          do_longlong:
  923|    454|            rv = cvt_ll(ss, u.ll, width, prec, radix, type, flags, hexp);
  924|    454|            if (rv < 0) {
  ------------------
  |  Branch (924:17): [True: 0, False: 454]
  ------------------
  925|      0|              return rv;
  926|      0|            }
  927|    454|            break;
  928|  12.6k|        }
  929|  12.6k|        break;
  930|       |
  931|  12.6k|      case 'e':
  ------------------
  |  Branch (931:7): [True: 0, False: 20.4k]
  ------------------
  932|      0|      case 'E':
  ------------------
  |  Branch (932:7): [True: 0, False: 20.4k]
  ------------------
  933|      0|      case 'f':
  ------------------
  |  Branch (933:7): [True: 0, False: 20.4k]
  ------------------
  934|      0|      case 'g':
  ------------------
  |  Branch (934:7): [True: 0, False: 20.4k]
  ------------------
  935|      0|        u.d = nas ? nap->u.d : va_arg(ap, double);
  ------------------
  |  Branch (935:15): [True: 0, False: 0]
  ------------------
  936|      0|        if (nas != NULL) {
  ------------------
  |  Branch (936:13): [True: 0, False: 0]
  ------------------
  937|      0|          i = fmt - dolPt;
  938|      0|          if (i < sizeof(pattern)) {
  ------------------
  |  Branch (938:15): [True: 0, False: 0]
  ------------------
  939|      0|            pattern[0] = '%';
  940|      0|            memcpy(&pattern[1], dolPt, i);
  941|      0|            rv = cvt_f(ss, u.d, pattern, &pattern[i + 1]);
  942|      0|          }
  943|      0|        } else {
  944|      0|          rv = cvt_f(ss, u.d, fmt0, fmt);
  945|      0|        }
  946|       |
  947|      0|        if (rv < 0) {
  ------------------
  |  Branch (947:13): [True: 0, False: 0]
  ------------------
  948|      0|          return rv;
  949|      0|        }
  950|      0|        break;
  951|       |
  952|      0|      case 'c':
  ------------------
  |  Branch (952:7): [True: 0, False: 20.4k]
  ------------------
  953|      0|        u.ch = nas ? nap->u.i : va_arg(ap, int);
  ------------------
  |  Branch (953:16): [True: 0, False: 0]
  ------------------
  954|      0|        if ((flags & FLAG_LEFT) == 0) {
  ------------------
  |  |   90|      0|#define FLAG_LEFT 0x1
  ------------------
  |  Branch (954:13): [True: 0, False: 0]
  ------------------
  955|      0|          while (width-- > 1) {
  ------------------
  |  Branch (955:18): [True: 0, False: 0]
  ------------------
  956|      0|            rv = (*ss->stuff)(ss, " ", 1);
  957|      0|            if (rv < 0) {
  ------------------
  |  Branch (957:17): [True: 0, False: 0]
  ------------------
  958|      0|              return rv;
  959|      0|            }
  960|      0|          }
  961|      0|        }
  962|      0|        rv = (*ss->stuff)(ss, &u.ch, 1);
  963|      0|        if (rv < 0) {
  ------------------
  |  Branch (963:13): [True: 0, False: 0]
  ------------------
  964|      0|          return rv;
  965|      0|        }
  966|      0|        if (flags & FLAG_LEFT) {
  ------------------
  |  |   90|      0|#define FLAG_LEFT 0x1
  ------------------
  |  Branch (966:13): [True: 0, False: 0]
  ------------------
  967|      0|          while (width-- > 1) {
  ------------------
  |  Branch (967:18): [True: 0, False: 0]
  ------------------
  968|      0|            rv = (*ss->stuff)(ss, " ", 1);
  969|      0|            if (rv < 0) {
  ------------------
  |  Branch (969:17): [True: 0, False: 0]
  ------------------
  970|      0|              return rv;
  971|      0|            }
  972|      0|          }
  973|      0|        }
  974|      0|        break;
  975|       |
  976|      0|      case 'p':
  ------------------
  |  Branch (976:7): [True: 0, False: 20.4k]
  ------------------
  977|      0|        if (sizeof(void*) == sizeof(PRInt32)) {
  ------------------
  |  Branch (977:13): [Folded - Ignored]
  ------------------
  978|      0|          type = TYPE_UINT32;
  ------------------
  |  |   79|      0|#define TYPE_UINT32 5
  ------------------
  979|      0|        } else if (sizeof(void*) == sizeof(PRInt64)) {
  ------------------
  |  Branch (979:20): [Folded - Ignored]
  ------------------
  980|      0|          type = TYPE_UINT64;
  ------------------
  |  |   81|      0|#define TYPE_UINT64 7
  ------------------
  981|      0|        } else if (sizeof(void*) == sizeof(int)) {
  ------------------
  |  Branch (981:20): [Folded - Ignored]
  ------------------
  982|      0|          type = TYPE_UINTN;
  ------------------
  |  |   77|      0|#define TYPE_UINTN 3
  ------------------
  983|      0|        } else {
  984|      0|          PR_ASSERT(0);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  ------------------
  ------------------
  985|      0|          break;
  986|      0|        }
  987|      0|        radix = 16;
  988|      0|        goto fetch_and_convert;
  989|       |
  990|      0|#ifndef WIN32
  991|      0|      case 'S':
  ------------------
  |  Branch (991:7): [True: 0, False: 20.4k]
  ------------------
  992|       |        /* XXX not supported I suppose */
  993|      0|        PR_ASSERT(0);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  ------------------
  ------------------
  994|      0|        break;
  995|      0|#endif
  996|       |
  997|       |#if 0
  998|       |            case 'C':
  999|       |            case 'E':
 1000|       |            case 'G':
 1001|       |                /* XXX not supported I suppose */
 1002|       |                PR_ASSERT(0);
 1003|       |                break;
 1004|       |#endif
 1005|       |
 1006|       |#ifdef WIN32
 1007|       |      case 'S':
 1008|       |        u.ws = nas ? nap->u.ws : va_arg(ap, const WCHAR*);
 1009|       |
 1010|       |        /* Get the required size in rv */
 1011|       |        rv = WideCharToMultiByte(CP_ACP, 0, u.ws, -1, NULL, 0, NULL, NULL);
 1012|       |        if (rv == 0) {
 1013|       |          rv = 1;
 1014|       |        }
 1015|       |        pBuf = PR_MALLOC(rv);
 1016|       |        WideCharToMultiByte(CP_ACP, 0, u.ws, -1, pBuf, (int)rv, NULL, NULL);
 1017|       |        pBuf[rv - 1] = '\0';
 1018|       |
 1019|       |        rv = cvt_s(ss, pBuf, width, prec, flags);
 1020|       |
 1021|       |        /* We don't need the allocated buffer anymore */
 1022|       |        PR_Free(pBuf);
 1023|       |        if (rv < 0) {
 1024|       |          return rv;
 1025|       |        }
 1026|       |        break;
 1027|       |
 1028|       |#endif
 1029|       |
 1030|  7.77k|      case 's':
  ------------------
  |  Branch (1030:7): [True: 7.77k, False: 12.6k]
  ------------------
 1031|  7.77k|        u.s = nas ? nap->u.s : va_arg(ap, const char*);
  ------------------
  |  Branch (1031:15): [True: 0, False: 7.77k]
  ------------------
 1032|  7.77k|        rv = cvt_s(ss, u.s, width, prec, flags);
 1033|  7.77k|        if (rv < 0) {
  ------------------
  |  Branch (1033:13): [True: 0, False: 7.77k]
  ------------------
 1034|      0|          return rv;
 1035|      0|        }
 1036|  7.77k|        break;
 1037|       |
 1038|  7.77k|      case 'n':
  ------------------
  |  Branch (1038:7): [True: 0, False: 20.4k]
  ------------------
 1039|      0|        u.ip = nas ? nap->u.ip : va_arg(ap, int*);
  ------------------
  |  Branch (1039:16): [True: 0, False: 0]
  ------------------
 1040|      0|        if (u.ip) {
  ------------------
  |  Branch (1040:13): [True: 0, False: 0]
  ------------------
 1041|      0|          *u.ip = ss->cur - ss->base;
 1042|      0|        }
 1043|      0|        break;
 1044|       |
 1045|      0|      default:
  ------------------
  |  Branch (1045:7): [True: 0, False: 20.4k]
  ------------------
 1046|       |        /* Not a % token after all... skip it */
 1047|       |#if 0
 1048|       |                PR_ASSERT(0);
 1049|       |#endif
 1050|      0|        rv = (*ss->stuff)(ss, "%", 1);
 1051|      0|        if (rv < 0) {
  ------------------
  |  Branch (1051:13): [True: 0, False: 0]
  ------------------
 1052|      0|          return rv;
 1053|      0|        }
 1054|      0|        rv = (*ss->stuff)(ss, fmt - 1, 1);
 1055|      0|        if (rv < 0) {
  ------------------
  |  Branch (1055:13): [True: 0, False: 0]
  ------------------
 1056|      0|          return rv;
 1057|      0|        }
 1058|  20.4k|    }
 1059|  20.4k|  }
 1060|       |
 1061|       |  /* Stuff trailing NUL */
 1062|  10.8k|  rv = (*ss->stuff)(ss, "\0", 1);
 1063|       |
 1064|  10.8k|  if (nas && (nas != nasArray)) {
  ------------------
  |  Branch (1064:7): [True: 0, False: 10.8k]
  |  Branch (1064:14): [True: 0, False: 0]
  ------------------
 1065|      0|    PR_DELETE(nas);
  ------------------
  |  |  110|      0|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
 1066|      0|  }
 1067|       |
 1068|  10.8k|  return rv;
 1069|  10.8k|}
prprf.c:BuildArgArray:
  384|  10.8k|                                    struct NumArg* nasArray) {
  385|  10.8k|  int number = 0, cn = 0, i;
  386|  10.8k|  const char* p;
  387|  10.8k|  char c;
  388|  10.8k|  struct NumArg* nas;
  389|       |
  390|       |  /*
  391|       |  **  first pass:
  392|       |  **  determine how many legal % I have got, then allocate space
  393|       |  */
  394|       |
  395|  10.8k|  p = fmt;
  396|  10.8k|  *rv = 0;
  397|  10.8k|  i = 0;
  398|  78.9k|  while ((c = *p++) != 0) {
  ------------------
  |  Branch (398:10): [True: 68.1k, False: 10.8k]
  ------------------
  399|  68.1k|    if (c != '%') {
  ------------------
  |  Branch (399:9): [True: 47.6k, False: 20.4k]
  ------------------
  400|  47.6k|      continue;
  401|  47.6k|    }
  402|  20.4k|    if ((c = *p++) == '%') { /* skip %% case */
  ------------------
  |  Branch (402:9): [True: 0, False: 20.4k]
  ------------------
  403|      0|      continue;
  404|      0|    }
  405|       |
  406|  20.4k|    while (c != 0) {
  ------------------
  |  Branch (406:12): [True: 20.4k, False: 0]
  ------------------
  407|  20.4k|      if (c > '9' || c < '0') {
  ------------------
  |  Branch (407:11): [True: 20.4k, False: 0]
  |  Branch (407:22): [True: 0, False: 0]
  ------------------
  408|  20.4k|        if (c == '$') { /* numbered argument case */
  ------------------
  |  Branch (408:13): [True: 0, False: 20.4k]
  ------------------
  409|      0|          if (i > 0) {
  ------------------
  |  Branch (409:15): [True: 0, False: 0]
  ------------------
  410|      0|            *rv = -1;
  411|      0|            return NULL;
  412|      0|          }
  413|      0|          number++;
  414|  20.4k|        } else { /* non-numbered argument case */
  415|  20.4k|          if (number > 0) {
  ------------------
  |  Branch (415:15): [True: 0, False: 20.4k]
  ------------------
  416|      0|            *rv = -1;
  417|      0|            return NULL;
  418|      0|          }
  419|  20.4k|          i = 1;
  420|  20.4k|        }
  421|  20.4k|        break;
  422|  20.4k|      }
  423|       |
  424|      0|      c = *p++;
  425|      0|    }
  426|  20.4k|  }
  427|       |
  428|  10.8k|  if (number == 0) {
  ------------------
  |  Branch (428:7): [True: 10.8k, False: 0]
  ------------------
  429|  10.8k|    return NULL;
  430|  10.8k|  }
  431|       |
  432|      0|  if (number > NAS_DEFAULT_NUM) {
  ------------------
  |  |   67|      0|#define NAS_DEFAULT_NUM 20 /* default number of NumberedArgument array */
  ------------------
  |  Branch (432:7): [True: 0, False: 0]
  ------------------
  433|      0|    nas = (struct NumArg*)PR_MALLOC(number * sizeof(struct NumArg));
  ------------------
  |  |   55|      0|#define PR_MALLOC(_bytes) (PR_Malloc((_bytes)))
  ------------------
  434|      0|    if (!nas) {
  ------------------
  |  Branch (434:9): [True: 0, False: 0]
  ------------------
  435|      0|      *rv = -1;
  436|      0|      return NULL;
  437|      0|    }
  438|      0|  } else {
  439|      0|    nas = nasArray;
  440|      0|  }
  441|       |
  442|      0|  for (i = 0; i < number; i++) {
  ------------------
  |  Branch (442:15): [True: 0, False: 0]
  ------------------
  443|      0|    nas[i].type = TYPE_UNKNOWN;
  ------------------
  |  |   88|      0|#define TYPE_UNKNOWN 20
  ------------------
  444|      0|  }
  445|       |
  446|       |  /*
  447|       |  ** second pass:
  448|       |  ** set nas[].type
  449|       |  */
  450|       |
  451|      0|  p = fmt;
  452|      0|  while ((c = *p++) != 0) {
  ------------------
  |  Branch (452:10): [True: 0, False: 0]
  ------------------
  453|      0|    if (c != '%') {
  ------------------
  |  Branch (453:9): [True: 0, False: 0]
  ------------------
  454|      0|      continue;
  455|      0|    }
  456|      0|    c = *p++;
  457|      0|    if (c == '%') {
  ------------------
  |  Branch (457:9): [True: 0, False: 0]
  ------------------
  458|      0|      continue;
  459|      0|    }
  460|       |
  461|      0|    cn = 0;
  462|      0|    while (c && c != '$') { /* should improve error check later */
  ------------------
  |  Branch (462:12): [True: 0, False: 0]
  |  Branch (462:17): [True: 0, False: 0]
  ------------------
  463|      0|      cn = cn * 10 + c - '0';
  464|      0|      c = *p++;
  465|      0|    }
  466|       |
  467|      0|    if (!c || cn < 1 || cn > number) {
  ------------------
  |  Branch (467:9): [True: 0, False: 0]
  |  Branch (467:15): [True: 0, False: 0]
  |  Branch (467:25): [True: 0, False: 0]
  ------------------
  468|      0|      *rv = -1;
  469|      0|      break;
  470|      0|    }
  471|       |
  472|       |    /* nas[cn] starts from 0, and make sure nas[cn].type is not assigned */
  473|      0|    cn--;
  474|      0|    if (nas[cn].type != TYPE_UNKNOWN) {
  ------------------
  |  |   88|      0|#define TYPE_UNKNOWN 20
  ------------------
  |  Branch (474:9): [True: 0, False: 0]
  ------------------
  475|      0|      continue;
  476|      0|    }
  477|       |
  478|      0|    c = *p++;
  479|       |
  480|       |    /* width */
  481|      0|    if (c == '*') {
  ------------------
  |  Branch (481:9): [True: 0, False: 0]
  ------------------
  482|       |      /* not supported feature, for the argument is not numbered */
  483|      0|      *rv = -1;
  484|      0|      break;
  485|      0|    }
  486|       |
  487|      0|    while ((c >= '0') && (c <= '9')) {
  ------------------
  |  Branch (487:12): [True: 0, False: 0]
  |  Branch (487:26): [True: 0, False: 0]
  ------------------
  488|      0|      c = *p++;
  489|      0|    }
  490|       |
  491|       |    /* precision */
  492|      0|    if (c == '.') {
  ------------------
  |  Branch (492:9): [True: 0, False: 0]
  ------------------
  493|      0|      c = *p++;
  494|      0|      if (c == '*') {
  ------------------
  |  Branch (494:11): [True: 0, False: 0]
  ------------------
  495|       |        /* not supported feature, for the argument is not numbered */
  496|      0|        *rv = -1;
  497|      0|        break;
  498|      0|      }
  499|       |
  500|      0|      while ((c >= '0') && (c <= '9')) {
  ------------------
  |  Branch (500:14): [True: 0, False: 0]
  |  Branch (500:28): [True: 0, False: 0]
  ------------------
  501|      0|        c = *p++;
  502|      0|      }
  503|      0|    }
  504|       |
  505|       |    /* size */
  506|      0|    nas[cn].type = TYPE_INTN;
  ------------------
  |  |   76|      0|#define TYPE_INTN 2
  ------------------
  507|      0|    if (c == 'h') {
  ------------------
  |  Branch (507:9): [True: 0, False: 0]
  ------------------
  508|      0|      nas[cn].type = TYPE_INT16;
  ------------------
  |  |   74|      0|#define TYPE_INT16 0
  ------------------
  509|      0|      c = *p++;
  510|      0|    } else if (c == 'L') {
  ------------------
  |  Branch (510:16): [True: 0, False: 0]
  ------------------
  511|       |      /* XXX not quite sure here */
  512|      0|      nas[cn].type = TYPE_INT64;
  ------------------
  |  |   80|      0|#define TYPE_INT64 6
  ------------------
  513|      0|      c = *p++;
  514|      0|    } else if (c == 'l') {
  ------------------
  |  Branch (514:16): [True: 0, False: 0]
  ------------------
  515|      0|      nas[cn].type = TYPE_INT32;
  ------------------
  |  |   78|      0|#define TYPE_INT32 4
  ------------------
  516|      0|      c = *p++;
  517|      0|      if (c == 'l') {
  ------------------
  |  Branch (517:11): [True: 0, False: 0]
  ------------------
  518|      0|        nas[cn].type = TYPE_INT64;
  ------------------
  |  |   80|      0|#define TYPE_INT64 6
  ------------------
  519|      0|        c = *p++;
  520|      0|      }
  521|      0|    } else if (c == 'z') {
  ------------------
  |  Branch (521:16): [True: 0, False: 0]
  ------------------
  522|      0|      if (sizeof(size_t) == sizeof(PRInt32)) {
  ------------------
  |  Branch (522:11): [Folded - Ignored]
  ------------------
  523|      0|        nas[cn].type = TYPE_INT32;
  ------------------
  |  |   78|      0|#define TYPE_INT32 4
  ------------------
  524|      0|      } else if (sizeof(size_t) == sizeof(PRInt64)) {
  ------------------
  |  Branch (524:18): [Folded - Ignored]
  ------------------
  525|      0|        nas[cn].type = TYPE_INT64;
  ------------------
  |  |   80|      0|#define TYPE_INT64 6
  ------------------
  526|      0|      } else {
  527|      0|        nas[cn].type = TYPE_UNKNOWN;
  ------------------
  |  |   88|      0|#define TYPE_UNKNOWN 20
  ------------------
  528|      0|      }
  529|      0|      c = *p++;
  530|      0|    }
  531|       |
  532|       |    /* format */
  533|      0|    switch (c) {
  534|      0|      case 'd':
  ------------------
  |  Branch (534:7): [True: 0, False: 0]
  ------------------
  535|      0|      case 'c':
  ------------------
  |  Branch (535:7): [True: 0, False: 0]
  ------------------
  536|      0|      case 'i':
  ------------------
  |  Branch (536:7): [True: 0, False: 0]
  ------------------
  537|      0|      case 'o':
  ------------------
  |  Branch (537:7): [True: 0, False: 0]
  ------------------
  538|      0|      case 'u':
  ------------------
  |  Branch (538:7): [True: 0, False: 0]
  ------------------
  539|      0|      case 'x':
  ------------------
  |  Branch (539:7): [True: 0, False: 0]
  ------------------
  540|      0|      case 'X':
  ------------------
  |  Branch (540:7): [True: 0, False: 0]
  ------------------
  541|      0|        break;
  542|       |
  543|      0|      case 'e':
  ------------------
  |  Branch (543:7): [True: 0, False: 0]
  ------------------
  544|      0|      case 'f':
  ------------------
  |  Branch (544:7): [True: 0, False: 0]
  ------------------
  545|      0|      case 'g':
  ------------------
  |  Branch (545:7): [True: 0, False: 0]
  ------------------
  546|      0|        nas[cn].type = TYPE_DOUBLE;
  ------------------
  |  |   83|      0|#define TYPE_DOUBLE 9
  ------------------
  547|      0|        break;
  548|       |
  549|      0|      case 'p':
  ------------------
  |  Branch (549:7): [True: 0, False: 0]
  ------------------
  550|       |        /* XXX should use cpp */
  551|      0|        if (sizeof(void*) == sizeof(PRInt32)) {
  ------------------
  |  Branch (551:13): [Folded - Ignored]
  ------------------
  552|      0|          nas[cn].type = TYPE_UINT32;
  ------------------
  |  |   79|      0|#define TYPE_UINT32 5
  ------------------
  553|      0|        } else if (sizeof(void*) == sizeof(PRInt64)) {
  ------------------
  |  Branch (553:20): [Folded - Ignored]
  ------------------
  554|      0|          nas[cn].type = TYPE_UINT64;
  ------------------
  |  |   81|      0|#define TYPE_UINT64 7
  ------------------
  555|      0|        } else if (sizeof(void*) == sizeof(PRIntn)) {
  ------------------
  |  Branch (555:20): [Folded - Ignored]
  ------------------
  556|      0|          nas[cn].type = TYPE_UINTN;
  ------------------
  |  |   77|      0|#define TYPE_UINTN 3
  ------------------
  557|      0|        } else {
  558|      0|          nas[cn].type = TYPE_UNKNOWN;
  ------------------
  |  |   88|      0|#define TYPE_UNKNOWN 20
  ------------------
  559|      0|        }
  560|      0|        break;
  561|       |
  562|      0|      case 'S':
  ------------------
  |  Branch (562:7): [True: 0, False: 0]
  ------------------
  563|       |#ifdef WIN32
  564|       |        nas[cn].type = TYPE_WSTRING;
  565|       |        break;
  566|       |#endif
  567|      0|      case 'C':
  ------------------
  |  Branch (567:7): [True: 0, False: 0]
  ------------------
  568|      0|      case 'E':
  ------------------
  |  Branch (568:7): [True: 0, False: 0]
  ------------------
  569|      0|      case 'G':
  ------------------
  |  Branch (569:7): [True: 0, False: 0]
  ------------------
  570|       |        /* XXX not supported I suppose */
  571|      0|        PR_ASSERT(0);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  ------------------
  ------------------
  572|      0|        nas[cn].type = TYPE_UNKNOWN;
  ------------------
  |  |   88|      0|#define TYPE_UNKNOWN 20
  ------------------
  573|      0|        break;
  574|       |
  575|      0|      case 's':
  ------------------
  |  Branch (575:7): [True: 0, False: 0]
  ------------------
  576|      0|        nas[cn].type = TYPE_STRING;
  ------------------
  |  |   82|      0|#define TYPE_STRING 8
  ------------------
  577|      0|        break;
  578|       |
  579|      0|      case 'n':
  ------------------
  |  Branch (579:7): [True: 0, False: 0]
  ------------------
  580|      0|        nas[cn].type = TYPE_INTSTR;
  ------------------
  |  |   84|      0|#define TYPE_INTSTR 10
  ------------------
  581|      0|        break;
  582|       |
  583|      0|      default:
  ------------------
  |  Branch (583:7): [True: 0, False: 0]
  ------------------
  584|      0|        PR_ASSERT(0);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  ------------------
  ------------------
  585|      0|        nas[cn].type = TYPE_UNKNOWN;
  ------------------
  |  |   88|      0|#define TYPE_UNKNOWN 20
  ------------------
  586|      0|        break;
  587|      0|    }
  588|       |
  589|       |    /* get a legal para. */
  590|      0|    if (nas[cn].type == TYPE_UNKNOWN) {
  ------------------
  |  |   88|      0|#define TYPE_UNKNOWN 20
  ------------------
  |  Branch (590:9): [True: 0, False: 0]
  ------------------
  591|      0|      *rv = -1;
  592|      0|      break;
  593|      0|    }
  594|      0|  }
  595|       |
  596|       |  /*
  597|       |  ** third pass
  598|       |  ** fill the nas[cn].ap
  599|       |  */
  600|       |
  601|      0|  if (*rv < 0) {
  ------------------
  |  Branch (601:7): [True: 0, False: 0]
  ------------------
  602|      0|    if (nas != nasArray) {
  ------------------
  |  Branch (602:9): [True: 0, False: 0]
  ------------------
  603|      0|      PR_DELETE(nas);
  ------------------
  |  |  110|      0|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
  604|      0|    }
  605|      0|    return NULL;
  606|      0|  }
  607|       |
  608|      0|  cn = 0;
  609|      0|  while (cn < number) {
  ------------------
  |  Branch (609:10): [True: 0, False: 0]
  ------------------
  610|      0|    if (nas[cn].type == TYPE_UNKNOWN) {
  ------------------
  |  |   88|      0|#define TYPE_UNKNOWN 20
  ------------------
  |  Branch (610:9): [True: 0, False: 0]
  ------------------
  611|      0|      cn++;
  612|      0|      continue;
  613|      0|    }
  614|       |
  615|      0|    switch (nas[cn].type) {
  616|      0|      case TYPE_INT16:
  ------------------
  |  |   74|      0|#define TYPE_INT16 0
  ------------------
  |  Branch (616:7): [True: 0, False: 0]
  ------------------
  617|      0|      case TYPE_UINT16:
  ------------------
  |  |   75|      0|#define TYPE_UINT16 1
  ------------------
  |  Branch (617:7): [True: 0, False: 0]
  ------------------
  618|      0|      case TYPE_INTN:
  ------------------
  |  |   76|      0|#define TYPE_INTN 2
  ------------------
  |  Branch (618:7): [True: 0, False: 0]
  ------------------
  619|      0|        nas[cn].u.i = va_arg(ap, int);
  620|      0|        break;
  621|       |
  622|      0|      case TYPE_UINTN:
  ------------------
  |  |   77|      0|#define TYPE_UINTN 3
  ------------------
  |  Branch (622:7): [True: 0, False: 0]
  ------------------
  623|      0|        nas[cn].u.ui = va_arg(ap, unsigned int);
  624|      0|        break;
  625|       |
  626|      0|      case TYPE_INT32:
  ------------------
  |  |   78|      0|#define TYPE_INT32 4
  ------------------
  |  Branch (626:7): [True: 0, False: 0]
  ------------------
  627|      0|        nas[cn].u.i32 = va_arg(ap, PRInt32);
  628|      0|        break;
  629|       |
  630|      0|      case TYPE_UINT32:
  ------------------
  |  |   79|      0|#define TYPE_UINT32 5
  ------------------
  |  Branch (630:7): [True: 0, False: 0]
  ------------------
  631|      0|        nas[cn].u.ui32 = va_arg(ap, PRUint32);
  632|      0|        break;
  633|       |
  634|      0|      case TYPE_INT64:
  ------------------
  |  |   80|      0|#define TYPE_INT64 6
  ------------------
  |  Branch (634:7): [True: 0, False: 0]
  ------------------
  635|      0|        nas[cn].u.ll = va_arg(ap, PRInt64);
  636|      0|        break;
  637|       |
  638|      0|      case TYPE_UINT64:
  ------------------
  |  |   81|      0|#define TYPE_UINT64 7
  ------------------
  |  Branch (638:7): [True: 0, False: 0]
  ------------------
  639|      0|        nas[cn].u.ull = va_arg(ap, PRUint64);
  640|      0|        break;
  641|       |
  642|      0|      case TYPE_STRING:
  ------------------
  |  |   82|      0|#define TYPE_STRING 8
  ------------------
  |  Branch (642:7): [True: 0, False: 0]
  ------------------
  643|      0|        nas[cn].u.s = va_arg(ap, char*);
  644|      0|        break;
  645|       |
  646|       |#ifdef WIN32
  647|       |      case TYPE_WSTRING:
  648|       |        nas[cn].u.ws = va_arg(ap, WCHAR*);
  649|       |        break;
  650|       |#endif
  651|       |
  652|      0|      case TYPE_INTSTR:
  ------------------
  |  |   84|      0|#define TYPE_INTSTR 10
  ------------------
  |  Branch (652:7): [True: 0, False: 0]
  ------------------
  653|      0|        nas[cn].u.ip = va_arg(ap, int*);
  654|      0|        break;
  655|       |
  656|      0|      case TYPE_DOUBLE:
  ------------------
  |  |   83|      0|#define TYPE_DOUBLE 9
  ------------------
  |  Branch (656:7): [True: 0, False: 0]
  ------------------
  657|      0|        nas[cn].u.d = va_arg(ap, double);
  658|      0|        break;
  659|       |
  660|      0|      default:
  ------------------
  |  Branch (660:7): [True: 0, False: 0]
  ------------------
  661|      0|        if (nas != nasArray) {
  ------------------
  |  Branch (661:13): [True: 0, False: 0]
  ------------------
  662|      0|          PR_DELETE(nas);
  ------------------
  |  |  110|      0|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
  663|      0|        }
  664|      0|        *rv = -1;
  665|      0|        return NULL;
  666|      0|    }
  667|       |
  668|      0|    cn++;
  669|      0|  }
  670|       |
  671|      0|  return nas;
  672|      0|}
prprf.c:cvt_l:
  228|  12.1k|                 int type, int flags, const char* hexp) {
  229|  12.1k|  char cvtbuf[100];
  230|  12.1k|  char* cvt;
  231|  12.1k|  int digits;
  232|       |
  233|       |  /* according to the man page this needs to happen */
  234|  12.1k|  if ((prec == 0) && (num == 0)) {
  ------------------
  |  Branch (234:7): [True: 0, False: 12.1k]
  |  Branch (234:22): [True: 0, False: 0]
  ------------------
  235|      0|    return 0;
  236|      0|  }
  237|       |
  238|       |  /*
  239|       |  ** Converting decimal is a little tricky. In the unsigned case we
  240|       |  ** need to stop when we hit 10 digits. In the signed case, we can
  241|       |  ** stop when the number is zero.
  242|       |  */
  243|  12.1k|  cvt = cvtbuf + sizeof(cvtbuf);
  244|  12.1k|  digits = 0;
  245|  31.0k|  while (num) {
  ------------------
  |  Branch (245:10): [True: 18.8k, False: 12.1k]
  ------------------
  246|  18.8k|    int digit = (((unsigned long)num) % radix) & 0xF;
  247|  18.8k|    *--cvt = hexp[digit];
  248|  18.8k|    digits++;
  249|  18.8k|    num = (long)(((unsigned long)num) / radix);
  250|  18.8k|  }
  251|  12.1k|  if (digits == 0) {
  ------------------
  |  Branch (251:7): [True: 1.63k, False: 10.5k]
  ------------------
  252|  1.63k|    *--cvt = '0';
  253|  1.63k|    digits++;
  254|  1.63k|  }
  255|       |
  256|       |  /*
  257|       |  ** Now that we have the number converted without its sign, deal with
  258|       |  ** the sign and zero padding.
  259|       |  */
  260|  12.1k|  return fill_n(ss, cvt, digits, width, prec, type, flags);
  261|  12.1k|}
prprf.c:fill_n:
  138|  12.6k|                  int prec, int type, int flags) {
  139|  12.6k|  int zerowidth = 0;
  140|  12.6k|  int precwidth = 0;
  141|  12.6k|  int signwidth = 0;
  142|  12.6k|  int leftspaces = 0;
  143|  12.6k|  int rightspaces = 0;
  144|  12.6k|  int cvtwidth;
  145|  12.6k|  int rv;
  146|  12.6k|  char sign;
  147|       |
  148|  12.6k|  if ((type & 1) == 0) {
  ------------------
  |  Branch (148:7): [True: 0, False: 12.6k]
  ------------------
  149|      0|    if (flags & FLAG_NEG) {
  ------------------
  |  |   94|      0|#define FLAG_NEG 0x10
  ------------------
  |  Branch (149:9): [True: 0, False: 0]
  ------------------
  150|      0|      sign = '-';
  151|      0|      signwidth = 1;
  152|      0|    } else if (flags & FLAG_SIGNED) {
  ------------------
  |  |   91|      0|#define FLAG_SIGNED 0x2
  ------------------
  |  Branch (152:16): [True: 0, False: 0]
  ------------------
  153|      0|      sign = '+';
  154|      0|      signwidth = 1;
  155|      0|    } else if (flags & FLAG_SPACED) {
  ------------------
  |  |   92|      0|#define FLAG_SPACED 0x4
  ------------------
  |  Branch (155:16): [True: 0, False: 0]
  ------------------
  156|      0|      sign = ' ';
  157|      0|      signwidth = 1;
  158|      0|    }
  159|      0|  }
  160|  12.6k|  cvtwidth = signwidth + srclen;
  161|       |
  162|  12.6k|  if (prec > 0) {
  ------------------
  |  Branch (162:7): [True: 0, False: 12.6k]
  ------------------
  163|      0|    if (prec > srclen) {
  ------------------
  |  Branch (163:9): [True: 0, False: 0]
  ------------------
  164|      0|      precwidth = prec - srclen; /* Need zero filling */
  165|      0|      cvtwidth += precwidth;
  166|      0|    }
  167|      0|  }
  168|       |
  169|  12.6k|  if ((flags & FLAG_ZEROS) && (prec < 0)) {
  ------------------
  |  |   93|  12.6k|#define FLAG_ZEROS 0x8
  ------------------
  |  Branch (169:7): [True: 0, False: 12.6k]
  |  Branch (169:31): [True: 0, False: 0]
  ------------------
  170|      0|    if (width > cvtwidth) {
  ------------------
  |  Branch (170:9): [True: 0, False: 0]
  ------------------
  171|      0|      zerowidth = width - cvtwidth; /* Zero filling */
  172|      0|      cvtwidth += zerowidth;
  173|      0|    }
  174|      0|  }
  175|       |
  176|  12.6k|  if (flags & FLAG_LEFT) {
  ------------------
  |  |   90|  12.6k|#define FLAG_LEFT 0x1
  ------------------
  |  Branch (176:7): [True: 0, False: 12.6k]
  ------------------
  177|      0|    if (width > cvtwidth) {
  ------------------
  |  Branch (177:9): [True: 0, False: 0]
  ------------------
  178|       |      /* Space filling on the right (i.e. left adjusting) */
  179|      0|      rightspaces = width - cvtwidth;
  180|      0|    }
  181|  12.6k|  } else {
  182|  12.6k|    if (width > cvtwidth) {
  ------------------
  |  Branch (182:9): [True: 0, False: 12.6k]
  ------------------
  183|       |      /* Space filling on the left (i.e. right adjusting) */
  184|      0|      leftspaces = width - cvtwidth;
  185|      0|    }
  186|  12.6k|  }
  187|  12.6k|  while (--leftspaces >= 0) {
  ------------------
  |  Branch (187:10): [True: 0, False: 12.6k]
  ------------------
  188|      0|    rv = (*ss->stuff)(ss, " ", 1);
  189|      0|    if (rv < 0) {
  ------------------
  |  Branch (189:9): [True: 0, False: 0]
  ------------------
  190|      0|      return rv;
  191|      0|    }
  192|      0|  }
  193|  12.6k|  if (signwidth) {
  ------------------
  |  Branch (193:7): [True: 0, False: 12.6k]
  ------------------
  194|      0|    rv = (*ss->stuff)(ss, &sign, 1);
  195|      0|    if (rv < 0) {
  ------------------
  |  Branch (195:9): [True: 0, False: 0]
  ------------------
  196|      0|      return rv;
  197|      0|    }
  198|      0|  }
  199|  12.6k|  while (--precwidth >= 0) {
  ------------------
  |  Branch (199:10): [True: 0, False: 12.6k]
  ------------------
  200|      0|    rv = (*ss->stuff)(ss, "0", 1);
  201|      0|    if (rv < 0) {
  ------------------
  |  Branch (201:9): [True: 0, False: 0]
  ------------------
  202|      0|      return rv;
  203|      0|    }
  204|      0|  }
  205|  12.6k|  while (--zerowidth >= 0) {
  ------------------
  |  Branch (205:10): [True: 0, False: 12.6k]
  ------------------
  206|      0|    rv = (*ss->stuff)(ss, "0", 1);
  207|      0|    if (rv < 0) {
  ------------------
  |  Branch (207:9): [True: 0, False: 0]
  ------------------
  208|      0|      return rv;
  209|      0|    }
  210|      0|  }
  211|  12.6k|  rv = (*ss->stuff)(ss, src, srclen);
  212|  12.6k|  if (rv < 0) {
  ------------------
  |  Branch (212:7): [True: 0, False: 12.6k]
  ------------------
  213|      0|    return rv;
  214|      0|  }
  215|  12.6k|  while (--rightspaces >= 0) {
  ------------------
  |  Branch (215:10): [True: 0, False: 12.6k]
  ------------------
  216|      0|    rv = (*ss->stuff)(ss, " ", 1);
  217|      0|    if (rv < 0) {
  ------------------
  |  Branch (217:9): [True: 0, False: 0]
  ------------------
  218|      0|      return rv;
  219|      0|    }
  220|      0|  }
  221|  12.6k|  return 0;
  222|  12.6k|}
prprf.c:cvt_ll:
  267|    454|                  int type, int flags, const char* hexp) {
  268|    454|  char cvtbuf[100];
  269|    454|  char* cvt;
  270|    454|  int digits;
  271|    454|  PRInt64 rad;
  272|       |
  273|       |  /* according to the man page this needs to happen */
  274|    454|  if ((prec == 0) && (LL_IS_ZERO(num))) {
  ------------------
  |  |   75|      0|#define LL_IS_ZERO(a)       ((a) == 0)
  ------------------
  |  Branch (274:7): [True: 0, False: 454]
  |  Branch (274:22): [True: 0, False: 0]
  ------------------
  275|      0|    return 0;
  276|      0|  }
  277|       |
  278|       |  /*
  279|       |  ** Converting decimal is a little tricky. In the unsigned case we
  280|       |  ** need to stop when we hit 10 digits. In the signed case, we can
  281|       |  ** stop when the number is zero.
  282|       |  */
  283|    454|  LL_I2L(rad, radix);
  ------------------
  |  |  149|    454|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
  284|    454|  cvt = cvtbuf + sizeof(cvtbuf);
  285|    454|  digits = 0;
  286|  5.48k|  while (!LL_IS_ZERO(num)) {
  ------------------
  |  |   75|  5.48k|#define LL_IS_ZERO(a)       ((a) == 0)
  ------------------
  |  Branch (286:10): [True: 5.03k, False: 454]
  ------------------
  287|  5.03k|    PRInt32 digit;
  288|  5.03k|    PRInt64 quot, rem;
  289|  5.03k|    LL_UDIVMOD(&quot, &rem, num, rad);
  ------------------
  |  |  164|  5.03k|    (*(qp) = ((PRUint64)(a) / (b)), \
  |  |  165|  5.03k|     *(rp) = ((PRUint64)(a) % (b)))
  ------------------
  290|  5.03k|    LL_L2I(digit, rem);
  ------------------
  |  |  144|  5.03k|#define LL_L2I(i, l)        ((i) = (PRInt32)(l))
  ------------------
  291|  5.03k|    *--cvt = hexp[digit & 0xf];
  292|  5.03k|    digits++;
  293|  5.03k|    num = quot;
  294|  5.03k|  }
  295|    454|  if (digits == 0) {
  ------------------
  |  Branch (295:7): [True: 0, False: 454]
  ------------------
  296|      0|    *--cvt = '0';
  297|      0|    digits++;
  298|      0|  }
  299|       |
  300|       |  /*
  301|       |  ** Now that we have the number converted without its sign, deal with
  302|       |  ** the sign and zero padding.
  303|       |  */
  304|    454|  return fill_n(ss, cvt, digits, width, prec, type, flags);
  305|    454|}
prprf.c:cvt_s:
  351|  7.77k|                 int flags) {
  352|  7.77k|  int slen;
  353|       |
  354|  7.77k|  if (prec == 0) {
  ------------------
  |  Branch (354:7): [True: 0, False: 7.77k]
  ------------------
  355|      0|    return 0;
  356|      0|  }
  357|       |
  358|       |  /* Limit string length by precision value */
  359|  7.77k|  if (!str) {
  ------------------
  |  Branch (359:7): [True: 0, False: 7.77k]
  ------------------
  360|      0|    str = "(null)";
  361|      0|  }
  362|  7.77k|  if (prec > 0) {
  ------------------
  |  Branch (362:7): [True: 0, False: 7.77k]
  ------------------
  363|       |    /* this is:  slen = strnlen(str, prec); */
  364|      0|    register const char* s;
  365|       |
  366|      0|    for (s = str; prec && *s; s++, prec--);
  ------------------
  |  Branch (366:19): [True: 0, False: 0]
  |  Branch (366:27): [True: 0, False: 0]
  ------------------
  367|      0|    slen = s - str;
  368|  7.77k|  } else {
  369|  7.77k|    slen = strlen(str);
  370|  7.77k|  }
  371|       |
  372|       |  /* and away we go */
  373|  7.77k|  return fill2(ss, str, slen, width, flags);
  374|  7.77k|}
prprf.c:fill2:
  100|  7.77k|                 int flags) {
  101|  7.77k|  char space = ' ';
  102|  7.77k|  int rv;
  103|       |
  104|  7.77k|  width -= srclen;
  105|  7.77k|  if ((width > 0) && ((flags & FLAG_LEFT) == 0)) { /* Right adjusting */
  ------------------
  |  |   90|      0|#define FLAG_LEFT 0x1
  ------------------
  |  Branch (105:7): [True: 0, False: 7.77k]
  |  Branch (105:22): [True: 0, False: 0]
  ------------------
  106|      0|    if (flags & FLAG_ZEROS) {
  ------------------
  |  |   93|      0|#define FLAG_ZEROS 0x8
  ------------------
  |  Branch (106:9): [True: 0, False: 0]
  ------------------
  107|      0|      space = '0';
  108|      0|    }
  109|      0|    while (--width >= 0) {
  ------------------
  |  Branch (109:12): [True: 0, False: 0]
  ------------------
  110|      0|      rv = (*ss->stuff)(ss, &space, 1);
  111|      0|      if (rv < 0) {
  ------------------
  |  Branch (111:11): [True: 0, False: 0]
  ------------------
  112|      0|        return rv;
  113|      0|      }
  114|      0|    }
  115|      0|  }
  116|       |
  117|       |  /* Copy out the source data */
  118|  7.77k|  rv = (*ss->stuff)(ss, src, srclen);
  119|  7.77k|  if (rv < 0) {
  ------------------
  |  Branch (119:7): [True: 0, False: 7.77k]
  ------------------
  120|      0|    return rv;
  121|      0|  }
  122|       |
  123|  7.77k|  if ((width > 0) && ((flags & FLAG_LEFT) != 0)) { /* Left adjusting */
  ------------------
  |  |   90|      0|#define FLAG_LEFT 0x1
  ------------------
  |  Branch (123:7): [True: 0, False: 7.77k]
  |  Branch (123:22): [True: 0, False: 0]
  ------------------
  124|      0|    while (--width >= 0) {
  ------------------
  |  Branch (124:12): [True: 0, False: 0]
  ------------------
  125|      0|      rv = (*ss->stuff)(ss, &space, 1);
  126|      0|      if (rv < 0) {
  ------------------
  |  Branch (126:11): [True: 0, False: 0]
  ------------------
  127|      0|        return rv;
  128|      0|      }
  129|      0|    }
  130|      0|  }
  131|  7.77k|  return 0;
  132|  7.77k|}
prprf.c:GrowStuff:
 1119|  65.8k|static int GrowStuff(SprintfState* ss, const char* sp, PRUint32 len) {
 1120|  65.8k|  ptrdiff_t off;
 1121|  65.8k|  char* newbase;
 1122|  65.8k|  PRUint32 newlen;
 1123|       |
 1124|  65.8k|  off = ss->cur - ss->base;
 1125|  65.8k|  if (PR_UINT32_MAX - len < off) {
  ------------------
  |  |  302|  65.8k|#define PR_UINT32_MAX PR_UINT32(4294967295)
  |  |  ------------------
  |  |  |  |  282|  65.8k|#define PR_UINT32(x) x ## U
  |  |  ------------------
  ------------------
  |  Branch (1125:7): [True: 0, False: 65.8k]
  ------------------
 1126|       |    /* off + len would be too big. */
 1127|      0|    return -1;
 1128|      0|  }
 1129|  65.8k|  if (off + len >= ss->maxlen) {
  ------------------
  |  Branch (1129:7): [True: 12.5k, False: 53.2k]
  ------------------
 1130|       |    /* Grow the buffer */
 1131|  12.5k|    PRUint32 increment = (len > 32) ? len : 32;
  ------------------
  |  Branch (1131:26): [True: 1.38k, False: 11.1k]
  ------------------
 1132|  12.5k|    if (PR_UINT32_MAX - ss->maxlen < increment) {
  ------------------
  |  |  302|  12.5k|#define PR_UINT32_MAX PR_UINT32(4294967295)
  |  |  ------------------
  |  |  |  |  282|  12.5k|#define PR_UINT32(x) x ## U
  |  |  ------------------
  ------------------
  |  Branch (1132:9): [True: 0, False: 12.5k]
  ------------------
 1133|       |      /* ss->maxlen + increment would overflow. */
 1134|      0|      return -1;
 1135|      0|    }
 1136|  12.5k|    newlen = ss->maxlen + increment;
 1137|  12.5k|    if (newlen > PR_INT32_MAX) {
  ------------------
  |  |  300|  12.5k|#define PR_INT32_MAX PR_INT32(2147483647)
  |  |  ------------------
  |  |  |  |  281|  12.5k|#define PR_INT32(x)  x
  |  |  ------------------
  ------------------
  |  Branch (1137:9): [True: 0, False: 12.5k]
  ------------------
 1138|      0|      return -1;
 1139|      0|    }
 1140|  12.5k|    if (ss->base) {
  ------------------
  |  Branch (1140:9): [True: 1.75k, False: 10.8k]
  ------------------
 1141|  1.75k|      newbase = (char*)PR_REALLOC(ss->base, newlen);
  ------------------
  |  |   77|  1.75k|#define PR_REALLOC(_ptr, _size) (PR_Realloc((_ptr), (_size)))
  ------------------
 1142|  10.8k|    } else {
 1143|  10.8k|      newbase = (char*)PR_MALLOC(newlen);
  ------------------
  |  |   55|  10.8k|#define PR_MALLOC(_bytes) (PR_Malloc((_bytes)))
  ------------------
 1144|  10.8k|    }
 1145|  12.5k|    if (!newbase) {
  ------------------
  |  Branch (1145:9): [True: 0, False: 12.5k]
  ------------------
 1146|       |      /* Ran out of memory */
 1147|      0|      return -1;
 1148|      0|    }
 1149|  12.5k|    ss->base = newbase;
 1150|  12.5k|    ss->maxlen = newlen;
 1151|  12.5k|    ss->cur = ss->base + off;
 1152|  12.5k|  }
 1153|       |
 1154|       |  /* Copy data */
 1155|   305k|  while (len) {
  ------------------
  |  Branch (1155:10): [True: 239k, False: 65.8k]
  ------------------
 1156|   239k|    --len;
 1157|   239k|    *ss->cur++ = *sp++;
 1158|   239k|  }
 1159|  65.8k|  PR_ASSERT((PRUint32)(ss->cur - ss->base) <= ss->maxlen);
  ------------------
  |  |  208|  65.8k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 65.8k, False: 0]
  |  |  ------------------
  ------------------
 1160|  65.8k|  return 0;
 1161|  65.8k|}

_PR_InitLinker:
  104|      1|void _PR_InitLinker(void) {
  105|      1|  PRLibrary* lm = NULL;
  106|      1|#if defined(XP_UNIX)
  107|      1|  void* h;
  108|      1|#endif
  109|       |
  110|      1|  if (!pr_linker_lock) {
  ------------------
  |  Branch (110:7): [True: 1, False: 0]
  ------------------
  111|      1|    pr_linker_lock = PR_NewNamedMonitor("linker-lock");
  112|      1|  }
  113|      1|  PR_EnterMonitor(pr_linker_lock);
  114|       |
  115|       |#if defined(XP_PC)
  116|       |  lm = PR_NEWZAP(PRLibrary);
  117|       |  lm->name = strdup("Executable");
  118|       |  /* A module handle for the executable. */
  119|       |  lm->dlh = GetModuleHandle(NULL);
  120|       |
  121|       |  lm->refCount = 1;
  122|       |  lm->staticTable = NULL;
  123|       |  pr_exe_loadmap = lm;
  124|       |  pr_loadmap = lm;
  125|       |
  126|       |#elif defined(XP_UNIX)
  127|       |#  ifdef HAVE_DLL
  128|      1|#    if defined(USE_DLFCN) && !defined(NO_DLOPEN_NULL)
  129|      1|  h = dlopen(0, RTLD_LAZY);
  130|      1|  if (!h) {
  ------------------
  |  Branch (130:7): [True: 0, False: 1]
  ------------------
  131|      0|    char* error;
  132|       |
  133|      0|    DLLErrorInternal(_MD_ERRNO());
  ------------------
  |  |  314|      0|#define _MD_ERRNO()                 (errno)
  ------------------
  134|      0|    error = (char*)PR_MALLOC(PR_GetErrorTextLength());
  ------------------
  |  |   55|      0|#define PR_MALLOC(_bytes) (PR_Malloc((_bytes)))
  ------------------
  135|      0|    (void)PR_GetErrorText(error);
  136|      0|    fprintf(stderr, "failed to initialize shared libraries [%s]\n", error);
  137|      0|    PR_DELETE(error);
  ------------------
  |  |  110|      0|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
  138|      0|    abort(); /* XXX */
  139|      0|  }
  140|       |#    elif defined(USE_HPSHL)
  141|       |  h = NULL;
  142|       |  /* don't abort with this NULL */
  143|       |#    elif defined(NO_DLOPEN_NULL)
  144|       |  h = NULL; /* XXXX  toshok */ /* XXXX  vlad */
  145|       |#    else
  146|       |#      error no dll strategy
  147|       |#    endif /* USE_DLFCN */
  148|       |
  149|      1|  lm = PR_NEWZAP(PRLibrary);
  ------------------
  |  |   99|      1|#define PR_NEWZAP(_struct) ((_struct*)PR_Calloc(1, sizeof(_struct)))
  ------------------
  150|      1|  if (lm) {
  ------------------
  |  Branch (150:7): [True: 1, False: 0]
  ------------------
  151|      1|    lm->name = strdup("a.out");
  152|      1|    lm->refCount = 1;
  153|      1|    lm->dlh = h;
  154|      1|    lm->staticTable = NULL;
  155|      1|  }
  156|      1|  pr_exe_loadmap = lm;
  157|      1|  pr_loadmap = lm;
  158|      1|#  endif   /* HAVE_DLL */
  159|      1|#endif     /* XP_UNIX */
  160|       |
  161|      1|  if (lm) {
  ------------------
  |  Branch (161:7): [True: 1, False: 0]
  ------------------
  162|      1|    PR_LOG(_pr_linker_lm, PR_LOG_MIN, ("Loaded library %s (init)", lm->name));
  ------------------
  |  |  177|      1|    PR_BEGIN_MACRO             \
  |  |  ------------------
  |  |  |  |  123|      1|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  178|      1|      if (PR_LOG_TEST(_module,_level)) { \
  |  |  ------------------
  |  |  |  |  167|      1|    ((_module)->level >= (_level))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (167:5): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      0|      PR_LogPrint _args;         \
  |  |  180|      0|      }                     \
  |  |  181|      1|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|      1|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|      1|  }
  164|       |
  165|      1|  PR_ExitMonitor(pr_linker_lock);
  166|      1|}

_PR_InitZones:
  140|      1|void _PR_InitZones(void) {
  141|      1|  int i, j;
  142|      1|  char* envp;
  143|      1|  PRBool* sym;
  144|       |
  145|      1|  if ((sym = (PRBool*)pr_FindSymbolInProg("nspr_use_zone_allocator")) != NULL) {
  ------------------
  |  Branch (145:7): [True: 0, False: 1]
  ------------------
  146|      0|    use_zone_allocator = *sym;
  147|      1|  } else if ((envp = getenv("NSPR_USE_ZONE_ALLOCATOR")) != NULL) {
  ------------------
  |  Branch (147:14): [True: 0, False: 1]
  ------------------
  148|      0|    use_zone_allocator = (atoi(envp) == 1);
  149|      0|  }
  150|       |
  151|      1|  if (!use_zone_allocator) {
  ------------------
  |  Branch (151:7): [True: 1, False: 0]
  ------------------
  152|      1|    return;
  153|      1|  }
  154|       |
  155|      0|  for (j = 0; j < THREAD_POOLS; j++) {
  ------------------
  |  |   47|      0|#  define THREAD_POOLS 11 /* prime number for modulus */
  ------------------
  |  Branch (155:15): [True: 0, False: 0]
  ------------------
  156|      0|    for (i = 0; i < MEM_ZONES; i++) {
  ------------------
  |  |   46|      0|#  define MEM_ZONES 7
  ------------------
  |  Branch (156:17): [True: 0, False: 0]
  ------------------
  157|      0|      MemoryZone* mz = &zones[i][j];
  158|      0|      int rv = pthread_mutex_init(&mz->lock, NULL);
  159|      0|      PR_ASSERT(0 == rv);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  160|      0|      if (rv != 0) {
  ------------------
  |  Branch (160:11): [True: 0, False: 0]
  ------------------
  161|      0|        goto loser;
  162|      0|      }
  163|      0|      mz->blockSize = 16 << (2 * i);
  164|      0|    }
  165|      0|  }
  166|      0|  return;
  167|       |
  168|      0|loser:
  169|      0|  _PR_DestroyZones();
  170|      0|  return;
  171|      0|}
PR_Malloc:
  420|   998k|PR_IMPLEMENT(void*) PR_Malloc(PRUint32 size) {
  421|   998k|  if (!_pr_initialized) {
  ------------------
  |  Branch (421:7): [True: 0, False: 998k]
  ------------------
  422|      0|    _PR_ImplicitInitialization();
  423|      0|  }
  424|       |
  425|   998k|  return use_zone_allocator ? pr_ZoneMalloc(size) : malloc(size);
  ------------------
  |  Branch (425:10): [True: 0, False: 998k]
  ------------------
  426|   998k|}
PR_Calloc:
  428|   300k|PR_IMPLEMENT(void*) PR_Calloc(PRUint32 nelem, PRUint32 elsize) {
  429|   300k|  if (!_pr_initialized) {
  ------------------
  |  Branch (429:7): [True: 0, False: 300k]
  ------------------
  430|      0|    _PR_ImplicitInitialization();
  431|      0|  }
  432|       |
  433|   300k|  return use_zone_allocator ? pr_ZoneCalloc(nelem, elsize)
  ------------------
  |  Branch (433:10): [True: 0, False: 300k]
  ------------------
  434|   300k|                            : calloc(nelem, elsize);
  435|   300k|}
PR_Realloc:
  437|  2.14k|PR_IMPLEMENT(void*) PR_Realloc(void* ptr, PRUint32 size) {
  438|  2.14k|  if (!_pr_initialized) {
  ------------------
  |  Branch (438:7): [True: 0, False: 2.14k]
  ------------------
  439|      0|    _PR_ImplicitInitialization();
  440|      0|  }
  441|       |
  442|  2.14k|  return use_zone_allocator ? pr_ZoneRealloc(ptr, size) : realloc(ptr, size);
  ------------------
  |  Branch (442:10): [True: 0, False: 2.14k]
  ------------------
  443|  2.14k|}
PR_Free:
  445|  1.29M|PR_IMPLEMENT(void) PR_Free(void* ptr) {
  446|  1.29M|  if (use_zone_allocator) {
  ------------------
  |  Branch (446:7): [True: 0, False: 1.29M]
  ------------------
  447|      0|    pr_ZoneFree(ptr);
  448|  1.29M|  } else {
  449|  1.29M|    free(ptr);
  450|  1.29M|  }
  451|  1.29M|}
prmem.c:pr_FindSymbolInProg:
   91|      1|static void* pr_FindSymbolInProg(const char* name) {
   92|      1|  void* h;
   93|      1|  void* sym;
   94|       |
   95|      1|  h = dlopen(0, RTLD_LAZY);
   96|      1|  if (h == NULL) {
  ------------------
  |  Branch (96:7): [True: 0, False: 1]
  ------------------
   97|      0|    return NULL;
   98|      0|  }
   99|      1|  sym = dlsym(h, name);
  100|      1|  (void)dlclose(h);
  101|      1|  return sym;
  102|      1|}

PR_GetPageSize:
   59|      1|PR_IMPLEMENT(PRInt32) PR_GetPageSize(void) {
   60|      1|  if (!_pr_pageSize) {
  ------------------
  |  Branch (60:7): [True: 1, False: 0]
  ------------------
   61|      1|    GetPageSize();
   62|      1|  }
   63|      1|  return _pr_pageSize;
   64|      1|}
prosdep.c:GetPageSize:
   22|      1|static void GetPageSize(void) {
   23|      1|  PRInt32 pageSize;
   24|       |
   25|       |  /* Get page size */
   26|      1|#ifdef XP_UNIX
   27|      1|#  if defined AIX || defined LINUX || defined __GNU__ || defined __GLIBC__ || \
   28|      1|      defined FREEBSD || defined NETBSD || defined OPENBSD || defined DARWIN
   29|      1|  _pr_pageSize = getpagesize();
   30|       |#  elif defined(HPUX)
   31|       |  /* I have no idea. Don't get me started. --Rob */
   32|       |  _pr_pageSize = sysconf(_SC_PAGE_SIZE);
   33|       |#  else
   34|       |  _pr_pageSize = sysconf(_SC_PAGESIZE);
   35|       |#  endif
   36|      1|#endif /* XP_UNIX */
   37|       |
   38|       |#ifdef XP_PC
   39|       |#  ifdef _WIN32
   40|       |  SYSTEM_INFO info;
   41|       |  GetSystemInfo(&info);
   42|       |  _pr_pageSize = info.dwPageSize;
   43|       |#  else
   44|       |  _pr_pageSize = 4096;
   45|       |#  endif
   46|       |#endif /* XP_PC */
   47|       |
   48|      1|  pageSize = _pr_pageSize;
   49|      1|  PR_CEILING_LOG2(_pr_pageShift, pageSize);
  ------------------
  |  |   72|      1|  PR_BEGIN_MACRO                       \
  |  |  ------------------
  |  |  |  |  123|      1|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |   73|      1|    PRUint32 j_ = (PRUint32)(_n);      \
  |  |   74|      1|    (_log2) = (j_ <= 1 ? 0 : 32 - pr_bitscan_clz32(j_ - 1)); \
  |  |  ------------------
  |  |  |  |   40|      1|# define pr_bitscan_clz32(val)  __builtin_clz(val)
  |  |  ------------------
  |  |  |  Branch (74:16): [True: 0, False: 1]
  |  |  ------------------
  |  |   75|      1|  PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|      1|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   50|      1|}

_MD_EarlyInit:
    8|      1|void _MD_EarlyInit(void) {}

_PR_UnixInit:
 2585|      1|void _PR_UnixInit(void) {
 2586|      1|  struct sigaction sigact;
 2587|      1|  int rv;
 2588|       |
 2589|      1|  sigemptyset(&timer_set);
 2590|       |
 2591|       |#if !defined(_PR_PTHREADS)
 2592|       |
 2593|       |  sigaddset(&timer_set, SIGALRM);
 2594|       |  sigemptyset(&empty_set);
 2595|       |  intr_timeout_ticks = PR_SecondsToInterval(_PR_INTERRUPT_CHECK_INTERVAL_SECS);
 2596|       |
 2597|       |#  if defined(SOLARIS)
 2598|       |
 2599|       |  if (getenv("NSPR_SIGSEGV_HANDLE")) {
 2600|       |    sigact.sa_handler = sigsegvhandler;
 2601|       |    sigact.sa_flags = 0;
 2602|       |    sigact.sa_mask = timer_set;
 2603|       |    sigaction(SIGSEGV, &sigact, 0);
 2604|       |  }
 2605|       |
 2606|       |  if (getenv("NSPR_SIGABRT_HANDLE")) {
 2607|       |    sigact.sa_handler = sigaborthandler;
 2608|       |    sigact.sa_flags = 0;
 2609|       |    sigact.sa_mask = timer_set;
 2610|       |    sigaction(SIGABRT, &sigact, 0);
 2611|       |  }
 2612|       |
 2613|       |  if (getenv("NSPR_SIGBUS_HANDLE")) {
 2614|       |    sigact.sa_handler = sigbushandler;
 2615|       |    sigact.sa_flags = 0;
 2616|       |    sigact.sa_mask = timer_set;
 2617|       |    sigaction(SIGBUS, &sigact, 0);
 2618|       |  }
 2619|       |
 2620|       |#  endif
 2621|       |#endif /* !defined(_PR_PTHREADS) */
 2622|       |
 2623|      1|  sigact.sa_handler = SIG_IGN;
 2624|      1|  sigemptyset(&sigact.sa_mask);
 2625|      1|  sigact.sa_flags = 0;
 2626|      1|  rv = sigaction(SIGPIPE, &sigact, 0);
 2627|      1|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 2628|       |
 2629|      1|  _pr_unix_rename_lock = PR_NewLock();
 2630|      1|  PR_ASSERT(NULL != _pr_unix_rename_lock);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 2631|      1|  _pr_Xfe_mon = PR_NewMonitor();
 2632|      1|  PR_ASSERT(NULL != _pr_Xfe_mon);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 2633|       |
 2634|      1|  _PR_InitIOV(); /* one last hack */
 2635|      1|}
PR_Now:
 2749|  5.84k|PR_Now(void) {
 2750|  5.84k|  struct timeval tv;
 2751|  5.84k|  PRInt64 s, us, s2us;
 2752|       |
 2753|  5.84k|  GETTIMEOFDAY(&tv);
  ------------------
  |  |  506|  5.84k|#define GETTIMEOFDAY(tp) gettimeofday((tp), NULL)
  ------------------
 2754|  5.84k|  LL_I2L(s2us, PR_USEC_PER_SEC);
  ------------------
  |  |  149|  5.84k|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
 2755|  5.84k|  LL_I2L(s, tv.tv_sec);
  ------------------
  |  |  149|  5.84k|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
 2756|  5.84k|  LL_I2L(us, tv.tv_usec);
  ------------------
  |  |  149|  5.84k|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
 2757|  5.84k|  LL_MUL(s, s, s2us);
  ------------------
  |  |  115|  5.84k|#define LL_MUL(r, a, b)        ((r) = (a) * (b))
  ------------------
 2758|  5.84k|  LL_ADD(s, s, us);
  ------------------
  |  |  105|  5.84k|#define LL_ADD(r, a, b)     ((r) = (a) + (b))
  ------------------
 2759|  5.84k|  return s;
 2760|  5.84k|}
_PR_UNIX_TicksPerSecond2:
 2799|      2|PRIntervalTime _PR_UNIX_TicksPerSecond2() { return 1000; }
unix.c:_PR_InitIOV:
 2526|      1|static void _PR_InitIOV(void) {
 2527|       |#if defined(SOLARIS2_5)
 2528|       |  PRLibrary* lib;
 2529|       |  void* open64_func;
 2530|       |
 2531|       |  open64_func = PR_FindSymbolAndLibrary("open64", &lib);
 2532|       |  if (NULL != open64_func) {
 2533|       |    PR_ASSERT(NULL != lib);
 2534|       |    _md_iovector._open64 = (_MD_Open64)open64_func;
 2535|       |    _md_iovector._mmap64 = (_MD_Mmap64)PR_FindSymbol(lib, "mmap64");
 2536|       |    _md_iovector._fstat64 = (_MD_Fstat64)PR_FindSymbol(lib, "fstat64");
 2537|       |    _md_iovector._stat64 = (_MD_Stat64)PR_FindSymbol(lib, "stat64");
 2538|       |    _md_iovector._lseek64 = (_MD_Lseek64)PR_FindSymbol(lib, "lseek64");
 2539|       |    (void)PR_UnloadLibrary(lib);
 2540|       |  } else {
 2541|       |    _md_iovector._open64 = open;
 2542|       |    _md_iovector._mmap64 = _MD_Unix_mmap64;
 2543|       |    _md_iovector._fstat64 = _MD_solaris25_fstat64;
 2544|       |    _md_iovector._stat64 = _MD_solaris25_stat64;
 2545|       |    _md_iovector._lseek64 = _MD_Unix_lseek64;
 2546|       |  }
 2547|       |#elif defined(_PR_NO_LARGE_FILES)
 2548|       |  _md_iovector._open64 = open;
 2549|       |  _md_iovector._mmap64 = _MD_Unix_mmap64;
 2550|       |  _md_iovector._fstat64 = fstat;
 2551|       |  _md_iovector._stat64 = stat;
 2552|       |  _md_iovector._lseek64 = _MD_Unix_lseek64;
 2553|       |#elif defined(_PR_HAVE_OFF64_T)
 2554|       |#  if (defined(ANDROID) && __ANDROID_API__ < 21)
 2555|       |  /*
 2556|       |   * Android < 21 doesn't have open64.  We pass the O_LARGEFILE flag to open
 2557|       |   * in _MD_open.
 2558|       |   */
 2559|       |  _md_iovector._open64 = open;
 2560|       |#  else
 2561|      1|  _md_iovector._open64 = open64;
 2562|      1|#  endif
 2563|      1|  _md_iovector._mmap64 = mmap64;
 2564|       |#  if (defined(ANDROID) && __ANDROID_API__ < 21)
 2565|       |  /* Same as the open64 case for Android. */
 2566|       |  _md_iovector._fstat64 = (_MD_Fstat64)fstat;
 2567|       |  _md_iovector._stat64 = (_MD_Stat64)stat;
 2568|       |#  else
 2569|      1|  _md_iovector._fstat64 = fstat64;
 2570|      1|  _md_iovector._stat64 = stat64;
 2571|      1|#  endif
 2572|      1|  _md_iovector._lseek64 = lseek64;
 2573|       |#elif defined(_PR_HAVE_LARGE_OFF_T)
 2574|       |  _md_iovector._open64 = open;
 2575|       |  _md_iovector._mmap64 = mmap;
 2576|       |  _md_iovector._fstat64 = fstat;
 2577|       |  _md_iovector._stat64 = stat;
 2578|       |  _md_iovector._lseek64 = lseek;
 2579|       |#else
 2580|       |#  error "I don't know yet"
 2581|       |#endif
 2582|      1|  LL_I2L(minus_one, -1);
  ------------------
  |  |  149|      1|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
 2583|      1|} /* _PR_InitIOV */

_PR_InitSegs:
   13|      1|void _PR_InitSegs(void) {}

_PR_InitAtomic:
  243|      1|void _PR_InitAtomic(void) { _PR_MD_INIT_ATOMIC(); }

pr_inet_aton:
   99|  5.60k|int pr_inet_aton(const char* cp, PRUint32* addr) {
  100|  5.60k|  PRUint32 val;
  101|  5.60k|  int base, n;
  102|  5.60k|  char c;
  103|  5.60k|  PRUint8 parts[4];
  104|  5.60k|  PRUint8* pp = parts;
  105|  5.60k|  int digit;
  106|       |
  107|  5.60k|  c = *cp;
  108|  5.60k|  for (;;) {
  109|       |    /*
  110|       |     * Collect number up to ``.''.
  111|       |     * Values are specified as for C:
  112|       |     * 0x=hex, 0=octal, isdigit=decimal.
  113|       |     */
  114|  5.60k|    if (!_isdigit(c)) {
  ------------------
  |  Branch (114:9): [True: 5.60k, False: 0]
  ------------------
  115|  5.60k|      return (0);
  116|  5.60k|    }
  117|      0|    val = 0;
  118|      0|    base = 10;
  119|      0|    digit = 0;
  120|      0|    if (c == '0') {
  ------------------
  |  Branch (120:9): [True: 0, False: 0]
  ------------------
  121|      0|      c = *++cp;
  122|      0|      if (c == 'x' || c == 'X') {
  ------------------
  |  Branch (122:11): [True: 0, False: 0]
  |  Branch (122:23): [True: 0, False: 0]
  ------------------
  123|      0|        base = 16, c = *++cp;
  124|      0|      } else {
  125|      0|        base = 8;
  126|      0|        digit = 1;
  127|      0|      }
  128|      0|    }
  129|      0|    for (;;) {
  130|      0|      if (_isdigit(c)) {
  ------------------
  |  Branch (130:11): [True: 0, False: 0]
  ------------------
  131|      0|        if (base == 8 && (c == '8' || c == '9')) {
  ------------------
  |  Branch (131:13): [True: 0, False: 0]
  |  Branch (131:27): [True: 0, False: 0]
  |  Branch (131:39): [True: 0, False: 0]
  ------------------
  132|      0|          return (0);
  133|      0|        }
  134|      0|        val = (val * base) + (c - '0');
  135|      0|        c = *++cp;
  136|      0|        digit = 1;
  137|      0|      } else if (base == 16 && _isxdigit(c)) {
  ------------------
  |  Branch (137:18): [True: 0, False: 0]
  |  Branch (137:32): [True: 0, False: 0]
  ------------------
  138|      0|        val = (val << 4) + index_hex[(unsigned char)c];
  139|      0|        c = *++cp;
  140|      0|        digit = 1;
  141|      0|      } else {
  142|      0|        break;
  143|      0|      }
  144|      0|    }
  145|      0|    if (c == '.') {
  ------------------
  |  Branch (145:9): [True: 0, False: 0]
  ------------------
  146|       |      /*
  147|       |       * Internet format:
  148|       |       *    a.b.c.d
  149|       |       *    a.b.c    (with c treated as 16 bits)
  150|       |       *    a.b    (with b treated as 24 bits)
  151|       |       */
  152|      0|      if (pp >= parts + 3 || val > 0xffU) {
  ------------------
  |  Branch (152:11): [True: 0, False: 0]
  |  Branch (152:30): [True: 0, False: 0]
  ------------------
  153|      0|        return (0);
  154|      0|      }
  155|      0|      *pp++ = val;
  156|      0|      c = *++cp;
  157|      0|    } else {
  158|      0|      break;
  159|      0|    }
  160|      0|  }
  161|       |  /*
  162|       |   * Check for trailing characters.
  163|       |   */
  164|      0|  if (c != '\0' && !_isspace(c)) {
  ------------------
  |  Branch (164:7): [True: 0, False: 0]
  |  Branch (164:20): [True: 0, False: 0]
  ------------------
  165|      0|    return (0);
  166|      0|  }
  167|       |  /*
  168|       |   * Did we get a valid digit?
  169|       |   */
  170|      0|  if (!digit) {
  ------------------
  |  Branch (170:7): [True: 0, False: 0]
  ------------------
  171|      0|    return (0);
  172|      0|  }
  173|       |  /*
  174|       |   * Concoct the address according to
  175|       |   * the number of parts specified.
  176|       |   */
  177|      0|  n = pp - parts + 1;
  178|      0|  switch (n) {
  ------------------
  |  Branch (178:11): [True: 0, False: 0]
  ------------------
  179|      0|    case 1: /*%< a -- 32 bits */
  ------------------
  |  Branch (179:5): [True: 0, False: 0]
  ------------------
  180|      0|      break;
  181|       |
  182|      0|    case 2: /*%< a.b -- 8.24 bits */
  ------------------
  |  Branch (182:5): [True: 0, False: 0]
  ------------------
  183|      0|      if (val > 0xffffffU) {
  ------------------
  |  Branch (183:11): [True: 0, False: 0]
  ------------------
  184|      0|        return (0);
  185|      0|      }
  186|      0|      val |= (unsigned int)parts[0] << 24;
  187|      0|      break;
  188|       |
  189|      0|    case 3: /*%< a.b.c -- 8.8.16 bits */
  ------------------
  |  Branch (189:5): [True: 0, False: 0]
  ------------------
  190|      0|      if (val > 0xffffU) {
  ------------------
  |  Branch (190:11): [True: 0, False: 0]
  ------------------
  191|      0|        return (0);
  192|      0|      }
  193|      0|      val |= ((unsigned int)parts[0] << 24) | ((unsigned int)parts[1] << 16);
  194|      0|      break;
  195|       |
  196|      0|    case 4: /*%< a.b.c.d -- 8.8.8.8 bits */
  ------------------
  |  Branch (196:5): [True: 0, False: 0]
  ------------------
  197|      0|      if (val > 0xffU) {
  ------------------
  |  Branch (197:11): [True: 0, False: 0]
  ------------------
  198|      0|        return (0);
  199|      0|      }
  200|      0|      val |= ((unsigned int)parts[0] << 24) | ((unsigned int)parts[1] << 16) |
  201|      0|             ((unsigned int)parts[2] << 8);
  202|      0|      break;
  203|      0|  }
  204|      0|  *addr = PR_htonl(val);
  205|      0|  return (1);
  206|      0|}
praton.c:_isdigit:
   94|  5.60k|static PRBool _isdigit(char c) { return c >= '0' && c <= '9'; }
  ------------------
  |  Branch (94:41): [True: 5.60k, False: 0]
  |  Branch (94:53): [True: 0, False: 5.60k]
  ------------------

_PR_InitDtoa:
   25|      1|void _PR_InitDtoa(void) {
   26|      1|  dtoa_lock[0] = PR_NewLock();
   27|      1|  dtoa_lock[1] = PR_NewLock();
   28|      1|}

_PR_InitEnv:
   65|      1|void _PR_InitEnv(void) { _PR_NEW_LOCK_ENV(); }
  ------------------
  |  |   45|      1|    { _pr_envLock = PR_NewLock(); }
  ------------------
PR_GetEnv:
   69|     14|PR_IMPLEMENT(char*) PR_GetEnv(const char* var) {
   70|     14|  char* ev;
   71|       |
   72|     14|  if (!_pr_initialized) {
  ------------------
  |  Branch (72:7): [True: 0, False: 14]
  ------------------
   73|      0|    _PR_ImplicitInitialization();
   74|      0|  }
   75|       |
   76|     14|  _PR_LOCK_ENV();
  ------------------
  |  |   54|     14|    {                                        \
  |  |   55|     14|      if (_pr_envLock) PR_Lock(_pr_envLock); \
  |  |  ------------------
  |  |  |  Branch (55:11): [True: 3, False: 11]
  |  |  ------------------
  |  |   56|     14|    }
  ------------------
   77|     14|  ev = _PR_MD_GET_ENV(var);
  ------------------
  |  | 1923|     14|#define    _PR_MD_GET_ENV _MD_GET_ENV
  |  |  ------------------
  |  |  |  |  266|     14|#define _MD_GET_ENV             getenv
  |  |  ------------------
  ------------------
   78|     14|  _PR_UNLOCK_ENV();
  ------------------
  |  |   58|     14|    {                                          \
  |  |   59|     14|      if (_pr_envLock) PR_Unlock(_pr_envLock); \
  |  |  ------------------
  |  |  |  Branch (59:11): [True: 3, False: 11]
  |  |  ------------------
  |  |   60|     14|    }
  ------------------
   79|     14|  return ev;
   80|     14|}
PR_GetEnvSecure:
   82|  9.26k|PR_IMPLEMENT(char*) PR_GetEnvSecure(const char* var) {
   83|  9.26k|#ifdef HAVE_SECURE_GETENV
   84|  9.26k|  char* ev;
   85|       |
   86|  9.26k|  if (!_pr_initialized) {
  ------------------
  |  Branch (86:7): [True: 0, False: 9.26k]
  ------------------
   87|      0|    _PR_ImplicitInitialization();
   88|      0|  }
   89|       |
   90|  9.26k|  _PR_LOCK_ENV();
  ------------------
  |  |   54|  9.26k|    {                                        \
  |  |   55|  9.26k|      if (_pr_envLock) PR_Lock(_pr_envLock); \
  |  |  ------------------
  |  |  |  Branch (55:11): [True: 9.26k, False: 0]
  |  |  ------------------
  |  |   56|  9.26k|    }
  ------------------
   91|  9.26k|  ev = secure_getenv(var);
   92|  9.26k|  _PR_UNLOCK_ENV();
  ------------------
  |  |   58|  9.26k|    {                                          \
  |  |   59|  9.26k|      if (_pr_envLock) PR_Unlock(_pr_envLock); \
  |  |  ------------------
  |  |  |  Branch (59:11): [True: 9.26k, False: 0]
  |  |  ------------------
  |  |   60|  9.26k|    }
  ------------------
   93|       |
   94|  9.26k|  return ev;
   95|       |#else
   96|       |#  ifdef XP_UNIX
   97|       |  /*
   98|       |  ** Fall back to checking uids and gids.  This won't detect any other
   99|       |  ** privilege-granting mechanisms the platform may have.  This also
  100|       |  ** can't detect the case where the process already called
  101|       |  ** setuid(geteuid()) and/or setgid(getegid()).
  102|       |  */
  103|       |  if (getuid() != geteuid() || getgid() != getegid()) {
  104|       |    return NULL;
  105|       |  }
  106|       |#  endif /* XP_UNIX */
  107|       |  return PR_GetEnv(var);
  108|       |#endif   /* HAVE_SECURE_GETENV */
  109|  9.26k|}

nspr_InitializePRErrorTable:
  120|      1|void nspr_InitializePRErrorTable(void) { PR_ErrorInstallTable(&et); }

PR_GetError:
   11|  20.0k|PR_IMPLEMENT(PRErrorCode) PR_GetError(void) {
   12|  20.0k|  PRThread* thread = PR_GetCurrentThread();
   13|  20.0k|  return thread->errorCode;
   14|  20.0k|}
PR_SetError:
   21|   161k|PR_IMPLEMENT(void) PR_SetError(PRErrorCode code, PRInt32 osErr) {
   22|   161k|  PRThread* thread = PR_GetCurrentThread();
   23|   161k|  thread->errorCode = code;
   24|   161k|  thread->osErrorCode = osErr;
   25|   161k|  thread->errorStringLength = 0;
   26|   161k|}

PR_ErrorInstallTable:
  154|      2|PR_ErrorInstallTable(const struct PRErrorTable* table) {
  155|      2|  struct PRErrorTableList* new_et;
  156|       |
  157|      2|  new_et = (struct PRErrorTableList*)PR_Malloc(sizeof(struct PRErrorTableList));
  158|      2|  if (!new_et) {
  ------------------
  |  Branch (158:7): [True: 0, False: 2]
  ------------------
  159|      0|    return errno; /* oops */
  160|      0|  }
  161|      2|  new_et->table = table;
  162|      2|  if (callback_newtable) {
  ------------------
  |  Branch (162:7): [True: 0, False: 2]
  ------------------
  163|      0|    new_et->table_private = callback_newtable(table, callback_private);
  164|      2|  } else {
  165|      2|    new_et->table_private = 0;
  166|      2|  }
  167|      2|  new_et->next = Table_List;
  168|      2|  Table_List = new_et;
  169|      2|  return 0;
  170|      2|}

_PR_ImplicitInitialization:
  200|      1|void _PR_ImplicitInitialization(void) {
  201|      1|  _PR_InitStuff();
  202|       |
  203|       |  /* Enable interrupts */
  204|       |#if !defined(_PR_PTHREADS) && !defined(_PR_GLOBAL_THREADS_ONLY)
  205|       |  _PR_MD_START_INTERRUPTS();
  206|       |#endif
  207|      1|}
PR_CallOnce:
  706|   118k|PR_IMPLEMENT(PRStatus) PR_CallOnce(PRCallOnceType* once, PRCallOnceFN func) {
  707|   118k|  if (!_pr_initialized) {
  ------------------
  |  Branch (707:7): [True: 1, False: 118k]
  ------------------
  708|      1|    _PR_ImplicitInitialization();
  709|      1|  }
  710|       |
  711|   118k|  PR_Lock(mod_init.ml);
  712|   118k|  PRIntn initialized = once->initialized;
  713|   118k|  PRStatus status = once->status;
  714|   118k|  PR_Unlock(mod_init.ml);
  715|   118k|  if (!initialized) {
  ------------------
  |  Branch (715:7): [True: 7, False: 118k]
  ------------------
  716|      7|    if (PR_ATOMIC_SET(&once->inProgress, 1) == 0) {
  ------------------
  |  |  124|      7|#define PR_ATOMIC_SET(val, newval) __sync_lock_test_and_set(val, newval)
  ------------------
  |  Branch (716:9): [True: 7, False: 0]
  ------------------
  717|      7|      status = (*func)();
  718|      7|      PR_Lock(mod_init.ml);
  719|      7|      once->status = status;
  720|      7|      once->initialized = 1;
  721|      7|      PR_NotifyAllCondVar(mod_init.cv);
  722|      7|      PR_Unlock(mod_init.ml);
  723|      7|    } else {
  724|      0|      PR_Lock(mod_init.ml);
  725|      0|      while (!once->initialized) {
  ------------------
  |  Branch (725:14): [True: 0, False: 0]
  ------------------
  726|      0|        PR_WaitCondVar(mod_init.cv, PR_INTERVAL_NO_TIMEOUT);
  ------------------
  |  |   54|      0|#define PR_INTERVAL_NO_TIMEOUT 0xffffffffUL
  ------------------
  727|      0|      }
  728|      0|      status = once->status;
  729|      0|      PR_Unlock(mod_init.ml);
  730|      0|      if (PR_SUCCESS != status) {
  ------------------
  |  Branch (730:11): [True: 0, False: 0]
  ------------------
  731|      0|        PR_SetError(PR_CALL_ONCE_ERROR, 0);
  ------------------
  |  |  241|      0|#define PR_CALL_ONCE_ERROR                       (-5925L)
  ------------------
  732|      0|      }
  733|      0|    }
  734|      7|    return status;
  735|      7|  }
  736|   118k|  if (PR_SUCCESS != status) {
  ------------------
  |  Branch (736:7): [True: 0, False: 118k]
  ------------------
  737|      0|    PR_SetError(PR_CALL_ONCE_ERROR, 0);
  ------------------
  |  |  241|      0|#define PR_CALL_ONCE_ERROR                       (-5925L)
  ------------------
  738|      0|  }
  739|   118k|  return status;
  740|   118k|}
PR_CallOnceWithArg:
  743|  51.6k|PR_CallOnceWithArg(PRCallOnceType* once, PRCallOnceWithArgFN func, void* arg) {
  744|  51.6k|  if (!_pr_initialized) {
  ------------------
  |  Branch (744:7): [True: 0, False: 51.6k]
  ------------------
  745|      0|    _PR_ImplicitInitialization();
  746|      0|  }
  747|       |
  748|  51.6k|  PR_Lock(mod_init.ml);
  749|  51.6k|  PRIntn initialized = once->initialized;
  750|  51.6k|  PRStatus status = once->status;
  751|  51.6k|  PR_Unlock(mod_init.ml);
  752|  51.6k|  if (!initialized) {
  ------------------
  |  Branch (752:7): [True: 1, False: 51.6k]
  ------------------
  753|      1|    if (PR_ATOMIC_SET(&once->inProgress, 1) == 0) {
  ------------------
  |  |  124|      1|#define PR_ATOMIC_SET(val, newval) __sync_lock_test_and_set(val, newval)
  ------------------
  |  Branch (753:9): [True: 1, False: 0]
  ------------------
  754|      1|      status = (*func)(arg);
  755|      1|      PR_Lock(mod_init.ml);
  756|      1|      once->status = status;
  757|      1|      once->initialized = 1;
  758|      1|      PR_NotifyAllCondVar(mod_init.cv);
  759|      1|      PR_Unlock(mod_init.ml);
  760|      1|    } else {
  761|      0|      PR_Lock(mod_init.ml);
  762|      0|      while (!once->initialized) {
  ------------------
  |  Branch (762:14): [True: 0, False: 0]
  ------------------
  763|      0|        PR_WaitCondVar(mod_init.cv, PR_INTERVAL_NO_TIMEOUT);
  ------------------
  |  |   54|      0|#define PR_INTERVAL_NO_TIMEOUT 0xffffffffUL
  ------------------
  764|      0|      }
  765|      0|      status = once->status;
  766|      0|      PR_Unlock(mod_init.ml);
  767|      0|      if (PR_SUCCESS != status) {
  ------------------
  |  Branch (767:11): [True: 0, False: 0]
  ------------------
  768|      0|        PR_SetError(PR_CALL_ONCE_ERROR, 0);
  ------------------
  |  |  241|      0|#define PR_CALL_ONCE_ERROR                       (-5925L)
  ------------------
  769|      0|      }
  770|      0|    }
  771|      1|    return status;
  772|      1|  }
  773|  51.6k|  if (PR_SUCCESS != status) {
  ------------------
  |  Branch (773:7): [True: 0, False: 51.6k]
  ------------------
  774|      0|    PR_SetError(PR_CALL_ONCE_ERROR, 0);
  ------------------
  |  |  241|      0|#define PR_CALL_ONCE_ERROR                       (-5925L)
  ------------------
  775|      0|  }
  776|  51.6k|  return status;
  777|  51.6k|}
prinit.c:_PR_InitStuff:
  129|      1|static void _PR_InitStuff(void) {
  130|      1|  if (_pr_initialized) {
  ------------------
  |  Branch (130:7): [True: 0, False: 1]
  ------------------
  131|      0|    return;
  132|      0|  }
  133|      1|  _pr_initialized = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  134|      1|#ifdef _PR_ZONE_ALLOCATOR
  135|      1|  _PR_InitZones();
  136|      1|#endif
  137|       |#ifdef WINNT
  138|       |  _pr_SetNativeThreadsOnlyMode();
  139|       |#endif
  140|       |
  141|      1|  (void)PR_GetPageSize();
  142|       |
  143|      1|  _pr_clock_lm = PR_NewLogModule("clock");
  144|      1|  _pr_cmon_lm = PR_NewLogModule("cmon");
  145|      1|  _pr_io_lm = PR_NewLogModule("io");
  146|      1|  _pr_mon_lm = PR_NewLogModule("mon");
  147|      1|  _pr_linker_lm = PR_NewLogModule("linker");
  148|      1|  _pr_cvar_lm = PR_NewLogModule("cvar");
  149|      1|  _pr_sched_lm = PR_NewLogModule("sched");
  150|      1|  _pr_thread_lm = PR_NewLogModule("thread");
  151|      1|  _pr_gc_lm = PR_NewLogModule("gc");
  152|      1|  _pr_shm_lm = PR_NewLogModule("shm");
  153|      1|  _pr_shma_lm = PR_NewLogModule("shma");
  154|       |
  155|       |  /* NOTE: These init's cannot depend on _PR_MD_CURRENT_THREAD() */
  156|      1|  _PR_MD_EARLY_INIT();
  ------------------
  |  | 1888|      1|#define    _PR_MD_EARLY_INIT _MD_EARLY_INIT
  |  |  ------------------
  |  |  |  |  712|      1|#define _MD_EARLY_INIT                  _MD_EarlyInit
  |  |  ------------------
  ------------------
  157|       |
  158|      1|  _PR_InitLocks();
  159|      1|  _PR_InitAtomic();
  160|      1|  _PR_InitSegs();
  161|      1|  _PR_InitStacks();
  162|      1|  _PR_InitTPD();
  163|      1|  _PR_InitEnv();
  164|      1|  _PR_InitLayerCache();
  165|      1|  _PR_InitClock();
  166|       |
  167|      1|  _pr_sleeplock = PR_NewLock();
  168|      1|  PR_ASSERT(NULL != _pr_sleeplock);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  169|       |
  170|      1|  _PR_InitThreads(PR_USER_THREAD, PR_PRIORITY_NORMAL, 0);
  171|       |
  172|      1|#ifndef _PR_GLOBAL_THREADS_ONLY
  173|      1|  _PR_InitCPUs();
  174|      1|#endif
  175|       |
  176|       |  /*
  177|       |   * XXX: call _PR_InitMem only on those platforms for which nspr implements
  178|       |   *  malloc, for now.
  179|       |   */
  180|       |#ifdef _PR_OVERRIDE_MALLOC
  181|       |  _PR_InitMem();
  182|       |#endif
  183|       |
  184|      1|  _PR_InitCMon();
  185|      1|  _PR_InitIO();
  186|      1|  _PR_InitNet();
  187|      1|  _PR_InitTime();
  188|      1|  _PR_InitLog();
  189|      1|  _PR_InitLinker();
  190|      1|  _PR_InitCallOnce();
  191|      1|  _PR_InitDtoa();
  192|      1|  _PR_InitMW();
  193|      1|  _PR_InitRWLocks();
  194|       |
  195|      1|  nspr_InitializePRErrorTable();
  196|       |
  197|      1|  _PR_MD_FINAL_INIT();
  ------------------
  |  | 1894|      1|#define    _PR_MD_FINAL_INIT _MD_FINAL_INIT
  |  |  ------------------
  |  |  |  |  713|      1|#define _MD_FINAL_INIT                  _PR_UnixInit
  |  |  ------------------
  ------------------
  198|      1|}
prinit.c:_PR_InitCallOnce:
  692|      1|static void _PR_InitCallOnce(void) {
  693|      1|  mod_init.ml = PR_NewLock();
  694|      1|  PR_ASSERT(NULL != mod_init.ml);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  695|      1|  mod_init.cv = PR_NewCondVar(mod_init.ml);
  696|      1|  PR_ASSERT(NULL != mod_init.cv);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  697|      1|}

_PR_InitClock:
   22|      1|void _PR_InitClock(void) {
   23|      1|  _PR_MD_INTERVAL_INIT();
   24|      1|#ifdef DEBUG
   25|      1|  {
   26|      1|    PRIntervalTime ticksPerSec = PR_TicksPerSecond();
   27|       |
   28|      1|    PR_ASSERT(ticksPerSec >= PR_INTERVAL_MIN);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
   29|      1|    PR_ASSERT(ticksPerSec <= PR_INTERVAL_MAX);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
   30|      1|  }
   31|      1|#endif /* DEBUG */
   32|      1|}
PR_TicksPerSecond:
   41|      2|PR_EXTERN(PRUint32) PR_TicksPerSecond(void) {
   42|      2|  if (!_pr_initialized) {
  ------------------
  |  Branch (42:7): [True: 0, False: 2]
  ------------------
   43|      0|    _PR_ImplicitInitialization();
   44|      0|  }
   45|      2|  return _PR_MD_INTERVAL_PER_SEC();
  ------------------
  |  | 1966|      2|#define _PR_MD_INTERVAL_PER_SEC _MD_INTERVAL_PER_SEC
  |  |  ------------------
  |  |  |  |  306|      2|#define _MD_INTERVAL_PER_SEC        _PR_UNIX_TicksPerSecond2
  |  |  ------------------
  ------------------
   46|      2|} /* PR_TicksPerSecond */
PR_MillisecondsToInterval:
   52|      1|PR_IMPLEMENT(PRIntervalTime) PR_MillisecondsToInterval(PRUint32 milli) {
   53|      1|  PRIntervalTime ticks;
   54|      1|  PRUint64 tock, tps, msecPerSec, rounding;
   55|      1|  LL_UI2L(tock, milli);
  ------------------
  |  |  150|      1|#define LL_UI2L(l, ui)        ((l) = (PRInt64)(ui))
  ------------------
   56|      1|  LL_I2L(msecPerSec, PR_MSEC_PER_SEC);
  ------------------
  |  |  149|      1|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
   57|      1|  LL_I2L(rounding, (PR_MSEC_PER_SEC >> 1));
  ------------------
  |  |  149|      1|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
   58|      1|  LL_I2L(tps, PR_TicksPerSecond());
  ------------------
  |  |  149|      1|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
   59|      1|  LL_MUL(tock, tock, tps);
  ------------------
  |  |  115|      1|#define LL_MUL(r, a, b)        ((r) = (a) * (b))
  ------------------
   60|      1|  LL_ADD(tock, tock, rounding);
  ------------------
  |  |  105|      1|#define LL_ADD(r, a, b)     ((r) = (a) + (b))
  ------------------
   61|      1|  LL_DIV(tock, tock, msecPerSec);
  ------------------
  |  |  116|      1|#define LL_DIV(r, a, b)        ((r) = (a) / (b))
  ------------------
   62|      1|  LL_L2UI(ticks, tock);
  ------------------
  |  |  145|      1|#define LL_L2UI(ui, l)        ((ui) = (PRUint32)(l))
  ------------------
   63|      1|  return ticks;
   64|      1|} /* PR_MillisecondsToInterval */

PR_CeilingLog2:
   11|      7|PR_IMPLEMENT(PRIntn) PR_CeilingLog2(PRUint32 n) {
   12|      7|  PRIntn log2;
   13|      7|  PR_CEILING_LOG2(log2, n);
  ------------------
  |  |   72|      7|  PR_BEGIN_MACRO                       \
  |  |  ------------------
  |  |  |  |  123|      7|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |   73|      7|    PRUint32 j_ = (PRUint32)(_n);      \
  |  |   74|      7|    (_log2) = (j_ <= 1 ? 0 : 32 - pr_bitscan_clz32(j_ - 1)); \
  |  |  ------------------
  |  |  |  |   40|      7|# define pr_bitscan_clz32(val)  __builtin_clz(val)
  |  |  ------------------
  |  |  |  Branch (74:16): [True: 0, False: 7]
  |  |  ------------------
  |  |   75|      7|  PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|      7|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   14|      7|  return log2;
   15|      7|}

_PR_InitNet:
  358|      1|void _PR_InitNet(void) {
  359|      1|#if defined(XP_UNIX)
  360|       |#  ifdef HAVE_NETCONFIG
  361|       |  /*
  362|       |   * This one-liner prevents the endless re-open's and re-read's of
  363|       |   * /etc/netconfig on EACH and EVERY call to accept(), connect(), etc.
  364|       |   */
  365|       |  (void)setnetconfig();
  366|       |#  endif
  367|      1|#endif
  368|       |#if !defined(_PR_NO_DNS_LOCK)
  369|       |  _pr_dnsLock = PR_NewLock();
  370|       |#endif
  371|       |#if !defined(_PR_HAVE_GETPROTO_R)
  372|       |  _getproto_lock = PR_NewLock();
  373|       |#endif
  374|      1|#if defined(_PR_INET6) && defined(_PR_HAVE_GETHOSTBYNAME2)
  375|      1|  _pr_query_ifs_lock = PR_NewLock();
  376|      1|#endif
  377|      1|}
PR_StringToNetAddr:
 2244|  5.60k|PR_IMPLEMENT(PRStatus) PR_StringToNetAddr(const char* string, PRNetAddr* addr) {
 2245|  5.60k|  if (!_pr_initialized) {
  ------------------
  |  Branch (2245:7): [True: 0, False: 5.60k]
  ------------------
 2246|      0|    _PR_ImplicitInitialization();
 2247|      0|  }
 2248|       |
 2249|  5.60k|  if (!addr || !string || !*string) {
  ------------------
  |  Branch (2249:7): [True: 0, False: 5.60k]
  |  Branch (2249:16): [True: 0, False: 5.60k]
  |  Branch (2249:27): [True: 0, False: 5.60k]
  ------------------
 2250|      0|    PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
  ------------------
  |  |   55|      0|#define PR_INVALID_ARGUMENT_ERROR                (-5987L)
  ------------------
 2251|      0|    return PR_FAILURE;
 2252|      0|  }
 2253|       |
 2254|       |#if !defined(_PR_HAVE_GETADDRINFO)
 2255|       |  return pr_StringToNetAddrFB(string, addr);
 2256|       |#else
 2257|       |  /*
 2258|       |   * getaddrinfo with AI_NUMERICHOST is much slower than pr_inet_aton on some
 2259|       |   * platforms, such as Mac OS X (bug 404399), Linux glibc 2.10 (bug 344809),
 2260|       |   * and most likely others. So we only use it to convert literal IP addresses
 2261|       |   * that contain IPv6 scope IDs, which pr_inet_aton cannot convert.
 2262|       |   */
 2263|  5.60k|  if (!strchr(string, '%')) {
  ------------------
  |  Branch (2263:7): [True: 5.60k, False: 0]
  ------------------
 2264|  5.60k|    return pr_StringToNetAddrFB(string, addr);
 2265|  5.60k|  }
 2266|       |
 2267|      0|#  if defined(_PR_INET6_PROBE)
 2268|      0|  if (!_pr_ipv6_is_present()) {
  ------------------
  |  Branch (2268:7): [True: 0, False: 0]
  ------------------
 2269|      0|    return pr_StringToNetAddrFB(string, addr);
 2270|      0|  }
 2271|      0|#  endif
 2272|       |
 2273|      0|  return pr_StringToNetAddrGAI(string, addr);
 2274|      0|#endif
 2275|      0|}
prnetdb.c:pr_StringToNetAddrFB:
 2220|  5.60k|static PRStatus pr_StringToNetAddrFB(const char* string, PRNetAddr* addr) {
 2221|  5.60k|  PRIntn rv;
 2222|       |
 2223|  5.60k|  rv = pr_inet_aton(string, &addr->inet.ip);
 2224|  5.60k|  if (1 == rv) {
  ------------------
  |  Branch (2224:7): [True: 0, False: 5.60k]
  ------------------
 2225|      0|    addr->raw.family = AF_INET;
 2226|      0|    return PR_SUCCESS;
 2227|      0|  }
 2228|       |
 2229|  5.60k|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  5.60k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 5.60k, False: 0]
  |  |  ------------------
  ------------------
 2230|       |  /* clean up after the failed call */
 2231|  5.60k|  memset(&addr->inet.ip, 0, sizeof(addr->inet.ip));
 2232|       |
 2233|  5.60k|  rv = StringToV6Addr(string, &addr->ipv6.ip);
 2234|  5.60k|  if (1 == rv) {
  ------------------
  |  Branch (2234:7): [True: 0, False: 5.60k]
  ------------------
 2235|      0|    addr->raw.family = PR_AF_INET6;
  ------------------
  |  |   27|      0|#define PR_AF_INET6 10  /* same as AF_INET6 */
  ------------------
 2236|      0|    return PR_SUCCESS;
 2237|      0|  }
 2238|       |
 2239|  5.60k|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  5.60k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 5.60k, False: 0]
  |  |  ------------------
  ------------------
 2240|  5.60k|  PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
  ------------------
  |  |   55|  5.60k|#define PR_INVALID_ARGUMENT_ERROR                (-5987L)
  ------------------
 2241|  5.60k|  return PR_FAILURE;
 2242|  5.60k|}
prnetdb.c:StringToV6Addr:
 1486|  5.60k|static int StringToV6Addr(const char* string, PRIPv6Addr* addr) {
 1487|  5.60k|  const unsigned char* s = (const unsigned char*)string;
 1488|  5.60k|  int section = 0;       /* index of the current section (a 16-bit
 1489|       |                          * piece of the address */
 1490|  5.60k|  int double_colon = -1; /* index of the section after the first
 1491|       |                          * 16-bit group of zeros represented by
 1492|       |                          * the double colon */
 1493|  5.60k|  unsigned int val;
 1494|  5.60k|  int len;
 1495|       |
 1496|       |  /* Handle initial (double) colon */
 1497|  5.60k|  if (*s == ':') {
  ------------------
  |  Branch (1497:7): [True: 0, False: 5.60k]
  ------------------
 1498|      0|    if (s[1] != ':') {
  ------------------
  |  Branch (1498:9): [True: 0, False: 0]
  ------------------
 1499|      0|      return 0;
 1500|      0|    }
 1501|      0|    s += 2;
 1502|      0|    addr->pr_s6_addr16[0] = 0;
  ------------------
  |  |  139|      0|#define pr_s6_addr16    _S6_un._S6_u16
  ------------------
 1503|      0|    section = double_colon = 1;
 1504|      0|  }
 1505|       |
 1506|  5.60k|  while (*s) {
  ------------------
  |  Branch (1506:10): [True: 5.60k, False: 0]
  ------------------
 1507|  5.60k|    if (section == 8) {
  ------------------
  |  Branch (1507:9): [True: 0, False: 5.60k]
  ------------------
 1508|      0|      return 0; /* too long */
 1509|      0|    }
 1510|  5.60k|    if (*s == ':') {
  ------------------
  |  Branch (1510:9): [True: 0, False: 5.60k]
  ------------------
 1511|      0|      if (double_colon != -1) {
  ------------------
  |  Branch (1511:11): [True: 0, False: 0]
  ------------------
 1512|      0|        return 0; /* two double colons */
 1513|      0|      }
 1514|      0|      addr->pr_s6_addr16[section++] = 0;
  ------------------
  |  |  139|      0|#define pr_s6_addr16    _S6_un._S6_u16
  ------------------
 1515|      0|      double_colon = section;
 1516|      0|      s++;
 1517|      0|      continue;
 1518|      0|    }
 1519|  11.2k|    for (len = val = 0; len < 4 && index_hex[*s] != XX; len++) {
  ------------------
  |  | 1463|  11.2k|#define XX 127
  ------------------
  |  Branch (1519:25): [True: 11.2k, False: 0]
  |  Branch (1519:36): [True: 5.60k, False: 5.60k]
  ------------------
 1520|  5.60k|      val = (val << 4) + index_hex[*s++];
 1521|  5.60k|    }
 1522|  5.60k|    if (*s == '.') {
  ------------------
  |  Branch (1522:9): [True: 0, False: 5.60k]
  ------------------
 1523|      0|      if (len == 0) {
  ------------------
  |  Branch (1523:11): [True: 0, False: 0]
  ------------------
 1524|      0|        return 0; /* nothing between : and . */
 1525|      0|      }
 1526|      0|      break;
 1527|      0|    }
 1528|  5.60k|    if (*s == ':') {
  ------------------
  |  Branch (1528:9): [True: 0, False: 5.60k]
  ------------------
 1529|      0|      s++;
 1530|      0|      if (!*s) {
  ------------------
  |  Branch (1530:11): [True: 0, False: 0]
  ------------------
 1531|      0|        return 0; /* cannot end with single colon */
 1532|      0|      }
 1533|  5.60k|    } else if (*s) {
  ------------------
  |  Branch (1533:16): [True: 5.60k, False: 0]
  ------------------
 1534|  5.60k|      return 0; /* bad character */
 1535|  5.60k|    }
 1536|      0|    addr->pr_s6_addr16[section++] = htons((unsigned short)val);
  ------------------
  |  |  139|      0|#define pr_s6_addr16    _S6_un._S6_u16
  ------------------
 1537|      0|  }
 1538|       |
 1539|      0|  if (*s == '.') {
  ------------------
  |  Branch (1539:7): [True: 0, False: 0]
  ------------------
 1540|       |    /* Have a trailing v4 format address */
 1541|      0|    if (section > 6) {
  ------------------
  |  Branch (1541:9): [True: 0, False: 0]
  ------------------
 1542|      0|      return 0; /* not enough room */
 1543|      0|    }
 1544|       |
 1545|       |    /*
 1546|       |     * The number before the '.' is decimal, but we parsed it
 1547|       |     * as hex.  That means it is in BCD.  Check it for validity
 1548|       |     * and convert it to binary.
 1549|       |     */
 1550|      0|    if (val > 0x0255 || (val & 0xf0) > 0x90 || (val & 0xf) > 9) {
  ------------------
  |  Branch (1550:9): [True: 0, False: 0]
  |  Branch (1550:25): [True: 0, False: 0]
  |  Branch (1550:48): [True: 0, False: 0]
  ------------------
 1551|      0|      return 0;
 1552|      0|    }
 1553|      0|    val = (val >> 8) * 100 + ((val >> 4) & 0xf) * 10 + (val & 0xf);
 1554|      0|    addr->pr_s6_addr[2 * section] = val;
  ------------------
  |  |  138|      0|#define pr_s6_addr      _S6_un._S6_u8
  ------------------
 1555|       |
 1556|      0|    s++;
 1557|      0|    val = index_hex[*s++];
 1558|      0|    if (val > 9) {
  ------------------
  |  Branch (1558:9): [True: 0, False: 0]
  ------------------
 1559|      0|      return 0;
 1560|      0|    }
 1561|      0|    while (*s >= '0' && *s <= '9') {
  ------------------
  |  Branch (1561:12): [True: 0, False: 0]
  |  Branch (1561:25): [True: 0, False: 0]
  ------------------
 1562|      0|      val = val * 10 + *s++ - '0';
 1563|      0|      if (val > 255) {
  ------------------
  |  Branch (1563:11): [True: 0, False: 0]
  ------------------
 1564|      0|        return 0;
 1565|      0|      }
 1566|      0|    }
 1567|      0|    if (*s != '.') {
  ------------------
  |  Branch (1567:9): [True: 0, False: 0]
  ------------------
 1568|      0|      return 0; /* must have exactly 4 decimal numbers */
 1569|      0|    }
 1570|      0|    addr->pr_s6_addr[2 * section + 1] = val;
  ------------------
  |  |  138|      0|#define pr_s6_addr      _S6_un._S6_u8
  ------------------
 1571|      0|    section++;
 1572|       |
 1573|      0|    s++;
 1574|      0|    val = index_hex[*s++];
 1575|      0|    if (val > 9) {
  ------------------
  |  Branch (1575:9): [True: 0, False: 0]
  ------------------
 1576|      0|      return 0;
 1577|      0|    }
 1578|      0|    while (*s >= '0' && *s <= '9') {
  ------------------
  |  Branch (1578:12): [True: 0, False: 0]
  |  Branch (1578:25): [True: 0, False: 0]
  ------------------
 1579|      0|      val = val * 10 + *s++ - '0';
 1580|      0|      if (val > 255) {
  ------------------
  |  Branch (1580:11): [True: 0, False: 0]
  ------------------
 1581|      0|        return 0;
 1582|      0|      }
 1583|      0|    }
 1584|      0|    if (*s != '.') {
  ------------------
  |  Branch (1584:9): [True: 0, False: 0]
  ------------------
 1585|      0|      return 0; /* must have exactly 4 decimal numbers */
 1586|      0|    }
 1587|      0|    addr->pr_s6_addr[2 * section] = val;
  ------------------
  |  |  138|      0|#define pr_s6_addr      _S6_un._S6_u8
  ------------------
 1588|       |
 1589|      0|    s++;
 1590|      0|    val = index_hex[*s++];
 1591|      0|    if (val > 9) {
  ------------------
  |  Branch (1591:9): [True: 0, False: 0]
  ------------------
 1592|      0|      return 0;
 1593|      0|    }
 1594|      0|    while (*s >= '0' && *s <= '9') {
  ------------------
  |  Branch (1594:12): [True: 0, False: 0]
  |  Branch (1594:25): [True: 0, False: 0]
  ------------------
 1595|      0|      val = val * 10 + *s++ - '0';
 1596|      0|      if (val > 255) {
  ------------------
  |  Branch (1596:11): [True: 0, False: 0]
  ------------------
 1597|      0|        return 0;
 1598|      0|      }
 1599|      0|    }
 1600|      0|    if (*s) {
  ------------------
  |  Branch (1600:9): [True: 0, False: 0]
  ------------------
 1601|      0|      return 0; /* must have exactly 4 decimal numbers */
 1602|      0|    }
 1603|      0|    addr->pr_s6_addr[2 * section + 1] = val;
  ------------------
  |  |  138|      0|#define pr_s6_addr      _S6_un._S6_u8
  ------------------
 1604|      0|    section++;
 1605|      0|  }
 1606|       |
 1607|      0|  if (double_colon != -1) {
  ------------------
  |  Branch (1607:7): [True: 0, False: 0]
  ------------------
 1608|       |    /* Stretch the double colon */
 1609|      0|    int tosection;
 1610|      0|    int ncopy = section - double_colon;
 1611|      0|    for (tosection = 7; ncopy--; tosection--) {
  ------------------
  |  Branch (1611:25): [True: 0, False: 0]
  ------------------
 1612|      0|      addr->pr_s6_addr16[tosection] = addr->pr_s6_addr16[double_colon + ncopy];
  ------------------
  |  |  139|      0|#define pr_s6_addr16    _S6_un._S6_u16
  ------------------
                    addr->pr_s6_addr16[tosection] = addr->pr_s6_addr16[double_colon + ncopy];
  ------------------
  |  |  139|      0|#define pr_s6_addr16    _S6_un._S6_u16
  ------------------
 1613|      0|    }
 1614|      0|    while (tosection >= double_colon) {
  ------------------
  |  Branch (1614:12): [True: 0, False: 0]
  ------------------
 1615|      0|      addr->pr_s6_addr16[tosection--] = 0;
  ------------------
  |  |  139|      0|#define pr_s6_addr16    _S6_un._S6_u16
  ------------------
 1616|      0|    }
 1617|      0|  } else if (section != 8) {
  ------------------
  |  Branch (1617:14): [True: 0, False: 0]
  ------------------
 1618|      0|    return 0; /* too short */
 1619|      0|  }
 1620|      0|  return 1;
 1621|      0|}

PR_ImplodeTime:
  219|  19.4k|PR_ImplodeTime(const PRExplodedTime* exploded) {
  220|  19.4k|  PRExplodedTime copy;
  221|  19.4k|  PRTime retVal;
  222|  19.4k|  PRInt64 secPerDay, usecPerSec;
  223|  19.4k|  PRInt64 temp;
  224|  19.4k|  PRInt64 numSecs64;
  225|  19.4k|  PRInt32 numDays;
  226|  19.4k|  PRInt32 numSecs;
  227|       |
  228|       |  /* Normalize first.  Do this on our copy */
  229|  19.4k|  copy = *exploded;
  230|  19.4k|  PR_NormalizeTime(&copy, PR_GMTParameters);
  231|       |
  232|  19.4k|  numDays = DAYS_BETWEEN_YEARS(1970, copy.tm_year);
  ------------------
  |  |   41|  19.4k|#define DAYS_BETWEEN_YEARS(A, B) (COUNT_DAYS(B) - COUNT_DAYS(A))
  |  |  ------------------
  |  |  |  |   40|  19.4k|#define COUNT_DAYS(Y) (((Y) - 1) * 365 + COUNT_LEAPS(Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  19.4k|#define COUNT_LEAPS(Y) (((Y) - 1) / 4 - ((Y) - 1) / 100 + ((Y) - 1) / 400)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define DAYS_BETWEEN_YEARS(A, B) (COUNT_DAYS(B) - COUNT_DAYS(A))
  |  |  ------------------
  |  |  |  |   40|  19.4k|#define COUNT_DAYS(Y) (((Y) - 1) * 365 + COUNT_LEAPS(Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  19.4k|#define COUNT_LEAPS(Y) (((Y) - 1) / 4 - ((Y) - 1) / 100 + ((Y) - 1) / 400)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|       |
  234|  19.4k|  numSecs = copy.tm_yday * 86400 + copy.tm_hour * 3600 + copy.tm_min * 60 +
  235|  19.4k|            copy.tm_sec;
  236|       |
  237|  19.4k|  LL_I2L(temp, numDays);
  ------------------
  |  |  149|  19.4k|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
  238|  19.4k|  LL_I2L(secPerDay, 86400);
  ------------------
  |  |  149|  19.4k|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
  239|  19.4k|  LL_MUL(temp, temp, secPerDay);
  ------------------
  |  |  115|  19.4k|#define LL_MUL(r, a, b)        ((r) = (a) * (b))
  ------------------
  240|  19.4k|  LL_I2L(numSecs64, numSecs);
  ------------------
  |  |  149|  19.4k|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
  241|  19.4k|  LL_ADD(numSecs64, numSecs64, temp);
  ------------------
  |  |  105|  19.4k|#define LL_ADD(r, a, b)     ((r) = (a) + (b))
  ------------------
  242|       |
  243|       |  /* apply the GMT and DST offsets */
  244|  19.4k|  LL_I2L(temp, copy.tm_params.tp_gmt_offset);
  ------------------
  |  |  149|  19.4k|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
  245|  19.4k|  LL_SUB(numSecs64, numSecs64, temp);
  ------------------
  |  |  106|  19.4k|#define LL_SUB(r, a, b)     ((r) = (a) - (b))
  ------------------
  246|  19.4k|  LL_I2L(temp, copy.tm_params.tp_dst_offset);
  ------------------
  |  |  149|  19.4k|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
  247|  19.4k|  LL_SUB(numSecs64, numSecs64, temp);
  ------------------
  |  |  106|  19.4k|#define LL_SUB(r, a, b)     ((r) = (a) - (b))
  ------------------
  248|       |
  249|  19.4k|  LL_I2L(usecPerSec, 1000000L);
  ------------------
  |  |  149|  19.4k|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
  250|  19.4k|  LL_MUL(temp, numSecs64, usecPerSec);
  ------------------
  |  |  115|  19.4k|#define LL_MUL(r, a, b)        ((r) = (a) * (b))
  ------------------
  251|  19.4k|  LL_I2L(retVal, copy.tm_usec);
  ------------------
  |  |  149|  19.4k|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
  252|  19.4k|  LL_ADD(retVal, retVal, temp);
  ------------------
  |  |  105|  19.4k|#define LL_ADD(r, a, b)     ((r) = (a) + (b))
  ------------------
  253|       |
  254|  19.4k|  return retVal;
  255|  19.4k|}
PR_NormalizeTime:
  345|  19.4k|PR_NormalizeTime(PRExplodedTime* time, PRTimeParamFn params) {
  346|  19.4k|  int daysInMonth;
  347|  19.4k|  PRInt32 numDays;
  348|       |
  349|       |  /* Get back to GMT */
  350|  19.4k|  time->tm_sec -= time->tm_params.tp_gmt_offset + time->tm_params.tp_dst_offset;
  351|  19.4k|  time->tm_params.tp_gmt_offset = 0;
  352|  19.4k|  time->tm_params.tp_dst_offset = 0;
  353|       |
  354|       |  /* Now normalize GMT */
  355|       |
  356|  19.4k|  if (time->tm_usec < 0 || time->tm_usec >= 1000000) {
  ------------------
  |  Branch (356:7): [True: 0, False: 19.4k]
  |  Branch (356:28): [True: 0, False: 19.4k]
  ------------------
  357|      0|    time->tm_sec += time->tm_usec / 1000000;
  358|      0|    time->tm_usec %= 1000000;
  359|      0|    if (time->tm_usec < 0) {
  ------------------
  |  Branch (359:9): [True: 0, False: 0]
  ------------------
  360|      0|      time->tm_usec += 1000000;
  361|      0|      time->tm_sec--;
  362|      0|    }
  363|      0|  }
  364|       |
  365|       |  /* Note that we do not count leap seconds in this implementation */
  366|  19.4k|  if (time->tm_sec < 0 || time->tm_sec >= 60) {
  ------------------
  |  Branch (366:7): [True: 0, False: 19.4k]
  |  Branch (366:27): [True: 0, False: 19.4k]
  ------------------
  367|      0|    time->tm_min += time->tm_sec / 60;
  368|      0|    time->tm_sec %= 60;
  369|      0|    if (time->tm_sec < 0) {
  ------------------
  |  Branch (369:9): [True: 0, False: 0]
  ------------------
  370|      0|      time->tm_sec += 60;
  371|      0|      time->tm_min--;
  372|      0|    }
  373|      0|  }
  374|       |
  375|  19.4k|  if (time->tm_min < 0 || time->tm_min >= 60) {
  ------------------
  |  Branch (375:7): [True: 0, False: 19.4k]
  |  Branch (375:27): [True: 0, False: 19.4k]
  ------------------
  376|      0|    time->tm_hour += time->tm_min / 60;
  377|      0|    time->tm_min %= 60;
  378|      0|    if (time->tm_min < 0) {
  ------------------
  |  Branch (378:9): [True: 0, False: 0]
  ------------------
  379|      0|      time->tm_min += 60;
  380|      0|      time->tm_hour--;
  381|      0|    }
  382|      0|  }
  383|       |
  384|  19.4k|  if (time->tm_hour < 0 || time->tm_hour >= 24) {
  ------------------
  |  Branch (384:7): [True: 0, False: 19.4k]
  |  Branch (384:28): [True: 0, False: 19.4k]
  ------------------
  385|      0|    time->tm_mday += time->tm_hour / 24;
  386|      0|    time->tm_hour %= 24;
  387|      0|    if (time->tm_hour < 0) {
  ------------------
  |  Branch (387:9): [True: 0, False: 0]
  ------------------
  388|      0|      time->tm_hour += 24;
  389|      0|      time->tm_mday--;
  390|      0|    }
  391|      0|  }
  392|       |
  393|       |  /* Normalize month and year before mday */
  394|  19.4k|  if (time->tm_month < 0 || time->tm_month >= 12) {
  ------------------
  |  Branch (394:7): [True: 0, False: 19.4k]
  |  Branch (394:29): [True: 0, False: 19.4k]
  ------------------
  395|      0|    time->tm_year += time->tm_month / 12;
  396|      0|    time->tm_month %= 12;
  397|      0|    if (time->tm_month < 0) {
  ------------------
  |  Branch (397:9): [True: 0, False: 0]
  ------------------
  398|      0|      time->tm_month += 12;
  399|      0|      time->tm_year--;
  400|      0|    }
  401|      0|  }
  402|       |
  403|       |  /* Now that month and year are in proper range, normalize mday */
  404|       |
  405|  19.4k|  if (time->tm_mday < 1) {
  ------------------
  |  Branch (405:7): [True: 0, False: 19.4k]
  ------------------
  406|       |    /* mday too small */
  407|      0|    do {
  408|       |      /* the previous month */
  409|      0|      time->tm_month--;
  410|      0|      if (time->tm_month < 0) {
  ------------------
  |  Branch (410:11): [True: 0, False: 0]
  ------------------
  411|      0|        time->tm_month = 11;
  412|      0|        time->tm_year--;
  413|      0|      }
  414|      0|      time->tm_mday += nDays[IsLeapYear(time->tm_year)][time->tm_month];
  415|      0|    } while (time->tm_mday < 1);
  ------------------
  |  Branch (415:14): [True: 0, False: 0]
  ------------------
  416|  19.4k|  } else {
  417|  19.4k|    daysInMonth = nDays[IsLeapYear(time->tm_year)][time->tm_month];
  418|  19.5k|    while (time->tm_mday > daysInMonth) {
  ------------------
  |  Branch (418:12): [True: 60, False: 19.4k]
  ------------------
  419|       |      /* mday too large */
  420|     60|      time->tm_mday -= daysInMonth;
  421|     60|      time->tm_month++;
  422|     60|      if (time->tm_month > 11) {
  ------------------
  |  Branch (422:11): [True: 0, False: 60]
  ------------------
  423|      0|        time->tm_month = 0;
  424|      0|        time->tm_year++;
  425|      0|      }
  426|     60|      daysInMonth = nDays[IsLeapYear(time->tm_year)][time->tm_month];
  427|     60|    }
  428|  19.4k|  }
  429|       |
  430|       |  /* Recompute yday and wday */
  431|  19.4k|  time->tm_yday =
  432|  19.4k|      time->tm_mday + lastDayOfMonth[IsLeapYear(time->tm_year)][time->tm_month];
  433|       |
  434|  19.4k|  numDays = DAYS_BETWEEN_YEARS(1970, time->tm_year) + time->tm_yday;
  ------------------
  |  |   41|  19.4k|#define DAYS_BETWEEN_YEARS(A, B) (COUNT_DAYS(B) - COUNT_DAYS(A))
  |  |  ------------------
  |  |  |  |   40|  19.4k|#define COUNT_DAYS(Y) (((Y) - 1) * 365 + COUNT_LEAPS(Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  19.4k|#define COUNT_LEAPS(Y) (((Y) - 1) / 4 - ((Y) - 1) / 100 + ((Y) - 1) / 400)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define DAYS_BETWEEN_YEARS(A, B) (COUNT_DAYS(B) - COUNT_DAYS(A))
  |  |  ------------------
  |  |  |  |   40|  19.4k|#define COUNT_DAYS(Y) (((Y) - 1) * 365 + COUNT_LEAPS(Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  19.4k|#define COUNT_LEAPS(Y) (((Y) - 1) / 4 - ((Y) - 1) / 100 + ((Y) - 1) / 400)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  435|  19.4k|  time->tm_wday = (numDays + 4) % 7;
  436|  19.4k|  if (time->tm_wday < 0) {
  ------------------
  |  Branch (436:7): [True: 244, False: 19.2k]
  ------------------
  437|    244|    time->tm_wday += 7;
  438|    244|  }
  439|       |
  440|       |  /* Recompute time parameters */
  441|       |
  442|  19.4k|  time->tm_params = params(time);
  443|       |
  444|  19.4k|  ApplySecOffset(time,
  445|  19.4k|                 time->tm_params.tp_gmt_offset + time->tm_params.tp_dst_offset);
  446|  19.4k|}
_PR_InitTime:
  538|      1|void _PR_InitTime(void) {
  539|       |#ifdef HAVE_LOCALTIME_MONITOR
  540|       |  monitor = PR_NewLock();
  541|       |#endif
  542|       |#ifdef WINCE
  543|       |  _MD_InitTime();
  544|       |#endif
  545|      1|}
PR_GMTParameters:
  854|  19.4k|PR_GMTParameters(const PRExplodedTime* gmt) {
  855|  19.4k|  PRTimeParameters retVal = {0, 0};
  856|  19.4k|  return retVal;
  857|  19.4k|}
prtime.c:ApplySecOffset:
  279|  19.4k|static void ApplySecOffset(PRExplodedTime* time, PRInt32 secOffset) {
  280|  19.4k|  time->tm_sec += secOffset;
  281|       |
  282|       |  /* Note that in this implementation we do not count leap seconds */
  283|  19.4k|  if (time->tm_sec < 0 || time->tm_sec >= 60) {
  ------------------
  |  Branch (283:7): [True: 0, False: 19.4k]
  |  Branch (283:27): [True: 0, False: 19.4k]
  ------------------
  284|      0|    time->tm_min += time->tm_sec / 60;
  285|      0|    time->tm_sec %= 60;
  286|      0|    if (time->tm_sec < 0) {
  ------------------
  |  Branch (286:9): [True: 0, False: 0]
  ------------------
  287|      0|      time->tm_sec += 60;
  288|      0|      time->tm_min--;
  289|      0|    }
  290|      0|  }
  291|       |
  292|  19.4k|  if (time->tm_min < 0 || time->tm_min >= 60) {
  ------------------
  |  Branch (292:7): [True: 0, False: 19.4k]
  |  Branch (292:27): [True: 0, False: 19.4k]
  ------------------
  293|      0|    time->tm_hour += time->tm_min / 60;
  294|      0|    time->tm_min %= 60;
  295|      0|    if (time->tm_min < 0) {
  ------------------
  |  Branch (295:9): [True: 0, False: 0]
  ------------------
  296|      0|      time->tm_min += 60;
  297|      0|      time->tm_hour--;
  298|      0|    }
  299|      0|  }
  300|       |
  301|  19.4k|  if (time->tm_hour < 0) {
  ------------------
  |  Branch (301:7): [True: 0, False: 19.4k]
  ------------------
  302|       |    /* Decrement mday, yday, and wday */
  303|      0|    time->tm_hour += 24;
  304|      0|    time->tm_mday--;
  305|      0|    time->tm_yday--;
  306|      0|    if (time->tm_mday < 1) {
  ------------------
  |  Branch (306:9): [True: 0, False: 0]
  ------------------
  307|      0|      time->tm_month--;
  308|      0|      if (time->tm_month < 0) {
  ------------------
  |  Branch (308:11): [True: 0, False: 0]
  ------------------
  309|      0|        time->tm_month = 11;
  310|      0|        time->tm_year--;
  311|      0|        if (IsLeapYear(time->tm_year)) {
  ------------------
  |  Branch (311:13): [True: 0, False: 0]
  ------------------
  312|      0|          time->tm_yday = 365;
  313|      0|        } else {
  314|      0|          time->tm_yday = 364;
  315|      0|        }
  316|      0|      }
  317|      0|      time->tm_mday = nDays[IsLeapYear(time->tm_year)][time->tm_month];
  318|      0|    }
  319|      0|    time->tm_wday--;
  320|      0|    if (time->tm_wday < 0) {
  ------------------
  |  Branch (320:9): [True: 0, False: 0]
  ------------------
  321|      0|      time->tm_wday = 6;
  322|      0|    }
  323|  19.4k|  } else if (time->tm_hour > 23) {
  ------------------
  |  Branch (323:14): [True: 0, False: 19.4k]
  ------------------
  324|       |    /* Increment mday, yday, and wday */
  325|      0|    time->tm_hour -= 24;
  326|      0|    time->tm_mday++;
  327|      0|    time->tm_yday++;
  328|      0|    if (time->tm_mday > nDays[IsLeapYear(time->tm_year)][time->tm_month]) {
  ------------------
  |  Branch (328:9): [True: 0, False: 0]
  ------------------
  329|      0|      time->tm_mday = 1;
  330|      0|      time->tm_month++;
  331|      0|      if (time->tm_month > 11) {
  ------------------
  |  Branch (331:11): [True: 0, False: 0]
  ------------------
  332|      0|        time->tm_month = 0;
  333|      0|        time->tm_year++;
  334|      0|        time->tm_yday = 0;
  335|      0|      }
  336|      0|    }
  337|      0|    time->tm_wday++;
  338|      0|    if (time->tm_wday > 6) {
  ------------------
  |  Branch (338:9): [True: 0, False: 0]
  ------------------
  339|      0|      time->tm_wday = 0;
  340|      0|    }
  341|      0|  }
  342|  19.4k|}
prtime.c:IsLeapYear:
  267|  39.0k|static int IsLeapYear(PRInt16 year) {
  268|  39.0k|  if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
  ------------------
  |  Branch (268:8): [True: 5.10k, False: 33.9k]
  |  Branch (268:25): [True: 4.47k, False: 626]
  |  Branch (268:45): [True: 626, False: 33.9k]
  ------------------
  269|  5.10k|    return 1;
  270|  5.10k|  }
  271|  33.9k|  return 0;
  272|  39.0k|}

_PR_InitIO:
 1117|      1|void _PR_InitIO(void) {
 1118|      1|#  if defined(DEBUG)
 1119|      1|  memset(&pt_debug, 0, sizeof(PTDebug));
 1120|      1|  pt_debug.timeStarted = PR_Now();
 1121|      1|#  endif
 1122|       |
 1123|      1|  _pr_flock_lock = PR_NewLock();
 1124|      1|  PR_ASSERT(NULL != _pr_flock_lock);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 1125|      1|  _pr_flock_cv = PR_NewCondVar(_pr_flock_lock);
 1126|      1|  PR_ASSERT(NULL != _pr_flock_cv);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 1127|      1|  _pr_rename_lock = PR_NewLock();
 1128|      1|  PR_ASSERT(NULL != _pr_rename_lock);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 1129|       |
 1130|      1|  _PR_InitFdCache(); /* do that */
 1131|       |
 1132|      1|  _pr_stdin = pt_SetMethods(0, PR_DESC_FILE, PR_FALSE, PR_TRUE);
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
                _pr_stdin = pt_SetMethods(0, PR_DESC_FILE, PR_FALSE, PR_TRUE);
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
 1133|      1|  _pr_stdout = pt_SetMethods(1, PR_DESC_FILE, PR_FALSE, PR_TRUE);
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
                _pr_stdout = pt_SetMethods(1, PR_DESC_FILE, PR_FALSE, PR_TRUE);
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
 1134|      1|  _pr_stderr = pt_SetMethods(2, PR_DESC_FILE, PR_FALSE, PR_TRUE);
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
                _pr_stderr = pt_SetMethods(2, PR_DESC_FILE, PR_FALSE, PR_TRUE);
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
 1135|      1|  PR_ASSERT(_pr_stdin && _pr_stdout && _pr_stderr);
  ------------------
  |  |  208|      4|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:7): [True: 1, False: 0]
  |  |  |  Branch (208:7): [True: 1, False: 0]
  |  |  |  Branch (208:7): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 1136|       |
 1137|       |#  ifdef _PR_IPV6_V6ONLY_PROBE
 1138|       |  /* In Mac OS X v10.3 Panther Beta the IPV6_V6ONLY socket option
 1139|       |   * is turned on by default, contrary to what RFC 3493, Section
 1140|       |   * 5.3 says.  So we have to turn it off.  Find out whether we
 1141|       |   * are running on such a system.
 1142|       |   */
 1143|       |  {
 1144|       |    int osfd;
 1145|       |    osfd = socket(AF_INET6, SOCK_STREAM, 0);
 1146|       |    if (osfd != -1) {
 1147|       |      int on;
 1148|       |      socklen_t optlen = sizeof(on);
 1149|       |      if (getsockopt(osfd, IPPROTO_IPV6, IPV6_V6ONLY, &on, &optlen) == 0) {
 1150|       |        _pr_ipv6_v6only_on_by_default = on;
 1151|       |      }
 1152|       |      close(osfd);
 1153|       |    }
 1154|       |  }
 1155|       |#  endif
 1156|      1|} /* _PR_InitIO */
PR_GetFileMethods:
 3367|      3|PR_IMPLEMENT(const PRIOMethods*) PR_GetFileMethods(void) {
 3368|      3|  return &_pr_file_methods;
 3369|      3|} /* PR_GetFileMethods */
ptio.c:pt_SetMethods:
 3319|      3|                                 PRBool isAcceptedSocket, PRBool imported) {
 3320|      3|  PRFileDesc* fd = _PR_Getfd();
 3321|       |
 3322|      3|  if (fd == NULL) {
  ------------------
  |  Branch (3322:7): [True: 0, False: 3]
  ------------------
 3323|      0|    PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
  ------------------
  |  |   16|      0|#define PR_OUT_OF_MEMORY_ERROR                   (-6000L)
  ------------------
 3324|      3|  } else {
 3325|      3|    fd->secret->md.osfd = osfd;
 3326|      3|    fd->secret->state = _PR_FILEDESC_OPEN;
  ------------------
  |  | 1702|      3|#define _PR_FILEDESC_OPEN       0xaaaaaaaa    /* 1010101... */
  ------------------
 3327|      3|    if (imported) {
  ------------------
  |  Branch (3327:9): [True: 3, False: 0]
  ------------------
 3328|      3|      fd->secret->inheritable = _PR_TRI_UNKNOWN;
 3329|      3|    } else {
 3330|       |      /* By default, a Unix fd is not closed on exec. */
 3331|      0|#  ifdef DEBUG
 3332|      0|      PRIntn flags;
 3333|      0|      flags = fcntl(osfd, F_GETFD, 0);
 3334|      0|      PR_ASSERT(0 == flags);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3335|      0|#  endif
 3336|      0|      fd->secret->inheritable = _PR_TRI_TRUE;
 3337|      0|    }
 3338|      3|    switch (type) {
 3339|      3|      case PR_DESC_FILE:
  ------------------
  |  Branch (3339:7): [True: 3, False: 0]
  ------------------
 3340|      3|        fd->methods = PR_GetFileMethods();
 3341|      3|        break;
 3342|      0|      case PR_DESC_SOCKET_TCP:
  ------------------
  |  Branch (3342:7): [True: 0, False: 3]
  ------------------
 3343|      0|        fd->methods = PR_GetTCPMethods();
 3344|       |#  ifdef _PR_ACCEPT_INHERIT_NONBLOCK
 3345|       |        if (!isAcceptedSocket) {
 3346|       |          pt_MakeSocketNonblock(osfd);
 3347|       |        }
 3348|       |#  else
 3349|      0|        pt_MakeSocketNonblock(osfd);
  ------------------
  |  | 3315|      0|#    define pt_MakeSocketNonblock pt_MakeFdNonblock
  ------------------
 3350|      0|#  endif
 3351|      0|        break;
 3352|      0|      case PR_DESC_SOCKET_UDP:
  ------------------
  |  Branch (3352:7): [True: 0, False: 3]
  ------------------
 3353|      0|        fd->methods = PR_GetUDPMethods();
 3354|      0|        pt_MakeFdNonblock(osfd);
 3355|      0|        break;
 3356|      0|      case PR_DESC_PIPE:
  ------------------
  |  Branch (3356:7): [True: 0, False: 3]
  ------------------
 3357|      0|        fd->methods = PR_GetPipeMethods();
 3358|      0|        pt_MakeFdNonblock(osfd);
 3359|      0|        break;
 3360|      0|      default:
  ------------------
  |  Branch (3360:7): [True: 0, False: 3]
  ------------------
 3361|      0|        break;
 3362|      3|    }
 3363|      3|  }
 3364|      3|  return fd;
 3365|      3|} /* pt_SetMethods */

_PR_InitCPUs:
   22|      1|void _PR_InitCPUs(void) { PT_LOG("_PR_InitCPUs") }
_PR_InitStacks:
   23|      1|void _PR_InitStacks(void){PT_LOG("_PR_InitStacks")}

_PR_InitLocks:
   45|      1|void _PR_InitLocks(void) {
   46|      1|  int rv;
   47|      1|  rv = _PT_PTHREAD_MUTEXATTR_INIT(&_pt_mattr);
  ------------------
  |  |   17|      1|#define _PT_PTHREAD_MUTEXATTR_INIT        pthread_mutexattr_init
  ------------------
   48|      1|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
   49|       |
   50|      1|#  if (defined(LINUX) &&                                               \
   51|      1|       (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2))) || \
   52|      1|      (defined(FREEBSD) && __FreeBSD_version > 700055)
   53|      1|  rv = pthread_mutexattr_settype(&_pt_mattr, PTHREAD_MUTEX_ADAPTIVE_NP);
   54|      1|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
   55|      1|#  endif
   56|       |
   57|      1|  rv = _PT_PTHREAD_CONDATTR_INIT(&_pt_cvar_attr);
  ------------------
  |  |   30|      1|#define _PT_PTHREAD_CONDATTR_INIT         pthread_condattr_init
  ------------------
   58|      1|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
   59|      1|}
PR_NewLock:
  121|   100k|PR_IMPLEMENT(PRLock*) PR_NewLock(void) {
  122|   100k|  PRIntn rv;
  123|   100k|  PRLock* lock;
  124|       |
  125|   100k|  if (!_pr_initialized) {
  ------------------
  |  Branch (125:7): [True: 0, False: 100k]
  ------------------
  126|      0|    _PR_ImplicitInitialization();
  127|      0|  }
  128|       |
  129|   100k|  lock = PR_NEWZAP(PRLock);
  ------------------
  |  |   99|   100k|#define PR_NEWZAP(_struct) ((_struct*)PR_Calloc(1, sizeof(_struct)))
  ------------------
  130|   100k|  if (lock != NULL) {
  ------------------
  |  Branch (130:7): [True: 100k, False: 0]
  ------------------
  131|   100k|    rv = _PT_PTHREAD_MUTEX_INIT(lock->mutex, _pt_mattr);
  ------------------
  |  |   19|   100k|#define _PT_PTHREAD_MUTEX_INIT(m, a)      pthread_mutex_init(&(m), &(a))
  ------------------
  132|   100k|    PR_ASSERT(0 == rv);
  ------------------
  |  |  208|   100k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 100k, False: 0]
  |  |  ------------------
  ------------------
  133|   100k|  }
  134|   100k|#  if defined(DEBUG)
  135|   100k|  pt_debug.locks_created += 1;
  136|   100k|#  endif
  137|   100k|  return lock;
  138|   100k|} /* PR_NewLock */
PR_DestroyLock:
  140|   100k|PR_IMPLEMENT(void) PR_DestroyLock(PRLock* lock) {
  141|   100k|  PRIntn rv;
  142|   100k|  PR_ASSERT(NULL != lock);
  ------------------
  |  |  208|   100k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 100k, False: 0]
  |  |  ------------------
  ------------------
  143|   100k|  PR_ASSERT(PR_FALSE == lock->locked);
  ------------------
  |  |  208|   100k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 100k, False: 0]
  |  |  ------------------
  ------------------
  144|   100k|  PR_ASSERT(0 == lock->notified.length);
  ------------------
  |  |  208|   100k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 100k, False: 0]
  |  |  ------------------
  ------------------
  145|   100k|  PR_ASSERT(NULL == lock->notified.link);
  ------------------
  |  |  208|   100k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 100k, False: 0]
  |  |  ------------------
  ------------------
  146|   100k|  rv = pthread_mutex_destroy(&lock->mutex);
  147|   100k|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|   100k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 100k, False: 0]
  |  |  ------------------
  ------------------
  148|   100k|#  if defined(DEBUG)
  149|   100k|  memset(lock, 0xaf, sizeof(PRLock));
  150|   100k|  pt_debug.locks_destroyed += 1;
  151|   100k|#  endif
  152|   100k|  PR_Free(lock);
  153|   100k|} /* PR_DestroyLock */
PR_Lock:
  155|  71.7M|PR_IMPLEMENT(void) PR_Lock(PRLock* lock) {
  156|       |  /* Nb: PR_Lock must not call PR_GetCurrentThread to access the |id| or
  157|       |   * |tid| field of the current thread's PRThread structure because
  158|       |   * _pt_root calls PR_Lock before setting thred->id and thred->tid. */
  159|  71.7M|  PRIntn rv;
  160|  71.7M|  PR_ASSERT(lock != NULL);
  ------------------
  |  |  208|  71.7M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 71.7M, False: 0]
  |  |  ------------------
  ------------------
  161|  71.7M|  rv = pthread_mutex_lock(&lock->mutex);
  162|  71.7M|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  71.7M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 71.7M, False: 0]
  |  |  ------------------
  ------------------
  163|  71.7M|  PR_ASSERT(0 == lock->notified.length);
  ------------------
  |  |  208|  71.7M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 71.7M, False: 0]
  |  |  ------------------
  ------------------
  164|  71.7M|  PR_ASSERT(NULL == lock->notified.link);
  ------------------
  |  |  208|  71.7M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 71.7M, False: 0]
  |  |  ------------------
  ------------------
  165|  71.7M|  PR_ASSERT(PR_FALSE == lock->locked);
  ------------------
  |  |  208|  71.7M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 71.7M, False: 0]
  |  |  ------------------
  ------------------
  166|       |  /* Nb: the order of the next two statements is not critical to
  167|       |   * the correctness of PR_AssertCurrentThreadOwnsLock(), but
  168|       |   * this particular order makes the assertion more likely to
  169|       |   * catch errors. */
  170|  71.7M|  lock->owner = pthread_self();
  171|  71.7M|  lock->locked = PR_TRUE;
  ------------------
  |  |  437|  71.7M|#define PR_TRUE 1
  ------------------
  172|  71.7M|#  if defined(DEBUG)
  173|  71.7M|  pt_debug.locks_acquired += 1;
  174|  71.7M|#  endif
  175|  71.7M|} /* PR_Lock */
PR_Unlock:
  177|  71.7M|PR_IMPLEMENT(PRStatus) PR_Unlock(PRLock* lock) {
  178|  71.7M|  pthread_t self = pthread_self();
  179|  71.7M|  PRIntn rv;
  180|       |
  181|  71.7M|  PR_ASSERT(lock != NULL);
  ------------------
  |  |  208|  71.7M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 71.7M, False: 0]
  |  |  ------------------
  ------------------
  182|  71.7M|  PR_ASSERT(_PT_PTHREAD_MUTEX_IS_LOCKED(lock->mutex));
  ------------------
  |  |  208|  71.7M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 71.7M, False: 0]
  |  |  ------------------
  ------------------
  183|  71.7M|  PR_ASSERT(PR_TRUE == lock->locked);
  ------------------
  |  |  208|  71.7M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 71.7M, False: 0]
  |  |  ------------------
  ------------------
  184|  71.7M|  PR_ASSERT(pthread_equal(lock->owner, self));
  ------------------
  |  |  208|  71.7M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 71.7M, False: 0]
  |  |  ------------------
  ------------------
  185|       |
  186|  71.7M|  if (!lock->locked || !pthread_equal(lock->owner, self)) {
  ------------------
  |  Branch (186:7): [True: 0, False: 71.7M]
  |  Branch (186:24): [True: 0, False: 71.7M]
  ------------------
  187|      0|    return PR_FAILURE;
  188|      0|  }
  189|       |
  190|  71.7M|  lock->locked = PR_FALSE;
  ------------------
  |  |  438|  71.7M|#define PR_FALSE 0
  ------------------
  191|  71.7M|  if (0 == lock->notified.length) /* shortcut */
  ------------------
  |  Branch (191:7): [True: 71.7M, False: 9]
  ------------------
  192|  71.7M|  {
  193|  71.7M|    rv = pthread_mutex_unlock(&lock->mutex);
  194|  71.7M|    PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  71.7M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 71.7M, False: 0]
  |  |  ------------------
  ------------------
  195|  71.7M|  } else {
  196|      9|    pt_PostNotifies(lock, PR_TRUE);
  ------------------
  |  |  437|      9|#define PR_TRUE 1
  ------------------
  197|      9|  }
  198|       |
  199|  71.7M|#  if defined(DEBUG)
  200|  71.7M|  pt_debug.locks_released += 1;
  201|  71.7M|#  endif
  202|  71.7M|  return PR_SUCCESS;
  203|  71.7M|} /* PR_Unlock */
PR_NewCondVar:
  296|     31|PR_IMPLEMENT(PRCondVar*) PR_NewCondVar(PRLock* lock) {
  297|     31|  PRCondVar* cv = PR_NEW(PRCondVar);
  ------------------
  |  |   65|     31|#define PR_NEW(_struct) ((_struct *) PR_MALLOC(sizeof(_struct)))
  |  |  ------------------
  |  |  |  |   55|     31|#define PR_MALLOC(_bytes) (PR_Malloc((_bytes)))
  |  |  ------------------
  ------------------
  298|     31|  PR_ASSERT(lock != NULL);
  ------------------
  |  |  208|     31|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 31, False: 0]
  |  |  ------------------
  ------------------
  299|     31|  if (cv != NULL) {
  ------------------
  |  Branch (299:7): [True: 31, False: 0]
  ------------------
  300|     31|    int rv = _PT_PTHREAD_COND_INIT(cv->cv, _pt_cvar_attr);
  ------------------
  |  |   33|     31|#define _PT_PTHREAD_COND_INIT(m, a)       pthread_cond_init(&(m), &(a))
  ------------------
  301|     31|    PR_ASSERT(0 == rv);
  ------------------
  |  |  208|     31|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 31, False: 0]
  |  |  ------------------
  ------------------
  302|     31|    if (0 == rv) {
  ------------------
  |  Branch (302:9): [True: 31, False: 0]
  ------------------
  303|     31|      cv->lock = lock;
  304|     31|      cv->notify_pending = 0;
  305|     31|#  if defined(DEBUG)
  306|     31|      pt_debug.cvars_created += 1;
  307|     31|#  endif
  308|     31|    } else {
  309|      0|      PR_DELETE(cv);
  ------------------
  |  |  110|      0|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
  310|      0|      cv = NULL;
  311|      0|    }
  312|     31|  }
  313|     31|  return cv;
  314|     31|} /* PR_NewCondVar */
PR_DestroyCondVar:
  316|     27|PR_IMPLEMENT(void) PR_DestroyCondVar(PRCondVar* cvar) {
  317|     27|  if (0 > PR_ATOMIC_DECREMENT(&cvar->notify_pending)) {
  ------------------
  |  |  123|     27|#define PR_ATOMIC_DECREMENT(val) __sync_sub_and_fetch(val, 1)
  ------------------
  |  Branch (317:7): [True: 27, False: 0]
  ------------------
  318|     27|    PRIntn rv = pthread_cond_destroy(&cvar->cv);
  319|     27|#  if defined(DEBUG)
  320|     27|    PR_ASSERT(0 == rv);
  ------------------
  |  |  208|     27|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 27, False: 0]
  |  |  ------------------
  ------------------
  321|     27|    memset(cvar, 0xaf, sizeof(PRCondVar));
  322|     27|    pt_debug.cvars_destroyed += 1;
  323|       |#  else
  324|       |    (void)rv;
  325|       |#  endif
  326|     27|    PR_Free(cvar);
  327|     27|  }
  328|     27|} /* PR_DestroyCondVar */
PR_NotifyAllCondVar:
  401|      9|PR_IMPLEMENT(PRStatus) PR_NotifyAllCondVar(PRCondVar* cvar) {
  402|      9|  PR_ASSERT(cvar != NULL);
  ------------------
  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  ------------------
  ------------------
  403|      9|  pt_PostNotifyToCvar(cvar, PR_TRUE);
  ------------------
  |  |  437|      9|#define PR_TRUE 1
  ------------------
  404|      9|  return PR_SUCCESS;
  405|      9|} /* PR_NotifyAllCondVar */
PR_NewMonitor:
  452|  6.17k|PR_IMPLEMENT(PRMonitor*) PR_NewMonitor(void) {
  453|  6.17k|  PRMonitor* mon;
  454|  6.17k|  int rv;
  455|       |
  456|  6.17k|  if (!_pr_initialized) {
  ------------------
  |  Branch (456:7): [True: 0, False: 6.17k]
  ------------------
  457|      0|    _PR_ImplicitInitialization();
  458|      0|  }
  459|       |
  460|  6.17k|  mon = PR_NEWZAP(PRMonitor);
  ------------------
  |  |   99|  6.17k|#define PR_NEWZAP(_struct) ((_struct*)PR_Calloc(1, sizeof(_struct)))
  ------------------
  461|  6.17k|  if (mon == NULL) {
  ------------------
  |  Branch (461:7): [True: 0, False: 6.17k]
  ------------------
  462|      0|    PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
  ------------------
  |  |   16|      0|#define PR_OUT_OF_MEMORY_ERROR                   (-6000L)
  ------------------
  463|      0|    return NULL;
  464|      0|  }
  465|       |
  466|  6.17k|  rv = _PT_PTHREAD_MUTEX_INIT(mon->lock, _pt_mattr);
  ------------------
  |  |   19|  6.17k|#define _PT_PTHREAD_MUTEX_INIT(m, a)      pthread_mutex_init(&(m), &(a))
  ------------------
  467|  6.17k|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  6.17k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 6.17k, False: 0]
  |  |  ------------------
  ------------------
  468|  6.17k|  if (0 != rv) {
  ------------------
  |  Branch (468:7): [True: 0, False: 6.17k]
  ------------------
  469|      0|    goto error1;
  470|      0|  }
  471|       |
  472|  6.17k|  _PT_PTHREAD_INVALIDATE_THR_HANDLE(mon->owner);
  ------------------
  |  |   70|  6.17k|#define _PT_PTHREAD_INVALIDATE_THR_HANDLE(t)  (t) = 0
  ------------------
  473|       |
  474|  6.17k|  rv = _PT_PTHREAD_COND_INIT(mon->entryCV, _pt_cvar_attr);
  ------------------
  |  |   33|  6.17k|#define _PT_PTHREAD_COND_INIT(m, a)       pthread_cond_init(&(m), &(a))
  ------------------
  475|  6.17k|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  6.17k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 6.17k, False: 0]
  |  |  ------------------
  ------------------
  476|  6.17k|  if (0 != rv) {
  ------------------
  |  Branch (476:7): [True: 0, False: 6.17k]
  ------------------
  477|      0|    goto error2;
  478|      0|  }
  479|       |
  480|  6.17k|  rv = _PT_PTHREAD_COND_INIT(mon->waitCV, _pt_cvar_attr);
  ------------------
  |  |   33|  6.17k|#define _PT_PTHREAD_COND_INIT(m, a)       pthread_cond_init(&(m), &(a))
  ------------------
  481|  6.17k|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  6.17k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 6.17k, False: 0]
  |  |  ------------------
  ------------------
  482|  6.17k|  if (0 != rv) {
  ------------------
  |  Branch (482:7): [True: 0, False: 6.17k]
  ------------------
  483|      0|    goto error3;
  484|      0|  }
  485|       |
  486|  6.17k|  mon->notifyTimes = 0;
  487|  6.17k|  mon->entryCount = 0;
  488|  6.17k|  mon->refCount = 1;
  489|  6.17k|  mon->name = NULL;
  490|  6.17k|  return mon;
  491|       |
  492|      0|error3:
  493|      0|  pthread_cond_destroy(&mon->entryCV);
  494|      0|error2:
  495|      0|  pthread_mutex_destroy(&mon->lock);
  496|      0|error1:
  497|      0|  PR_Free(mon);
  498|      0|  _PR_MD_MAP_DEFAULT_ERROR(rv);
  ------------------
  |  |   15|      0|#define _PR_MD_MAP_DEFAULT_ERROR    _MD_unix_map_default_error
  ------------------
  499|      0|  return NULL;
  500|      0|} /* PR_NewMonitor */
PR_NewNamedMonitor:
  502|      1|PR_IMPLEMENT(PRMonitor*) PR_NewNamedMonitor(const char* name) {
  503|      1|  PRMonitor* mon = PR_NewMonitor();
  504|      1|  if (mon) {
  ------------------
  |  Branch (504:7): [True: 1, False: 0]
  ------------------
  505|      1|    mon->name = name;
  506|      1|  }
  507|      1|  return mon;
  508|      1|}
PR_DestroyMonitor:
  510|  29.9k|PR_IMPLEMENT(void) PR_DestroyMonitor(PRMonitor* mon) {
  511|  29.9k|  int rv;
  512|       |
  513|  29.9k|  PR_ASSERT(mon != NULL);
  ------------------
  |  |  208|  29.9k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 29.9k, False: 0]
  |  |  ------------------
  ------------------
  514|  29.9k|  if (PR_ATOMIC_DECREMENT(&mon->refCount) == 0) {
  ------------------
  |  |  123|  29.9k|#define PR_ATOMIC_DECREMENT(val) __sync_sub_and_fetch(val, 1)
  ------------------
  |  Branch (514:7): [True: 6.16k, False: 23.7k]
  ------------------
  515|  6.16k|    rv = pthread_cond_destroy(&mon->waitCV);
  516|  6.16k|    PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  6.16k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 6.16k, False: 0]
  |  |  ------------------
  ------------------
  517|  6.16k|    rv = pthread_cond_destroy(&mon->entryCV);
  518|  6.16k|    PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  6.16k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 6.16k, False: 0]
  |  |  ------------------
  ------------------
  519|  6.16k|    rv = pthread_mutex_destroy(&mon->lock);
  520|  6.16k|    PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  6.16k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 6.16k, False: 0]
  |  |  ------------------
  ------------------
  521|  6.16k|#  if defined(DEBUG)
  522|  6.16k|    memset(mon, 0xaf, sizeof(PRMonitor));
  523|  6.16k|#  endif
  524|  6.16k|    PR_Free(mon);
  525|  6.16k|  }
  526|  29.9k|} /* PR_DestroyMonitor */
PR_EnterMonitor:
  558|  29.5k|PR_IMPLEMENT(void) PR_EnterMonitor(PRMonitor* mon) {
  559|  29.5k|  pthread_t self = pthread_self();
  560|  29.5k|  PRIntn rv;
  561|       |
  562|  29.5k|  PR_ASSERT(mon != NULL);
  ------------------
  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  ------------------
  ------------------
  563|  29.5k|  rv = pthread_mutex_lock(&mon->lock);
  564|  29.5k|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  ------------------
  ------------------
  565|  29.5k|  if (mon->entryCount != 0) {
  ------------------
  |  Branch (565:7): [True: 5.75k, False: 23.7k]
  ------------------
  566|  5.75k|    if (pthread_equal(mon->owner, self)) {
  ------------------
  |  Branch (566:9): [True: 5.75k, False: 0]
  ------------------
  567|  5.75k|      goto done;
  568|  5.75k|    }
  569|      0|    while (mon->entryCount != 0) {
  ------------------
  |  Branch (569:12): [True: 0, False: 0]
  ------------------
  570|      0|      rv = pthread_cond_wait(&mon->entryCV, &mon->lock);
  571|      0|      PR_ASSERT(0 == rv);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  572|      0|    }
  573|      0|  }
  574|       |  /* and now I have the monitor */
  575|  23.7k|  PR_ASSERT(0 == mon->notifyTimes);
  ------------------
  |  |  208|  23.7k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 23.7k, False: 0]
  |  |  ------------------
  ------------------
  576|  23.7k|  PR_ASSERT(_PT_PTHREAD_THR_HANDLE_IS_INVALID(mon->owner));
  ------------------
  |  |  208|  23.7k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 23.7k, False: 0]
  |  |  ------------------
  ------------------
  577|  23.7k|  _PT_PTHREAD_COPY_THR_HANDLE(self, mon->owner);
  ------------------
  |  |   72|  23.7k|#define _PT_PTHREAD_COPY_THR_HANDLE(st, dt)   (dt) = (st)
  ------------------
  578|       |
  579|  29.5k|done:
  580|  29.5k|  mon->entryCount += 1;
  581|  29.5k|  rv = pthread_mutex_unlock(&mon->lock);
  582|  29.5k|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  ------------------
  ------------------
  583|  29.5k|} /* PR_EnterMonitor */
PR_ExitMonitor:
  585|  29.5k|PR_IMPLEMENT(PRStatus) PR_ExitMonitor(PRMonitor* mon) {
  586|  29.5k|  pthread_t self = pthread_self();
  587|  29.5k|  PRIntn rv;
  588|  29.5k|  PRBool notifyEntryWaiter = PR_FALSE;
  ------------------
  |  |  438|  29.5k|#define PR_FALSE 0
  ------------------
  589|  29.5k|  PRIntn notifyTimes = 0;
  590|       |
  591|  29.5k|  PR_ASSERT(mon != NULL);
  ------------------
  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  ------------------
  ------------------
  592|  29.5k|  rv = pthread_mutex_lock(&mon->lock);
  593|  29.5k|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  ------------------
  ------------------
  594|       |  /* the entries should be > 0 and we'd better be the owner */
  595|  29.5k|  PR_ASSERT(mon->entryCount > 0);
  ------------------
  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  ------------------
  ------------------
  596|  29.5k|  PR_ASSERT(pthread_equal(mon->owner, self));
  ------------------
  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  ------------------
  ------------------
  597|  29.5k|  if (mon->entryCount == 0 || !pthread_equal(mon->owner, self)) {
  ------------------
  |  Branch (597:7): [True: 0, False: 29.5k]
  |  Branch (597:31): [True: 0, False: 29.5k]
  ------------------
  598|      0|    rv = pthread_mutex_unlock(&mon->lock);
  599|      0|    PR_ASSERT(0 == rv);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  600|      0|    return PR_FAILURE;
  601|      0|  }
  602|       |
  603|  29.5k|  mon->entryCount -= 1; /* reduce by one */
  604|  29.5k|  if (mon->entryCount == 0) {
  ------------------
  |  Branch (604:7): [True: 23.7k, False: 5.75k]
  ------------------
  605|       |    /* and if it transitioned to zero - notify an entry waiter */
  606|       |    /* make the owner unknown */
  607|  23.7k|    _PT_PTHREAD_INVALIDATE_THR_HANDLE(mon->owner);
  ------------------
  |  |   70|  23.7k|#define _PT_PTHREAD_INVALIDATE_THR_HANDLE(t)  (t) = 0
  ------------------
  608|  23.7k|    notifyEntryWaiter = PR_TRUE;
  ------------------
  |  |  437|  23.7k|#define PR_TRUE 1
  ------------------
  609|  23.7k|    notifyTimes = mon->notifyTimes;
  610|  23.7k|    mon->notifyTimes = 0;
  611|       |    /* We will access the members of 'mon' after unlocking mon->lock.
  612|       |     * Add a reference. */
  613|  23.7k|    PR_ATOMIC_INCREMENT(&mon->refCount);
  ------------------
  |  |  122|  23.7k|#define PR_ATOMIC_INCREMENT(val) __sync_add_and_fetch(val, 1)
  ------------------
  614|  23.7k|  }
  615|  29.5k|  rv = pthread_mutex_unlock(&mon->lock);
  616|  29.5k|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  ------------------
  ------------------
  617|  29.5k|  if (notifyEntryWaiter) {
  ------------------
  |  Branch (617:7): [True: 23.7k, False: 5.75k]
  ------------------
  618|  23.7k|    if (notifyTimes) {
  ------------------
  |  Branch (618:9): [True: 0, False: 23.7k]
  ------------------
  619|      0|      pt_PostNotifiesFromMonitor(&mon->waitCV, notifyTimes);
  620|      0|    }
  621|  23.7k|    rv = pthread_cond_signal(&mon->entryCV);
  622|  23.7k|    PR_ASSERT(0 == rv);
  ------------------
  |  |  208|  23.7k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 23.7k, False: 0]
  |  |  ------------------
  ------------------
  623|       |    /* We are done accessing the members of 'mon'. Release the
  624|       |     * reference. */
  625|  23.7k|    PR_DestroyMonitor(mon);
  626|  23.7k|  }
  627|  29.5k|  return PR_SUCCESS;
  628|  29.5k|} /* PR_ExitMonitor */
ptsynch.c:pt_PostNotifies:
   61|      9|static void pt_PostNotifies(PRLock* lock, PRBool unlock) {
   62|      9|  PRIntn index, rv;
   63|      9|  _PT_Notified post;
   64|      9|  _PT_Notified *notified, *prev = NULL;
   65|       |  /*
   66|       |   * Time to actually notify any conditions that were affected
   67|       |   * while the lock was held. Get a copy of the list that's in
   68|       |   * the lock structure and then zero the original. If it's
   69|       |   * linked to other such structures, we own that storage.
   70|       |   */
   71|      9|  post = lock->notified; /* a safe copy; we own the lock */
   72|       |
   73|      9|#  if defined(DEBUG)
   74|      9|  memset(&lock->notified, 0, sizeof(_PT_Notified)); /* reset */
   75|       |#  else
   76|       |  lock->notified.length = 0; /* these are really sufficient */
   77|       |  lock->notified.link = NULL;
   78|       |#  endif
   79|       |
   80|       |  /* should (may) we release lock before notifying? */
   81|      9|  if (unlock) {
  ------------------
  |  Branch (81:7): [True: 9, False: 0]
  ------------------
   82|      9|    rv = pthread_mutex_unlock(&lock->mutex);
   83|      9|    PR_ASSERT(0 == rv);
  ------------------
  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  ------------------
  ------------------
   84|      9|  }
   85|       |
   86|      9|  notified = &post; /* this is where we start */
   87|      9|  do {
   88|     18|    for (index = 0; index < notified->length; ++index) {
  ------------------
  |  Branch (88:21): [True: 9, False: 9]
  ------------------
   89|      9|      PRCondVar* cv = notified->cv[index].cv;
   90|      9|      PR_ASSERT(NULL != cv);
  ------------------
  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  ------------------
  ------------------
   91|      9|      PR_ASSERT(0 != notified->cv[index].times);
  ------------------
  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  ------------------
  ------------------
   92|      9|      if (-1 == notified->cv[index].times) {
  ------------------
  |  Branch (92:11): [True: 9, False: 0]
  ------------------
   93|      9|        rv = pthread_cond_broadcast(&cv->cv);
   94|      9|        PR_ASSERT(0 == rv);
  ------------------
  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  ------------------
  ------------------
   95|      9|      } else {
   96|      0|        while (notified->cv[index].times-- > 0) {
  ------------------
  |  Branch (96:16): [True: 0, False: 0]
  ------------------
   97|      0|          rv = pthread_cond_signal(&cv->cv);
   98|      0|          PR_ASSERT(0 == rv);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   99|      0|        }
  100|      0|      }
  101|      9|#  if defined(DEBUG)
  102|      9|      pt_debug.cvars_notified += 1;
  103|      9|      if (0 > PR_ATOMIC_DECREMENT(&cv->notify_pending)) {
  ------------------
  |  |  123|      9|#define PR_ATOMIC_DECREMENT(val) __sync_sub_and_fetch(val, 1)
  ------------------
  |  Branch (103:11): [True: 0, False: 9]
  ------------------
  104|      0|        pt_debug.delayed_cv_deletes += 1;
  105|      0|        PR_DestroyCondVar(cv);
  106|      0|      }
  107|       |#  else  /* defined(DEBUG) */
  108|       |      if (0 > PR_ATOMIC_DECREMENT(&cv->notify_pending)) {
  109|       |        PR_DestroyCondVar(cv);
  110|       |      }
  111|       |#  endif /* defined(DEBUG) */
  112|      9|    }
  113|      9|    prev = notified;
  114|      9|    notified = notified->link;
  115|      9|    if (&post != prev) {
  ------------------
  |  Branch (115:9): [True: 0, False: 9]
  ------------------
  116|      0|      PR_DELETE(prev);
  ------------------
  |  |  110|      0|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
  117|      0|    }
  118|      9|  } while (NULL != notified);
  ------------------
  |  Branch (118:12): [True: 0, False: 9]
  ------------------
  119|      9|} /* pt_PostNotifies */
ptsynch.c:pt_PostNotifyToCvar:
  258|      9|static void pt_PostNotifyToCvar(PRCondVar* cvar, PRBool broadcast) {
  259|      9|  PRIntn index = 0;
  260|      9|  _PT_Notified* notified = &cvar->lock->notified;
  261|       |
  262|      9|  PR_ASSERT(PR_TRUE == cvar->lock->locked);
  ------------------
  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  ------------------
  ------------------
  263|      9|  PR_ASSERT(pthread_equal(cvar->lock->owner, pthread_self()));
  ------------------
  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  ------------------
  ------------------
  264|      9|  PR_ASSERT(_PT_PTHREAD_MUTEX_IS_LOCKED(cvar->lock->mutex));
  ------------------
  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  ------------------
  ------------------
  265|       |
  266|      9|  while (1) {
  ------------------
  |  Branch (266:10): [Folded - Ignored]
  ------------------
  267|      9|    for (index = 0; index < notified->length; ++index) {
  ------------------
  |  Branch (267:21): [True: 0, False: 9]
  ------------------
  268|      0|      if (notified->cv[index].cv == cvar) {
  ------------------
  |  Branch (268:11): [True: 0, False: 0]
  ------------------
  269|      0|        if (broadcast) {
  ------------------
  |  Branch (269:13): [True: 0, False: 0]
  ------------------
  270|      0|          notified->cv[index].times = -1;
  271|      0|        } else if (-1 != notified->cv[index].times) {
  ------------------
  |  Branch (271:20): [True: 0, False: 0]
  ------------------
  272|      0|          notified->cv[index].times += 1;
  273|      0|        }
  274|      0|        return; /* we're finished */
  275|      0|      }
  276|      0|    }
  277|       |    /* if not full, enter new CV in this array */
  278|      9|    if (notified->length < PT_CV_NOTIFIED_LENGTH) {
  ------------------
  |  |  122|      9|#define PT_CV_NOTIFIED_LENGTH 6
  ------------------
  |  Branch (278:9): [True: 9, False: 0]
  ------------------
  279|      9|      break;
  280|      9|    }
  281|       |
  282|       |    /* if there's no link, create an empty array and link it */
  283|      0|    if (NULL == notified->link) {
  ------------------
  |  Branch (283:9): [True: 0, False: 0]
  ------------------
  284|      0|      notified->link = PR_NEWZAP(_PT_Notified);
  ------------------
  |  |   99|      0|#define PR_NEWZAP(_struct) ((_struct*)PR_Calloc(1, sizeof(_struct)))
  ------------------
  285|      0|    }
  286|      0|    notified = notified->link;
  287|      0|  }
  288|       |
  289|       |  /* A brand new entry in the array */
  290|      9|  (void)PR_ATOMIC_INCREMENT(&cvar->notify_pending);
  ------------------
  |  |  122|      9|#define PR_ATOMIC_INCREMENT(val) __sync_add_and_fetch(val, 1)
  ------------------
  291|      9|  notified->cv[index].times = (broadcast) ? -1 : 1;
  ------------------
  |  Branch (291:31): [True: 9, False: 0]
  ------------------
  292|      9|  notified->cv[index].cv = cvar;
  293|      9|  notified->length += 1;
  294|      9|} /* pt_PostNotifyToCvar */

PR_GetCurrentThread:
  581|  50.9M|PR_IMPLEMENT(PRThread*) PR_GetCurrentThread(void) {
  582|  50.9M|  void* thred;
  583|       |
  584|  50.9M|  if (!_pr_initialized) {
  ------------------
  |  Branch (584:7): [True: 0, False: 50.9M]
  ------------------
  585|      0|    _PR_ImplicitInitialization();
  586|      0|  }
  587|       |
  588|  50.9M|  _PT_PTHREAD_GETSPECIFIC(pt_book.key, thred);
  ------------------
  |  |   84|  50.9M|#define _PT_PTHREAD_GETSPECIFIC(k, r)    (r) = pthread_getspecific(k)
  ------------------
  589|  50.9M|  if (NULL == thred) {
  ------------------
  |  Branch (589:7): [True: 0, False: 50.9M]
  ------------------
  590|      0|    thred = pt_AttachThread();
  591|      0|  }
  592|  50.9M|  PR_ASSERT(NULL != thred);
  ------------------
  |  |  208|  50.9M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 50.9M, False: 0]
  |  |  ------------------
  ------------------
  593|  50.9M|  return (PRThread*)thred;
  594|  50.9M|} /* PR_GetCurrentThread */
_PR_InitThreads:
  835|      1|                     PRUintn maxPTDs) {
  836|      1|  int rv;
  837|      1|  PRThread* thred;
  838|       |
  839|      1|  PR_ASSERT(priority == PR_PRIORITY_NORMAL);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  840|       |
  841|       |#  ifdef _PR_NEED_PTHREAD_INIT
  842|       |  /*
  843|       |   * On BSD/OS (3.1 and 4.0), the pthread subsystem is lazily
  844|       |   * initialized, but pthread_self() fails to initialize
  845|       |   * pthreads and hence returns a null thread ID if invoked
  846|       |   * by the primordial thread before any other pthread call.
  847|       |   * So we explicitly initialize pthreads here.
  848|       |   */
  849|       |  pthread_init();
  850|       |#  endif
  851|       |
  852|       |#  if _POSIX_THREAD_PRIORITY_SCHEDULING > 0
  853|       |#    if defined(FREEBSD)
  854|       |  {
  855|       |    pthread_attr_t attr;
  856|       |    int policy;
  857|       |    /* get the min and max priorities of the default policy */
  858|       |    pthread_attr_init(&attr);
  859|       |    pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
  860|       |    pthread_attr_getschedpolicy(&attr, &policy);
  861|       |    pt_book.minPrio = sched_get_priority_min(policy);
  862|       |    PR_ASSERT(-1 != pt_book.minPrio);
  863|       |    pt_book.maxPrio = sched_get_priority_max(policy);
  864|       |    PR_ASSERT(-1 != pt_book.maxPrio);
  865|       |    pthread_attr_destroy(&attr);
  866|       |  }
  867|       |#    else
  868|       |  /*
  869|       |  ** These might be function evaluations
  870|       |  */
  871|       |  pt_book.minPrio = PT_PRIO_MIN;
  872|       |  pt_book.maxPrio = PT_PRIO_MAX;
  873|       |#    endif
  874|       |#  endif
  875|       |
  876|      1|  PR_ASSERT(NULL == pt_book.ml);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  877|      1|  pt_book.ml = PR_NewLock();
  878|      1|  PR_ASSERT(NULL != pt_book.ml);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  879|      1|  pt_book.cv = PR_NewCondVar(pt_book.ml);
  880|      1|  PR_ASSERT(NULL != pt_book.cv);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  881|      1|  thred = PR_NEWZAP(PRThread);
  ------------------
  |  |   99|      1|#define PR_NEWZAP(_struct) ((_struct*)PR_Calloc(1, sizeof(_struct)))
  ------------------
  882|      1|  PR_ASSERT(NULL != thred);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  883|      1|  thred->arg = NULL;
  884|      1|  thred->startFunc = NULL;
  885|      1|  thred->priority = priority;
  886|      1|  thred->id = pthread_self();
  887|      1|  thred->idSet = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  888|      1|#  ifdef _PR_NICE_PRIORITY_SCHEDULING
  889|      1|  thred->tid = gettid();
  890|      1|#  endif
  891|       |
  892|      1|  thred->state = (PT_THREAD_DETACHED | PT_THREAD_PRIMORD);
  ------------------
  |  |  138|      1|#define PT_THREAD_DETACHED  0x01    /* thread can't be joined */
  ------------------
                thred->state = (PT_THREAD_DETACHED | PT_THREAD_PRIMORD);
  ------------------
  |  |  141|      1|#define PT_THREAD_PRIMORD   0x08    /* this is the primordial thread */
  ------------------
  893|      1|  if (PR_SYSTEM_THREAD == type) {
  ------------------
  |  Branch (893:7): [True: 0, False: 1]
  ------------------
  894|      0|    thred->state |= PT_THREAD_SYSTEM;
  ------------------
  |  |  140|      0|#define PT_THREAD_SYSTEM    0x04    /* system (not user) thread */
  ------------------
  895|      0|    pt_book.system += 1;
  896|      0|    pt_book.this_many = 0;
  897|      1|  } else {
  898|      1|    pt_book.user += 1;
  899|      1|    pt_book.this_many = 1;
  900|      1|  }
  901|      1|  thred->next = thred->prev = NULL;
  902|      1|  pt_book.first = pt_book.last = thred;
  903|       |
  904|      1|  thred->stack = PR_NEWZAP(PRThreadStack);
  ------------------
  |  |   99|      1|#define PR_NEWZAP(_struct) ((_struct*)PR_Calloc(1, sizeof(_struct)))
  ------------------
  905|      1|  PR_ASSERT(thred->stack != NULL);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  906|      1|  thred->stack->stackSize = 0;
  907|      1|  thred->stack->thr = thred;
  908|      1|  _PR_InitializeStack(thred->stack);
  909|       |
  910|       |  /*
  911|       |   * Create a key for our use to store a backpointer in the pthread
  912|       |   * to our PRThread object. This object gets deleted when the thread
  913|       |   * returns from its root in the case of a detached thread. Other
  914|       |   * threads delete the objects in Join.
  915|       |   *
  916|       |   * NB: The destructor logic seems to have a bug so it isn't used.
  917|       |   * NBB: Oh really? I'm going to give it a spin - AOF 19 June 1998.
  918|       |   * More info - the problem is that pthreads calls the destructor
  919|       |   * eagerly as the thread returns from its root, rather than lazily
  920|       |   * after the thread is joined. Therefore, threads that are joining
  921|       |   * and holding PRThread references are actually holding pointers to
  922|       |   * nothing.
  923|       |   */
  924|      1|  rv = _PT_PTHREAD_KEY_CREATE(&pt_book.key, _pt_thread_death);
  ------------------
  |  |   81|      1|#define _PT_PTHREAD_KEY_CREATE           pthread_key_create
  ------------------
  925|      1|  if (0 != rv) {
  ------------------
  |  Branch (925:7): [True: 0, False: 1]
  ------------------
  926|      0|    PR_Assert("0 == rv", __FILE__, __LINE__);
  927|      0|  }
  928|      1|  pt_book.keyCreated = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  929|      1|  rv = pthread_setspecific(pt_book.key, thred);
  930|      1|  PR_ASSERT(0 == rv);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  931|      1|} /* _PR_InitThreads */
ptthread.c:_PR_InitializeStack:
   99|      1|static void _PR_InitializeStack(PRThreadStack* ts) {
  100|      1|  if (ts && (ts->stackTop == 0)) {
  ------------------
  |  Branch (100:7): [True: 1, False: 0]
  |  Branch (100:13): [True: 1, False: 0]
  ------------------
  101|      1|    ts->allocBase = (char*)&ts;
  102|      1|    ts->allocSize = ts->stackSize;
  103|       |
  104|       |    /*
  105|       |    ** Setup stackTop and stackBottom values.
  106|       |    */
  107|       |#  ifdef HAVE_STACK_GROWING_UP
  108|       |    ts->stackBottom = ts->allocBase + ts->stackSize;
  109|       |    ts->stackTop = ts->allocBase;
  110|       |#  else
  111|      1|    ts->stackTop = ts->allocBase;
  112|      1|    ts->stackBottom = ts->allocBase - ts->stackSize;
  113|      1|#  endif
  114|      1|  }
  115|      1|}

_PR_InitCMon:
  308|      1|void _PR_InitCMon(void) {
  309|      1|  _PR_NEW_LOCK_MCACHE();
  ------------------
  |  |   30|      1|#    define _PR_NEW_LOCK_MCACHE() (_pr_mcacheLock = PR_NewLock())
  ------------------
  310|      1|  ExpandMonitorCache(3);
  311|      1|}
prcmon.c:ExpandMonitorCache:
   94|      1|static PRStatus ExpandMonitorCache(PRUintn new_size_log2) {
   95|      1|  MonitorCacheEntry **old_hash_buckets, *p;
   96|      1|  PRUintn i, entries, old_num_hash_buckets, added;
   97|      1|  MonitorCacheEntry** new_hash_buckets;
   98|      1|  MonitorCacheEntryBlock* new_block;
   99|       |
  100|      1|  entries = 1L << new_size_log2;
  101|       |
  102|       |  /*
  103|       |  ** Expand the monitor-cache-entry free list
  104|       |  */
  105|      1|  new_block = (MonitorCacheEntryBlock*)PR_CALLOC(
  ------------------
  |  |   88|      1|#define PR_CALLOC(_size) (PR_Calloc(1, (_size)))
  ------------------
  106|      1|      sizeof(MonitorCacheEntryBlock) +
  107|      1|      (entries - 1) * sizeof(MonitorCacheEntry));
  108|      1|  if (NULL == new_block) {
  ------------------
  |  Branch (108:7): [True: 0, False: 1]
  ------------------
  109|      0|    return PR_FAILURE;
  110|      0|  }
  111|       |
  112|       |  /*
  113|       |  ** Allocate system monitors for the new monitor cache entries. If we
  114|       |  ** run out of system monitors, break out of the loop.
  115|       |  */
  116|      9|  for (i = 0, p = new_block->entries; i < entries; i++, p++) {
  ------------------
  |  Branch (116:39): [True: 8, False: 1]
  ------------------
  117|      8|    p->mon = PR_NewMonitor();
  118|      8|    if (!p->mon) {
  ------------------
  |  Branch (118:9): [True: 0, False: 8]
  ------------------
  119|      0|      break;
  120|      0|    }
  121|      8|  }
  122|      1|  added = i;
  123|      1|  if (added != entries) {
  ------------------
  |  Branch (123:7): [True: 0, False: 1]
  ------------------
  124|      0|    MonitorCacheEntryBlock* realloc_block;
  125|       |
  126|      0|    if (added == 0) {
  ------------------
  |  Branch (126:9): [True: 0, False: 0]
  ------------------
  127|       |      /* Totally out of system monitors. Lossage abounds */
  128|      0|      PR_DELETE(new_block);
  ------------------
  |  |  110|      0|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
  129|      0|      return PR_FAILURE;
  130|      0|    }
  131|       |
  132|       |    /*
  133|       |    ** We were able to allocate some of the system monitors. Use
  134|       |    ** realloc to shrink down the new_block memory. If that fails,
  135|       |    ** carry on with the too-large new_block.
  136|       |    */
  137|      0|    realloc_block = (MonitorCacheEntryBlock*)PR_REALLOC(
  ------------------
  |  |   77|      0|#define PR_REALLOC(_ptr, _size) (PR_Realloc((_ptr), (_size)))
  ------------------
  138|      0|        new_block, sizeof(MonitorCacheEntryBlock) +
  139|      0|                       (added - 1) * sizeof(MonitorCacheEntry));
  140|      0|    if (realloc_block) {
  ------------------
  |  Branch (140:9): [True: 0, False: 0]
  ------------------
  141|      0|      new_block = realloc_block;
  142|      0|    }
  143|      0|  }
  144|       |
  145|       |  /*
  146|       |  ** Now that we have allocated all of the system monitors, build up
  147|       |  ** the new free list. We can just update the free_list because we own
  148|       |  ** the mcache-lock and we aren't calling anyone who might want to use
  149|       |  ** it.
  150|       |  */
  151|      8|  for (i = 0, p = new_block->entries; i < added - 1; i++, p++) {
  ------------------
  |  Branch (151:39): [True: 7, False: 1]
  ------------------
  152|      7|    p->next = p + 1;
  153|      7|  }
  154|      1|  p->next = free_entries;
  155|      1|  free_entries = new_block->entries;
  156|      1|  num_free_entries += added;
  157|      1|  new_block->next = mcache_blocks;
  158|      1|  mcache_blocks = new_block;
  159|       |
  160|       |  /* Try to expand the hash table */
  161|      1|  new_hash_buckets =
  162|      1|      (MonitorCacheEntry**)PR_CALLOC(entries * sizeof(MonitorCacheEntry*));
  ------------------
  |  |   88|      1|#define PR_CALLOC(_size) (PR_Calloc(1, (_size)))
  ------------------
  163|      1|  if (NULL == new_hash_buckets) {
  ------------------
  |  Branch (163:7): [True: 0, False: 1]
  ------------------
  164|       |    /*
  165|       |    ** Partial lossage. In this situation we don't get any more hash
  166|       |    ** buckets, which just means that the table lookups will take
  167|       |    ** longer. This is bad, but not fatal
  168|       |    */
  169|      0|    PR_LOG(_pr_cmon_lm, PR_LOG_WARNING,
  ------------------
  |  |  177|      0|    PR_BEGIN_MACRO             \
  |  |  ------------------
  |  |  |  |  123|      0|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  178|      0|      if (PR_LOG_TEST(_module,_level)) { \
  |  |  ------------------
  |  |  |  |  167|      0|    ((_module)->level >= (_level))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (167:5): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      0|      PR_LogPrint _args;         \
  |  |  180|      0|      }                     \
  |  |  181|      0|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|      0|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|      0|           ("unable to grow monitor cache hash buckets"));
  171|      0|    return PR_SUCCESS;
  172|      0|  }
  173|       |
  174|       |  /*
  175|       |  ** Compute new hash mask value. This value is used to mask an address
  176|       |  ** until it's bits are in the right spot for indexing into the hash
  177|       |  ** table.
  178|       |  */
  179|      1|  hash_mask = entries - 1;
  180|       |
  181|       |  /*
  182|       |  ** Expand the hash table. We have to rehash everything in the old
  183|       |  ** table into the new table.
  184|       |  */
  185|      1|  old_hash_buckets = hash_buckets;
  186|      1|  old_num_hash_buckets = num_hash_buckets;
  187|      1|  for (i = 0; i < old_num_hash_buckets; i++) {
  ------------------
  |  Branch (187:15): [True: 0, False: 1]
  ------------------
  188|      0|    p = old_hash_buckets[i];
  189|      0|    while (p) {
  ------------------
  |  Branch (189:12): [True: 0, False: 0]
  ------------------
  190|      0|      MonitorCacheEntry* next = p->next;
  191|       |
  192|       |      /* Hash based on new table size, and then put p in the new table */
  193|      0|      PRUintn hash = HASH(p->address);
  ------------------
  |  |   78|      0|  ((PRUint32)(((PRUptrdiff)(address) >> 2) ^ ((PRUptrdiff)(address) >> 10)) & \
  |  |   79|      0|   hash_mask)
  ------------------
  194|      0|      p->next = new_hash_buckets[hash];
  195|      0|      new_hash_buckets[hash] = p;
  196|       |
  197|      0|      p = next;
  198|      0|    }
  199|      0|  }
  200|       |
  201|       |  /*
  202|       |  ** Switch over to new hash table and THEN call free of the old
  203|       |  ** table. Since free might re-enter _pr_mcache_lock, things would
  204|       |  ** break terribly if it used the old hash table.
  205|       |  */
  206|      1|  hash_buckets = new_hash_buckets;
  207|      1|  num_hash_buckets = entries;
  208|      1|  num_hash_buckets_log2 = new_size_log2;
  209|      1|  PR_DELETE(old_hash_buckets);
  ------------------
  |  |  110|      1|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
  210|       |
  211|      1|  PR_LOG(
  ------------------
  |  |  177|      1|    PR_BEGIN_MACRO             \
  |  |  ------------------
  |  |  |  |  123|      1|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  178|      1|      if (PR_LOG_TEST(_module,_level)) { \
  |  |  ------------------
  |  |  |  |  167|      1|    ((_module)->level >= (_level))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (167:5): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      0|      PR_LogPrint _args;         \
  |  |  180|      0|      }                     \
  |  |  181|      1|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|      1|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  212|      1|      _pr_cmon_lm, PR_LOG_NOTICE,
  213|      1|      ("expanded monitor cache to %d (buckets %d)", num_free_entries, entries));
  214|       |
  215|      1|  return PR_SUCCESS;
  216|      1|} /* ExpandMonitorCache */

_PR_InitRWLocks:
  367|      1|void _PR_InitRWLocks(void) {
  368|       |  /*
  369|       |   * allocated thread-private-data index for rwlock list
  370|       |   */
  371|      1|  if (PR_NewThreadPrivateIndex(&pr_thread_rwlock_key, _PR_RELEASE_LOCK_STACK) ==
  ------------------
  |  Branch (371:7): [True: 0, False: 1]
  ------------------
  372|      1|      PR_FAILURE) {
  373|      0|    pr_thread_rwlock_alloc_failed = 1;
  374|      0|    return;
  375|      0|  }
  376|      1|}

_PR_InitTPD:
   60|      1|void _PR_InitTPD(void) {
   61|      1|  _pr_tpd_destructors = (PRThreadPrivateDTOR*)PR_CALLOC(
  ------------------
  |  |   88|      1|#define PR_CALLOC(_size) (PR_Calloc(1, (_size)))
  ------------------
   62|      1|      _PR_TPD_LIMIT * sizeof(PRThreadPrivateDTOR*));
   63|      1|  PR_ASSERT(NULL != _pr_tpd_destructors);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
   64|      1|  _pr_tpd_length = _PR_TPD_LIMIT;
  ------------------
  |  |   49|      1|#define _PR_TPD_LIMIT 128             /* arbitary limit on the TPD slots */
  ------------------
   65|      1|}
PR_NewThreadPrivateIndex:
   93|      2|PR_NewThreadPrivateIndex(PRUintn* newIndex, PRThreadPrivateDTOR dtor) {
   94|      2|  PRStatus rv;
   95|      2|  PRInt32 index;
   96|       |
   97|      2|  if (!_pr_initialized) {
  ------------------
  |  Branch (97:7): [True: 0, False: 2]
  ------------------
   98|      0|    _PR_ImplicitInitialization();
   99|      0|  }
  100|       |
  101|      2|  PR_ASSERT(NULL != newIndex);
  ------------------
  |  |  208|      2|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  102|      2|  PR_ASSERT(NULL != _pr_tpd_destructors);
  ------------------
  |  |  208|      2|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  103|       |
  104|      2|  index = PR_ATOMIC_INCREMENT(&_pr_tpd_highwater) - 1; /* allocate index */
  ------------------
  |  |  122|      2|#define PR_ATOMIC_INCREMENT(val) __sync_add_and_fetch(val, 1)
  ------------------
  105|      2|  if (_PR_TPD_LIMIT <= index) {
  ------------------
  |  |   49|      2|#define _PR_TPD_LIMIT 128             /* arbitary limit on the TPD slots */
  ------------------
  |  Branch (105:7): [True: 0, False: 2]
  ------------------
  106|      0|    PR_SetError(PR_TPD_RANGE_ERROR, 0);
  ------------------
  |  |  100|      0|#define PR_TPD_RANGE_ERROR                       (-5972L)
  ------------------
  107|      0|    rv = PR_FAILURE; /* that's just wrong */
  108|      2|  } else {
  109|      2|    _pr_tpd_destructors[index] = dtor; /* record destructor @index */
  110|      2|    *newIndex = (PRUintn)index;        /* copy into client's location */
  111|      2|    rv = PR_SUCCESS;                   /* that's okay */
  112|      2|  }
  113|       |
  114|      2|  return rv;
  115|      2|}
PR_SetThreadPrivate:
  131|      2|PR_IMPLEMENT(PRStatus) PR_SetThreadPrivate(PRUintn index, void* priv) {
  132|      2|  PRThread* self = PR_GetCurrentThread();
  133|       |
  134|       |  /*
  135|       |  ** To improve performance, we don't check if the index has been
  136|       |  ** allocated.
  137|       |  */
  138|      2|  if (index >= _PR_TPD_LIMIT) {
  ------------------
  |  |   49|      2|#define _PR_TPD_LIMIT 128             /* arbitary limit on the TPD slots */
  ------------------
  |  Branch (138:7): [True: 0, False: 2]
  ------------------
  139|      0|    PR_SetError(PR_TPD_RANGE_ERROR, 0);
  ------------------
  |  |  100|      0|#define PR_TPD_RANGE_ERROR                       (-5972L)
  ------------------
  140|      0|    return PR_FAILURE;
  141|      0|  }
  142|       |
  143|      2|  PR_ASSERT(((NULL == self->privateData) && (0 == self->tpdLength)) ||
  ------------------
  |  |  208|      8|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:7): [True: 1, False: 1]
  |  |  |  Branch (208:7): [True: 1, False: 0]
  |  |  |  Branch (208:7): [True: 1, False: 0]
  |  |  |  Branch (208:7): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  144|      2|            ((NULL != self->privateData) && (0 != self->tpdLength)));
  145|       |
  146|       |  /*
  147|       |  ** If this thread does not have a sufficient vector for the index
  148|       |  ** being set, go ahead and extend this vector now.
  149|       |  */
  150|      2|  if ((NULL == self->privateData) || (self->tpdLength <= index)) {
  ------------------
  |  Branch (150:7): [True: 1, False: 1]
  |  Branch (150:38): [True: 0, False: 1]
  ------------------
  151|      1|    void* extension = PR_CALLOC(_pr_tpd_length * sizeof(void*));
  ------------------
  |  |   88|      1|#define PR_CALLOC(_size) (PR_Calloc(1, (_size)))
  ------------------
  152|      1|    if (NULL == extension) {
  ------------------
  |  Branch (152:9): [True: 0, False: 1]
  ------------------
  153|      0|      PR_SetError(PR_OUT_OF_MEMORY_ERROR, 0);
  ------------------
  |  |   16|      0|#define PR_OUT_OF_MEMORY_ERROR                   (-6000L)
  ------------------
  154|      0|      return PR_FAILURE;
  155|      0|    }
  156|      1|    if (self->privateData) {
  ------------------
  |  Branch (156:9): [True: 0, False: 1]
  ------------------
  157|      0|      (void)memcpy(extension, self->privateData,
  158|      0|                   self->tpdLength * sizeof(void*));
  159|      0|      PR_DELETE(self->privateData);
  ------------------
  |  |  110|      0|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
  160|      0|    }
  161|      1|    self->tpdLength = _pr_tpd_length;
  162|      1|    self->privateData = (void**)extension;
  163|      1|  }
  164|       |  /*
  165|       |  ** There wasn't much chance of having to call the destructor
  166|       |  ** unless the slot already existed.
  167|       |  */
  168|      1|  else if (self->privateData[index] && _pr_tpd_destructors[index]) {
  ------------------
  |  Branch (168:12): [True: 1, False: 0]
  |  Branch (168:40): [True: 1, False: 0]
  ------------------
  169|      1|    void* data = self->privateData[index];
  170|      1|    self->privateData[index] = NULL;
  171|      1|    (*_pr_tpd_destructors[index])(data);
  172|      1|  }
  173|       |
  174|      2|  PR_ASSERT(index < self->tpdLength);
  ------------------
  |  |  208|      2|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 2, False: 0]
  |  |  ------------------
  ------------------
  175|      2|  self->privateData[index] = priv;
  176|       |
  177|      2|  return PR_SUCCESS;
  178|      2|}
PR_GetThreadPrivate:
  189|  68.1k|PR_IMPLEMENT(void*) PR_GetThreadPrivate(PRUintn index) {
  190|  68.1k|  PRThread* self = PR_GetCurrentThread();
  191|  68.1k|  void* tpd = ((NULL == self->privateData) || (index >= self->tpdLength))
  ------------------
  |  Branch (191:16): [True: 1, False: 68.1k]
  |  Branch (191:47): [True: 0, False: 68.1k]
  ------------------
  192|  68.1k|                  ? NULL
  193|  68.1k|                  : self->privateData[index];
  194|       |
  195|  68.1k|  return tpd;
  196|  68.1k|}

_ZN11NSSDatabaseC2Ev:
   15|      1|  NSSDatabase() { assert(NSS_NoDB_Init(nullptr) == SECSuccess); }
_ZN11NSSDatabaseD2Ev:
   16|      1|  ~NSSDatabase() { assert(NSS_Shutdown() == SECSuccess); }

LLVMFuzzerTestOneInput:
   15|  8.60k|extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
   16|  8.60k|  static NSSDatabase db = NSSDatabase();
   17|       |
   18|  8.60k|  CERTCertificate *cert = CERT_DecodeCertFromPackage((char *)data, (int)size);
   19|  8.60k|  if (cert) {
  ------------------
  |  Branch (19:7): [True: 5.75k, False: 2.85k]
  ------------------
   20|  5.75k|    SECCertificateUsage usage;
   21|  5.75k|    (void)CERT_VerifyCertificateNow(CERT_GetDefaultCertDB(), cert, PR_TRUE,
  ------------------
  |  |  437|  5.75k|#define PR_TRUE 1
  ------------------
   22|  5.75k|                                    certificateUsageCheckAllUsages, nullptr,
  ------------------
  |  |  485|  5.75k|#define certificateUsageCheckAllUsages (0x0000)
  ------------------
   23|  5.75k|                                    &usage);
   24|  5.75k|    (void)CERT_VerifyCertName(cert, "fuzz.host");
   25|       |
   26|  5.75k|    CERT_DestroyCertificate(cert);
   27|  5.75k|  }
   28|       |
   29|  8.60k|  return 0;
   30|  8.60k|}

nssArena_verifyPointer:
  153|  30.4k|{
  154|  30.4k|    PRStatus rv;
  155|       |
  156|  30.4k|    rv = nssPointerTracker_initialize(&arena_pointer_tracker);
  157|  30.4k|    if (PR_SUCCESS != rv) {
  ------------------
  |  Branch (157:9): [True: 0, False: 30.4k]
  ------------------
  158|       |        /*
  159|       |         * This is a little disingenious.  We have to initialize the
  160|       |         * tracker, because someone could "legitimately" try to verify
  161|       |         * an arena pointer before one is ever created.  And this step
  162|       |         * might fail, due to lack of memory.  But the only way that
  163|       |         * this step can fail is if it's doing the call_once stuff,
  164|       |         * (later calls just no-op).  And if it didn't no-op, there
  165|       |         * aren't any valid arenas.. so the argument certainly isn't one.
  166|       |         */
  167|      0|        nss_SetError(NSS_ERROR_INVALID_ARENA);
  168|      0|        return PR_FAILURE;
  169|      0|    }
  170|       |
  171|  30.4k|    rv = nssPointerTracker_verify(&arena_pointer_tracker, arena);
  172|  30.4k|    if (PR_SUCCESS != rv) {
  ------------------
  |  Branch (172:9): [True: 0, False: 30.4k]
  ------------------
  173|      0|        nss_SetError(NSS_ERROR_INVALID_ARENA);
  174|      0|        return PR_FAILURE;
  175|      0|    }
  176|       |
  177|  30.4k|    return PR_SUCCESS;
  178|  30.4k|}
NSSArena_Create:
  328|      2|{
  329|      2|    nss_ClearErrorStack();
  330|      2|    return nssArena_Create();
  331|      2|}
nssArena_Create:
  350|  21.1k|{
  351|  21.1k|    NSSArena *rv = (NSSArena *)NULL;
  352|       |
  353|  21.1k|    rv = nss_ZNEW((NSSArena *)NULL, NSSArena);
  ------------------
  |  |  348|  21.1k|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
  354|  21.1k|    if ((NSSArena *)NULL == rv) {
  ------------------
  |  Branch (354:9): [True: 0, False: 21.1k]
  ------------------
  355|      0|        nss_SetError(NSS_ERROR_NO_MEMORY);
  356|      0|        return (NSSArena *)NULL;
  357|      0|    }
  358|       |
  359|  21.1k|    rv->lock = PR_NewLock();
  360|  21.1k|    if ((PRLock *)NULL == rv->lock) {
  ------------------
  |  Branch (360:9): [True: 0, False: 21.1k]
  ------------------
  361|      0|        (void)nss_ZFreeIf(rv);
  362|      0|        nss_SetError(NSS_ERROR_NO_MEMORY);
  363|      0|        return (NSSArena *)NULL;
  364|      0|    }
  365|       |
  366|       |    /*
  367|       |     * Arena sizes.  The current security code has 229 occurrences of
  368|       |     * PORT_NewArena.  The default chunksizes specified break down as
  369|       |     *
  370|       |     *  Size    Mult.   Specified as
  371|       |     *   512       1    512
  372|       |     *  1024       7    1024
  373|       |     *  2048       5    2048
  374|       |     *  2048       5    CRMF_DEFAULT_ARENA_SIZE
  375|       |     *  2048     190    DER_DEFAULT_CHUNKSIZE
  376|       |     *  2048      20    SEC_ASN1_DEFAULT_ARENA_SIZE
  377|       |     *  4096       1    4096
  378|       |     *
  379|       |     * Obviously this "default chunksize" flexibility isn't very
  380|       |     * useful to us, so I'll just pick 2048.
  381|       |     */
  382|       |
  383|  21.1k|    PL_InitArenaPool(&rv->pool, "NSS", 2048, sizeof(double));
  384|       |
  385|  21.1k|#ifdef DEBUG
  386|  21.1k|    {
  387|  21.1k|        PRStatus st;
  388|  21.1k|        st = arena_add_pointer(rv);
  389|  21.1k|        if (PR_SUCCESS != st) {
  ------------------
  |  Branch (389:13): [True: 0, False: 21.1k]
  ------------------
  390|      0|            PL_FinishArenaPool(&rv->pool);
  391|      0|            PR_DestroyLock(rv->lock);
  392|      0|            (void)nss_ZFreeIf(rv);
  393|      0|            return (NSSArena *)NULL;
  394|      0|        }
  395|  21.1k|    }
  396|  21.1k|#endif /* DEBUG */
  397|       |
  398|  21.1k|    return rv;
  399|  21.1k|}
NSSArena_Destroy:
  419|  7.05k|{
  420|  7.05k|    nss_ClearErrorStack();
  421|       |
  422|  7.05k|#ifdef DEBUG
  423|  7.05k|    if (PR_SUCCESS != nssArena_verifyPointer(arena)) {
  ------------------
  |  Branch (423:9): [True: 0, False: 7.05k]
  ------------------
  424|      0|        return PR_FAILURE;
  425|      0|    }
  426|  7.05k|#endif /* DEBUG */
  427|       |
  428|  7.05k|    return nssArena_Destroy(arena);
  429|  7.05k|}
nssArena_Destroy:
  449|  21.1k|{
  450|  21.1k|    PRLock *lock;
  451|       |
  452|       |#ifdef NSSDEBUG
  453|       |    if (PR_SUCCESS != nssArena_verifyPointer(arena)) {
  454|       |        return PR_FAILURE;
  455|       |    }
  456|       |#endif /* NSSDEBUG */
  457|       |
  458|  21.1k|    if ((PRLock *)NULL == arena->lock) {
  ------------------
  |  Branch (458:9): [True: 0, False: 21.1k]
  ------------------
  459|       |        /* Just got destroyed */
  460|      0|        nss_SetError(NSS_ERROR_INVALID_ARENA);
  461|      0|        return PR_FAILURE;
  462|      0|    }
  463|  21.1k|    PR_Lock(arena->lock);
  464|       |
  465|  21.1k|#ifdef DEBUG
  466|  21.1k|    if (PR_SUCCESS != arena_remove_pointer(arena)) {
  ------------------
  |  Branch (466:9): [True: 0, False: 21.1k]
  ------------------
  467|      0|        PR_Unlock(arena->lock);
  468|      0|        return PR_FAILURE;
  469|      0|    }
  470|  21.1k|#endif /* DEBUG */
  471|       |
  472|  21.1k|#ifdef ARENA_DESTRUCTOR_LIST
  473|       |    /* Note that the arena is locked at this time */
  474|  21.1k|    nss_arena_call_destructor_chain(arena->first_destructor);
  475|  21.1k|#endif /* ARENA_DESTRUCTOR_LIST */
  476|       |
  477|  21.1k|    PL_FinishArenaPool(&arena->pool);
  478|  21.1k|    lock = arena->lock;
  479|  21.1k|    arena->lock = (PRLock *)NULL;
  480|  21.1k|    PR_Unlock(lock);
  481|  21.1k|    PR_DestroyLock(lock);
  482|  21.1k|    (void)nss_ZFreeIf(arena);
  483|  21.1k|    return PR_SUCCESS;
  484|  21.1k|}
nss_ZAlloc:
  823|   171k|{
  824|   171k|    struct pointer_header *h;
  825|   171k|    PRUint32 my_size = size + sizeof(struct pointer_header);
  826|       |
  827|   171k|    if (my_size < sizeof(struct pointer_header)) {
  ------------------
  |  Branch (827:9): [True: 0, False: 171k]
  ------------------
  828|       |        /* Wrapped */
  829|      0|        nss_SetError(NSS_ERROR_NO_MEMORY);
  830|      0|        return (void *)NULL;
  831|      0|    }
  832|       |
  833|   171k|    if ((NSSArena *)NULL == arenaOpt) {
  ------------------
  |  Branch (833:9): [True: 103k, False: 67.2k]
  ------------------
  834|       |        /* Heap allocation, no locking required. */
  835|   103k|        h = (struct pointer_header *)PR_Calloc(1, my_size);
  836|   103k|        if ((struct pointer_header *)NULL == h) {
  ------------------
  |  Branch (836:13): [True: 0, False: 103k]
  ------------------
  837|      0|            nss_SetError(NSS_ERROR_NO_MEMORY);
  838|      0|            return (void *)NULL;
  839|      0|        }
  840|       |
  841|   103k|        h->arena = (NSSArena *)NULL;
  842|   103k|        h->size = size;
  843|       |        /* We used calloc: it's already zeroed */
  844|       |
  845|   103k|        return (void *)((char *)h + sizeof(struct pointer_header));
  846|   103k|    } else {
  847|  67.2k|        void *rv;
  848|       |/* Arena allocation */
  849|       |#ifdef NSSDEBUG
  850|       |        if (PR_SUCCESS != nssArena_verifyPointer(arenaOpt)) {
  851|       |            return (void *)NULL;
  852|       |        }
  853|       |#endif /* NSSDEBUG */
  854|       |
  855|  67.2k|        if ((PRLock *)NULL == arenaOpt->lock) {
  ------------------
  |  Branch (855:13): [True: 0, False: 67.2k]
  ------------------
  856|       |            /* Just got destroyed */
  857|      0|            nss_SetError(NSS_ERROR_INVALID_ARENA);
  858|      0|            return (void *)NULL;
  859|      0|        }
  860|  67.2k|        PR_Lock(arenaOpt->lock);
  861|       |
  862|  67.2k|#ifdef ARENA_THREADMARK
  863|  67.2k|        if ((PRThread *)NULL != arenaOpt->marking_thread) {
  ------------------
  |  Branch (863:13): [True: 0, False: 67.2k]
  ------------------
  864|      0|            if (PR_GetCurrentThread() != arenaOpt->marking_thread) {
  ------------------
  |  Branch (864:17): [True: 0, False: 0]
  ------------------
  865|      0|                nss_SetError(NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD);
  866|      0|                PR_Unlock(arenaOpt->lock);
  867|      0|                return (void *)NULL;
  868|      0|            }
  869|      0|        }
  870|  67.2k|#endif /* ARENA_THREADMARK */
  871|       |
  872|  67.2k|        rv = nss_zalloc_arena_locked(arenaOpt, size);
  873|       |
  874|  67.2k|        PR_Unlock(arenaOpt->lock);
  875|  67.2k|        return rv;
  876|  67.2k|    }
  877|       |    /*NOTREACHED*/
  878|   171k|}
nss_ZFreeIf:
  923|   122k|{
  924|   122k|    struct pointer_header *h;
  925|       |
  926|   122k|    if ((void *)NULL == pointer) {
  ------------------
  |  Branch (926:9): [True: 7.05k, False: 115k]
  ------------------
  927|  7.05k|        return PR_SUCCESS;
  928|  7.05k|    }
  929|       |
  930|   115k|    h = (struct pointer_header *)((char *)pointer -
  931|   115k|                                  sizeof(struct pointer_header));
  932|       |
  933|       |    /* Check any magic here */
  934|       |
  935|   115k|    if ((NSSArena *)NULL == h->arena) {
  ------------------
  |  Branch (935:9): [True: 103k, False: 11.6k]
  ------------------
  936|       |        /* Heap */
  937|   103k|        (void)nsslibc_memset(pointer, 0, h->size);
  938|   103k|        PR_Free(h);
  939|   103k|        return PR_SUCCESS;
  940|   103k|    } else {
  941|       |/* Arena */
  942|       |#ifdef NSSDEBUG
  943|       |        if (PR_SUCCESS != nssArena_verifyPointer(h->arena)) {
  944|       |            return PR_FAILURE;
  945|       |        }
  946|       |#endif /* NSSDEBUG */
  947|       |
  948|  11.6k|        if ((PRLock *)NULL == h->arena->lock) {
  ------------------
  |  Branch (948:13): [True: 0, False: 11.6k]
  ------------------
  949|       |            /* Just got destroyed.. so this pointer is invalid */
  950|      0|            nss_SetError(NSS_ERROR_INVALID_POINTER);
  951|      0|            return PR_FAILURE;
  952|      0|        }
  953|  11.6k|        PR_Lock(h->arena->lock);
  954|       |
  955|  11.6k|        (void)nsslibc_memset(pointer, 0, h->size);
  956|       |
  957|       |        /* No way to "free" it within an NSPR arena. */
  958|       |
  959|  11.6k|        PR_Unlock(h->arena->lock);
  960|  11.6k|        return PR_SUCCESS;
  961|  11.6k|    }
  962|       |    /*NOTREACHED*/
  963|   115k|}
nssArena_Shutdown:
 1137|      1|{
 1138|      1|    PRStatus rv = PR_SUCCESS;
 1139|      1|#ifdef DEBUG
 1140|      1|    rv = nssPointerTracker_finalize(&arena_pointer_tracker);
 1141|      1|#endif
 1142|      1|    return rv;
 1143|      1|}
arena.c:arena_add_pointer:
  100|  21.1k|{
  101|  21.1k|    PRStatus rv;
  102|       |
  103|  21.1k|    rv = nssPointerTracker_initialize(&arena_pointer_tracker);
  104|  21.1k|    if (PR_SUCCESS != rv) {
  ------------------
  |  Branch (104:9): [True: 0, False: 21.1k]
  ------------------
  105|      0|        return rv;
  106|      0|    }
  107|       |
  108|  21.1k|    rv = nssPointerTracker_add(&arena_pointer_tracker, arena);
  109|  21.1k|    if (PR_SUCCESS != rv) {
  ------------------
  |  Branch (109:9): [True: 0, False: 21.1k]
  ------------------
  110|      0|        NSSError e = NSS_GetError();
  111|      0|        if (NSS_ERROR_NO_MEMORY != e) {
  ------------------
  |  Branch (111:13): [True: 0, False: 0]
  ------------------
  112|      0|            nss_SetError(NSS_ERROR_INTERNAL_ERROR);
  113|      0|        }
  114|       |
  115|      0|        return rv;
  116|      0|    }
  117|       |
  118|  21.1k|    return PR_SUCCESS;
  119|  21.1k|}
arena.c:arena_remove_pointer:
  123|  21.1k|{
  124|  21.1k|    PRStatus rv;
  125|       |
  126|  21.1k|    rv = nssPointerTracker_remove(&arena_pointer_tracker, arena);
  127|  21.1k|    if (PR_SUCCESS != rv) {
  ------------------
  |  Branch (127:9): [True: 0, False: 21.1k]
  ------------------
  128|      0|        nss_SetError(NSS_ERROR_INTERNAL_ERROR);
  129|      0|    }
  130|       |
  131|  21.1k|    return rv;
  132|  21.1k|}
arena.c:nss_arena_call_destructor_chain:
  304|  21.1k|{
  305|  21.1k|    for (; it; it = it->next) {
  ------------------
  |  Branch (305:12): [True: 0, False: 21.1k]
  ------------------
  306|      0|        (*(it->destructor))(it->arg);
  307|      0|    }
  308|  21.1k|}
arena.c:nss_zalloc_arena_locked:
  746|  67.2k|{
  747|  67.2k|    void *p;
  748|  67.2k|    void *rv;
  749|  67.2k|    struct pointer_header *h;
  750|  67.2k|    PRUint32 my_size = size + sizeof(struct pointer_header);
  751|  67.2k|    PL_ARENA_ALLOCATE(p, &arena->pool, my_size);
  ------------------
  |  |  150|  67.2k|    PR_BEGIN_MACRO \
  |  |  ------------------
  |  |  |  |  123|  67.2k|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  151|  67.2k|        PLArena *_a = (pool)->current; \
  |  |  152|  67.2k|        PRUint32 _nb = PL_ARENA_ALIGN(pool, (PRUint32)nb); \
  |  |  ------------------
  |  |  |  |  146|  67.2k|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  |  |  ------------------
  |  |  153|  67.2k|        PRUword _p = _a->avail; \
  |  |  154|  67.2k|        if (_nb < (PRUint32)nb) { \
  |  |  ------------------
  |  |  |  Branch (154:13): [True: 0, False: 67.2k]
  |  |  ------------------
  |  |  155|      0|            _p = 0; \
  |  |  156|  67.2k|        } else if (_nb > (_a->limit - _a->avail)) { \
  |  |  ------------------
  |  |  |  Branch (156:20): [True: 20.6k, False: 46.5k]
  |  |  ------------------
  |  |  157|  20.6k|            _p = (PRUword)PL_ArenaAllocate(pool, _nb); \
  |  |  158|  46.5k|        } else { \
  |  |  159|  46.5k|            _a->avail += _nb; \
  |  |  160|  46.5k|        } \
  |  |  161|  67.2k|        p = (void *)_p; \
  |  |  162|  67.2k|        if (p) { \
  |  |  ------------------
  |  |  |  Branch (162:13): [True: 67.2k, False: 0]
  |  |  ------------------
  |  |  163|  67.2k|            PL_MAKE_MEM_UNDEFINED(p, (PRUint32)nb); \
  |  |  164|  67.2k|            PL_ArenaCountAllocation(pool, (PRUint32)nb); \
  |  |  165|  67.2k|        } \
  |  |  166|  67.2k|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|  67.2k|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  752|  67.2k|    if ((void *)NULL == p) {
  ------------------
  |  Branch (752:9): [True: 0, False: 67.2k]
  ------------------
  753|      0|        nss_SetError(NSS_ERROR_NO_MEMORY);
  754|      0|        return (void *)NULL;
  755|      0|    }
  756|       |    /*
  757|       |     * Do this before we unlock.  This way if the user is using
  758|       |     * an arena in one thread while destroying it in another, he'll
  759|       |     * fault/FMR in his code, not ours.
  760|       |     */
  761|  67.2k|    h = (struct pointer_header *)p;
  762|  67.2k|    h->arena = arena;
  763|  67.2k|    h->size = size;
  764|  67.2k|    rv = (void *)((char *)h + sizeof(struct pointer_header));
  765|  67.2k|    (void)nsslibc_memset(rv, 0, size);
  766|  67.2k|    return rv;
  767|  67.2k|}

NSS_GetErrorStack:
  219|    411|{
  220|    411|    error_stack *es = error_get_my_stack();
  221|       |
  222|    411|    if ((error_stack *)NULL == es) {
  ------------------
  |  Branch (222:9): [True: 0, False: 411]
  ------------------
  223|      0|        return (PRInt32 *)NULL;
  224|      0|    }
  225|       |
  226|       |    /* Make sure it's terminated */
  227|    411|    es->stack[es->header.count] = 0;
  228|       |
  229|    411|    return es->stack;
  230|    411|}
nss_SetError:
  242|  60.7k|{
  243|  60.7k|    error_stack *es;
  244|       |
  245|  60.7k|    if (0 == error) {
  ------------------
  |  Branch (245:9): [True: 0, False: 60.7k]
  ------------------
  246|      0|        nss_ClearErrorStack();
  247|      0|        return;
  248|      0|    }
  249|       |
  250|  60.7k|    es = error_get_my_stack();
  251|  60.7k|    if ((error_stack *)NULL == es) {
  ------------------
  |  Branch (251:9): [True: 0, False: 60.7k]
  ------------------
  252|       |        /* Oh, well. */
  253|      0|        return;
  254|      0|    }
  255|       |
  256|  60.7k|    if (es->header.count < es->header.space) {
  ------------------
  |  Branch (256:9): [True: 60.3k, False: 352]
  ------------------
  257|  60.3k|        es->stack[es->header.count++] = error;
  258|  60.3k|    } else {
  259|    352|        memmove(es->stack, es->stack + 1,
  260|    352|                (es->header.space - 1) * (sizeof es->stack[0]));
  261|    352|        es->stack[es->header.space - 1] = error;
  262|    352|    }
  263|  60.7k|    return;
  264|  60.7k|}
nss_ClearErrorStack:
  274|  7.05k|{
  275|  7.05k|    error_stack *es = error_get_my_stack();
  276|  7.05k|    if ((error_stack *)NULL == es) {
  ------------------
  |  Branch (276:9): [True: 0, False: 7.05k]
  ------------------
  277|       |        /* Oh, well. */
  278|      0|        return;
  279|      0|    }
  280|       |
  281|  7.05k|    es->header.count = 0;
  282|  7.05k|    es->stack[0] = 0;
  283|  7.05k|    return;
  284|  7.05k|}
nss_DestroyErrorStack:
  294|      1|{
  295|      1|    if (INVALID_TPD_INDEX != error_stack_index) {
  ------------------
  |  |   51|      1|#define INVALID_TPD_INDEX UINT_MAX
  ------------------
  |  Branch (295:9): [True: 1, False: 0]
  ------------------
  296|      1|        PR_SetThreadPrivate(error_stack_index, NULL);
  297|      1|        error_stack_index = INVALID_TPD_INDEX;
  ------------------
  |  |   51|      1|#define INVALID_TPD_INDEX UINT_MAX
  ------------------
  298|      1|        error_call_once = error_call_again; /* allow to init again */
  299|      1|    }
  300|      1|    return;
  301|      1|}
error.c:error_get_my_stack:
  110|  68.1k|{
  111|  68.1k|    PRStatus st;
  112|  68.1k|    error_stack *rv;
  113|  68.1k|    PRUintn new_size;
  114|  68.1k|    PRUint32 new_bytes;
  115|  68.1k|    error_stack *new_stack;
  116|       |
  117|  68.1k|    if (INVALID_TPD_INDEX == error_stack_index) {
  ------------------
  |  |   51|  68.1k|#define INVALID_TPD_INDEX UINT_MAX
  ------------------
  |  Branch (117:9): [True: 1, False: 68.1k]
  ------------------
  118|      1|        st = PR_CallOnce(&error_call_once, error_once_function);
  119|      1|        if (PR_SUCCESS != st) {
  ------------------
  |  Branch (119:13): [True: 0, False: 1]
  ------------------
  120|      0|            return (error_stack *)NULL;
  121|      0|        }
  122|      1|    }
  123|       |
  124|  68.1k|    rv = (error_stack *)PR_GetThreadPrivate(error_stack_index);
  125|  68.1k|    if ((error_stack *)NULL == rv) {
  ------------------
  |  Branch (125:9): [True: 1, False: 68.1k]
  ------------------
  126|       |        /* Doesn't exist; create one */
  127|      1|        new_size = 16;
  128|  68.1k|    } else if (rv->header.count == rv->header.space &&
  ------------------
  |  Branch (128:16): [True: 466, False: 67.7k]
  ------------------
  129|  68.1k|               rv->header.count < NSS_MAX_ERROR_STACK_COUNT) {
  ------------------
  |  |   22|    466|#define NSS_MAX_ERROR_STACK_COUNT 16 /* error codes */
  ------------------
  |  Branch (129:16): [True: 0, False: 466]
  ------------------
  130|       |        /* Too small, expand it */
  131|      0|        new_size = PR_MIN(rv->header.space * 2, NSS_MAX_ERROR_STACK_COUNT);
  ------------------
  |  |  158|      0|#define PR_MIN(x,y)     ((x)<(y)?(x):(y))
  |  |  ------------------
  |  |  |  Branch (158:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  132|  68.1k|    } else {
  133|       |        /* Okay, return it */
  134|  68.1k|        return rv;
  135|  68.1k|    }
  136|       |
  137|      1|    new_bytes = (new_size * sizeof(PRInt32)) + sizeof(error_stack);
  138|       |    /* Use NSPR's calloc/realloc, not NSS's, to avoid loops! */
  139|      1|    new_stack = PR_Calloc(1, new_bytes);
  140|       |
  141|      1|    if ((error_stack *)NULL != new_stack) {
  ------------------
  |  Branch (141:9): [True: 1, False: 0]
  ------------------
  142|      1|        if ((error_stack *)NULL != rv) {
  ------------------
  |  Branch (142:13): [True: 0, False: 1]
  ------------------
  143|      0|            (void)nsslibc_memcpy(new_stack, rv, rv->header.space);
  144|      0|        }
  145|      1|        new_stack->header.space = new_size;
  146|      1|    }
  147|       |
  148|       |    /* Set the value, whether or not the allocation worked */
  149|      1|    PR_SetThreadPrivate(error_stack_index, new_stack);
  150|      1|    return new_stack;
  151|  68.1k|}
error.c:error_once_function:
   71|      1|{
   72|       |
   73|       |/*
   74|       | * This #ifdef function is redundant. It performs the same thing as the
   75|       | * else case.
   76|       | *
   77|       | * However, the MinGW version looks up the function from nss3's export
   78|       | * table, and on MinGW _that_ behaves differently than passing a
   79|       | * function pointer in a different module because MinGW has
   80|       | * -mnop-fun-dllimport specified, which generates function thunks for
   81|       | * cross-module calls. And when a module (like nssckbi) gets unloaded,
   82|       | * and you try to call into that thunk (which is now missing) you'll
   83|       | * crash. So we do this bit of ugly to avoid that crash. Fortunately
   84|       | * this is the only place we've had to do this.
   85|       | */
   86|       |#if defined(__MINGW32__)
   87|       |    HMODULE nss3 = GetModuleHandleW(L"nss3");
   88|       |    if (nss3) {
   89|       |        PRThreadPrivateDTOR freePtr = (PRThreadPrivateDTOR)GetProcAddress(nss3, "PR_Free");
   90|       |        if (freePtr) {
   91|       |            return PR_NewThreadPrivateIndex(&error_stack_index, freePtr);
   92|       |        }
   93|       |    }
   94|       |    return PR_NewThreadPrivateIndex(&error_stack_index, PR_Free);
   95|       |#else
   96|      1|    return PR_NewThreadPrivateIndex(&error_stack_index, PR_Free);
   97|      1|#endif
   98|      1|}

nssHash_Create:
   80|      6|{
   81|      6|    nssHash *rv;
   82|      6|    NSSArena *arena;
   83|      6|    PRBool i_alloced;
   84|       |
   85|       |#ifdef NSSDEBUG
   86|       |    if (arenaOpt && PR_SUCCESS != nssArena_verifyPointer(arenaOpt)) {
   87|       |        nss_SetError(NSS_ERROR_INVALID_POINTER);
   88|       |        return (nssHash *)NULL;
   89|       |    }
   90|       |#endif /* NSSDEBUG */
   91|       |
   92|      6|    if (arenaOpt) {
  ------------------
  |  Branch (92:9): [True: 6, False: 0]
  ------------------
   93|      6|        arena = arenaOpt;
   94|      6|        i_alloced = PR_FALSE;
  ------------------
  |  |  438|      6|#define PR_FALSE 0
  ------------------
   95|      6|    } else {
   96|      0|        arena = nssArena_Create();
   97|      0|        i_alloced = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
   98|      0|    }
   99|       |
  100|      6|    rv = nss_ZNEW(arena, nssHash);
  ------------------
  |  |  348|      6|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
  101|      6|    if ((nssHash *)NULL == rv) {
  ------------------
  |  Branch (101:9): [True: 0, False: 6]
  ------------------
  102|      0|        goto loser;
  103|      0|    }
  104|       |
  105|      6|    rv->mutex = PZ_NewLock(nssILockOther);
  ------------------
  |  |  243|      6|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  106|      6|    if ((PZLock *)NULL == rv->mutex) {
  ------------------
  |  Branch (106:9): [True: 0, False: 6]
  ------------------
  107|      0|        goto loser;
  108|      0|    }
  109|       |
  110|      6|    rv->plHashTable =
  111|      6|        PL_NewHashTable(numBuckets, keyHash, keyCompare, valueCompare,
  112|      6|                        &nssArenaHashAllocOps, arena);
  113|      6|    if ((PLHashTable *)NULL == rv->plHashTable) {
  ------------------
  |  Branch (113:9): [True: 0, False: 6]
  ------------------
  114|      0|        (void)PZ_DestroyLock(rv->mutex);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  115|      0|        goto loser;
  116|      0|    }
  117|       |
  118|      6|    rv->count = 0;
  119|      6|    rv->arena = arena;
  120|      6|    rv->i_alloced_arena = i_alloced;
  121|       |
  122|      6|    return rv;
  123|      0|loser:
  124|      0|    (void)nss_ZFreeIf(rv);
  125|      0|    return (nssHash *)NULL;
  126|      6|}
nssHash_CreateString:
  145|      2|{
  146|      2|    return nssHash_Create(arenaOpt, numBuckets, PL_HashString,
  147|      2|                          PL_CompareStrings, PL_CompareStrings);
  148|      2|}
nssHash_CreateItem:
  156|      2|{
  157|      2|    return nssHash_Create(arenaOpt, numBuckets, nss_item_hash,
  158|      2|                          nss_compare_items, PL_CompareValues);
  159|      2|}
nssHash_Destroy:
  167|      6|{
  168|      6|    (void)PZ_DestroyLock(hash->mutex);
  ------------------
  |  |  244|      6|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  169|      6|    PL_HashTableDestroy(hash->plHashTable);
  170|      6|    if (hash->i_alloced_arena) {
  ------------------
  |  Branch (170:9): [True: 0, False: 6]
  ------------------
  171|      0|        nssArena_Destroy(hash->arena);
  172|      6|    } else {
  173|      6|        nss_ZFreeIf(hash);
  174|      6|    }
  175|      6|}
nssHash_Add:
  183|  11.5k|{
  184|  11.5k|    PRStatus error = PR_FAILURE;
  185|  11.5k|    PLHashEntry *he;
  186|       |
  187|  11.5k|    PZ_Lock(hash->mutex);
  ------------------
  |  |  245|  11.5k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  188|       |
  189|  11.5k|    he = PL_HashTableAdd(hash->plHashTable, key, (void *)value);
  190|  11.5k|    if ((PLHashEntry *)NULL == he) {
  ------------------
  |  Branch (190:9): [True: 0, False: 11.5k]
  ------------------
  191|      0|        nss_SetError(NSS_ERROR_NO_MEMORY);
  192|  11.5k|    } else if (he->value != value) {
  ------------------
  |  Branch (192:16): [True: 0, False: 11.5k]
  ------------------
  193|      0|        nss_SetError(NSS_ERROR_HASH_COLLISION);
  194|  11.5k|    } else {
  195|  11.5k|        hash->count++;
  196|  11.5k|        error = PR_SUCCESS;
  197|  11.5k|    }
  198|       |
  199|  11.5k|    (void)PZ_Unlock(hash->mutex);
  ------------------
  |  |  246|  11.5k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  200|       |
  201|  11.5k|    return error;
  202|  11.5k|}
nssHash_Remove:
  210|  11.5k|{
  211|  11.5k|    PRBool found;
  212|       |
  213|  11.5k|    PZ_Lock(hash->mutex);
  ------------------
  |  |  245|  11.5k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  214|       |
  215|  11.5k|    found = PL_HashTableRemove(hash->plHashTable, it);
  216|  11.5k|    if (found) {
  ------------------
  |  Branch (216:9): [True: 11.5k, False: 0]
  ------------------
  217|  11.5k|        hash->count--;
  218|  11.5k|    }
  219|       |
  220|  11.5k|    (void)PZ_Unlock(hash->mutex);
  ------------------
  |  |  246|  11.5k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  221|  11.5k|    return;
  222|  11.5k|}
nssHash_Count:
  230|      2|{
  231|      2|    PRUint32 count;
  232|       |
  233|      2|    PZ_Lock(hash->mutex);
  ------------------
  |  |  245|      2|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  234|       |
  235|      2|    count = hash->count;
  236|       |
  237|      2|    (void)PZ_Unlock(hash->mutex);
  ------------------
  |  |  246|      2|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  238|       |
  239|      2|    return count;
  240|      2|}
nssHash_Lookup:
  270|  48.3k|{
  271|  48.3k|    void *rv;
  272|       |
  273|  48.3k|    PZ_Lock(hash->mutex);
  ------------------
  |  |  245|  48.3k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  274|       |
  275|  48.3k|    rv = PL_HashTableLookup(hash->plHashTable, it);
  276|       |
  277|  48.3k|    (void)PZ_Unlock(hash->mutex);
  ------------------
  |  |  246|  48.3k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  278|       |
  279|  48.3k|    return rv;
  280|  48.3k|}
hash.c:nss_item_hash:
   56|  25.2k|{
   57|  25.2k|    unsigned int i;
   58|  25.2k|    PLHashNumber h;
   59|  25.2k|    NSSItem *it = (NSSItem *)key;
   60|  25.2k|    h = 0;
   61|  1.23M|    for (i = 0; i < it->size; i++)
  ------------------
  |  Branch (61:17): [True: 1.21M, False: 25.2k]
  ------------------
   62|  1.21M|        h = PR_ROTATE_LEFT32(h, 4) ^ ((unsigned char *)it->data)[i];
  ------------------
  |  |  147|  1.21M|#define PR_ROTATE_LEFT32(a, bits) (((a) << (bits)) | ((a) >> (32 - (bits))))
  ------------------
   63|  25.2k|    return h;
   64|  25.2k|}
hash.c:nss_compare_items:
   68|  11.7k|{
   69|  11.7k|    PRStatus ignore;
   70|  11.7k|    return (int)nssItem_Equal((NSSItem *)v1, (NSSItem *)v2, &ignore);
   71|  11.7k|}

hashops.c:nss_arena_hash_alloc_table:
   17|     12|{
   18|     12|    NSSArena *arena = (NSSArena *)NULL;
   19|       |
   20|       |#ifdef NSSDEBUG
   21|       |    if ((void *)NULL != arena) {
   22|       |        if (PR_SUCCESS != nssArena_verifyPointer(arena)) {
   23|       |            return (void *)NULL;
   24|       |        }
   25|       |    }
   26|       |#endif /* NSSDEBUG */
   27|       |
   28|     12|    return nss_ZAlloc(arena, size);
   29|     12|}
hashops.c:nss_arena_hash_free_table:
   33|     12|{
   34|     12|    (void)nss_ZFreeIf(item);
   35|     12|}
hashops.c:nss_arena_hash_alloc_entry:
   39|  11.5k|{
   40|  11.5k|    NSSArena *arena = NULL;
   41|       |
   42|       |#ifdef NSSDEBUG
   43|       |    if ((void *)NULL != arena) {
   44|       |        if (PR_SUCCESS != nssArena_verifyPointer(arena)) {
   45|       |            return (void *)NULL;
   46|       |        }
   47|       |    }
   48|       |#endif /* NSSDEBUG */
   49|       |
   50|  11.5k|    return nss_ZNEW(arena, PLHashEntry);
  ------------------
  |  |  348|  11.5k|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
   51|  11.5k|}
hashops.c:nss_arena_hash_free_entry:
   55|  11.5k|{
   56|  11.5k|    if (HT_FREE_ENTRY == flag) {
  ------------------
  |  |   39|  11.5k|#define HT_FREE_ENTRY   1               /* free value and entire entry */
  ------------------
  |  Branch (56:9): [True: 11.5k, False: 0]
  ------------------
   57|  11.5k|        (void)nss_ZFreeIf(he);
   58|  11.5k|    }
   59|  11.5k|}

nssItem_Create:
   34|  23.4k|{
   35|  23.4k|    NSSItem *rv = (NSSItem *)NULL;
   36|       |
   37|  23.4k|#ifdef DEBUG
   38|  23.4k|    if ((NSSArena *)NULL != arenaOpt) {
  ------------------
  |  Branch (38:9): [True: 23.4k, False: 0]
  ------------------
   39|  23.4k|        if (PR_SUCCESS != nssArena_verifyPointer(arenaOpt)) {
  ------------------
  |  Branch (39:13): [True: 0, False: 23.4k]
  ------------------
   40|      0|            return (NSSItem *)NULL;
   41|      0|        }
   42|  23.4k|    }
   43|       |
   44|  23.4k|    if ((const void *)NULL == data) {
  ------------------
  |  Branch (44:9): [True: 9, False: 23.4k]
  ------------------
   45|      9|        if (length > 0) {
  ------------------
  |  Branch (45:13): [True: 0, False: 9]
  ------------------
   46|      0|            nss_SetError(NSS_ERROR_INVALID_POINTER);
   47|      0|            return (NSSItem *)NULL;
   48|      0|        }
   49|      9|    }
   50|  23.4k|#endif /* DEBUG */
   51|       |
   52|  23.4k|    if ((NSSItem *)NULL == rvOpt) {
  ------------------
  |  Branch (52:9): [True: 0, False: 23.4k]
  ------------------
   53|      0|        rv = (NSSItem *)nss_ZNEW(arenaOpt, NSSItem);
  ------------------
  |  |  348|      0|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
   54|      0|        if ((NSSItem *)NULL == rv) {
  ------------------
  |  Branch (54:13): [True: 0, False: 0]
  ------------------
   55|      0|            goto loser;
   56|      0|        }
   57|  23.4k|    } else {
   58|  23.4k|        rv = rvOpt;
   59|  23.4k|    }
   60|       |
   61|  23.4k|    rv->size = length;
   62|  23.4k|    rv->data = nss_ZAlloc(arenaOpt, length);
   63|  23.4k|    if ((void *)NULL == rv->data) {
  ------------------
  |  Branch (63:9): [True: 0, False: 23.4k]
  ------------------
   64|      0|        goto loser;
   65|      0|    }
   66|       |
   67|  23.4k|    if (length > 0) {
  ------------------
  |  Branch (67:9): [True: 23.4k, False: 9]
  ------------------
   68|  23.4k|        (void)nsslibc_memcpy(rv->data, data, length);
   69|  23.4k|    }
   70|       |
   71|  23.4k|    return rv;
   72|       |
   73|      0|loser:
   74|      0|    if (rv != rvOpt) {
  ------------------
  |  Branch (74:9): [True: 0, False: 0]
  ------------------
   75|      0|        nss_ZFreeIf(rv);
   76|      0|    }
   77|       |
   78|      0|    return (NSSItem *)NULL;
   79|  23.4k|}
nssItem_Equal:
  168|  46.2k|{
  169|  46.2k|    if ((PRStatus *)NULL != statusOpt) {
  ------------------
  |  Branch (169:9): [True: 46.2k, False: 0]
  ------------------
  170|  46.2k|        *statusOpt = PR_SUCCESS;
  171|  46.2k|    }
  172|       |
  173|  46.2k|    if (((const NSSItem *)NULL == one) && ((const NSSItem *)NULL == two)) {
  ------------------
  |  Branch (173:9): [True: 0, False: 46.2k]
  |  Branch (173:43): [True: 0, False: 0]
  ------------------
  174|      0|        return PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  175|      0|    }
  176|       |
  177|  46.2k|    if (((const NSSItem *)NULL == one) || ((const NSSItem *)NULL == two)) {
  ------------------
  |  Branch (177:9): [True: 0, False: 46.2k]
  |  Branch (177:43): [True: 0, False: 46.2k]
  ------------------
  178|      0|        return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  179|      0|    }
  180|       |
  181|  46.2k|    if (one->size != two->size) {
  ------------------
  |  Branch (181:9): [True: 0, False: 46.2k]
  ------------------
  182|      0|        return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  183|      0|    }
  184|       |
  185|  46.2k|    return nsslibc_memequal(one->data, two->data, one->size, statusOpt);
  186|  46.2k|}

nsslibc_memcpy:
   42|  23.5k|{
   43|       |#ifdef NSSDEBUG
   44|       |    if (((void *)NULL == dest) || ((const void *)NULL == source)) {
   45|       |        nss_SetError(NSS_ERROR_INVALID_POINTER);
   46|       |        return (void *)NULL;
   47|       |    }
   48|       |#endif /* NSSDEBUG */
   49|       |
   50|  23.5k|    return memcpy(dest, source, (size_t)n);
   51|  23.5k|}
nsslibc_memset:
   66|   182k|{
   67|       |#ifdef NSSDEBUG
   68|       |    if (((void *)NULL == dest)) {
   69|       |        nss_SetError(NSS_ERROR_INVALID_POINTER);
   70|       |        return (void *)NULL;
   71|       |    }
   72|       |#endif /* NSSDEBUG */
   73|       |
   74|   182k|    return memset(dest, (int)byte, (size_t)n);
   75|   182k|}
nsslibc_memequal:
   92|  46.2k|{
   93|       |#ifdef NSSDEBUG
   94|       |    if ((((void *)NULL == a) || ((void *)NULL == b))) {
   95|       |        nss_SetError(NSS_ERROR_INVALID_POINTER);
   96|       |        if ((PRStatus *)NULL != statusOpt) {
   97|       |            *statusOpt = PR_FAILURE;
   98|       |        }
   99|       |        return PR_FALSE;
  100|       |    }
  101|       |#endif /* NSSDEBUG */
  102|       |
  103|  46.2k|    if ((PRStatus *)NULL != statusOpt) {
  ------------------
  |  Branch (103:9): [True: 46.2k, False: 0]
  ------------------
  104|  46.2k|        *statusOpt = PR_SUCCESS;
  105|  46.2k|    }
  106|       |
  107|  46.2k|    if (0 == memcmp(a, b, len)) {
  ------------------
  |  Branch (107:9): [True: 46.2k, False: 50]
  ------------------
  108|  46.2k|        return PR_TRUE;
  ------------------
  |  |  437|  46.2k|#define PR_TRUE 1
  ------------------
  109|  46.2k|    } else {
  110|     50|        return PR_FALSE;
  ------------------
  |  |  438|     50|#define PR_FALSE 0
  ------------------
  111|     50|    }
  112|  46.2k|}

nssList_Create:
   76|  7.05k|{
   77|  7.05k|    NSSArena *arena;
   78|  7.05k|    nssList *list;
   79|  7.05k|    PRBool i_alloced;
   80|  7.05k|    if (arenaOpt) {
  ------------------
  |  Branch (80:9): [True: 1, False: 7.05k]
  ------------------
   81|      1|        arena = arenaOpt;
   82|      1|        i_alloced = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
   83|  7.05k|    } else {
   84|  7.05k|        arena = nssArena_Create();
   85|  7.05k|        i_alloced = PR_TRUE;
  ------------------
  |  |  437|  7.05k|#define PR_TRUE 1
  ------------------
   86|  7.05k|    }
   87|  7.05k|    if (!arena) {
  ------------------
  |  Branch (87:9): [True: 0, False: 7.05k]
  ------------------
   88|      0|        return (nssList *)NULL;
   89|      0|    }
   90|  7.05k|    list = nss_ZNEW(arena, nssList);
  ------------------
  |  |  348|  7.05k|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
   91|  7.05k|    if (!list) {
  ------------------
  |  Branch (91:9): [True: 0, False: 7.05k]
  ------------------
   92|      0|        if (!arenaOpt) {
  ------------------
  |  Branch (92:13): [True: 0, False: 0]
  ------------------
   93|      0|            NSSArena_Destroy(arena);
   94|      0|        }
   95|      0|        return (nssList *)NULL;
   96|      0|    }
   97|  7.05k|    if (threadSafe) {
  ------------------
  |  Branch (97:9): [True: 2, False: 7.05k]
  ------------------
   98|      2|        list->lock = PZ_NewLock(nssILockOther);
  ------------------
  |  |  243|      2|#define PZ_NewLock(t) PR_NewLock()
  ------------------
   99|      2|        if (!list->lock) {
  ------------------
  |  Branch (99:13): [True: 0, False: 2]
  ------------------
  100|      0|            if (arenaOpt) {
  ------------------
  |  Branch (100:17): [True: 0, False: 0]
  ------------------
  101|      0|                nss_ZFreeIf(list);
  102|      0|            } else {
  103|      0|                NSSArena_Destroy(arena);
  104|      0|            }
  105|      0|            return (nssList *)NULL;
  106|      0|        }
  107|      2|    }
  108|  7.05k|    list->arena = arena;
  109|  7.05k|    list->i_alloced_arena = i_alloced;
  110|  7.05k|    list->compareFunc = pointer_compare;
  111|  7.05k|    return list;
  112|  7.05k|}
nssList_Destroy:
  116|  7.05k|{
  117|  7.05k|    if (!list) {
  ------------------
  |  Branch (117:9): [True: 0, False: 7.05k]
  ------------------
  118|      0|        return PR_SUCCESS;
  119|      0|    }
  120|  7.05k|    if (!list->i_alloced_arena) {
  ------------------
  |  Branch (120:9): [True: 1, False: 7.05k]
  ------------------
  121|      1|        nssList_Clear(list, NULL);
  122|      1|    }
  123|  7.05k|    if (list->lock) {
  ------------------
  |  Branch (123:9): [True: 2, False: 7.05k]
  ------------------
  124|      2|        (void)PZ_DestroyLock(list->lock);
  ------------------
  |  |  244|      2|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  125|      2|    }
  126|  7.05k|    if (list->i_alloced_arena) {
  ------------------
  |  Branch (126:9): [True: 7.05k, False: 1]
  ------------------
  127|  7.05k|        NSSArena_Destroy(list->arena);
  128|  7.05k|        list = NULL;
  129|  7.05k|    }
  130|  7.05k|    nss_ZFreeIf(list);
  131|  7.05k|    return PR_SUCCESS;
  132|  7.05k|}
nssList_SetSortFunction:
  142|  5.75k|{
  143|       |    /* XXX if list already has elements, sort them */
  144|  5.75k|    list->sortFunc = sortFunc;
  145|  5.75k|}
nssList_Clear:
  155|      2|{
  156|      2|    PRCList *link;
  157|      2|    nssListElement *node, *tmp;
  158|      2|    if (!list) {
  ------------------
  |  Branch (158:9): [True: 0, False: 2]
  ------------------
  159|      0|        return;
  160|      0|    }
  161|      2|    NSSLIST_LOCK_IF(list);
  ------------------
  |  |   39|      2|    if ((list)->lock)         \
  |  |  ------------------
  |  |  |  Branch (39:9): [True: 2, False: 0]
  |  |  ------------------
  |  |   40|      2|    PZ_Lock((list)->lock)
  |  |  ------------------
  |  |  |  |  245|      2|#define PZ_Lock(k) PR_Lock((k))
  |  |  ------------------
  ------------------
  162|      2|    node = list->head;
  163|      2|    list->head = NULL;
  164|      4|    while (node && list->count > 0) {
  ------------------
  |  Branch (164:12): [True: 3, False: 1]
  |  Branch (164:20): [True: 2, False: 1]
  ------------------
  165|      2|        if (destructor)
  ------------------
  |  Branch (165:13): [True: 2, False: 0]
  ------------------
  166|      2|            (*destructor)(node->data);
  167|      2|        link = &node->link;
  168|      2|        tmp = (nssListElement *)PR_NEXT_LINK(link);
  ------------------
  |  |   47|      2|        ((_e)->next)
  ------------------
  169|      2|        PR_REMOVE_LINK(link);
  ------------------
  |  |   72|      2|    PR_BEGIN_MACRO             \
  |  |  ------------------
  |  |  |  |  123|      2|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |   73|      2|    (_e)->prev->next = (_e)->next; \
  |  |   74|      2|    (_e)->next->prev = (_e)->prev; \
  |  |   75|      2|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|      2|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|      2|        nss_ZFreeIf(node);
  171|      2|        node = tmp;
  172|      2|        --list->count;
  173|      2|    }
  174|      2|    NSSLIST_UNLOCK_IF(list);
  ------------------
  |  |   43|      2|    if ((list)->lock)           \
  |  |  ------------------
  |  |  |  Branch (43:9): [True: 2, False: 0]
  |  |  ------------------
  |  |   44|      2|    PZ_Unlock((list)->lock)
  |  |  ------------------
  |  |  |  |  246|      2|#define PZ_Unlock(k) PR_Unlock((k))
  |  |  ------------------
  ------------------
  175|      2|}
nssList_Add:
  222|  5.92k|{
  223|  5.92k|    NSSLIST_LOCK_IF(list);
  ------------------
  |  |   39|  5.92k|    if ((list)->lock)         \
  |  |  ------------------
  |  |  |  Branch (39:9): [True: 4, False: 5.91k]
  |  |  ------------------
  |  |   40|  5.92k|    PZ_Lock((list)->lock)
  |  |  ------------------
  |  |  |  |  245|      4|#define PZ_Lock(k) PR_Lock((k))
  |  |  ------------------
  ------------------
  224|  5.92k|    (void)nsslist_add_element(list, data);
  225|  5.92k|    NSSLIST_UNLOCK_IF(list);
  ------------------
  |  |   43|  5.92k|    if ((list)->lock)           \
  |  |  ------------------
  |  |  |  Branch (43:9): [True: 4, False: 5.91k]
  |  |  ------------------
  |  |   44|  5.92k|    PZ_Unlock((list)->lock)
  |  |  ------------------
  |  |  |  |  246|      4|#define PZ_Unlock(k) PR_Unlock((k))
  |  |  ------------------
  ------------------
  226|  5.92k|    return PR_SUCCESS;
  227|  5.92k|}
nssList_Remove:
  248|  5.75k|{
  249|  5.75k|    nssListElement *node;
  250|  5.75k|    NSSLIST_LOCK_IF(list);
  ------------------
  |  |   39|  5.75k|    if ((list)->lock)         \
  |  |  ------------------
  |  |  |  Branch (39:9): [True: 0, False: 5.75k]
  |  |  ------------------
  |  |   40|  5.75k|    PZ_Lock((list)->lock)
  |  |  ------------------
  |  |  |  |  245|      0|#define PZ_Lock(k) PR_Lock((k))
  |  |  ------------------
  ------------------
  251|  5.75k|    node = nsslist_get_matching_element(list, data);
  252|  5.75k|    if (node) {
  ------------------
  |  Branch (252:9): [True: 5.75k, False: 0]
  ------------------
  253|  5.75k|        if (node == list->head) {
  ------------------
  |  Branch (253:13): [True: 5.75k, False: 0]
  ------------------
  254|  5.75k|            list->head = (nssListElement *)PR_NEXT_LINK(&node->link);
  ------------------
  |  |   47|  5.75k|        ((_e)->next)
  ------------------
  255|  5.75k|        }
  256|  5.75k|        PR_REMOVE_LINK(&node->link);
  ------------------
  |  |   72|  5.75k|    PR_BEGIN_MACRO             \
  |  |  ------------------
  |  |  |  |  123|  5.75k|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |   73|  5.75k|    (_e)->prev->next = (_e)->next; \
  |  |   74|  5.75k|    (_e)->next->prev = (_e)->prev; \
  |  |   75|  5.75k|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|  5.75k|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  257|  5.75k|        nss_ZFreeIf(node);
  258|  5.75k|        if (--list->count == 0) {
  ------------------
  |  Branch (258:13): [True: 5.75k, False: 0]
  ------------------
  259|  5.75k|            list->head = NULL;
  260|  5.75k|        }
  261|  5.75k|    }
  262|  5.75k|    NSSLIST_UNLOCK_IF(list);
  ------------------
  |  |   43|  5.75k|    if ((list)->lock)           \
  |  |  ------------------
  |  |  |  Branch (43:9): [True: 0, False: 5.75k]
  |  |  ------------------
  |  |   44|  5.75k|    PZ_Unlock((list)->lock)
  |  |  ------------------
  |  |  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  |  |  ------------------
  ------------------
  263|  5.75k|    return PR_SUCCESS;
  264|  5.75k|}
nssList_Count:
  278|  36.8k|{
  279|  36.8k|    return list->count;
  280|  36.8k|}
nssList_GetArray:
  284|  29.9k|{
  285|  29.9k|    nssListElement *node;
  286|  29.9k|    PRUint32 i = 0;
  287|  29.9k|    PR_ASSERT(maxElements > 0);
  ------------------
  |  |  208|  29.9k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 29.9k, False: 0]
  |  |  ------------------
  ------------------
  288|  29.9k|    node = list->head;
  289|  29.9k|    if (!node) {
  ------------------
  |  Branch (289:9): [True: 0, False: 29.9k]
  ------------------
  290|      0|        return PR_SUCCESS;
  291|      0|    }
  292|  29.9k|    NSSLIST_LOCK_IF(list);
  ------------------
  |  |   39|  29.9k|    if ((list)->lock)         \
  |  |  ------------------
  |  |  |  Branch (39:9): [True: 29.7k, False: 163]
  |  |  ------------------
  |  |   40|  29.9k|    PZ_Lock((list)->lock)
  |  |  ------------------
  |  |  |  |  245|  29.7k|#define PZ_Lock(k) PR_Lock((k))
  |  |  ------------------
  ------------------
  293|  59.7k|    while (node) {
  ------------------
  |  Branch (293:12): [True: 59.7k, False: 0]
  ------------------
  294|  59.7k|        rvArray[i++] = node->data;
  295|  59.7k|        if (i == maxElements)
  ------------------
  |  Branch (295:13): [True: 29.9k, False: 29.7k]
  ------------------
  296|  29.9k|            break;
  297|  29.7k|        node = (nssListElement *)PR_NEXT_LINK(&node->link);
  ------------------
  |  |   47|  29.7k|        ((_e)->next)
  ------------------
  298|  29.7k|        if (node == list->head) {
  ------------------
  |  Branch (298:13): [True: 0, False: 29.7k]
  ------------------
  299|      0|            break;
  300|      0|        }
  301|  29.7k|    }
  302|  29.9k|    NSSLIST_UNLOCK_IF(list);
  ------------------
  |  |   43|  29.9k|    if ((list)->lock)           \
  |  |  ------------------
  |  |  |  Branch (43:9): [True: 29.7k, False: 163]
  |  |  ------------------
  |  |   44|  29.9k|    PZ_Unlock((list)->lock)
  |  |  ------------------
  |  |  |  |  246|  29.7k|#define PZ_Unlock(k) PR_Unlock((k))
  |  |  ------------------
  ------------------
  303|  29.9k|    return PR_SUCCESS;
  304|  29.9k|}
nssList_Clone:
  308|    164|{
  309|    164|    nssList *rvList;
  310|    164|    nssListElement *node;
  311|    164|    rvList = nssList_Create(NULL, (list->lock != NULL));
  312|    164|    if (!rvList) {
  ------------------
  |  Branch (312:9): [True: 0, False: 164]
  ------------------
  313|      0|        return NULL;
  314|      0|    }
  315|    164|    NSSLIST_LOCK_IF(list);
  ------------------
  |  |   39|    164|    if ((list)->lock)         \
  |  |  ------------------
  |  |  |  Branch (39:9): [True: 1, False: 163]
  |  |  ------------------
  |  |   40|    164|    PZ_Lock((list)->lock)
  |  |  ------------------
  |  |  |  |  245|      1|#define PZ_Lock(k) PR_Lock((k))
  |  |  ------------------
  ------------------
  316|    164|    if (list->count > 0) {
  ------------------
  |  Branch (316:9): [True: 164, False: 0]
  ------------------
  317|    164|        node = list->head;
  318|    165|        while (PR_TRUE) {
  ------------------
  |  |  437|    165|#define PR_TRUE 1
  |  |  ------------------
  |  |  |  Branch (437:17): [Folded - Ignored]
  |  |  ------------------
  ------------------
  319|    165|            nssList_Add(rvList, node->data);
  320|    165|            node = (nssListElement *)PR_NEXT_LINK(&node->link);
  ------------------
  |  |   47|    165|        ((_e)->next)
  ------------------
  321|    165|            if (node == list->head) {
  ------------------
  |  Branch (321:17): [True: 164, False: 1]
  ------------------
  322|    164|                break;
  323|    164|            }
  324|    165|        }
  325|    164|    }
  326|    164|    NSSLIST_UNLOCK_IF(list);
  ------------------
  |  |   43|    164|    if ((list)->lock)           \
  |  |  ------------------
  |  |  |  Branch (43:9): [True: 1, False: 163]
  |  |  ------------------
  |  |   44|    164|    PZ_Unlock((list)->lock)
  |  |  ------------------
  |  |  |  |  246|      1|#define PZ_Unlock(k) PR_Unlock((k))
  |  |  ------------------
  ------------------
  327|    164|    return rvList;
  328|    164|}
nssList_CreateIterator:
  332|    164|{
  333|    164|    nssListIterator *rvIterator;
  334|    164|    rvIterator = nss_ZNEW(NULL, nssListIterator);
  ------------------
  |  |  348|    164|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
  335|    164|    if (!rvIterator) {
  ------------------
  |  Branch (335:9): [True: 0, False: 164]
  ------------------
  336|      0|        return NULL;
  337|      0|    }
  338|    164|    rvIterator->list = nssList_Clone(list);
  339|    164|    if (!rvIterator->list) {
  ------------------
  |  Branch (339:9): [True: 0, False: 164]
  ------------------
  340|      0|        nss_ZFreeIf(rvIterator);
  341|      0|        return NULL;
  342|      0|    }
  343|    164|    rvIterator->current = rvIterator->list->head;
  344|    164|    if (list->lock) {
  ------------------
  |  Branch (344:9): [True: 1, False: 163]
  ------------------
  345|      1|        rvIterator->lock = PZ_NewLock(nssILockOther);
  ------------------
  |  |  243|      1|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  346|      1|        if (!rvIterator->lock) {
  ------------------
  |  Branch (346:13): [True: 0, False: 1]
  ------------------
  347|      0|            nssList_Destroy(rvIterator->list);
  348|      0|            nss_ZFreeIf(rvIterator);
  349|      0|            rvIterator = NULL;
  350|      0|        }
  351|      1|    }
  352|    164|    return rvIterator;
  353|    164|}
nssListIterator_Destroy:
  357|    164|{
  358|    164|    if (iter->lock) {
  ------------------
  |  Branch (358:9): [True: 1, False: 163]
  ------------------
  359|      1|        (void)PZ_DestroyLock(iter->lock);
  ------------------
  |  |  244|      1|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  360|      1|    }
  361|    164|    if (iter->list) {
  ------------------
  |  Branch (361:9): [True: 164, False: 0]
  ------------------
  362|    164|        nssList_Destroy(iter->list);
  363|    164|    }
  364|    164|    nss_ZFreeIf(iter);
  365|    164|}
nssListIterator_Start:
  369|    163|{
  370|    163|    NSSLIST_LOCK_IF(iter);
  ------------------
  |  |   39|    163|    if ((list)->lock)         \
  |  |  ------------------
  |  |  |  Branch (39:9): [True: 0, False: 163]
  |  |  ------------------
  |  |   40|    163|    PZ_Lock((list)->lock)
  |  |  ------------------
  |  |  |  |  245|      0|#define PZ_Lock(k) PR_Lock((k))
  |  |  ------------------
  ------------------
  371|    163|    if (iter->list->count == 0) {
  ------------------
  |  Branch (371:9): [True: 0, False: 163]
  ------------------
  372|      0|        return NULL;
  373|      0|    }
  374|    163|    iter->current = iter->list->head;
  375|    163|    return iter->current->data;
  376|    163|}
nssListIterator_Next:
  380|    163|{
  381|    163|    nssListElement *node;
  382|    163|    PRCList *link;
  383|    163|    if (iter->list->count == 1 || iter->current == NULL) {
  ------------------
  |  Branch (383:9): [True: 163, False: 0]
  |  Branch (383:35): [True: 0, False: 0]
  ------------------
  384|       |        /* Reached the end of the list.  Don't change the state, force to
  385|       |         * user to call nssList_Finish to clean up.
  386|       |         */
  387|    163|        return NULL;
  388|    163|    }
  389|      0|    node = (nssListElement *)PR_NEXT_LINK(&iter->current->link);
  ------------------
  |  |   47|      0|        ((_e)->next)
  ------------------
  390|      0|    link = &node->link;
  391|      0|    if (link == PR_LIST_TAIL(&iter->list->head->link)) {
  ------------------
  |  |   66|      0|#define PR_LIST_TAIL(_l) (_l)->prev
  ------------------
  |  Branch (391:9): [True: 0, False: 0]
  ------------------
  392|       |        /* Signal the end of the list. */
  393|      0|        iter->current = NULL;
  394|      0|        return node->data;
  395|      0|    }
  396|      0|    iter->current = node;
  397|      0|    return node->data;
  398|      0|}
nssListIterator_Finish:
  402|    163|{
  403|    163|    iter->current = iter->list->head;
  404|    163|    return (iter->lock) ? PZ_Unlock(iter->lock) : PR_SUCCESS;
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  |  Branch (404:12): [True: 0, False: 163]
  ------------------
  405|    163|}
list.c:pointer_compare:
   48|  5.75k|{
   49|  5.75k|    return (PRBool)(a == b);
   50|  5.75k|}
list.c:nsslist_add_element:
  179|  5.92k|{
  180|  5.92k|    nssListElement *node = nss_ZNEW(list->arena, nssListElement);
  ------------------
  |  |  348|  5.92k|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
  181|  5.92k|    if (!node) {
  ------------------
  |  Branch (181:9): [True: 0, False: 5.92k]
  ------------------
  182|      0|        return PR_FAILURE;
  183|      0|    }
  184|  5.92k|    PR_INIT_CLIST(&node->link);
  ------------------
  |  |  100|  11.8k|    PR_BEGIN_MACRO     \
  |  |  ------------------
  |  |  |  |  123|  5.92k|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  101|  11.8k|    (_l)->next = (_l); \
  |  |  102|  11.8k|    (_l)->prev = (_l); \
  |  |  103|  11.8k|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|  5.92k|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  185|  5.92k|    node->data = data;
  186|  5.92k|    if (list->head) {
  ------------------
  |  Branch (186:9): [True: 2, False: 5.92k]
  ------------------
  187|      2|        if (list->sortFunc) {
  ------------------
  |  Branch (187:13): [True: 0, False: 2]
  ------------------
  188|      0|            PRCList *link;
  189|      0|            nssListElement *currNode;
  190|      0|            currNode = list->head;
  191|       |            /* insert in ordered list */
  192|      0|            while (currNode) {
  ------------------
  |  Branch (192:20): [True: 0, False: 0]
  ------------------
  193|      0|                link = &currNode->link;
  194|      0|                if (list->sortFunc(data, currNode->data) <= 0) {
  ------------------
  |  Branch (194:21): [True: 0, False: 0]
  ------------------
  195|       |                    /* new element goes before current node */
  196|      0|                    PR_INSERT_BEFORE(&node->link, link);
  ------------------
  |  |   25|      0|    PR_BEGIN_MACRO       \
  |  |  ------------------
  |  |  |  |  123|      0|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |   26|      0|    (_e)->next = (_l);   \
  |  |   27|      0|    (_e)->prev = (_l)->prev; \
  |  |   28|      0|    (_l)->prev->next = (_e); \
  |  |   29|      0|    (_l)->prev = (_e);   \
  |  |   30|      0|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|      0|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|       |                    /* reset head if this is first */
  198|      0|                    if (currNode == list->head)
  ------------------
  |  Branch (198:25): [True: 0, False: 0]
  ------------------
  199|      0|                        list->head = node;
  200|      0|                    break;
  201|      0|                }
  202|      0|                if (link == PR_LIST_TAIL(&list->head->link)) {
  ------------------
  |  |   66|      0|#define PR_LIST_TAIL(_l) (_l)->prev
  ------------------
  |  Branch (202:21): [True: 0, False: 0]
  ------------------
  203|       |                    /* reached end of list, append */
  204|      0|                    PR_INSERT_AFTER(&node->link, link);
  ------------------
  |  |   36|      0|    PR_BEGIN_MACRO       \
  |  |  ------------------
  |  |  |  |  123|      0|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |   37|      0|    (_e)->next = (_l)->next; \
  |  |   38|      0|    (_e)->prev = (_l);   \
  |  |   39|      0|    (_l)->next->prev = (_e); \
  |  |   40|      0|    (_l)->next = (_e);   \
  |  |   41|      0|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|      0|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|      0|                    break;
  206|      0|                }
  207|      0|                currNode = (nssListElement *)PR_NEXT_LINK(&currNode->link);
  ------------------
  |  |   47|      0|        ((_e)->next)
  ------------------
  208|      0|            }
  209|      2|        } else {
  210|       |            /* not sorting */
  211|      2|            PR_APPEND_LINK(&node->link, &list->head->link);
  ------------------
  |  |   57|      2|#define PR_APPEND_LINK(_e,_l) PR_INSERT_BEFORE(_e,_l)
  |  |  ------------------
  |  |  |  |   25|      2|    PR_BEGIN_MACRO       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  123|      2|#define PR_BEGIN_MACRO  do {
  |  |  |  |  ------------------
  |  |  |  |   26|      2|    (_e)->next = (_l);   \
  |  |  |  |   27|      2|    (_e)->prev = (_l)->prev; \
  |  |  |  |   28|      2|    (_l)->prev->next = (_e); \
  |  |  |  |   29|      2|    (_l)->prev = (_e);   \
  |  |  |  |   30|      2|    PR_END_MACRO
  |  |  |  |  ------------------
  |  |  |  |  |  |  124|      2|#define PR_END_MACRO    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  212|      2|        }
  213|  5.92k|    } else {
  214|  5.92k|        list->head = node;
  215|  5.92k|    }
  216|  5.92k|    ++list->count;
  217|  5.92k|    return PR_SUCCESS;
  218|  5.92k|}
list.c:nsslist_get_matching_element:
   54|  5.75k|{
   55|  5.75k|    nssListElement *node;
   56|  5.75k|    node = list->head;
   57|  5.75k|    if (!node) {
  ------------------
  |  Branch (57:9): [True: 0, False: 5.75k]
  ------------------
   58|      0|        return NULL;
   59|      0|    }
   60|  5.75k|    while (node) {
  ------------------
  |  Branch (60:12): [True: 5.75k, False: 0]
  ------------------
   61|       |        /* using a callback slows things down when it's just compare ... */
   62|  5.75k|        if (list->compareFunc(node->data, data)) {
  ------------------
  |  Branch (62:13): [True: 5.75k, False: 0]
  ------------------
   63|  5.75k|            break;
   64|  5.75k|        }
   65|      0|        if (&node->link == PR_LIST_TAIL(&list->head->link)) {
  ------------------
  |  |   66|      0|#define PR_LIST_TAIL(_l) (_l)->prev
  ------------------
  |  Branch (65:13): [True: 0, False: 0]
  ------------------
   66|      0|            node = NULL;
   67|      0|            break;
   68|      0|        }
   69|      0|        node = (nssListElement *)PR_NEXT_LINK(&node->link);
  ------------------
  |  |   47|      0|        ((_e)->next)
  ------------------
   70|      0|    }
   71|  5.75k|    return node;
   72|  5.75k|}

nssPointerTracker_initialize:
   85|  51.6k|{
   86|  51.6k|    PRStatus rv = PR_CallOnceWithArg(&tracker->once, trackerOnceFunc, tracker);
   87|  51.6k|    if (PR_SUCCESS != rv) {
  ------------------
  |  Branch (87:9): [True: 0, False: 51.6k]
  ------------------
   88|      0|        nss_SetError(NSS_ERROR_NO_MEMORY);
   89|      0|    }
   90|       |
   91|  51.6k|    return rv;
   92|  51.6k|}
nssPointerTracker_finalize:
  147|      1|{
  148|      1|    PZLock *lock;
  ------------------
  |  |  185|      1|#define PZLock PRLock
  ------------------
  149|       |
  150|      1|    if ((nssPointerTracker *)NULL == tracker) {
  ------------------
  |  Branch (150:9): [True: 0, False: 1]
  ------------------
  151|      0|        nss_SetError(NSS_ERROR_INVALID_POINTER);
  152|      0|        return PR_FAILURE;
  153|      0|    }
  154|       |
  155|      1|    if ((PZLock *)NULL == tracker->lock) {
  ------------------
  |  Branch (155:9): [True: 0, False: 1]
  ------------------
  156|      0|        nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
  157|      0|        return PR_FAILURE;
  158|      0|    }
  159|       |
  160|      1|    lock = tracker->lock;
  161|      1|    PZ_Lock(lock);
  ------------------
  |  |  245|      1|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  162|       |
  163|      1|    if ((PLHashTable *)NULL == tracker->table) {
  ------------------
  |  Branch (163:9): [True: 0, False: 1]
  ------------------
  164|      0|        PZ_Unlock(lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  165|      0|        nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
  166|      0|        return PR_FAILURE;
  167|      0|    }
  168|       |
  169|       |#ifdef DONT_DESTROY_EMPTY_TABLES
  170|       |    /*
  171|       |     * I changed my mind; I think we don't want this after all.
  172|       |     * Comments?
  173|       |     */
  174|       |    count = PL_HashTableEnumerateEntries(tracker->table, count_entries,
  175|       |                                         (void *)NULL);
  176|       |
  177|       |    if (0 != count) {
  178|       |        PZ_Unlock(lock);
  179|       |        nss_SetError(NSS_ERROR_TRACKER_NOT_EMPTY);
  180|       |        return PR_FAILURE;
  181|       |    }
  182|       |#endif /* DONT_DESTROY_EMPTY_TABLES */
  183|       |
  184|      1|    PL_HashTableDestroy(tracker->table);
  185|       |    /* memset(tracker, 0, sizeof(nssPointerTracker)); */
  186|      1|    tracker->once = zero_once;
  187|      1|    tracker->lock = (PZLock *)NULL;
  188|      1|    tracker->table = (PLHashTable *)NULL;
  189|       |
  190|      1|    PZ_Unlock(lock);
  ------------------
  |  |  246|      1|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  191|      1|    PZ_DestroyLock(lock);
  ------------------
  |  |  244|      1|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  192|       |
  193|      1|    return PR_SUCCESS;
  194|      1|}
nssPointerTracker_add:
  221|  21.1k|{
  222|  21.1k|    void *check;
  223|  21.1k|    PLHashEntry *entry;
  224|       |
  225|  21.1k|    if ((nssPointerTracker *)NULL == tracker) {
  ------------------
  |  Branch (225:9): [True: 0, False: 21.1k]
  ------------------
  226|      0|        nss_SetError(NSS_ERROR_INVALID_POINTER);
  227|      0|        return PR_FAILURE;
  228|      0|    }
  229|       |
  230|  21.1k|    if ((PZLock *)NULL == tracker->lock) {
  ------------------
  |  Branch (230:9): [True: 0, False: 21.1k]
  ------------------
  231|      0|        nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
  232|      0|        return PR_FAILURE;
  233|      0|    }
  234|       |
  235|  21.1k|    PZ_Lock(tracker->lock);
  ------------------
  |  |  245|  21.1k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  236|       |
  237|  21.1k|    if ((PLHashTable *)NULL == tracker->table) {
  ------------------
  |  Branch (237:9): [True: 0, False: 21.1k]
  ------------------
  238|      0|        PZ_Unlock(tracker->lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  239|      0|        nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
  240|      0|        return PR_FAILURE;
  241|      0|    }
  242|       |
  243|  21.1k|    check = PL_HashTableLookup(tracker->table, pointer);
  244|  21.1k|    if ((void *)NULL != check) {
  ------------------
  |  Branch (244:9): [True: 0, False: 21.1k]
  ------------------
  245|      0|        PZ_Unlock(tracker->lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  246|      0|        nss_SetError(NSS_ERROR_DUPLICATE_POINTER);
  247|      0|        return PR_FAILURE;
  248|      0|    }
  249|       |
  250|  21.1k|    entry = PL_HashTableAdd(tracker->table, pointer, (void *)pointer);
  251|       |
  252|  21.1k|    PZ_Unlock(tracker->lock);
  ------------------
  |  |  246|  21.1k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  253|       |
  254|  21.1k|    if ((PLHashEntry *)NULL == entry) {
  ------------------
  |  Branch (254:9): [True: 0, False: 21.1k]
  ------------------
  255|      0|        nss_SetError(NSS_ERROR_NO_MEMORY);
  256|      0|        return PR_FAILURE;
  257|      0|    }
  258|       |
  259|  21.1k|    return PR_SUCCESS;
  260|  21.1k|}
nssPointerTracker_remove:
  287|  21.1k|{
  288|  21.1k|    PRBool registered;
  289|       |
  290|  21.1k|    if ((nssPointerTracker *)NULL == tracker) {
  ------------------
  |  Branch (290:9): [True: 0, False: 21.1k]
  ------------------
  291|      0|        nss_SetError(NSS_ERROR_INVALID_POINTER);
  292|      0|        return PR_FAILURE;
  293|      0|    }
  294|       |
  295|  21.1k|    if ((PZLock *)NULL == tracker->lock) {
  ------------------
  |  Branch (295:9): [True: 0, False: 21.1k]
  ------------------
  296|      0|        nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
  297|      0|        return PR_FAILURE;
  298|      0|    }
  299|       |
  300|  21.1k|    PZ_Lock(tracker->lock);
  ------------------
  |  |  245|  21.1k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  301|       |
  302|  21.1k|    if ((PLHashTable *)NULL == tracker->table) {
  ------------------
  |  Branch (302:9): [True: 0, False: 21.1k]
  ------------------
  303|      0|        PZ_Unlock(tracker->lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  304|      0|        nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
  305|      0|        return PR_FAILURE;
  306|      0|    }
  307|       |
  308|  21.1k|    registered = PL_HashTableRemove(tracker->table, pointer);
  309|  21.1k|    PZ_Unlock(tracker->lock);
  ------------------
  |  |  246|  21.1k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  310|       |
  311|  21.1k|    if (!registered) {
  ------------------
  |  Branch (311:9): [True: 0, False: 21.1k]
  ------------------
  312|      0|        nss_SetError(NSS_ERROR_POINTER_NOT_REGISTERED);
  313|      0|        return PR_FAILURE;
  314|      0|    }
  315|       |
  316|  21.1k|    return PR_SUCCESS;
  317|  21.1k|}
nssPointerTracker_verify:
  346|  30.4k|{
  347|  30.4k|    void *check;
  348|       |
  349|  30.4k|    if ((nssPointerTracker *)NULL == tracker) {
  ------------------
  |  Branch (349:9): [True: 0, False: 30.4k]
  ------------------
  350|      0|        nss_SetError(NSS_ERROR_INVALID_POINTER);
  351|      0|        return PR_FAILURE;
  352|      0|    }
  353|       |
  354|  30.4k|    if ((PZLock *)NULL == tracker->lock) {
  ------------------
  |  Branch (354:9): [True: 0, False: 30.4k]
  ------------------
  355|      0|        nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
  356|      0|        return PR_FAILURE;
  357|      0|    }
  358|       |
  359|  30.4k|    PZ_Lock(tracker->lock);
  ------------------
  |  |  245|  30.4k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  360|       |
  361|  30.4k|    if ((PLHashTable *)NULL == tracker->table) {
  ------------------
  |  Branch (361:9): [True: 0, False: 30.4k]
  ------------------
  362|      0|        PZ_Unlock(tracker->lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  363|      0|        nss_SetError(NSS_ERROR_TRACKER_NOT_INITIALIZED);
  364|      0|        return PR_FAILURE;
  365|      0|    }
  366|       |
  367|  30.4k|    check = PL_HashTableLookup(tracker->table, pointer);
  368|  30.4k|    PZ_Unlock(tracker->lock);
  ------------------
  |  |  246|  30.4k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  369|       |
  370|  30.4k|    if ((void *)NULL == check) {
  ------------------
  |  Branch (370:9): [True: 0, False: 30.4k]
  ------------------
  371|      0|        nss_SetError(NSS_ERROR_POINTER_NOT_REGISTERED);
  372|      0|        return PR_FAILURE;
  373|      0|    }
  374|       |
  375|  30.4k|    return PR_SUCCESS;
  376|  30.4k|}
tracker.c:trackerOnceFunc:
   42|      1|{
   43|      1|    nssPointerTracker *tracker = (nssPointerTracker *)arg;
   44|       |
   45|      1|    tracker->lock = PZ_NewLock(nssILockOther);
  ------------------
  |  |  243|      1|#define PZ_NewLock(t) PR_NewLock()
  ------------------
   46|      1|    if ((PZLock *)NULL == tracker->lock) {
  ------------------
  |  Branch (46:9): [True: 0, False: 1]
  ------------------
   47|      0|        return PR_FAILURE;
   48|      0|    }
   49|       |
   50|      1|    tracker->table =
   51|      1|        PL_NewHashTable(0, identity_hash, PL_CompareValues, PL_CompareValues,
   52|      1|                        (PLHashAllocOps *)NULL, (void *)NULL);
   53|      1|    if ((PLHashTable *)NULL == tracker->table) {
  ------------------
  |  Branch (53:9): [True: 0, False: 1]
  ------------------
   54|      0|        PZ_DestroyLock(tracker->lock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
   55|      0|        tracker->lock = (PZLock *)NULL;
   56|      0|        return PR_FAILURE;
   57|      0|    }
   58|       |
   59|      1|    return PR_SUCCESS;
   60|      1|}
tracker.c:identity_hash:
   28|  93.9k|{
   29|  93.9k|    return (PLHashNumber)((char *)key - (char *)NULL);
   30|  93.9k|}

nssUTF8_Duplicate:
  193|      4|{
  194|      4|    NSSUTF8 *rv;
  195|      4|    PRUint32 len;
  196|       |
  197|       |#ifdef NSSDEBUG
  198|       |    if ((const NSSUTF8 *)NULL == s) {
  199|       |        nss_SetError(NSS_ERROR_INVALID_POINTER);
  200|       |        return (NSSUTF8 *)NULL;
  201|       |    }
  202|       |
  203|       |    if ((NSSArena *)NULL != arenaOpt) {
  204|       |        if (PR_SUCCESS != nssArena_verifyPointer(arenaOpt)) {
  205|       |            return (NSSUTF8 *)NULL;
  206|       |        }
  207|       |    }
  208|       |#endif /* NSSDEBUG */
  209|       |
  210|      4|    len = PL_strlen((const char *)s);
  211|       |#ifdef PEDANTIC
  212|       |    if ('\0' != ((const char *)s)[len]) {
  213|       |        /* must have wrapped, e.g., too big for PRUint32 */
  214|       |        nss_SetError(NSS_ERROR_NO_MEMORY);
  215|       |        return (NSSUTF8 *)NULL;
  216|       |    }
  217|       |#endif     /* PEDANTIC */
  218|      4|    len++; /* zero termination */
  219|       |
  220|      4|    rv = nss_ZAlloc(arenaOpt, len);
  221|      4|    if ((void *)NULL == rv) {
  ------------------
  |  Branch (221:9): [True: 0, False: 4]
  ------------------
  222|      0|        return (NSSUTF8 *)NULL;
  223|      0|    }
  224|       |
  225|      4|    (void)nsslibc_memcpy(rv, s, len);
  226|      4|    return rv;
  227|      4|}
nssUTF8_Create:
  429|    121|{
  430|    121|    NSSUTF8 *rv = NULL;
  431|       |
  432|       |#ifdef NSSDEBUG
  433|       |    if ((NSSArena *)NULL != arenaOpt) {
  434|       |        if (PR_SUCCESS != nssArena_verifyPointer(arenaOpt)) {
  435|       |            return (NSSUTF8 *)NULL;
  436|       |        }
  437|       |    }
  438|       |
  439|       |    if ((const void *)NULL == inputString) {
  440|       |        nss_SetError(NSS_ERROR_INVALID_POINTER);
  441|       |        return (NSSUTF8 *)NULL;
  442|       |    }
  443|       |#endif /* NSSDEBUG */
  444|       |
  445|    121|    switch (type) {
  446|      0|        case nssStringType_DirectoryString:
  ------------------
  |  Branch (446:9): [True: 0, False: 121]
  ------------------
  447|       |            /* This is a composite type requiring BER */
  448|      0|            nss_SetError(NSS_ERROR_UNSUPPORTED_TYPE);
  449|      0|            break;
  450|      0|        case nssStringType_TeletexString:
  ------------------
  |  Branch (450:9): [True: 0, False: 121]
  ------------------
  451|       |            /*
  452|       |             * draft-ietf-pkix-ipki-part1-11 says in part:
  453|       |             *
  454|       |             * In addition, many legacy implementations support names encoded
  455|       |             * in the ISO 8859-1 character set (Latin1String) but tag them as
  456|       |             * TeletexString.  The Latin1String includes characters used in
  457|       |             * Western European countries which are not part of the
  458|       |             * TeletexString charcter set.  Implementations that process
  459|       |             * TeletexString SHOULD be prepared to handle the entire ISO
  460|       |             * 8859-1 character set.[ISO 8859-1].
  461|       |             */
  462|      0|            nss_SetError(NSS_ERROR_INTERNAL_ERROR); /* unimplemented */
  463|      0|            break;
  464|    121|        case nssStringType_PrintableString:
  ------------------
  |  Branch (464:9): [True: 121, False: 0]
  ------------------
  465|       |            /*
  466|       |             * PrintableString consists of A-Za-z0-9 ,()+,-./:=?
  467|       |             * This is a subset of ASCII, which is a subset of UTF8.
  468|       |             * So we can just duplicate the string over.
  469|       |             */
  470|       |
  471|    121|            if (0 == size) {
  ------------------
  |  Branch (471:17): [True: 0, False: 121]
  ------------------
  472|      0|                rv = nssUTF8_Duplicate((const NSSUTF8 *)inputString, arenaOpt);
  473|    121|            } else {
  474|    121|                rv = nss_ZAlloc(arenaOpt, size + 1);
  475|    121|                if ((NSSUTF8 *)NULL == rv) {
  ------------------
  |  Branch (475:21): [True: 0, False: 121]
  ------------------
  476|      0|                    return (NSSUTF8 *)NULL;
  477|      0|                }
  478|       |
  479|    121|                (void)nsslibc_memcpy(rv, inputString, size);
  480|    121|            }
  481|       |
  482|    121|            break;
  483|    121|        case nssStringType_UniversalString:
  ------------------
  |  Branch (483:9): [True: 0, False: 121]
  ------------------
  484|       |            /* 4-byte unicode */
  485|      0|            nss_SetError(NSS_ERROR_INTERNAL_ERROR); /* unimplemented */
  486|      0|            break;
  487|      0|        case nssStringType_BMPString:
  ------------------
  |  Branch (487:9): [True: 0, False: 121]
  ------------------
  488|       |            /* Base Multilingual Plane of Unicode */
  489|      0|            nss_SetError(NSS_ERROR_INTERNAL_ERROR); /* unimplemented */
  490|      0|            break;
  491|      0|        case nssStringType_UTF8String:
  ------------------
  |  Branch (491:9): [True: 0, False: 121]
  ------------------
  492|      0|            if (0 == size) {
  ------------------
  |  Branch (492:17): [True: 0, False: 0]
  ------------------
  493|      0|                rv = nssUTF8_Duplicate((const NSSUTF8 *)inputString, arenaOpt);
  494|      0|            } else {
  495|      0|                rv = nss_ZAlloc(arenaOpt, size + 1);
  496|      0|                if ((NSSUTF8 *)NULL == rv) {
  ------------------
  |  Branch (496:21): [True: 0, False: 0]
  ------------------
  497|      0|                    return (NSSUTF8 *)NULL;
  498|      0|                }
  499|       |
  500|      0|                (void)nsslibc_memcpy(rv, inputString, size);
  501|      0|            }
  502|       |
  503|      0|            break;
  504|      0|        case nssStringType_PHGString:
  ------------------
  |  Branch (504:9): [True: 0, False: 121]
  ------------------
  505|       |            /*
  506|       |             * PHGString is an IA5String (with case-insensitive comparisons).
  507|       |             * IA5 is ~almost~ ascii; ascii has dollar-sign where IA5 has
  508|       |             * currency symbol.
  509|       |             */
  510|      0|            nss_SetError(NSS_ERROR_INTERNAL_ERROR); /* unimplemented */
  511|      0|            break;
  512|      0|        case nssStringType_GeneralString:
  ------------------
  |  Branch (512:9): [True: 0, False: 121]
  ------------------
  513|      0|            nss_SetError(NSS_ERROR_INTERNAL_ERROR); /* unimplemented */
  514|      0|            break;
  515|      0|        default:
  ------------------
  |  Branch (515:9): [True: 0, False: 121]
  ------------------
  516|      0|            nss_SetError(NSS_ERROR_UNSUPPORTED_TYPE);
  517|      0|            break;
  518|    121|    }
  519|       |
  520|    121|    return rv;
  521|    121|}

CERT_RFC1485_EscapeAndQuote:
  692|  3.33k|{
  693|  3.33k|    EQMode mode = minimalEscapeAndQuote;
  694|  3.33k|    return escapeAndQuote(dst, dstlen, src, srclen, &mode);
  695|  3.33k|}
CERT_GetOidString:
  701|  3.07k|{
  702|  3.07k|    PRUint8* stop;  /* points to first byte after OID string */
  703|  3.07k|    PRUint8* first; /* byte of an OID component integer      */
  704|  3.07k|    PRUint8* last;  /* byte of an OID component integer      */
  705|  3.07k|    char* rvString = NULL;
  706|  3.07k|    char* prefix = NULL;
  707|       |
  708|  3.07k|#define MAX_OID_LEN 1024 /* bytes */
  709|       |
  710|  3.07k|    if (oid->len > MAX_OID_LEN) {
  ------------------
  |  |  708|  3.07k|#define MAX_OID_LEN 1024 /* bytes */
  ------------------
  |  Branch (710:9): [True: 0, False: 3.07k]
  ------------------
  711|      0|        PORT_SetError(SEC_ERROR_INPUT_LEN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  712|      0|        return NULL;
  713|      0|    }
  714|       |
  715|       |    /* If the OID has length 1, we bail. */
  716|  3.07k|    if (oid->len < 2) {
  ------------------
  |  Branch (716:9): [True: 18, False: 3.05k]
  ------------------
  717|     18|        return NULL;
  718|     18|    }
  719|       |
  720|       |    /* first will point to the next sequence of bytes to decode */
  721|  3.05k|    first = (PRUint8*)oid->data;
  722|       |    /* stop points to one past the legitimate data */
  723|  3.05k|    stop = &first[oid->len];
  724|       |
  725|       |    /*
  726|       |     * Check for our pseudo-encoded single-digit OIDs
  727|       |     */
  728|  3.05k|    if ((*first == 0x80) && (2 == oid->len)) {
  ------------------
  |  Branch (728:9): [True: 67, False: 2.98k]
  |  Branch (728:29): [True: 5, False: 62]
  ------------------
  729|       |        /* Funky encoding.  The second byte is the number */
  730|      5|        rvString = PR_smprintf("%lu", (PRUint32)first[1]);
  731|      5|        if (!rvString) {
  ------------------
  |  Branch (731:13): [True: 0, False: 5]
  ------------------
  732|      0|            PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  733|      0|        }
  734|      5|        return rvString;
  735|      5|    }
  736|       |
  737|  13.8k|    for (; first < stop; first = last + 1) {
  ------------------
  |  Branch (737:12): [True: 10.8k, False: 3.05k]
  ------------------
  738|  10.8k|        unsigned int bytesBeforeLast;
  739|       |
  740|  16.8k|        for (last = first; last < stop; last++) {
  ------------------
  |  Branch (740:28): [True: 16.1k, False: 667]
  ------------------
  741|  16.1k|            if (0 == (*last & 0x80)) {
  ------------------
  |  Branch (741:17): [True: 10.1k, False: 6.02k]
  ------------------
  742|  10.1k|                break;
  743|  10.1k|            }
  744|  16.1k|        }
  745|       |        /* There's no first bit set, so this isn't valid. Bail.*/
  746|  10.8k|        if (last == stop) {
  ------------------
  |  Branch (746:13): [True: 667, False: 10.1k]
  ------------------
  747|    667|            goto unsupported;
  748|    667|        }
  749|  10.1k|        bytesBeforeLast = (unsigned int)(last - first);
  750|  10.1k|        if (bytesBeforeLast <= 3U) { /* 0-28 bit number */
  ------------------
  |  Branch (750:13): [True: 9.71k, False: 435]
  ------------------
  751|  9.71k|            PRUint32 n = 0;
  752|  9.71k|            PRUint32 c;
  753|       |
  754|  9.71k|#define CGET(i, m)    \
  755|  9.71k|    c = last[-i] & m; \
  756|  9.71k|    n |= c << (7 * i)
  757|       |
  758|  9.71k|#define CASE(i, m)  \
  759|  9.71k|    case i:         \
  760|  9.71k|        CGET(i, m); \
  761|  9.71k|        if (!n)     \
  762|  9.71k|        goto unsupported /* fall-through */
  763|       |
  764|  9.71k|            switch (bytesBeforeLast) {
  ------------------
  |  Branch (764:21): [True: 0, False: 9.71k]
  ------------------
  765|    131|                CASE(3, 0x7f);
  ------------------
  |  |  759|    131|    case i:         \
  |  |  ------------------
  |  |  |  Branch (759:5): [True: 131, False: 9.58k]
  |  |  ------------------
  |  |  760|    131|        CGET(i, m); \
  |  |  ------------------
  |  |  |  |  755|    131|    c = last[-i] & m; \
  |  |  |  |  756|    131|    n |= c << (7 * i)
  |  |  ------------------
  |  |  761|    131|        if (!n)     \
  |  |  ------------------
  |  |  |  Branch (761:13): [True: 17, False: 114]
  |  |  ------------------
  |  |  762|    131|        goto unsupported /* fall-through */
  ------------------
  766|    463|                CASE(2, 0x7f);
  ------------------
  |  |  759|    463|    case i:         \
  |  |  ------------------
  |  |  |  Branch (759:5): [True: 349, False: 9.36k]
  |  |  ------------------
  |  |  760|    463|        CGET(i, m); \
  |  |  ------------------
  |  |  |  |  755|    463|    c = last[-i] & m; \
  |  |  |  |  756|    463|    n |= c << (7 * i)
  |  |  ------------------
  |  |  761|    463|        if (!n)     \
  |  |  ------------------
  |  |  |  Branch (761:13): [True: 45, False: 418]
  |  |  ------------------
  |  |  762|    463|        goto unsupported /* fall-through */
  ------------------
  767|  1.57k|                CASE(1, 0x7f);
  ------------------
  |  |  759|  1.57k|    case i:         \
  |  |  ------------------
  |  |  |  Branch (759:5): [True: 1.16k, False: 8.55k]
  |  |  ------------------
  |  |  760|  1.57k|        CGET(i, m); \
  |  |  ------------------
  |  |  |  |  755|  1.57k|    c = last[-i] & m; \
  |  |  |  |  756|  1.57k|    n |= c << (7 * i)
  |  |  ------------------
  |  |  761|  1.57k|        if (!n)     \
  |  |  ------------------
  |  |  |  Branch (761:13): [True: 219, False: 1.35k]
  |  |  ------------------
  |  |  762|  1.57k|        goto unsupported /* fall-through */
  ------------------
  768|  9.43k|                case 0:
  ------------------
  |  Branch (768:17): [True: 8.07k, False: 1.64k]
  ------------------
  769|  9.43k|                    n |= last[0] & 0x7f;
  770|  9.43k|                    break;
  771|  9.71k|            }
  772|  9.43k|            if (last[0] & 0x80) {
  ------------------
  |  Branch (772:17): [True: 0, False: 9.43k]
  ------------------
  773|      0|                goto unsupported;
  774|      0|            }
  775|       |
  776|  9.43k|            if (!rvString) {
  ------------------
  |  Branch (776:17): [True: 2.74k, False: 6.68k]
  ------------------
  777|       |                /* This is the first number.. decompose it */
  778|  2.74k|                PRUint32 one = PR_MIN(n / 40, 2); /* never > 2 */
  ------------------
  |  |  158|  2.74k|#define PR_MIN(x,y)     ((x)<(y)?(x):(y))
  |  |  ------------------
  |  |  |  Branch (158:26): [True: 797, False: 1.95k]
  |  |  ------------------
  ------------------
  779|  2.74k|                PRUint32 two = n - (one * 40);
  780|       |
  781|  2.74k|                rvString = PR_smprintf("OID.%lu.%lu", one, two);
  782|  6.68k|            } else {
  783|  6.68k|                prefix = rvString;
  784|  6.68k|                rvString = PR_smprintf("%s.%lu", prefix, n);
  785|  6.68k|            }
  786|  9.43k|        } else if (bytesBeforeLast <= 9U) { /* 29-64 bit number */
  ------------------
  |  Branch (786:20): [True: 423, False: 12]
  ------------------
  787|    423|            PRUint64 n = 0;
  788|    423|            PRUint64 c;
  789|       |
  790|    423|            switch (bytesBeforeLast) {
  ------------------
  |  Branch (790:21): [True: 0, False: 423]
  ------------------
  791|     80|                CASE(9, 0x01);
  ------------------
  |  |  759|     80|    case i:         \
  |  |  ------------------
  |  |  |  Branch (759:5): [True: 80, False: 343]
  |  |  ------------------
  |  |  760|     80|        CGET(i, m); \
  |  |  ------------------
  |  |  |  |  755|     80|    c = last[-i] & m; \
  |  |  |  |  756|     80|    n |= c << (7 * i)
  |  |  ------------------
  |  |  761|     80|        if (!n)     \
  |  |  ------------------
  |  |  |  Branch (761:13): [True: 12, False: 68]
  |  |  ------------------
  |  |  762|     80|        goto unsupported /* fall-through */
  ------------------
  792|    100|                CASE(8, 0x7f);
  ------------------
  |  |  759|    100|    case i:         \
  |  |  ------------------
  |  |  |  Branch (759:5): [True: 32, False: 391]
  |  |  ------------------
  |  |  760|    100|        CGET(i, m); \
  |  |  ------------------
  |  |  |  |  755|    100|    c = last[-i] & m; \
  |  |  |  |  756|    100|    n |= c << (7 * i)
  |  |  ------------------
  |  |  761|    100|        if (!n)     \
  |  |  ------------------
  |  |  |  Branch (761:13): [True: 10, False: 90]
  |  |  ------------------
  |  |  762|    100|        goto unsupported /* fall-through */
  ------------------
  793|    156|                CASE(7, 0x7f);
  ------------------
  |  |  759|    156|    case i:         \
  |  |  ------------------
  |  |  |  Branch (759:5): [True: 66, False: 357]
  |  |  ------------------
  |  |  760|    156|        CGET(i, m); \
  |  |  ------------------
  |  |  |  |  755|    156|    c = last[-i] & m; \
  |  |  |  |  756|    156|    n |= c << (7 * i)
  |  |  ------------------
  |  |  761|    156|        if (!n)     \
  |  |  ------------------
  |  |  |  Branch (761:13): [True: 21, False: 135]
  |  |  ------------------
  |  |  762|    156|        goto unsupported /* fall-through */
  ------------------
  794|    186|                CASE(6, 0x7f);
  ------------------
  |  |  759|    186|    case i:         \
  |  |  ------------------
  |  |  |  Branch (759:5): [True: 51, False: 372]
  |  |  ------------------
  |  |  760|    186|        CGET(i, m); \
  |  |  ------------------
  |  |  |  |  755|    186|    c = last[-i] & m; \
  |  |  |  |  756|    186|    n |= c << (7 * i)
  |  |  ------------------
  |  |  761|    186|        if (!n)     \
  |  |  ------------------
  |  |  |  Branch (761:13): [True: 13, False: 173]
  |  |  ------------------
  |  |  762|    186|        goto unsupported /* fall-through */
  ------------------
  795|    248|                CASE(5, 0x7f);
  ------------------
  |  |  759|    248|    case i:         \
  |  |  ------------------
  |  |  |  Branch (759:5): [True: 75, False: 348]
  |  |  ------------------
  |  |  760|    248|        CGET(i, m); \
  |  |  ------------------
  |  |  |  |  755|    248|    c = last[-i] & m; \
  |  |  |  |  756|    248|    n |= c << (7 * i)
  |  |  ------------------
  |  |  761|    248|        if (!n)     \
  |  |  ------------------
  |  |  |  Branch (761:13): [True: 19, False: 229]
  |  |  ------------------
  |  |  762|    248|        goto unsupported /* fall-through */
  ------------------
  796|    348|                CASE(4, 0x7f);
  ------------------
  |  |  759|    348|    case i:         \
  |  |  ------------------
  |  |  |  Branch (759:5): [True: 119, False: 304]
  |  |  ------------------
  |  |  760|    348|        CGET(i, m); \
  |  |  ------------------
  |  |  |  |  755|    348|    c = last[-i] & m; \
  |  |  |  |  756|    348|    n |= c << (7 * i)
  |  |  ------------------
  |  |  761|    348|        if (!n)     \
  |  |  ------------------
  |  |  |  Branch (761:13): [True: 14, False: 334]
  |  |  ------------------
  |  |  762|    348|        goto unsupported /* fall-through */
  ------------------
  797|    334|                CGET(3, 0x7f);
  ------------------
  |  |  755|    334|    c = last[-i] & m; \
  |  |  756|    334|    n |= c << (7 * i)
  ------------------
  798|    334|                CGET(2, 0x7f);
  ------------------
  |  |  755|    334|    c = last[-i] & m; \
  |  |  756|    334|    n |= c << (7 * i)
  ------------------
  799|    334|                CGET(1, 0x7f);
  ------------------
  |  |  755|    334|    c = last[-i] & m; \
  |  |  756|    334|    n |= c << (7 * i)
  ------------------
  800|    334|                CGET(0, 0x7f);
  ------------------
  |  |  755|    334|    c = last[-i] & m; \
  |  |  756|    334|    n |= c << (7 * i)
  ------------------
  801|    334|                break;
  802|    423|            }
  803|    334|            if (last[0] & 0x80)
  ------------------
  |  Branch (803:17): [True: 0, False: 334]
  ------------------
  804|      0|                goto unsupported;
  805|       |
  806|    334|            if (!rvString) {
  ------------------
  |  Branch (806:17): [True: 120, False: 214]
  ------------------
  807|       |                /* This is the first number.. decompose it */
  808|    120|                PRUint64 one = PR_MIN(n / 40, 2); /* never > 2 */
  ------------------
  |  |  158|    120|#define PR_MIN(x,y)     ((x)<(y)?(x):(y))
  |  |  ------------------
  |  |  |  Branch (158:26): [True: 0, False: 120]
  |  |  ------------------
  ------------------
  809|    120|                PRUint64 two = n - (one * 40);
  810|       |
  811|    120|                rvString = PR_smprintf("OID.%llu.%llu", one, two);
  812|    214|            } else {
  813|    214|                prefix = rvString;
  814|    214|                rvString = PR_smprintf("%s.%llu", prefix, n);
  815|    214|            }
  816|    334|        } else {
  817|       |        /* More than a 64-bit number, or not minimal encoding. */
  818|  1.04k|        unsupported:
  819|  1.04k|            if (!rvString)
  ------------------
  |  Branch (819:17): [True: 182, False: 867]
  ------------------
  820|    182|                rvString = PR_smprintf("OID.UNSUPPORTED");
  821|    867|            else {
  822|    867|                prefix = rvString;
  823|    867|                rvString = PR_smprintf("%s.UNSUPPORTED", prefix);
  824|    867|            }
  825|  1.04k|        }
  826|       |
  827|  10.8k|        if (prefix) {
  ------------------
  |  Branch (827:13): [True: 7.76k, False: 3.05k]
  ------------------
  828|  7.76k|            PR_smprintf_free(prefix);
  829|  7.76k|            prefix = NULL;
  830|  7.76k|        }
  831|  10.8k|        if (!rvString) {
  ------------------
  |  Branch (831:13): [True: 0, False: 10.8k]
  ------------------
  832|      0|            PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  833|      0|            break;
  834|      0|        }
  835|  10.8k|    }
  836|  3.05k|    return rvString;
  837|  3.05k|}
CERT_NameToAsciiInvertible:
 1117|  11.5k|{
 1118|  11.5k|    CERTRDN** rdns;
 1119|  11.5k|    CERTRDN** lastRdn;
 1120|  11.5k|    CERTRDN** rdn;
 1121|  11.5k|    PRBool first = PR_TRUE;
  ------------------
  |  |  437|  11.5k|#define PR_TRUE 1
  ------------------
 1122|  11.5k|    stringBuf strBuf = { NULL, 0, 0 };
 1123|       |
 1124|  11.5k|    rdns = name->rdns;
 1125|  11.5k|    if (rdns == NULL) {
  ------------------
  |  Branch (1125:9): [True: 0, False: 11.5k]
  ------------------
 1126|      0|        return NULL;
 1127|      0|    }
 1128|       |
 1129|       |    /* find last RDN */
 1130|  11.5k|    lastRdn = rdns;
 1131|  28.9k|    while (*lastRdn)
  ------------------
  |  Branch (1131:12): [True: 17.4k, False: 11.5k]
  ------------------
 1132|  17.4k|        lastRdn++;
 1133|  11.5k|    lastRdn--;
 1134|       |
 1135|       |    /*
 1136|       |     * Loop over name contents in _reverse_ RDN order appending to string
 1137|       |     */
 1138|  28.6k|    for (rdn = lastRdn; rdn >= rdns; rdn--) {
  ------------------
  |  Branch (1138:25): [True: 17.1k, False: 11.4k]
  ------------------
 1139|  17.1k|        CERTAVA** avas = (*rdn)->avas;
 1140|  17.1k|        CERTAVA* ava;
 1141|  17.1k|        PRBool newRDN = PR_TRUE;
  ------------------
  |  |  437|  17.1k|#define PR_TRUE 1
  ------------------
 1142|       |
 1143|       |        /*
 1144|       |         * XXX Do we need to traverse the AVAs in reverse order, too?
 1145|       |         */
 1146|  34.3k|        while (avas && (ava = *avas++) != NULL) {
  ------------------
  |  Branch (1146:16): [True: 34.3k, False: 0]
  |  Branch (1146:24): [True: 17.1k, False: 17.1k]
  ------------------
 1147|  17.1k|            SECStatus rv;
 1148|       |            /* Put in comma or plus separator */
 1149|  17.1k|            if (!first) {
  ------------------
  |  Branch (1149:17): [True: 5.94k, False: 11.1k]
  ------------------
 1150|       |                /* Use of spaces is deprecated in RFC 2253. */
 1151|  5.94k|                rv = AppendStr(&strBuf, newRDN ? "," : "+");
  ------------------
  |  Branch (1151:41): [True: 5.81k, False: 129]
  ------------------
 1152|  5.94k|                if (rv)
  ------------------
  |  Branch (1152:21): [True: 0, False: 5.94k]
  ------------------
 1153|      0|                    goto loser;
 1154|  11.1k|            } else {
 1155|  11.1k|                first = PR_FALSE;
  ------------------
  |  |  438|  11.1k|#define PR_FALSE 0
  ------------------
 1156|  11.1k|            }
 1157|       |
 1158|       |            /* Add in tag type plus value into strBuf */
 1159|  17.1k|            rv = AppendAVA(&strBuf, ava, strict);
 1160|  17.1k|            if (rv)
  ------------------
  |  Branch (1160:17): [True: 18, False: 17.1k]
  ------------------
 1161|     18|                goto loser;
 1162|  17.1k|            newRDN = PR_FALSE;
  ------------------
  |  |  438|  17.1k|#define PR_FALSE 0
  ------------------
 1163|  17.1k|        }
 1164|  17.1k|    }
 1165|  11.4k|    return strBuf.buffer;
 1166|     18|loser:
 1167|     18|    if (strBuf.buffer) {
  ------------------
  |  Branch (1167:9): [True: 10, False: 8]
  ------------------
 1168|     10|        PORT_Free(strBuf.buffer);
  ------------------
  |  |   60|     10|#define PORT_Free PORT_Free_Util
  ------------------
 1169|     10|    }
 1170|     18|    return NULL;
 1171|  11.5k|}
CERT_NameToAscii:
 1175|  11.5k|{
 1176|  11.5k|    return CERT_NameToAsciiInvertible(name, CERT_N2A_READABLE);
 1177|  11.5k|}
cert_GetCertificateEmailAddresses:
 1437|  5.75k|{
 1438|  5.75k|    char* rawEmailAddr = NULL;
 1439|  5.75k|    char* addrBuf = NULL;
 1440|  5.75k|    char* pBuf = NULL;
 1441|  5.75k|    PORTCheapArenaPool tmpArena;
 1442|  5.75k|    PRUint32 maxLen = 0;
 1443|  5.75k|    PRInt32 finalLen = 0;
 1444|  5.75k|    SECStatus rv;
 1445|  5.75k|    SECItem subAltName;
 1446|       |
 1447|  5.75k|    PORT_InitCheapArena(&tmpArena, DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|  5.75k|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
 1448|       |
 1449|  5.75k|    subAltName.data = NULL;
 1450|  5.75k|    maxLen = cert->derCert.len;
 1451|  5.75k|    PORT_Assert(maxLen);
  ------------------
  |  |  120|  5.75k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  5.75k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5.75k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1452|  5.75k|    if (!maxLen)
  ------------------
  |  Branch (1452:9): [True: 0, False: 5.75k]
  ------------------
 1453|      0|        maxLen = 2000; /* a guess, should never happen */
 1454|       |
 1455|  5.75k|    pBuf = addrBuf = (char*)PORT_ArenaZAlloc(&tmpArena.arena, maxLen + 1);
  ------------------
  |  |   59|  5.75k|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
 1456|  5.75k|    if (!addrBuf)
  ------------------
  |  Branch (1456:9): [True: 0, False: 5.75k]
  ------------------
 1457|      0|        goto loser;
 1458|       |
 1459|  5.75k|    rawEmailAddr = CERT_GetNameElement(&tmpArena.arena, &cert->subject,
 1460|  5.75k|                                       SEC_OID_PKCS9_EMAIL_ADDRESS);
 1461|  5.75k|    pBuf = appendStringToBuf(pBuf, rawEmailAddr, &maxLen);
 1462|       |
 1463|  5.75k|    rawEmailAddr = CERT_GetNameElement(&tmpArena.arena, &cert->subject,
 1464|  5.75k|                                       SEC_OID_RFC1274_MAIL);
 1465|  5.75k|    pBuf = appendStringToBuf(pBuf, rawEmailAddr, &maxLen);
 1466|       |
 1467|  5.75k|    rv = CERT_FindCertExtension(cert, SEC_OID_X509_SUBJECT_ALT_NAME, &subAltName);
 1468|  5.75k|    if (rv == SECSuccess && subAltName.data) {
  ------------------
  |  Branch (1468:9): [True: 681, False: 5.07k]
  |  Branch (1468:29): [True: 677, False: 4]
  ------------------
 1469|    677|        CERTGeneralName* nameList = NULL;
 1470|       |
 1471|    677|        if (!!(nameList = CERT_DecodeAltNameExtension(&tmpArena.arena, &subAltName))) {
  ------------------
  |  Branch (1471:13): [True: 154, False: 523]
  ------------------
 1472|    154|            CERTGeneralName* current = nameList;
 1473|  4.01k|            do {
 1474|  4.01k|                if (current->type == certDirectoryName) {
  ------------------
  |  Branch (1474:21): [True: 15, False: 3.99k]
  ------------------
 1475|     15|                    rawEmailAddr =
 1476|     15|                        CERT_GetNameElement(&tmpArena.arena,
 1477|     15|                                            &current->name.directoryName,
 1478|     15|                                            SEC_OID_PKCS9_EMAIL_ADDRESS);
 1479|     15|                    pBuf =
 1480|     15|                        appendStringToBuf(pBuf, rawEmailAddr, &maxLen);
 1481|       |
 1482|     15|                    rawEmailAddr =
 1483|     15|                        CERT_GetNameElement(&tmpArena.arena,
 1484|     15|                                            &current->name.directoryName,
 1485|     15|                                            SEC_OID_RFC1274_MAIL);
 1486|     15|                    pBuf =
 1487|     15|                        appendStringToBuf(pBuf, rawEmailAddr, &maxLen);
 1488|  3.99k|                } else if (current->type == certRFC822Name) {
  ------------------
  |  Branch (1488:28): [True: 200, False: 3.79k]
  ------------------
 1489|    200|                    pBuf =
 1490|    200|                        appendItemToBuf(pBuf, &current->name.other, &maxLen);
 1491|    200|                }
 1492|  4.01k|                current = CERT_GetNextGeneralName(current);
 1493|  4.01k|            } while (current != nameList);
  ------------------
  |  Branch (1493:22): [True: 3.86k, False: 154]
  ------------------
 1494|    154|        }
 1495|    677|        SECITEM_FreeItem(&subAltName, PR_FALSE);
  ------------------
  |  |  108|    677|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(&subAltName, PR_FALSE);
  ------------------
  |  |  438|    677|#define PR_FALSE 0
  ------------------
 1496|       |        /* Don't free nameList, it's part of the tmpArena. */
 1497|    677|    }
 1498|       |    /* now copy superstring to cert's arena */
 1499|  5.75k|    finalLen = (pBuf - addrBuf) + 1;
 1500|  5.75k|    pBuf = NULL;
 1501|  5.75k|    if (finalLen > 1) {
  ------------------
  |  Branch (1501:9): [True: 121, False: 5.63k]
  ------------------
 1502|    121|        pBuf = PORT_ArenaAlloc(cert->arena, finalLen);
  ------------------
  |  |   53|    121|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
 1503|    121|        if (pBuf) {
  ------------------
  |  Branch (1503:13): [True: 121, False: 0]
  ------------------
 1504|    121|            PORT_Memcpy(pBuf, addrBuf, finalLen);
  ------------------
  |  |  180|    121|#define PORT_Memcpy memcpy
  ------------------
 1505|    121|        }
 1506|    121|    }
 1507|  5.75k|loser:
 1508|  5.75k|    PORT_DestroyCheapArena(&tmpArena);
 1509|       |
 1510|  5.75k|    return pBuf;
 1511|  5.75k|}
CERT_GetCommonName:
 1565|  6.31k|{
 1566|  6.31k|    return (CERT_GetLastNameElement(NULL, name, SEC_OID_AVA_COMMON_NAME));
 1567|  6.31k|}
alg1485.c:escapeAndQuote:
  655|  24.0k|{
  656|  24.0k|    int i, reqLen = 0;
  657|  24.0k|    EQMode mode = pEQMode ? *pEQMode : minimalEscape;
  ------------------
  |  Branch (657:19): [True: 18.5k, False: 5.46k]
  ------------------
  658|       |
  659|  24.0k|    reqLen = cert_RFC1485_GetRequiredLen(src, srclen, &mode);
  660|       |    /* reqLen is max 16384*3 + 2 */
  661|       |    /* space for terminal null */
  662|  24.0k|    if (reqLen < 0 || reqLen + 1 > dstlen) {
  ------------------
  |  Branch (662:9): [True: 0, False: 24.0k]
  |  Branch (662:23): [True: 45, False: 23.9k]
  ------------------
  663|     45|        PORT_SetError(SEC_ERROR_OUTPUT_LEN);
  ------------------
  |  |   65|     45|#define PORT_SetError PORT_SetError_Util
  ------------------
  664|     45|        return SECFailure;
  665|     45|    }
  666|       |
  667|  23.9k|    if (mode == minimalEscapeAndQuote)
  ------------------
  |  Branch (667:9): [True: 1.36k, False: 22.6k]
  ------------------
  668|  1.36k|        *dst++ = C_DOUBLE_QUOTE;
  ------------------
  |  |  117|  1.36k|#define C_DOUBLE_QUOTE '\042'
  ------------------
  669|   346k|    for (i = 0; i < srclen; i++) {
  ------------------
  |  Branch (669:17): [True: 322k, False: 23.9k]
  ------------------
  670|   322k|        char c = src[i];
  671|   322k|        if (NEEDS_HEX_ESCAPE(c)) {
  ------------------
  |  |  155|   322k|#define NEEDS_HEX_ESCAPE(c) ((PRUint8)c < 0x20 || c == 0x7f)
  |  |  ------------------
  |  |  |  Branch (155:30): [True: 39.5k, False: 283k]
  |  |  |  Branch (155:51): [True: 467, False: 282k]
  |  |  ------------------
  ------------------
  672|  40.0k|            *dst++ = C_BACKSLASH;
  ------------------
  |  |  119|  40.0k|#define C_BACKSLASH '\134'
  ------------------
  673|  40.0k|            *dst++ = hexChars[(c >> 4) & 0x0f];
  674|  40.0k|            *dst++ = hexChars[c & 0x0f];
  675|   282k|        } else {
  676|   282k|            if (NEEDS_ESCAPE(c) || (SPECIAL_CHAR(c) && mode == fullEscape)) {
  ------------------
  |  |  153|   565k|#define NEEDS_ESCAPE(c) (c == C_DOUBLE_QUOTE || c == C_BACKSLASH)
  |  |  ------------------
  |  |  |  |  117|   565k|#define C_DOUBLE_QUOTE '\042'
  |  |  ------------------
  |  |               #define NEEDS_ESCAPE(c) (c == C_DOUBLE_QUOTE || c == C_BACKSLASH)
  |  |  ------------------
  |  |  |  |  119|   564k|#define C_BACKSLASH '\134'
  |  |  ------------------
  |  |  |  Branch (153:26): [True: 1.07k, False: 281k]
  |  |  |  Branch (153:49): [True: 990, False: 280k]
  |  |  ------------------
  ------------------
                          if (NEEDS_ESCAPE(c) || (SPECIAL_CHAR(c) && mode == fullEscape)) {
  ------------------
  |  |  127|   561k|    (((c) == ',') || ((c) == '=') || ((c) == C_DOUBLE_QUOTE) ||                \
  |  |  ------------------
  |  |  |  |  117|   277k|#define C_DOUBLE_QUOTE '\042'
  |  |  ------------------
  |  |  |  Branch (127:6): [True: 1.28k, False: 279k]
  |  |  |  Branch (127:22): [True: 1.63k, False: 277k]
  |  |  |  Branch (127:38): [True: 0, False: 277k]
  |  |  ------------------
  |  |  128|   280k|     ((c) == '\r') || ((c) == '\n') || ((c) == '+') ||                         \
  |  |  ------------------
  |  |  |  Branch (128:6): [True: 0, False: 277k]
  |  |  |  Branch (128:23): [True: 0, False: 277k]
  |  |  |  Branch (128:40): [True: 1.20k, False: 276k]
  |  |  ------------------
  |  |  129|   280k|     ((c) == '<') || ((c) == '>') || ((c) == '#') ||                           \
  |  |  ------------------
  |  |  |  Branch (129:6): [True: 867, False: 275k]
  |  |  |  Branch (129:22): [True: 626, False: 275k]
  |  |  |  Branch (129:38): [True: 635, False: 274k]
  |  |  ------------------
  |  |  130|   280k|     ((c) == ';') || ((c) == C_BACKSLASH))
  |  |  ------------------
  |  |  |  |  119|   273k|#define C_BACKSLASH '\134'
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 585, False: 273k]
  |  |  |  Branch (130:22): [True: 0, False: 273k]
  |  |  ------------------
  ------------------
  |  Branch (676:56): [True: 0, False: 6.83k]
  ------------------
  677|  2.06k|                *dst++ = C_BACKSLASH;
  ------------------
  |  |  119|  2.06k|#define C_BACKSLASH '\134'
  ------------------
  678|  2.06k|            }
  679|   282k|            *dst++ = c;
  680|   282k|        }
  681|   322k|    }
  682|  23.9k|    if (mode == minimalEscapeAndQuote)
  ------------------
  |  Branch (682:9): [True: 1.36k, False: 22.6k]
  ------------------
  683|  1.36k|        *dst++ = C_DOUBLE_QUOTE;
  ------------------
  |  |  117|  1.36k|#define C_DOUBLE_QUOTE '\042'
  ------------------
  684|  23.9k|    *dst++ = 0;
  685|  23.9k|    if (pEQMode)
  ------------------
  |  Branch (685:9): [True: 18.5k, False: 5.46k]
  ------------------
  686|  18.5k|        *pEQMode = mode;
  687|  23.9k|    return SECSuccess;
  688|  24.0k|}
alg1485.c:cert_RFC1485_GetRequiredLen:
  608|  44.6k|{
  609|  44.6k|    int i, reqLen = 0;
  610|  44.6k|    EQMode mode = pEQMode ? *pEQMode : minimalEscape;
  ------------------
  |  Branch (610:19): [True: 39.2k, False: 5.46k]
  ------------------
  611|  44.6k|    PRBool needsQuoting = PR_FALSE;
  ------------------
  |  |  438|  44.6k|#define PR_FALSE 0
  ------------------
  612|  44.6k|    char lastC = 0;
  613|       |
  614|       |    /* avoids needing to check for overflow */
  615|  44.6k|    if (srclen > 16384) {
  ------------------
  |  Branch (615:9): [True: 0, False: 44.6k]
  ------------------
  616|      0|        return -1;
  617|      0|    }
  618|       |    /* need to make an initial pass to determine if quoting is needed */
  619|   637k|    for (i = 0; i < srclen; i++) {
  ------------------
  |  Branch (619:17): [True: 592k, False: 44.6k]
  ------------------
  620|   592k|        char c = src[i];
  621|   592k|        reqLen++;
  622|   592k|        if (NEEDS_HEX_ESCAPE(c)) { /* c -> \xx  */
  ------------------
  |  |  155|   592k|#define NEEDS_HEX_ESCAPE(c) ((PRUint8)c < 0x20 || c == 0x7f)
  |  |  ------------------
  |  |  |  Branch (155:30): [True: 78.0k, False: 514k]
  |  |  |  Branch (155:51): [True: 925, False: 513k]
  |  |  ------------------
  ------------------
  623|  78.9k|            reqLen += 2;
  624|   513k|        } else if (NEEDS_ESCAPE(c)) { /* c -> \c   */
  ------------------
  |  |  153|   513k|#define NEEDS_ESCAPE(c) (c == C_DOUBLE_QUOTE || c == C_BACKSLASH)
  |  |  ------------------
  |  |  |  |  117|  1.02M|#define C_DOUBLE_QUOTE '\042'
  |  |  ------------------
  |  |               #define NEEDS_ESCAPE(c) (c == C_DOUBLE_QUOTE || c == C_BACKSLASH)
  |  |  ------------------
  |  |  |  |  119|  1.02M|#define C_BACKSLASH '\134'
  |  |  ------------------
  |  |  |  Branch (153:26): [True: 2.21k, False: 511k]
  |  |  |  Branch (153:49): [True: 1.94k, False: 509k]
  |  |  ------------------
  ------------------
  625|  4.15k|            reqLen++;
  626|   509k|        } else if (SPECIAL_CHAR(c)) {
  ------------------
  |  |  127|   509k|    (((c) == ',') || ((c) == '=') || ((c) == C_DOUBLE_QUOTE) ||                \
  |  |  ------------------
  |  |  |  |  117|   503k|#define C_DOUBLE_QUOTE '\042'
  |  |  ------------------
  |  |  |  Branch (127:6): [True: 2.54k, False: 506k]
  |  |  |  Branch (127:22): [True: 3.20k, False: 503k]
  |  |  |  Branch (127:38): [True: 0, False: 503k]
  |  |  ------------------
  |  |  128|   509k|     ((c) == '\r') || ((c) == '\n') || ((c) == '+') ||                         \
  |  |  ------------------
  |  |  |  Branch (128:6): [True: 0, False: 503k]
  |  |  |  Branch (128:23): [True: 0, False: 503k]
  |  |  |  Branch (128:40): [True: 2.36k, False: 501k]
  |  |  ------------------
  |  |  129|   509k|     ((c) == '<') || ((c) == '>') || ((c) == '#') ||                           \
  |  |  ------------------
  |  |  |  Branch (129:6): [True: 1.72k, False: 499k]
  |  |  |  Branch (129:22): [True: 1.22k, False: 498k]
  |  |  |  Branch (129:38): [True: 1.23k, False: 496k]
  |  |  ------------------
  |  |  130|   509k|     ((c) == ';') || ((c) == C_BACKSLASH))
  |  |  ------------------
  |  |  |  |  119|   495k|#define C_BACKSLASH '\134'
  |  |  ------------------
  |  |  |  Branch (130:6): [True: 1.17k, False: 495k]
  |  |  |  Branch (130:22): [True: 0, False: 495k]
  |  |  ------------------
  ------------------
  627|  13.4k|            if (mode == minimalEscapeAndQuote) /* quoting is allowed */
  ------------------
  |  Branch (627:17): [True: 11.0k, False: 2.43k]
  ------------------
  628|  11.0k|                needsQuoting = PR_TRUE;        /* entirety will need quoting */
  ------------------
  |  |  437|  11.0k|#define PR_TRUE 1
  ------------------
  629|  2.43k|            else if (mode == fullEscape)
  ------------------
  |  Branch (629:22): [True: 0, False: 2.43k]
  ------------------
  630|      0|                reqLen++; /* MAY escape this character */
  631|   495k|        } else if (OPTIONAL_SPACE(c) && OPTIONAL_SPACE(lastC)) {
  ------------------
  |  |  124|   991k|    (((c) == ' ') || ((c) == '\r') || ((c) == '\n'))
  |  |  ------------------
  |  |  |  Branch (124:6): [True: 10.4k, False: 485k]
  |  |  |  Branch (124:22): [True: 0, False: 485k]
  |  |  |  Branch (124:39): [True: 0, False: 485k]
  |  |  ------------------
  ------------------
                      } else if (OPTIONAL_SPACE(c) && OPTIONAL_SPACE(lastC)) {
  ------------------
  |  |  124|  10.4k|    (((c) == ' ') || ((c) == '\r') || ((c) == '\n'))
  |  |  ------------------
  |  |  |  Branch (124:6): [True: 922, False: 9.52k]
  |  |  |  Branch (124:22): [True: 292, False: 9.23k]
  |  |  |  Branch (124:39): [True: 133, False: 9.10k]
  |  |  ------------------
  ------------------
  632|  1.34k|            if (mode == minimalEscapeAndQuote) /* quoting is allowed */
  ------------------
  |  Branch (632:17): [True: 927, False: 420]
  ------------------
  633|    927|                needsQuoting = PR_TRUE;        /* entirety will need quoting */
  ------------------
  |  |  437|    927|#define PR_TRUE 1
  ------------------
  634|  1.34k|        }
  635|   592k|        lastC = c;
  636|   592k|    }
  637|       |    /* if it begins or ends in optional space it needs quoting */
  638|  44.6k|    if (!needsQuoting && srclen > 0 && mode == minimalEscapeAndQuote &&
  ------------------
  |  Branch (638:9): [True: 42.5k, False: 2.14k]
  |  Branch (638:26): [True: 42.4k, False: 71]
  |  Branch (638:40): [True: 17.3k, False: 25.1k]
  ------------------
  639|  44.6k|        (OPTIONAL_SPACE(src[srclen - 1]) || OPTIONAL_SPACE(src[0]))) {
  ------------------
  |  |  124|  34.7k|    (((c) == ' ') || ((c) == '\r') || ((c) == '\n'))
  |  |  ------------------
  |  |  |  Branch (124:6): [True: 37, False: 17.3k]
  |  |  |  Branch (124:22): [True: 53, False: 17.2k]
  |  |  |  Branch (124:39): [True: 30, False: 17.2k]
  |  |  ------------------
  ------------------
                      (OPTIONAL_SPACE(src[srclen - 1]) || OPTIONAL_SPACE(src[0]))) {
  ------------------
  |  |  124|  17.2k|    (((c) == ' ') || ((c) == '\r') || ((c) == '\n'))
  |  |  ------------------
  |  |  |  Branch (124:6): [True: 40, False: 17.2k]
  |  |  |  Branch (124:22): [True: 37, False: 17.1k]
  |  |  |  Branch (124:39): [True: 65, False: 17.1k]
  |  |  ------------------
  ------------------
  640|    262|        needsQuoting = PR_TRUE;
  ------------------
  |  |  437|    262|#define PR_TRUE 1
  ------------------
  641|    262|    }
  642|       |
  643|  44.6k|    if (needsQuoting)
  ------------------
  |  Branch (643:9): [True: 2.40k, False: 42.2k]
  ------------------
  644|  2.40k|        reqLen += 2;
  645|  44.6k|    if (pEQMode && mode == minimalEscapeAndQuote && !needsQuoting)
  ------------------
  |  Branch (645:9): [True: 39.2k, False: 5.46k]
  |  Branch (645:20): [True: 19.5k, False: 19.6k]
  |  Branch (645:53): [True: 17.1k, False: 2.40k]
  ------------------
  646|  17.1k|        *pEQMode = minimalEscape;
  647|       |    /* Maximum output size would be 3*srclen+2 */
  648|  44.6k|    return reqLen;
  649|  44.6k|}
alg1485.c:AppendStr:
  554|  23.0k|{
  555|  23.0k|    char* buf;
  556|  23.0k|    unsigned bufLen, bufSize, len;
  557|  23.0k|    int size = 0;
  558|       |
  559|       |    /* Figure out how much to grow buf by (add in the '\0') */
  560|  23.0k|    buf = bufp->buffer;
  561|  23.0k|    bufLen = bufp->offset;
  562|  23.0k|    len = PORT_Strlen(str);
  ------------------
  |  |  190|  23.0k|#define PORT_Strlen(s) strlen(s)
  ------------------
  563|  23.0k|    bufSize = bufLen + len;
  564|  23.0k|    if (!buf) {
  ------------------
  |  Branch (564:9): [True: 11.1k, False: 11.8k]
  ------------------
  565|  11.1k|        bufSize++;
  566|  11.1k|        size = PR_MAX(DEFAULT_BUFFER_SIZE, bufSize * 2);
  ------------------
  |  |  159|  11.1k|#define PR_MAX(x,y)     ((x)>(y)?(x):(y))
  |  |  ------------------
  |  |  |  Branch (159:26): [True: 11.1k, False: 60]
  |  |  ------------------
  ------------------
  567|  11.1k|        buf = (char*)PORT_Alloc(size);
  ------------------
  |  |   52|  11.1k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  568|  11.1k|        bufp->size = size;
  569|  11.8k|    } else if (bufp->size < bufSize) {
  ------------------
  |  Branch (569:16): [True: 348, False: 11.5k]
  ------------------
  570|    348|        size = bufSize * 2;
  571|    348|        buf = (char*)PORT_Realloc(buf, size);
  ------------------
  |  |   64|    348|#define PORT_Realloc PORT_Realloc_Util
  ------------------
  572|    348|        bufp->size = size;
  573|    348|    }
  574|  23.0k|    if (!buf) {
  ------------------
  |  Branch (574:9): [True: 0, False: 23.0k]
  ------------------
  575|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  576|      0|        return SECFailure;
  577|      0|    }
  578|  23.0k|    bufp->buffer = buf;
  579|  23.0k|    bufp->offset = bufSize;
  580|       |
  581|       |    /* Concatenate str onto buf */
  582|  23.0k|    buf = buf + bufLen;
  583|  23.0k|    if (bufLen)
  ------------------
  |  Branch (583:9): [True: 11.8k, False: 11.1k]
  ------------------
  584|  11.8k|        buf--;                      /* stomp on old '\0' */
  585|  23.0k|    PORT_Memcpy(buf, str, len + 1); /* put in new null */
  ------------------
  |  |  180|  23.0k|#define PORT_Memcpy memcpy
  ------------------
  586|  23.0k|    return SECSuccess;
  587|  23.0k|}
alg1485.c:AppendAVA:
  921|  17.1k|{
  922|  17.1k|#define TMPBUF_LEN 2048
  923|  17.1k|    const NameToKind* pn2k = name2kinds;
  924|  17.1k|    SECItem* avaValue = NULL;
  925|  17.1k|    char* unknownTag = NULL;
  926|  17.1k|    char* encodedAVA = NULL;
  927|  17.1k|    PRBool useHex = PR_FALSE; /* use =#hexXXXX form */
  ------------------
  |  |  438|  17.1k|#define PR_FALSE 0
  ------------------
  928|  17.1k|    PRBool truncateName = PR_FALSE;
  ------------------
  |  |  438|  17.1k|#define PR_FALSE 0
  ------------------
  929|  17.1k|    PRBool truncateValue = PR_FALSE;
  ------------------
  |  |  438|  17.1k|#define PR_FALSE 0
  ------------------
  930|  17.1k|    SECOidTag endKind;
  931|  17.1k|    SECStatus rv;
  932|  17.1k|    unsigned int len;
  933|  17.1k|    unsigned int nameLen, valueLen;
  934|  17.1k|    unsigned int maxName, maxValue;
  935|  17.1k|    EQMode mode = minimalEscapeAndQuote;
  936|  17.1k|    NameToKind n2k = { NULL, 32767, SEC_OID_UNKNOWN, SEC_ASN1_DS };
  ------------------
  |  |   24|  17.1k|#define SEC_ASN1_DS SEC_ASN1_HIGH_TAG_NUMBER
  |  |  ------------------
  |  |  |  |  107|  17.1k|#define SEC_ASN1_HIGH_TAG_NUMBER 0x1f
  |  |  ------------------
  ------------------
  937|  17.1k|    char tmpBuf[TMPBUF_LEN];
  938|       |
  939|  17.1k|#define tagName n2k.name /* non-NULL means use NAME= form */
  940|  17.1k|#define maxBytes n2k.maxLen
  941|  17.1k|#define tag n2k.kind
  942|  17.1k|#define vt n2k.valueType
  943|       |
  944|       |    /* READABLE mode recognizes more names from the name2kinds table
  945|       |     * than do STRICT or INVERTIBLE modes.  This assignment chooses the
  946|       |     * point in the table where the attribute type name scanning stops.
  947|       |     */
  948|  17.1k|    endKind = (strict == CERT_N2A_READABLE) ? SEC_OID_UNKNOWN
  ------------------
  |  Branch (948:15): [True: 17.1k, False: 0]
  ------------------
  949|  17.1k|                                            : SEC_OID_AVA_POSTAL_ADDRESS;
  950|  17.1k|    tag = CERT_GetAVATag(ava);
  ------------------
  |  |  941|  17.1k|#define tag n2k.kind
  ------------------
  951|   121k|    while (pn2k->kind != tag && pn2k->kind != endKind) {
  ------------------
  |  |  941|   242k|#define tag n2k.kind
  ------------------
  |  Branch (951:12): [True: 107k, False: 14.0k]
  |  Branch (951:33): [True: 104k, False: 3.07k]
  ------------------
  952|   104k|        ++pn2k;
  953|   104k|    }
  954|       |
  955|  17.1k|    if (pn2k->kind != endKind) {
  ------------------
  |  Branch (955:9): [True: 14.0k, False: 3.07k]
  ------------------
  956|  14.0k|        n2k = *pn2k;
  957|  14.0k|    } else if (strict != CERT_N2A_READABLE) {
  ------------------
  |  Branch (957:16): [True: 0, False: 3.07k]
  ------------------
  958|      0|        useHex = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  959|      0|    }
  960|       |    /* For invertable form, force Directory Strings to use hex form. */
  961|  17.1k|    if (strict == CERT_N2A_INVERTIBLE && vt == SEC_ASN1_DS) {
  ------------------
  |  |  942|      0|#define vt n2k.valueType
  ------------------
                  if (strict == CERT_N2A_INVERTIBLE && vt == SEC_ASN1_DS) {
  ------------------
  |  |   24|      0|#define SEC_ASN1_DS SEC_ASN1_HIGH_TAG_NUMBER
  |  |  ------------------
  |  |  |  |  107|      0|#define SEC_ASN1_HIGH_TAG_NUMBER 0x1f
  |  |  ------------------
  ------------------
  |  Branch (961:9): [True: 0, False: 17.1k]
  |  Branch (961:42): [True: 0, False: 0]
  ------------------
  962|      0|        tagName = NULL;   /* must use OID.N form */
  ------------------
  |  |  939|      0|#define tagName n2k.name /* non-NULL means use NAME= form */
  ------------------
  963|      0|        useHex = PR_TRUE; /* must use hex string */
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  964|      0|    }
  965|  17.1k|    if (!useHex) {
  ------------------
  |  Branch (965:9): [True: 17.1k, False: 0]
  ------------------
  966|  17.1k|        avaValue = CERT_DecodeAVAValue(&ava->value);
  967|  17.1k|        if (!avaValue) {
  ------------------
  |  Branch (967:13): [True: 1.91k, False: 15.2k]
  ------------------
  968|  1.91k|            useHex = PR_TRUE;
  ------------------
  |  |  437|  1.91k|#define PR_TRUE 1
  ------------------
  969|  1.91k|            if (strict != CERT_N2A_READABLE) {
  ------------------
  |  Branch (969:17): [True: 0, False: 1.91k]
  ------------------
  970|      0|                tagName = NULL; /* must use OID.N form */
  ------------------
  |  |  939|      0|#define tagName n2k.name /* non-NULL means use NAME= form */
  ------------------
  971|      0|            }
  972|  1.91k|        }
  973|  17.1k|    }
  974|  17.1k|    if (!tagName) {
  ------------------
  |  |  939|  17.1k|#define tagName n2k.name /* non-NULL means use NAME= form */
  ------------------
  |  Branch (974:9): [True: 3.07k, False: 14.0k]
  ------------------
  975|       |        /* handle unknown attribute types per RFC 2253 */
  976|  3.07k|        tagName = unknownTag = CERT_GetOidString(&ava->type);
  ------------------
  |  |  939|  3.07k|#define tagName n2k.name /* non-NULL means use NAME= form */
  ------------------
  977|  3.07k|        if (!tagName) {
  ------------------
  |  |  939|  3.07k|#define tagName n2k.name /* non-NULL means use NAME= form */
  ------------------
  |  Branch (977:13): [True: 18, False: 3.05k]
  ------------------
  978|     18|            if (avaValue)
  ------------------
  |  Branch (978:17): [True: 3, False: 15]
  ------------------
  979|      3|                SECITEM_FreeItem(avaValue, PR_TRUE);
  ------------------
  |  |  108|      3|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                              SECITEM_FreeItem(avaValue, PR_TRUE);
  ------------------
  |  |  437|      3|#define PR_TRUE 1
  ------------------
  980|     18|            return SECFailure;
  981|     18|        }
  982|  3.07k|    }
  983|  17.1k|    if (useHex) {
  ------------------
  |  Branch (983:9): [True: 1.90k, False: 15.2k]
  ------------------
  984|  1.90k|        avaValue = get_hex_string(&ava->value);
  985|  1.90k|        if (!avaValue) {
  ------------------
  |  Branch (985:13): [True: 0, False: 1.90k]
  ------------------
  986|      0|            if (unknownTag)
  ------------------
  |  Branch (986:17): [True: 0, False: 0]
  ------------------
  987|      0|                PR_smprintf_free(unknownTag);
  988|      0|            return SECFailure;
  989|      0|        }
  990|  1.90k|    }
  991|       |
  992|  17.1k|    nameLen = strlen(tagName);
  ------------------
  |  |  939|  17.1k|#define tagName n2k.name /* non-NULL means use NAME= form */
  ------------------
  993|       |
  994|  17.1k|    if (useHex) {
  ------------------
  |  Branch (994:9): [True: 1.90k, False: 15.2k]
  ------------------
  995|  1.90k|        valueLen = avaValue->len;
  996|  15.2k|    } else {
  997|  15.2k|        int reqLen = cert_RFC1485_GetRequiredLen((char*)avaValue->data, avaValue->len, &mode);
  998|  15.2k|        if (reqLen < 0) {
  ------------------
  |  Branch (998:13): [True: 0, False: 15.2k]
  ------------------
  999|      0|            SECITEM_FreeItem(avaValue, PR_TRUE);
  ------------------
  |  |  108|      0|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                          SECITEM_FreeItem(avaValue, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1000|      0|            return SECFailure;
 1001|      0|        }
 1002|  15.2k|        valueLen = reqLen;
 1003|  15.2k|    }
 1004|  17.1k|    if (UINT_MAX - nameLen < 2 ||
  ------------------
  |  Branch (1004:9): [True: 0, False: 17.1k]
  ------------------
 1005|  17.1k|        valueLen > UINT_MAX - nameLen - 2) {
  ------------------
  |  Branch (1005:9): [True: 0, False: 17.1k]
  ------------------
 1006|      0|        SECITEM_FreeItem(avaValue, PR_TRUE);
  ------------------
  |  |  108|      0|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(avaValue, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1007|      0|        return SECFailure;
 1008|      0|    }
 1009|  17.1k|    len = nameLen + valueLen + 2; /* Add 2 for '=' and trailing NUL */
 1010|       |
 1011|  17.1k|    maxName = nameLen;
 1012|  17.1k|    maxValue = valueLen;
 1013|  17.1k|    if (len <= sizeof(tmpBuf)) {
  ------------------
  |  Branch (1013:9): [True: 17.1k, False: 0]
  ------------------
 1014|  17.1k|        encodedAVA = tmpBuf;
 1015|  17.1k|    } else if (strict != CERT_N2A_READABLE) {
  ------------------
  |  Branch (1015:16): [True: 0, False: 0]
  ------------------
 1016|      0|        encodedAVA = PORT_Alloc(len);
  ------------------
  |  |   52|      0|#define PORT_Alloc PORT_Alloc_Util
  ------------------
 1017|      0|        if (!encodedAVA) {
  ------------------
  |  Branch (1017:13): [True: 0, False: 0]
  ------------------
 1018|      0|            SECITEM_FreeItem(avaValue, PR_TRUE);
  ------------------
  |  |  108|      0|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                          SECITEM_FreeItem(avaValue, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1019|      0|            if (unknownTag)
  ------------------
  |  Branch (1019:17): [True: 0, False: 0]
  ------------------
 1020|      0|                PR_smprintf_free(unknownTag);
 1021|      0|            return SECFailure;
 1022|      0|        }
 1023|      0|    } else {
 1024|       |        /* Must make output fit in tmpbuf */
 1025|      0|        unsigned int fair = (sizeof tmpBuf) / 2 - 1; /* for = and \0 */
 1026|       |
 1027|      0|        if (nameLen < fair) {
  ------------------
  |  Branch (1027:13): [True: 0, False: 0]
  ------------------
 1028|       |            /* just truncate the value */
 1029|      0|            maxValue = (sizeof tmpBuf) - (nameLen + 6); /* for "=...\0",
 1030|       |                                                     and possibly '"' */
 1031|      0|        } else if (valueLen < fair) {
  ------------------
  |  Branch (1031:20): [True: 0, False: 0]
  ------------------
 1032|       |            /* just truncate the name */
 1033|      0|            maxName = (sizeof tmpBuf) - (valueLen + 5); /* for "=...\0" */
 1034|      0|        } else {
 1035|       |            /* truncate both */
 1036|      0|            maxName = maxValue = fair - 3; /* for "..." */
 1037|      0|        }
 1038|      0|        if (nameLen > maxName) {
  ------------------
  |  Branch (1038:13): [True: 0, False: 0]
  ------------------
 1039|      0|            PORT_Assert(unknownTag && unknownTag == tagName);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 0, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1040|      0|            truncateName = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1041|      0|            nameLen = maxName;
 1042|      0|        }
 1043|      0|        encodedAVA = tmpBuf;
 1044|      0|    }
 1045|       |
 1046|  17.1k|    memcpy(encodedAVA, tagName, nameLen);
  ------------------
  |  |  939|  17.1k|#define tagName n2k.name /* non-NULL means use NAME= form */
  ------------------
 1047|  17.1k|    if (truncateName) {
  ------------------
  |  Branch (1047:9): [True: 0, False: 17.1k]
  ------------------
 1048|       |        /* If tag name is too long, we know it is an OID form that was
 1049|       |         * allocated from the heap, so we can modify it in place
 1050|       |         */
 1051|      0|        encodedAVA[nameLen - 1] = '.';
 1052|      0|        encodedAVA[nameLen - 2] = '.';
 1053|      0|        encodedAVA[nameLen - 3] = '.';
 1054|      0|    }
 1055|  17.1k|    encodedAVA[nameLen++] = '=';
 1056|  17.1k|    if (unknownTag)
  ------------------
  |  Branch (1056:9): [True: 3.05k, False: 14.0k]
  ------------------
 1057|  3.05k|        PR_smprintf_free(unknownTag);
 1058|       |
 1059|  17.1k|    if (strict == CERT_N2A_READABLE && maxValue > maxBytes)
  ------------------
  |  |  940|  17.1k|#define maxBytes n2k.maxLen
  ------------------
  |  Branch (1059:9): [True: 17.1k, False: 0]
  |  Branch (1059:40): [True: 224, False: 16.8k]
  ------------------
 1060|    224|        maxValue = maxBytes;
  ------------------
  |  |  940|    224|#define maxBytes n2k.maxLen
  ------------------
 1061|  17.1k|    if (valueLen > maxValue) {
  ------------------
  |  Branch (1061:9): [True: 224, False: 16.8k]
  ------------------
 1062|    224|        valueLen = maxValue;
 1063|    224|        truncateValue = PR_TRUE;
  ------------------
  |  |  437|    224|#define PR_TRUE 1
  ------------------
 1064|    224|    }
 1065|       |    /* escape and quote as necessary - don't quote hex strings */
 1066|  17.1k|    if (useHex) {
  ------------------
  |  Branch (1066:9): [True: 1.90k, False: 15.2k]
  ------------------
 1067|  1.90k|        char* end = encodedAVA + nameLen + valueLen;
 1068|  1.90k|        memcpy(encodedAVA + nameLen, (char*)avaValue->data, valueLen);
 1069|  1.90k|        end[0] = '\0';
 1070|  1.90k|        if (truncateValue) {
  ------------------
  |  Branch (1070:13): [True: 80, False: 1.82k]
  ------------------
 1071|     80|            end[-1] = '.';
 1072|     80|            end[-2] = '.';
 1073|     80|            end[-3] = '.';
 1074|     80|        }
 1075|  1.90k|        rv = SECSuccess;
 1076|  15.2k|    } else if (!truncateValue) {
  ------------------
  |  Branch (1076:16): [True: 15.0k, False: 144]
  ------------------
 1077|  15.0k|        rv = escapeAndQuote(encodedAVA + nameLen, len - nameLen,
 1078|  15.0k|                            (char*)avaValue->data, avaValue->len, &mode);
 1079|  15.0k|    } else {
 1080|       |        /* must truncate the escaped and quoted value */
 1081|    144|        char bigTmpBuf[TMPBUF_LEN * 3 + 3];
 1082|    144|        PORT_Assert(valueLen < sizeof tmpBuf);
  ------------------
  |  |  120|    144|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    144|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 144, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1083|    144|        rv = escapeAndQuote(bigTmpBuf, sizeof bigTmpBuf, (char*)avaValue->data,
 1084|    144|                            PR_MIN(avaValue->len, valueLen), &mode);
  ------------------
  |  |  158|    144|#define PR_MIN(x,y)     ((x)<(y)?(x):(y))
  |  |  ------------------
  |  |  |  Branch (158:26): [True: 23, False: 121]
  |  |  ------------------
  ------------------
 1085|       |
 1086|    144|        bigTmpBuf[valueLen--] = '\0'; /* hard stop here */
 1087|       |        /* See if we're in the middle of a multi-byte UTF8 character */
 1088|    581|        while (((bigTmpBuf[valueLen] & 0xc0) == 0x80) && valueLen > 0) {
  ------------------
  |  Branch (1088:16): [True: 440, False: 141]
  |  Branch (1088:58): [True: 437, False: 3]
  ------------------
 1089|    437|            bigTmpBuf[valueLen--] = '\0';
 1090|    437|        }
 1091|       |        /* add ellipsis to signify truncation. */
 1092|    144|        bigTmpBuf[++valueLen] = '.';
 1093|    144|        bigTmpBuf[++valueLen] = '.';
 1094|    144|        bigTmpBuf[++valueLen] = '.';
 1095|    144|        if (bigTmpBuf[0] == '"')
  ------------------
  |  Branch (1095:13): [True: 55, False: 89]
  ------------------
 1096|     55|            bigTmpBuf[++valueLen] = '"';
 1097|    144|        bigTmpBuf[++valueLen] = '\0';
 1098|    144|        PORT_Assert(nameLen + valueLen <= (sizeof tmpBuf) - 1);
  ------------------
  |  |  120|    144|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    144|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 144, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1099|    144|        memcpy(encodedAVA + nameLen, bigTmpBuf, valueLen + 1);
 1100|    144|    }
 1101|       |
 1102|  17.1k|    SECITEM_FreeItem(avaValue, PR_TRUE);
  ------------------
  |  |  108|  17.1k|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                  SECITEM_FreeItem(avaValue, PR_TRUE);
  ------------------
  |  |  437|  17.1k|#define PR_TRUE 1
  ------------------
 1103|  17.1k|    if (rv == SECSuccess)
  ------------------
  |  Branch (1103:9): [True: 17.1k, False: 0]
  ------------------
 1104|  17.1k|        rv = AppendStr(bufp, encodedAVA);
 1105|  17.1k|    if (encodedAVA != tmpBuf)
  ------------------
  |  Branch (1105:9): [True: 0, False: 17.1k]
  ------------------
 1106|      0|        PORT_Free(encodedAVA);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1107|  17.1k|    return rv;
 1108|  17.1k|}
alg1485.c:get_hex_string:
  842|  1.90k|{
  843|  1.90k|    SECItem* rv;
  844|  1.90k|    unsigned int i, j;
  845|  1.90k|    static const char hex[] = { "0123456789ABCDEF" };
  846|       |
  847|       |    /* '#' + 2 chars per octet + terminator */
  848|  1.90k|    rv = SECITEM_AllocItem(NULL, NULL, data->len * 2 + 2);
  ------------------
  |  |  103|  1.90k|#define SECITEM_AllocItem SECITEM_AllocItem_Util
  ------------------
  849|  1.90k|    if (!rv) {
  ------------------
  |  Branch (849:9): [True: 0, False: 1.90k]
  ------------------
  850|      0|        return NULL;
  851|      0|    }
  852|  1.90k|    rv->data[0] = '#';
  853|  1.90k|    rv->len = 1 + 2 * data->len;
  854|  37.2k|    for (i = 0; i < data->len; i++) {
  ------------------
  |  Branch (854:17): [True: 35.3k, False: 1.90k]
  ------------------
  855|  35.3k|        j = data->data[i];
  856|  35.3k|        rv->data[2 * i + 1] = hex[j >> 4];
  857|  35.3k|        rv->data[2 * i + 2] = hex[j & 15];
  858|  35.3k|    }
  859|  1.90k|    rv->data[rv->len] = 0;
  860|  1.90k|    return rv;
  861|  1.90k|}
alg1485.c:CERT_GetNameElement:
 1252|  11.5k|{
 1253|  11.5k|    CERTRDN** rdns = name->rdns;
 1254|  11.5k|    CERTRDN* rdn;
 1255|  11.5k|    CERTAVA* ava = NULL;
 1256|       |
 1257|  31.5k|    while (rdns && (rdn = *rdns++) != 0) {
  ------------------
  |  Branch (1257:12): [True: 31.4k, False: 86]
  |  Branch (1257:20): [True: 19.9k, False: 11.4k]
  ------------------
 1258|  19.9k|        CERTAVA** avas = rdn->avas;
 1259|  39.9k|        while (avas && (ava = *avas++) != 0) {
  ------------------
  |  Branch (1259:16): [True: 39.9k, False: 86]
  |  Branch (1259:24): [True: 19.9k, False: 19.9k]
  ------------------
 1260|  19.9k|            int tag = CERT_GetAVATag(ava);
 1261|  19.9k|            if (tag == wantedTag) {
  ------------------
  |  Branch (1261:17): [True: 86, False: 19.9k]
  ------------------
 1262|     86|                avas = NULL;
 1263|     86|                rdns = NULL; /* break out of all loops */
 1264|     86|            }
 1265|  19.9k|        }
 1266|  19.9k|    }
 1267|  11.5k|    return ava ? avaToString(arena, ava) : NULL;
  ------------------
  |  Branch (1267:12): [True: 86, False: 11.4k]
  ------------------
 1268|  11.5k|}
alg1485.c:avaToString:
 1215|  5.56k|{
 1216|  5.56k|    char* buf = NULL;
 1217|  5.56k|    SECItem* avaValue;
 1218|  5.56k|    int valueLen;
 1219|       |
 1220|  5.56k|    avaValue = CERT_DecodeAVAValue(&ava->value);
 1221|  5.56k|    if (!avaValue) {
  ------------------
  |  Branch (1221:9): [True: 106, False: 5.46k]
  ------------------
 1222|    106|        return buf;
 1223|    106|    }
 1224|  5.46k|    int reqLen = cert_RFC1485_GetRequiredLen((char*)avaValue->data, avaValue->len, NULL);
 1225|       |    /* reqLen is max 16384*3 + 2 */
 1226|  5.46k|    if (reqLen >= 0) {
  ------------------
  |  Branch (1226:9): [True: 5.46k, False: 0]
  ------------------
 1227|  5.46k|        valueLen = reqLen + 1;
 1228|  5.46k|        if (arena) {
  ------------------
  |  Branch (1228:13): [True: 63, False: 5.39k]
  ------------------
 1229|     63|            buf = (char*)PORT_ArenaZAlloc(arena, valueLen);
  ------------------
  |  |   59|     63|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
 1230|  5.39k|        } else {
 1231|  5.39k|            buf = (char*)PORT_ZAlloc(valueLen);
  ------------------
  |  |   72|  5.39k|#define PORT_ZAlloc PORT_ZAlloc_Util
  ------------------
 1232|  5.39k|        }
 1233|  5.46k|        if (buf) {
  ------------------
  |  Branch (1233:13): [True: 5.46k, False: 0]
  ------------------
 1234|  5.46k|            SECStatus rv =
 1235|  5.46k|                escapeAndQuote(buf, valueLen, (char*)avaValue->data, avaValue->len, NULL);
 1236|  5.46k|            if (rv != SECSuccess) {
  ------------------
  |  Branch (1236:17): [True: 0, False: 5.46k]
  ------------------
 1237|      0|                if (!arena)
  ------------------
  |  Branch (1237:21): [True: 0, False: 0]
  ------------------
 1238|      0|                    PORT_Free(buf);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1239|      0|                buf = NULL;
 1240|      0|            }
 1241|  5.46k|        }
 1242|  5.46k|    }
 1243|  5.46k|    SECITEM_FreeItem(avaValue, PR_TRUE);
  ------------------
  |  |  108|  5.46k|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                  SECITEM_FreeItem(avaValue, PR_TRUE);
  ------------------
  |  |  437|  5.46k|#define PR_TRUE 1
  ------------------
 1244|  5.46k|    return buf;
 1245|  5.56k|}
alg1485.c:appendStringToBuf:
 1381|  11.5k|{
 1382|  11.5k|    PRUint32 len;
 1383|  11.5k|    if (dest && src && src[0] && *pRemaining > (len = PL_strlen(src))) {
  ------------------
  |  Branch (1383:9): [True: 11.5k, False: 0]
  |  Branch (1383:17): [True: 63, False: 11.4k]
  |  Branch (1383:24): [True: 63, False: 0]
  |  Branch (1383:34): [True: 63, False: 0]
  ------------------
 1384|     63|        PRUint32 i;
 1385|  1.95k|        for (i = 0; i < len; ++i)
  ------------------
  |  Branch (1385:21): [True: 1.88k, False: 63]
  ------------------
 1386|  1.88k|            dest[i] = tolower((unsigned char)src[i]);
 1387|     63|        dest[len] = 0;
 1388|     63|        dest += len + 1;
 1389|     63|        *pRemaining -= len + 1;
 1390|     63|    }
 1391|  11.5k|    return dest;
 1392|  11.5k|}
alg1485.c:appendItemToBuf:
 1399|    200|{
 1400|    200|    if (dest && src && src->data && src->len && src->data[0]) {
  ------------------
  |  Branch (1400:9): [True: 200, False: 0]
  |  Branch (1400:17): [True: 200, False: 0]
  |  Branch (1400:24): [True: 199, False: 1]
  |  Branch (1400:37): [True: 199, False: 0]
  |  Branch (1400:49): [True: 193, False: 6]
  ------------------
 1401|    193|        PRUint32 len = src->len;
 1402|    193|        PRUint32 i;
 1403|    193|        PRUint32 reqLen = len + 1;
 1404|       |        /* are there any embedded control characters ? */
 1405|  30.1k|        for (i = 0; i < len; i++) {
  ------------------
  |  Branch (1405:21): [True: 29.9k, False: 193]
  ------------------
 1406|  29.9k|            if (NEEDS_HEX_ESCAPE(src->data[i]))
  ------------------
  |  | 1395|  29.9k|#define NEEDS_HEX_ESCAPE(c) (c < 0x20)
  |  |  ------------------
  |  |  |  Branch (1395:29): [True: 9.88k, False: 20.0k]
  |  |  ------------------
  ------------------
 1407|  9.88k|                reqLen += 2;
 1408|  29.9k|        }
 1409|    193|        if (*pRemaining > reqLen) {
  ------------------
  |  Branch (1409:13): [True: 183, False: 10]
  ------------------
 1410|  29.6k|            for (i = 0; i < len; ++i) {
  ------------------
  |  Branch (1410:25): [True: 29.4k, False: 183]
  ------------------
 1411|  29.4k|                PRUint8 c = src->data[i];
 1412|  29.4k|                if (NEEDS_HEX_ESCAPE(c)) {
  ------------------
  |  | 1395|  29.4k|#define NEEDS_HEX_ESCAPE(c) (c < 0x20)
  |  |  ------------------
  |  |  |  Branch (1395:29): [True: 9.82k, False: 19.6k]
  |  |  ------------------
  ------------------
 1413|  9.82k|                    *dest++ =
 1414|  9.82k|                        C_BACKSLASH;
  ------------------
  |  |  119|  9.82k|#define C_BACKSLASH '\134'
  ------------------
 1415|  9.82k|                    *dest++ =
 1416|  9.82k|                        hexChars[(c >> 4) & 0x0f];
 1417|  9.82k|                    *dest++ =
 1418|  9.82k|                        hexChars[c & 0x0f];
 1419|  19.6k|                } else {
 1420|  19.6k|                    *dest++ =
 1421|  19.6k|                        tolower(c);
 1422|  19.6k|                }
 1423|  29.4k|            }
 1424|    183|            *dest++ = '\0';
 1425|    183|            *pRemaining -= reqLen;
 1426|    183|        }
 1427|    193|    }
 1428|    200|    return dest;
 1429|    200|}
alg1485.c:CERT_GetLastNameElement:
 1276|  6.31k|{
 1277|  6.31k|    CERTRDN** rdns = name->rdns;
 1278|  6.31k|    CERTRDN* rdn;
 1279|  6.31k|    CERTAVA* lastAva = NULL;
 1280|       |
 1281|  19.5k|    while (rdns && (rdn = *rdns++) != 0) {
  ------------------
  |  Branch (1281:12): [True: 19.5k, False: 0]
  |  Branch (1281:20): [True: 13.2k, False: 6.31k]
  ------------------
 1282|  13.2k|        CERTAVA** avas = rdn->avas;
 1283|  13.2k|        CERTAVA* ava;
 1284|  26.4k|        while (avas && (ava = *avas++) != 0) {
  ------------------
  |  Branch (1284:16): [True: 26.4k, False: 0]
  |  Branch (1284:24): [True: 13.1k, False: 13.2k]
  ------------------
 1285|  13.1k|            int tag = CERT_GetAVATag(ava);
 1286|  13.1k|            if (tag == wantedTag) {
  ------------------
  |  Branch (1286:17): [True: 8.54k, False: 4.63k]
  ------------------
 1287|  8.54k|                lastAva = ava;
 1288|  8.54k|            }
 1289|  13.1k|        }
 1290|  13.2k|    }
 1291|  6.31k|    return lastAva ? avaToString(arena, lastAva) : NULL;
  ------------------
  |  Branch (1291:12): [True: 5.48k, False: 831]
  ------------------
 1292|  6.31k|}

CERT_KeyFromIssuerAndSN:
  184|  5.75k|{
  185|  5.75k|    key->len = sn->len + issuer->len;
  186|       |
  187|  5.75k|    if ((sn->data == NULL) || (issuer->data == NULL)) {
  ------------------
  |  Branch (187:9): [True: 0, False: 5.75k]
  |  Branch (187:31): [True: 0, False: 5.75k]
  ------------------
  188|      0|        goto loser;
  189|      0|    }
  190|       |
  191|  5.75k|    key->data = (unsigned char *)PORT_ArenaAlloc(arena, key->len);
  ------------------
  |  |   53|  5.75k|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  192|  5.75k|    if (!key->data) {
  ------------------
  |  Branch (192:9): [True: 0, False: 5.75k]
  ------------------
  193|      0|        goto loser;
  194|      0|    }
  195|       |
  196|       |    /* copy the serialNumber */
  197|  5.75k|    PORT_Memcpy(key->data, sn->data, sn->len);
  ------------------
  |  |  180|  5.75k|#define PORT_Memcpy memcpy
  ------------------
  198|       |
  199|       |    /* copy the issuer */
  200|  5.75k|    PORT_Memcpy(&key->data[sn->len], issuer->data, issuer->len);
  ------------------
  |  |  180|  5.75k|#define PORT_Memcpy memcpy
  ------------------
  201|       |
  202|  5.75k|    return (SECSuccess);
  203|       |
  204|      0|loser:
  205|      0|    return (SECFailure);
  206|  5.75k|}
CERT_IssuerNameFromDERCert:
  258|  12.3k|{
  259|  12.3k|    int rv;
  260|  12.3k|    PORTCheapArenaPool tmpArena;
  261|  12.3k|    CERTSignedData sd;
  262|  12.3k|    void *tmpptr;
  263|       |
  264|  12.3k|    PORT_InitCheapArena(&tmpArena, DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|  12.3k|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  265|       |
  266|  12.3k|    PORT_Memset(&sd, 0, sizeof(CERTSignedData));
  ------------------
  |  |  182|  12.3k|#define PORT_Memset memset
  ------------------
  267|  12.3k|    rv = SEC_QuickDERDecodeItem(&tmpArena.arena, &sd, CERT_SignedDataTemplate,
  ------------------
  |  |  102|  12.3k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  268|  12.3k|                                derCert);
  269|  12.3k|    if (rv) {
  ------------------
  |  Branch (269:9): [True: 722, False: 11.6k]
  ------------------
  270|    722|        goto loser;
  271|    722|    }
  272|       |
  273|  11.6k|    PORT_Memset(derName, 0, sizeof(SECItem));
  ------------------
  |  |  182|  11.6k|#define PORT_Memset memset
  ------------------
  274|  11.6k|    rv = SEC_QuickDERDecodeItem(&tmpArena.arena, derName,
  ------------------
  |  |  102|  11.6k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  275|  11.6k|                                SEC_CertIssuerTemplate, &sd.data);
  276|  11.6k|    if (rv) {
  ------------------
  |  Branch (276:9): [True: 14, False: 11.5k]
  ------------------
  277|     14|        goto loser;
  278|     14|    }
  279|       |
  280|  11.5k|    tmpptr = derName->data;
  281|  11.5k|    derName->data = (unsigned char *)PORT_Alloc(derName->len);
  ------------------
  |  |   52|  11.5k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  282|  11.5k|    if (derName->data == NULL) {
  ------------------
  |  Branch (282:9): [True: 0, False: 11.5k]
  ------------------
  283|      0|        goto loser;
  284|      0|    }
  285|       |
  286|  11.5k|    PORT_Memcpy(derName->data, tmpptr, derName->len);
  ------------------
  |  |  180|  11.5k|#define PORT_Memcpy memcpy
  ------------------
  287|       |
  288|  11.5k|    PORT_DestroyCheapArena(&tmpArena);
  289|  11.5k|    return (SECSuccess);
  290|       |
  291|    736|loser:
  292|    736|    PORT_DestroyCheapArena(&tmpArena);
  293|    736|    return (SECFailure);
  294|  11.5k|}
CERT_SerialNumberFromDERCert:
  298|  17.3k|{
  299|  17.3k|    int rv;
  300|  17.3k|    PORTCheapArenaPool tmpArena;
  301|  17.3k|    CERTSignedData sd;
  302|  17.3k|    void *tmpptr;
  303|       |
  304|  17.3k|    PORT_InitCheapArena(&tmpArena, DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|  17.3k|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  305|       |
  306|  17.3k|    PORT_Memset(&sd, 0, sizeof(CERTSignedData));
  ------------------
  |  |  182|  17.3k|#define PORT_Memset memset
  ------------------
  307|  17.3k|    rv = SEC_QuickDERDecodeItem(&tmpArena.arena, &sd, CERT_SignedDataTemplate,
  ------------------
  |  |  102|  17.3k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  308|  17.3k|                                derCert);
  309|  17.3k|    if (rv) {
  ------------------
  |  Branch (309:9): [True: 0, False: 17.3k]
  ------------------
  310|      0|        goto loser;
  311|      0|    }
  312|       |
  313|  17.3k|    PORT_Memset(derName, 0, sizeof(SECItem));
  ------------------
  |  |  182|  17.3k|#define PORT_Memset memset
  ------------------
  314|  17.3k|    rv = SEC_QuickDERDecodeItem(&tmpArena.arena, derName,
  ------------------
  |  |  102|  17.3k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  315|  17.3k|                                SEC_CertSerialNumberTemplate, &sd.data);
  316|  17.3k|    if (rv) {
  ------------------
  |  Branch (316:9): [True: 0, False: 17.3k]
  ------------------
  317|      0|        goto loser;
  318|      0|    }
  319|       |
  320|  17.3k|    tmpptr = derName->data;
  321|  17.3k|    derName->data = (unsigned char *)PORT_Alloc(derName->len);
  ------------------
  |  |   52|  17.3k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  322|  17.3k|    if (derName->data == NULL) {
  ------------------
  |  Branch (322:9): [True: 0, False: 17.3k]
  ------------------
  323|      0|        goto loser;
  324|      0|    }
  325|       |
  326|  17.3k|    PORT_Memcpy(derName->data, tmpptr, derName->len);
  ------------------
  |  |  180|  17.3k|#define PORT_Memcpy memcpy
  ------------------
  327|       |
  328|  17.3k|    PORT_DestroyCheapArena(&tmpArena);
  329|  17.3k|    return (SECSuccess);
  330|       |
  331|      0|loser:
  332|      0|    PORT_DestroyCheapArena(&tmpArena);
  333|      0|    return (SECFailure);
  334|  17.3k|}
cert_GetCertType:
  434|  10.6k|{
  435|  10.6k|    PRUint32 nsCertType;
  436|       |
  437|  10.6k|    if (cert->nsCertType) {
  ------------------
  |  Branch (437:9): [True: 4.89k, False: 5.77k]
  ------------------
  438|       |        /* once set, no need to recalculate */
  439|  4.89k|        return SECSuccess;
  440|  4.89k|    }
  441|  5.77k|    nsCertType = cert_ComputeCertType(cert);
  442|       |
  443|       |    /* Assert that it is safe to cast &cert->nsCertType to "PRInt32 *" */
  444|  5.77k|    PORT_Assert(sizeof(cert->nsCertType) == sizeof(PRInt32));
  ------------------
  |  |  120|  5.77k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  5.77k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  445|  5.77k|    PR_ATOMIC_SET((PRInt32 *)&cert->nsCertType, nsCertType);
  ------------------
  |  |  124|  5.77k|#define PR_ATOMIC_SET(val, newval) __sync_lock_test_and_set(val, newval)
  ------------------
  446|  5.77k|    return SECSuccess;
  447|  10.6k|}
cert_IsIPsecOID:
  451|    196|{
  452|    196|    if (findOIDinOIDSeqByTagNum(
  ------------------
  |  Branch (452:9): [True: 2, False: 194]
  ------------------
  453|    196|            extKeyUsage, SEC_OID_EXT_KEY_USAGE_IPSEC_IKE) == SECSuccess) {
  454|      2|        return PR_TRUE;
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
  455|      2|    }
  456|    194|    if (findOIDinOIDSeqByTagNum(
  ------------------
  |  Branch (456:9): [True: 1, False: 193]
  ------------------
  457|    194|            extKeyUsage, SEC_OID_IPSEC_IKE_END) == SECSuccess) {
  458|      1|        return PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  459|      1|    }
  460|    193|    if (findOIDinOIDSeqByTagNum(
  ------------------
  |  Branch (460:9): [True: 9, False: 184]
  ------------------
  461|    193|            extKeyUsage, SEC_OID_IPSEC_IKE_INTERMEDIATE) == SECSuccess) {
  462|      9|        return PR_TRUE;
  ------------------
  |  |  437|      9|#define PR_TRUE 1
  ------------------
  463|      9|    }
  464|       |    /* these are now deprecated, but may show up. Treat them the same as IKE */
  465|    184|    if (findOIDinOIDSeqByTagNum(
  ------------------
  |  Branch (465:9): [True: 8, False: 176]
  ------------------
  466|    184|            extKeyUsage, SEC_OID_EXT_KEY_USAGE_IPSEC_END) == SECSuccess) {
  467|      8|        return PR_TRUE;
  ------------------
  |  |  437|      8|#define PR_TRUE 1
  ------------------
  468|      8|    }
  469|    176|    if (findOIDinOIDSeqByTagNum(
  ------------------
  |  Branch (469:9): [True: 2, False: 174]
  ------------------
  470|    176|            extKeyUsage, SEC_OID_EXT_KEY_USAGE_IPSEC_TUNNEL) == SECSuccess) {
  471|      2|        return PR_TRUE;
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
  472|      2|    }
  473|    174|    if (findOIDinOIDSeqByTagNum(
  ------------------
  |  Branch (473:9): [True: 2, False: 172]
  ------------------
  474|    174|            extKeyUsage, SEC_OID_EXT_KEY_USAGE_IPSEC_USER) == SECSuccess) {
  475|      2|        return PR_TRUE;
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
  476|      2|    }
  477|       |    /* this one should probably be in cert_ComputeCertType and set all usages? */
  478|    172|    if (findOIDinOIDSeqByTagNum(
  ------------------
  |  Branch (478:9): [True: 1, False: 171]
  ------------------
  479|    172|            extKeyUsage, SEC_OID_X509_ANY_EXT_KEY_USAGE) == SECSuccess) {
  480|      1|        return PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  481|      1|    }
  482|    171|    return PR_FALSE;
  ------------------
  |  |  438|    171|#define PR_FALSE 0
  ------------------
  483|    172|}
cert_ComputeCertType:
  487|  5.77k|{
  488|  5.77k|    SECStatus rv;
  489|  5.77k|    SECItem tmpitem;
  490|  5.77k|    SECItem encodedExtKeyUsage;
  491|  5.77k|    CERTOidSequence *extKeyUsage = NULL;
  492|  5.77k|    CERTBasicConstraints basicConstraint;
  493|  5.77k|    PRUint32 nsCertType = 0;
  494|  5.77k|    PRBool isCA = PR_FALSE;
  ------------------
  |  |  438|  5.77k|#define PR_FALSE 0
  ------------------
  495|       |
  496|  5.77k|    tmpitem.data = NULL;
  497|  5.77k|    CERT_FindNSCertTypeExtension(cert, &tmpitem);
  498|  5.77k|    encodedExtKeyUsage.data = NULL;
  499|  5.77k|    rv = CERT_FindCertExtension(cert, SEC_OID_X509_EXT_KEY_USAGE,
  500|  5.77k|                                &encodedExtKeyUsage);
  501|  5.77k|    if (rv == SECSuccess) {
  ------------------
  |  Branch (501:9): [True: 486, False: 5.28k]
  ------------------
  502|    486|        extKeyUsage = CERT_DecodeOidSequence(&encodedExtKeyUsage);
  503|    486|    }
  504|  5.77k|    rv = CERT_FindBasicConstraintExten(cert, &basicConstraint);
  505|  5.77k|    if (rv == SECSuccess) {
  ------------------
  |  Branch (505:9): [True: 1.02k, False: 4.74k]
  ------------------
  506|  1.02k|        isCA = basicConstraint.isCA;
  507|  1.02k|    }
  508|  5.77k|    if (tmpitem.data != NULL || extKeyUsage != NULL) {
  ------------------
  |  Branch (508:9): [True: 70, False: 5.70k]
  |  Branch (508:33): [True: 126, False: 5.57k]
  ------------------
  509|    196|        if (tmpitem.data == NULL || tmpitem.len == 0) {
  ------------------
  |  Branch (509:13): [True: 126, False: 70]
  |  Branch (509:37): [True: 0, False: 70]
  ------------------
  510|    126|            nsCertType = 0;
  511|    126|        } else {
  512|     70|            nsCertType = tmpitem.data[0];
  513|     70|        }
  514|       |
  515|       |        /* free tmpitem data pointer to avoid memory leak */
  516|    196|        PORT_Free(tmpitem.data);
  ------------------
  |  |   60|    196|#define PORT_Free PORT_Free_Util
  ------------------
  517|    196|        tmpitem.data = NULL;
  518|       |
  519|       |        /*
  520|       |         * for this release, we will allow SSL certs with an email address
  521|       |         * to be used for email
  522|       |         */
  523|    196|        if ((nsCertType & NS_CERT_TYPE_SSL_CLIENT) && cert->emailAddr &&
  ------------------
  |  |  447|    196|#define NS_CERT_TYPE_SSL_CLIENT (0x80)        /* bit 0 */
  ------------------
  |  Branch (523:13): [True: 41, False: 155]
  |  Branch (523:55): [True: 14, False: 27]
  ------------------
  524|    196|            cert->emailAddr[0]) {
  ------------------
  |  Branch (524:13): [True: 14, False: 0]
  ------------------
  525|     14|            nsCertType |= NS_CERT_TYPE_EMAIL;
  ------------------
  |  |  449|     14|#define NS_CERT_TYPE_EMAIL (0x20)             /* bit 2 */
  ------------------
  526|     14|        }
  527|       |        /*
  528|       |         * for this release, we will allow SSL intermediate CAs to be
  529|       |         * email intermediate CAs too.
  530|       |         */
  531|    196|        if (nsCertType & NS_CERT_TYPE_SSL_CA) {
  ------------------
  |  |  452|    196|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
  |  Branch (531:13): [True: 50, False: 146]
  ------------------
  532|     50|            nsCertType |= NS_CERT_TYPE_EMAIL_CA;
  ------------------
  |  |  453|     50|#define NS_CERT_TYPE_EMAIL_CA (0x02)          /* bit 6 */
  ------------------
  533|     50|        }
  534|       |        /*
  535|       |         * allow a cert with the extended key usage of EMail Protect
  536|       |         * to be used for email or as an email CA, if basic constraints
  537|       |         * indicates that it is a CA.
  538|       |         */
  539|    196|        if (findOIDinOIDSeqByTagNum(extKeyUsage,
  ------------------
  |  Branch (539:13): [True: 15, False: 181]
  ------------------
  540|    196|                                    SEC_OID_EXT_KEY_USAGE_EMAIL_PROTECT) ==
  541|    196|            SECSuccess) {
  542|     15|            nsCertType |= isCA ? NS_CERT_TYPE_EMAIL_CA : NS_CERT_TYPE_EMAIL;
  ------------------
  |  |  453|      2|#define NS_CERT_TYPE_EMAIL_CA (0x02)          /* bit 6 */
  ------------------
                          nsCertType |= isCA ? NS_CERT_TYPE_EMAIL_CA : NS_CERT_TYPE_EMAIL;
  ------------------
  |  |  449|     28|#define NS_CERT_TYPE_EMAIL (0x20)             /* bit 2 */
  ------------------
  |  Branch (542:27): [True: 2, False: 13]
  ------------------
  543|     15|        }
  544|    196|        if (findOIDinOIDSeqByTagNum(
  ------------------
  |  Branch (544:13): [True: 39, False: 157]
  ------------------
  545|    196|                extKeyUsage, SEC_OID_EXT_KEY_USAGE_SERVER_AUTH) == SECSuccess) {
  546|     39|            nsCertType |= isCA ? NS_CERT_TYPE_SSL_CA : NS_CERT_TYPE_SSL_SERVER;
  ------------------
  |  |  452|      4|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
                          nsCertType |= isCA ? NS_CERT_TYPE_SSL_CA : NS_CERT_TYPE_SSL_SERVER;
  ------------------
  |  |  448|     74|#define NS_CERT_TYPE_SSL_SERVER (0x40)        /* bit 1 */
  ------------------
  |  Branch (546:27): [True: 4, False: 35]
  ------------------
  547|     39|        }
  548|       |        /*
  549|       |         * Treat certs with step-up OID as also having SSL server type.
  550|       |         * COMODO needs this behaviour until June 2020.  See Bug 737802.
  551|       |         */
  552|    196|        if (findOIDinOIDSeqByTagNum(extKeyUsage,
  ------------------
  |  Branch (552:13): [True: 21, False: 175]
  ------------------
  553|    196|                                    SEC_OID_NS_KEY_USAGE_GOVT_APPROVED) ==
  554|    196|            SECSuccess) {
  555|     21|            nsCertType |= isCA ? NS_CERT_TYPE_SSL_CA : NS_CERT_TYPE_SSL_SERVER;
  ------------------
  |  |  452|     10|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
                          nsCertType |= isCA ? NS_CERT_TYPE_SSL_CA : NS_CERT_TYPE_SSL_SERVER;
  ------------------
  |  |  448|     32|#define NS_CERT_TYPE_SSL_SERVER (0x40)        /* bit 1 */
  ------------------
  |  Branch (555:27): [True: 10, False: 11]
  ------------------
  556|     21|        }
  557|    196|        if (findOIDinOIDSeqByTagNum(
  ------------------
  |  Branch (557:13): [True: 43, False: 153]
  ------------------
  558|    196|                extKeyUsage, SEC_OID_EXT_KEY_USAGE_CLIENT_AUTH) == SECSuccess) {
  559|     43|            nsCertType |= isCA ? NS_CERT_TYPE_SSL_CA : NS_CERT_TYPE_SSL_CLIENT;
  ------------------
  |  |  452|     11|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
                          nsCertType |= isCA ? NS_CERT_TYPE_SSL_CA : NS_CERT_TYPE_SSL_CLIENT;
  ------------------
  |  |  447|     75|#define NS_CERT_TYPE_SSL_CLIENT (0x80)        /* bit 0 */
  ------------------
  |  Branch (559:27): [True: 11, False: 32]
  ------------------
  560|     43|        }
  561|    196|        if (cert_IsIPsecOID(extKeyUsage)) {
  ------------------
  |  Branch (561:13): [True: 25, False: 171]
  ------------------
  562|     25|            nsCertType |= isCA ? NS_CERT_TYPE_IPSEC_CA : NS_CERT_TYPE_IPSEC;
  ------------------
  |  |  445|     11|#define NS_CERT_TYPE_IPSEC_CA (0x200)         /* outside the NS Cert Type Extenstion */
  ------------------
                          nsCertType |= isCA ? NS_CERT_TYPE_IPSEC_CA : NS_CERT_TYPE_IPSEC;
  ------------------
  |  |  446|     39|#define NS_CERT_TYPE_IPSEC (0x100)            /* outside the NS Cert Type Extenstion */
  ------------------
  |  Branch (562:27): [True: 11, False: 14]
  ------------------
  563|     25|        }
  564|    196|        if (findOIDinOIDSeqByTagNum(
  ------------------
  |  Branch (564:13): [True: 25, False: 171]
  ------------------
  565|    196|                extKeyUsage, SEC_OID_EXT_KEY_USAGE_CODE_SIGN) == SECSuccess) {
  566|     25|            nsCertType |= isCA ? NS_CERT_TYPE_OBJECT_SIGNING_CA : NS_CERT_TYPE_OBJECT_SIGNING;
  ------------------
  |  |  454|     12|#define NS_CERT_TYPE_OBJECT_SIGNING_CA (0x01) /* bit 7 */
  ------------------
                          nsCertType |= isCA ? NS_CERT_TYPE_OBJECT_SIGNING_CA : NS_CERT_TYPE_OBJECT_SIGNING;
  ------------------
  |  |  450|     38|#define NS_CERT_TYPE_OBJECT_SIGNING (0x10)    /* bit 3 */
  ------------------
  |  Branch (566:27): [True: 12, False: 13]
  ------------------
  567|     25|        }
  568|    196|        if (findOIDinOIDSeqByTagNum(
  ------------------
  |  Branch (568:13): [True: 8, False: 188]
  ------------------
  569|    196|                extKeyUsage, SEC_OID_EXT_KEY_USAGE_TIME_STAMP) == SECSuccess) {
  570|      8|            nsCertType |= EXT_KEY_USAGE_TIME_STAMP;
  ------------------
  |  |  456|      8|#define EXT_KEY_USAGE_TIME_STAMP (0x8000)
  ------------------
  571|      8|        }
  572|    196|        if (findOIDinOIDSeqByTagNum(extKeyUsage, SEC_OID_OCSP_RESPONDER) ==
  ------------------
  |  Branch (572:13): [True: 22, False: 174]
  ------------------
  573|    196|            SECSuccess) {
  574|     22|            nsCertType |= EXT_KEY_USAGE_STATUS_RESPONDER;
  ------------------
  |  |  457|     22|#define EXT_KEY_USAGE_STATUS_RESPONDER (0x4000)
  ------------------
  575|     22|        }
  576|  5.57k|    } else {
  577|       |        /* If no NS Cert Type extension and no EKU extension, then */
  578|  5.57k|        nsCertType = 0;
  579|  5.57k|        if (CERT_IsCACert(cert, &nsCertType))
  ------------------
  |  Branch (579:13): [True: 335, False: 5.24k]
  ------------------
  580|    335|            nsCertType |= EXT_KEY_USAGE_STATUS_RESPONDER;
  ------------------
  |  |  457|    335|#define EXT_KEY_USAGE_STATUS_RESPONDER (0x4000)
  ------------------
  581|       |        /* if the basic constraint extension says the cert is a CA, then
  582|       |           allow SSL CA and EMAIL CA and Status Responder */
  583|  5.57k|        if (isCA) {
  ------------------
  |  Branch (583:13): [True: 98, False: 5.48k]
  ------------------
  584|     98|            nsCertType |= (NS_CERT_TYPE_SSL_CA | NS_CERT_TYPE_EMAIL_CA |
  ------------------
  |  |  452|     98|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
                          nsCertType |= (NS_CERT_TYPE_SSL_CA | NS_CERT_TYPE_EMAIL_CA |
  ------------------
  |  |  453|     98|#define NS_CERT_TYPE_EMAIL_CA (0x02)          /* bit 6 */
  ------------------
  585|     98|                           EXT_KEY_USAGE_STATUS_RESPONDER);
  ------------------
  |  |  457|     98|#define EXT_KEY_USAGE_STATUS_RESPONDER (0x4000)
  ------------------
  586|     98|        }
  587|       |        /* allow any ssl or email (no ca or object signing. */
  588|  5.57k|        nsCertType |= NS_CERT_TYPE_SSL_CLIENT | NS_CERT_TYPE_SSL_SERVER |
  ------------------
  |  |  447|  5.57k|#define NS_CERT_TYPE_SSL_CLIENT (0x80)        /* bit 0 */
  ------------------
                      nsCertType |= NS_CERT_TYPE_SSL_CLIENT | NS_CERT_TYPE_SSL_SERVER |
  ------------------
  |  |  448|  5.57k|#define NS_CERT_TYPE_SSL_SERVER (0x40)        /* bit 1 */
  ------------------
  589|  5.57k|                      NS_CERT_TYPE_EMAIL;
  ------------------
  |  |  449|  5.57k|#define NS_CERT_TYPE_EMAIL (0x20)             /* bit 2 */
  ------------------
  590|  5.57k|    }
  591|       |
  592|       |    /* IPSEC is allowed to use SSL client and server certs as well as email certs */
  593|  5.77k|    if (nsCertType & (NS_CERT_TYPE_SSL_CLIENT | NS_CERT_TYPE_SSL_SERVER | NS_CERT_TYPE_EMAIL)) {
  ------------------
  |  |  447|  5.77k|#define NS_CERT_TYPE_SSL_CLIENT (0x80)        /* bit 0 */
  ------------------
                  if (nsCertType & (NS_CERT_TYPE_SSL_CLIENT | NS_CERT_TYPE_SSL_SERVER | NS_CERT_TYPE_EMAIL)) {
  ------------------
  |  |  448|  5.77k|#define NS_CERT_TYPE_SSL_SERVER (0x40)        /* bit 1 */
  ------------------
                  if (nsCertType & (NS_CERT_TYPE_SSL_CLIENT | NS_CERT_TYPE_SSL_SERVER | NS_CERT_TYPE_EMAIL)) {
  ------------------
  |  |  449|  5.77k|#define NS_CERT_TYPE_EMAIL (0x20)             /* bit 2 */
  ------------------
  |  Branch (593:9): [True: 5.67k, False: 96]
  ------------------
  594|  5.67k|        nsCertType |= NS_CERT_TYPE_IPSEC;
  ------------------
  |  |  446|  5.67k|#define NS_CERT_TYPE_IPSEC (0x100)            /* outside the NS Cert Type Extenstion */
  ------------------
  595|  5.67k|    }
  596|  5.77k|    if (nsCertType & (NS_CERT_TYPE_SSL_CA | NS_CERT_TYPE_EMAIL_CA)) {
  ------------------
  |  |  452|  5.77k|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
                  if (nsCertType & (NS_CERT_TYPE_SSL_CA | NS_CERT_TYPE_EMAIL_CA)) {
  ------------------
  |  |  453|  5.77k|#define NS_CERT_TYPE_EMAIL_CA (0x02)          /* bit 6 */
  ------------------
  |  Branch (596:9): [True: 392, False: 5.38k]
  ------------------
  597|    392|        nsCertType |= NS_CERT_TYPE_IPSEC_CA;
  ------------------
  |  |  445|    392|#define NS_CERT_TYPE_IPSEC_CA (0x200)         /* outside the NS Cert Type Extenstion */
  ------------------
  598|    392|    }
  599|       |
  600|  5.77k|    if (encodedExtKeyUsage.data != NULL) {
  ------------------
  |  Branch (600:9): [True: 486, False: 5.28k]
  ------------------
  601|    486|        PORT_Free(encodedExtKeyUsage.data);
  ------------------
  |  |   60|    486|#define PORT_Free PORT_Free_Util
  ------------------
  602|    486|    }
  603|  5.77k|    if (extKeyUsage != NULL) {
  ------------------
  |  Branch (603:9): [True: 138, False: 5.63k]
  ------------------
  604|    138|        CERT_DestroyOidSequence(extKeyUsage);
  605|    138|    }
  606|  5.77k|    return nsCertType;
  607|  5.77k|}
cert_GetKeyID:
  614|  5.75k|{
  615|  5.75k|    SECItem tmpitem;
  616|  5.75k|    SECStatus rv;
  617|       |
  618|  5.75k|    cert->subjectKeyID.len = 0;
  619|       |
  620|       |    /* see of the cert has a key identifier extension */
  621|  5.75k|    rv = CERT_FindSubjectKeyIDExtension(cert, &tmpitem);
  622|  5.75k|    if (rv == SECSuccess) {
  ------------------
  |  Branch (622:9): [True: 136, False: 5.61k]
  ------------------
  623|    136|        cert->subjectKeyID.data =
  624|    136|            (unsigned char *)PORT_ArenaAlloc(cert->arena, tmpitem.len);
  ------------------
  |  |   53|    136|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  625|    136|        if (cert->subjectKeyID.data != NULL) {
  ------------------
  |  Branch (625:13): [True: 136, False: 0]
  ------------------
  626|    136|            PORT_Memcpy(cert->subjectKeyID.data, tmpitem.data, tmpitem.len);
  ------------------
  |  |  180|    136|#define PORT_Memcpy memcpy
  ------------------
  627|    136|            cert->subjectKeyID.len = tmpitem.len;
  628|    136|            cert->keyIDGenerated = PR_FALSE;
  ------------------
  |  |  438|    136|#define PR_FALSE 0
  ------------------
  629|    136|        }
  630|       |
  631|    136|        PORT_Free(tmpitem.data);
  ------------------
  |  |   60|    136|#define PORT_Free PORT_Free_Util
  ------------------
  632|    136|    }
  633|       |
  634|       |    /* if the cert doesn't have a key identifier extension, then generate one*/
  635|  5.75k|    if (cert->subjectKeyID.len == 0) {
  ------------------
  |  Branch (635:9): [True: 5.61k, False: 136]
  ------------------
  636|       |        /*
  637|       |         * pkix says that if the subjectKeyID is not present, then we should
  638|       |         * use the SHA-1 hash of the DER-encoded publicKeyInfo from the cert
  639|       |         */
  640|  5.61k|        cert->subjectKeyID.data =
  641|  5.61k|            (unsigned char *)PORT_ArenaAlloc(cert->arena, SHA1_LENGTH);
  ------------------
  |  |   53|  5.61k|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
                          (unsigned char *)PORT_ArenaAlloc(cert->arena, SHA1_LENGTH);
  ------------------
  |  |  101|  5.61k|#define SHA1_LENGTH 20       /* Bytes */
  ------------------
  642|  5.61k|        if (cert->subjectKeyID.data != NULL) {
  ------------------
  |  Branch (642:13): [True: 5.61k, False: 0]
  ------------------
  643|  5.61k|            rv = PK11_HashBuf(SEC_OID_SHA1, cert->subjectKeyID.data,
  644|  5.61k|                              cert->derPublicKey.data, cert->derPublicKey.len);
  645|  5.61k|            if (rv == SECSuccess) {
  ------------------
  |  Branch (645:17): [True: 5.61k, False: 0]
  ------------------
  646|  5.61k|                cert->subjectKeyID.len = SHA1_LENGTH;
  ------------------
  |  |  101|  5.61k|#define SHA1_LENGTH 20       /* Bytes */
  ------------------
  647|  5.61k|            }
  648|  5.61k|        }
  649|  5.61k|    }
  650|       |
  651|  5.75k|    if (cert->subjectKeyID.len == 0) {
  ------------------
  |  Branch (651:9): [True: 0, False: 5.75k]
  ------------------
  652|      0|        return (SECFailure);
  653|      0|    }
  654|  5.75k|    return (SECSuccess);
  655|  5.75k|}
CERT_DecodeDERCertificate:
  721|  6.16k|{
  722|  6.16k|    CERTCertificate *cert;
  723|  6.16k|    PLArenaPool *arena;
  724|  6.16k|    void *data;
  725|  6.16k|    int rv;
  726|  6.16k|    int len;
  727|  6.16k|    char *tmpname;
  728|       |
  729|       |    /* make a new arena */
  730|  6.16k|    arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   63|  6.16k|#define PORT_NewArena PORT_NewArena_Util
  ------------------
                  arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|  6.16k|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  731|       |
  732|  6.16k|    if (!arena) {
  ------------------
  |  Branch (732:9): [True: 0, False: 6.16k]
  ------------------
  733|      0|        return 0;
  734|      0|    }
  735|       |
  736|       |    /* allocate the certificate structure */
  737|  6.16k|    cert = (CERTCertificate *)PORT_ArenaZAlloc(arena, sizeof(CERTCertificate));
  ------------------
  |  |   59|  6.16k|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
  738|       |
  739|  6.16k|    if (!cert) {
  ------------------
  |  Branch (739:9): [True: 0, False: 6.16k]
  ------------------
  740|      0|        goto loser;
  741|      0|    }
  742|       |
  743|  6.16k|    cert->arena = arena;
  744|       |
  745|  6.16k|    if (copyDER) {
  ------------------
  |  Branch (745:9): [True: 6.16k, False: 0]
  ------------------
  746|       |        /* copy the DER data for the cert into this arena */
  747|  6.16k|        data = (void *)PORT_ArenaAlloc(arena, derSignedCert->len);
  ------------------
  |  |   53|  6.16k|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  748|  6.16k|        if (!data) {
  ------------------
  |  Branch (748:13): [True: 0, False: 6.16k]
  ------------------
  749|      0|            goto loser;
  750|      0|        }
  751|  6.16k|        cert->derCert.data = (unsigned char *)data;
  752|  6.16k|        cert->derCert.len = derSignedCert->len;
  753|  6.16k|        PORT_Memcpy(data, derSignedCert->data, derSignedCert->len);
  ------------------
  |  |  180|  6.16k|#define PORT_Memcpy memcpy
  ------------------
  754|  6.16k|    } else {
  755|       |        /* point to passed in DER data */
  756|      0|        cert->derCert = *derSignedCert;
  757|      0|    }
  758|       |
  759|       |    /* decode the certificate info */
  760|  6.16k|    rv = SEC_QuickDERDecodeItem(arena, cert, SEC_SignedCertificateTemplate,
  ------------------
  |  |  102|  6.16k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  761|  6.16k|                                &cert->derCert);
  762|       |
  763|  6.16k|    if (rv) {
  ------------------
  |  Branch (763:9): [True: 411, False: 5.75k]
  ------------------
  764|    411|        goto loser;
  765|    411|    }
  766|       |
  767|  5.75k|    if (cert_HasUnknownCriticalExten(cert->extensions) == PR_TRUE) {
  ------------------
  |  |  437|  5.75k|#define PR_TRUE 1
  ------------------
  |  Branch (767:9): [True: 64, False: 5.69k]
  ------------------
  768|     64|        cert->options.bits.hasUnsupportedCriticalExt = PR_TRUE;
  ------------------
  |  |  437|     64|#define PR_TRUE 1
  ------------------
  769|     64|    }
  770|       |
  771|       |    /* generate and save the database key for the cert */
  772|  5.75k|    rv = CERT_KeyFromIssuerAndSN(arena, &cert->derIssuer, &cert->serialNumber,
  773|  5.75k|                                 &cert->certKey);
  774|  5.75k|    if (rv) {
  ------------------
  |  Branch (774:9): [True: 0, False: 5.75k]
  ------------------
  775|      0|        goto loser;
  776|      0|    }
  777|       |
  778|       |    /* set the nickname */
  779|  5.75k|    if (nickname == NULL) {
  ------------------
  |  Branch (779:9): [True: 5.75k, False: 0]
  ------------------
  780|  5.75k|        cert->nickname = NULL;
  781|  5.75k|    } else {
  782|       |        /* copy and install the nickname */
  783|      0|        len = PORT_Strlen(nickname) + 1;
  ------------------
  |  |  190|      0|#define PORT_Strlen(s) strlen(s)
  ------------------
  784|      0|        cert->nickname = (char *)PORT_ArenaAlloc(arena, len);
  ------------------
  |  |   53|      0|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  785|      0|        if (cert->nickname == NULL) {
  ------------------
  |  Branch (785:13): [True: 0, False: 0]
  ------------------
  786|      0|            goto loser;
  787|      0|        }
  788|       |
  789|      0|        PORT_Memcpy(cert->nickname, nickname, len);
  ------------------
  |  |  180|      0|#define PORT_Memcpy memcpy
  ------------------
  790|      0|    }
  791|       |
  792|       |    /* set the email address */
  793|  5.75k|    cert->emailAddr = cert_GetCertificateEmailAddresses(cert);
  794|       |
  795|       |    /* initialize the subjectKeyID */
  796|  5.75k|    rv = cert_GetKeyID(cert);
  797|  5.75k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (797:9): [True: 0, False: 5.75k]
  ------------------
  798|      0|        goto loser;
  799|      0|    }
  800|       |
  801|       |    /* initialize keyUsage */
  802|  5.75k|    rv = GetKeyUsage(cert);
  803|  5.75k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (803:9): [True: 0, False: 5.75k]
  ------------------
  804|      0|        goto loser;
  805|      0|    }
  806|       |
  807|       |    /* determine if this is a root cert */
  808|  5.75k|    cert->isRoot = cert_IsRootCert(cert);
  809|       |
  810|       |    /* initialize the certType */
  811|  5.75k|    rv = cert_GetCertType(cert);
  812|  5.75k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (812:9): [True: 0, False: 5.75k]
  ------------------
  813|      0|        goto loser;
  814|      0|    }
  815|       |
  816|  5.75k|    tmpname = CERT_NameToAscii(&cert->subject);
  817|  5.75k|    if (tmpname != NULL) {
  ------------------
  |  Branch (817:9): [True: 5.58k, False: 170]
  ------------------
  818|  5.58k|        cert->subjectName = PORT_ArenaStrdup(cert->arena, tmpname);
  ------------------
  |  |   57|  5.58k|#define PORT_ArenaStrdup PORT_ArenaStrdup_Util
  ------------------
  819|  5.58k|        PORT_Free(tmpname);
  ------------------
  |  |   60|  5.58k|#define PORT_Free PORT_Free_Util
  ------------------
  820|  5.58k|    }
  821|       |
  822|  5.75k|    tmpname = CERT_NameToAscii(&cert->issuer);
  823|  5.75k|    if (tmpname != NULL) {
  ------------------
  |  Branch (823:9): [True: 5.59k, False: 161]
  ------------------
  824|  5.59k|        cert->issuerName = PORT_ArenaStrdup(cert->arena, tmpname);
  ------------------
  |  |   57|  5.59k|#define PORT_ArenaStrdup PORT_ArenaStrdup_Util
  ------------------
  825|  5.59k|        PORT_Free(tmpname);
  ------------------
  |  |   60|  5.59k|#define PORT_Free PORT_Free_Util
  ------------------
  826|  5.59k|    }
  827|       |
  828|  5.75k|    cert->referenceCount = 1;
  829|  5.75k|    cert->slot = NULL;
  830|  5.75k|    cert->pkcs11ID = CK_INVALID_HANDLE;
  ------------------
  |  |   78|  5.75k|#define CK_INVALID_HANDLE 0
  ------------------
  831|  5.75k|    cert->dbnickname = NULL;
  832|       |
  833|  5.75k|    return (cert);
  834|       |
  835|    411|loser:
  836|       |
  837|    411|    if (arena) {
  ------------------
  |  Branch (837:9): [True: 411, False: 0]
  ------------------
  838|    411|        PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |   61|    411|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |  438|    411|#define PR_FALSE 0
  ------------------
  839|    411|    }
  840|       |
  841|    411|    return (0);
  842|  5.75k|}
CERT_GetCertTimes:
  935|  10.3k|{
  936|  10.3k|    SECStatus rv;
  937|       |
  938|  10.3k|    if (!c || !notBefore || !notAfter) {
  ------------------
  |  Branch (938:9): [True: 0, False: 10.3k]
  |  Branch (938:15): [True: 0, False: 10.3k]
  |  Branch (938:29): [True: 0, False: 10.3k]
  ------------------
  939|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  940|      0|        return SECFailure;
  941|      0|    }
  942|       |
  943|       |    /* convert DER not-before time */
  944|  10.3k|    rv = DER_DecodeTimeChoice(notBefore, &c->validity.notBefore);
  ------------------
  |  |   22|  10.3k|#define DER_DecodeTimeChoice DER_DecodeTimeChoice_Util
  ------------------
  945|  10.3k|    if (rv) {
  ------------------
  |  Branch (945:9): [True: 526, False: 9.84k]
  ------------------
  946|    526|        return (SECFailure);
  947|    526|    }
  948|       |
  949|       |    /* convert DER not-after time */
  950|  9.84k|    rv = DER_DecodeTimeChoice(notAfter, &c->validity.notAfter);
  ------------------
  |  |   22|  9.84k|#define DER_DecodeTimeChoice DER_DecodeTimeChoice_Util
  ------------------
  951|  9.84k|    if (rv) {
  ------------------
  |  Branch (951:9): [True: 233, False: 9.61k]
  ------------------
  952|    233|        return (SECFailure);
  953|    233|    }
  954|       |
  955|  9.61k|    return (SECSuccess);
  956|  9.84k|}
CERT_CheckCertValidTimes:
  964|  10.3k|{
  965|  10.3k|    PRTime notBefore, notAfter, llPendingSlop, tmp1;
  966|  10.3k|    SECStatus rv;
  967|       |
  968|  10.3k|    if (!c) {
  ------------------
  |  Branch (968:9): [True: 0, False: 10.3k]
  ------------------
  969|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  970|      0|        return (secCertTimeUndetermined);
  971|      0|    }
  972|       |    /* if cert is already marked OK, then don't bother to check */
  973|  10.3k|    if (allowOverride && c->timeOK) {
  ------------------
  |  Branch (973:9): [True: 0, False: 10.3k]
  |  Branch (973:26): [True: 0, False: 0]
  ------------------
  974|      0|        return (secCertTimeValid);
  975|      0|    }
  976|       |
  977|  10.3k|    rv = CERT_GetCertTimes(c, &notBefore, &notAfter);
  978|       |
  979|  10.3k|    if (rv) {
  ------------------
  |  Branch (979:9): [True: 759, False: 9.61k]
  ------------------
  980|    759|        return (secCertTimeExpired); /*XXX is this the right thing to do here?*/
  981|    759|    }
  982|       |
  983|  9.61k|    LL_I2L(llPendingSlop, pendingSlop);
  ------------------
  |  |  149|  9.61k|#define LL_I2L(l, i)        ((l) = (PRInt64)(i))
  ------------------
  984|       |    /* convert to micro seconds */
  985|  9.61k|    LL_UI2L(tmp1, PR_USEC_PER_SEC);
  ------------------
  |  |  150|  9.61k|#define LL_UI2L(l, ui)        ((l) = (PRInt64)(ui))
  ------------------
  986|  9.61k|    LL_MUL(llPendingSlop, llPendingSlop, tmp1);
  ------------------
  |  |  115|  9.61k|#define LL_MUL(r, a, b)        ((r) = (a) * (b))
  ------------------
  987|  9.61k|    LL_SUB(notBefore, notBefore, llPendingSlop);
  ------------------
  |  |  106|  9.61k|#define LL_SUB(r, a, b)     ((r) = (a) - (b))
  ------------------
  988|  9.61k|    if (LL_CMP(t, <, notBefore)) {
  ------------------
  |  |   79|  9.61k|#define LL_CMP(a, op, b)    ((PRInt64)(a) op (PRInt64)(b))
  |  |  ------------------
  |  |  |  Branch (79:29): [True: 22, False: 9.59k]
  |  |  ------------------
  ------------------
  989|     22|        PORT_SetError(SEC_ERROR_EXPIRED_CERTIFICATE);
  ------------------
  |  |   65|     22|#define PORT_SetError PORT_SetError_Util
  ------------------
  990|     22|        return (secCertTimeNotValidYet);
  991|     22|    }
  992|  9.59k|    if (LL_CMP(t, >, notAfter)) {
  ------------------
  |  |   79|  9.59k|#define LL_CMP(a, op, b)    ((PRInt64)(a) op (PRInt64)(b))
  |  |  ------------------
  |  |  |  Branch (79:29): [True: 62, False: 9.53k]
  |  |  ------------------
  ------------------
  993|     62|        PORT_SetError(SEC_ERROR_EXPIRED_CERTIFICATE);
  ------------------
  |  |   65|     62|#define PORT_SetError PORT_SetError_Util
  ------------------
  994|     62|        return (secCertTimeExpired);
  995|     62|    }
  996|       |
  997|  9.53k|    return (secCertTimeValid);
  998|  9.59k|}
CERT_KeyUsageAndTypeForCertUsage:
 1096|  50.7k|{
 1097|  50.7k|    unsigned int requiredKeyUsage = 0;
 1098|  50.7k|    unsigned int requiredCertType = 0;
 1099|       |
 1100|  50.7k|    if (ca) {
  ------------------
  |  Branch (1100:9): [True: 6.52k, False: 44.2k]
  ------------------
 1101|  6.52k|        switch (usage) {
 1102|     17|            case certUsageSSLServerWithStepUp:
  ------------------
  |  Branch (1102:13): [True: 17, False: 6.50k]
  ------------------
 1103|     17|                requiredKeyUsage = KU_NS_GOVT_APPROVED | KU_KEY_CERT_SIGN;
  ------------------
  |  |  589|     17|#define KU_NS_GOVT_APPROVED (0x8000) /*don't make part of KU_ALL!*/
  ------------------
                              requiredKeyUsage = KU_NS_GOVT_APPROVED | KU_KEY_CERT_SIGN;
  ------------------
  |  |  567|     17|#define KU_KEY_CERT_SIGN (0x04)     /* bit 5 */
  ------------------
 1104|     17|                requiredCertType = NS_CERT_TYPE_SSL_CA;
  ------------------
  |  |  452|     17|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
 1105|     17|                break;
 1106|  4.77k|            case certUsageSSLClient:
  ------------------
  |  Branch (1106:13): [True: 4.77k, False: 1.74k]
  ------------------
 1107|  4.77k|                requiredKeyUsage = KU_KEY_CERT_SIGN;
  ------------------
  |  |  567|  4.77k|#define KU_KEY_CERT_SIGN (0x04)     /* bit 5 */
  ------------------
 1108|  4.77k|                requiredCertType = NS_CERT_TYPE_SSL_CA;
  ------------------
  |  |  452|  4.77k|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
 1109|  4.77k|                break;
 1110|    278|            case certUsageSSLServer:
  ------------------
  |  Branch (1110:13): [True: 278, False: 6.24k]
  ------------------
 1111|    278|                requiredKeyUsage = KU_KEY_CERT_SIGN;
  ------------------
  |  |  567|    278|#define KU_KEY_CERT_SIGN (0x04)     /* bit 5 */
  ------------------
 1112|    278|                requiredCertType = NS_CERT_TYPE_SSL_CA;
  ------------------
  |  |  452|    278|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
 1113|    278|                break;
 1114|    480|            case certUsageIPsec:
  ------------------
  |  Branch (1114:13): [True: 480, False: 6.04k]
  ------------------
 1115|    480|                requiredKeyUsage = KU_KEY_CERT_SIGN;
  ------------------
  |  |  567|    480|#define KU_KEY_CERT_SIGN (0x04)     /* bit 5 */
  ------------------
 1116|    480|                requiredCertType = NS_CERT_TYPE_IPSEC_CA;
  ------------------
  |  |  445|    480|#define NS_CERT_TYPE_IPSEC_CA (0x200)         /* outside the NS Cert Type Extenstion */
  ------------------
 1117|    480|                break;
 1118|    135|            case certUsageSSLCA:
  ------------------
  |  Branch (1118:13): [True: 135, False: 6.38k]
  ------------------
 1119|    135|                requiredKeyUsage = KU_KEY_CERT_SIGN;
  ------------------
  |  |  567|    135|#define KU_KEY_CERT_SIGN (0x04)     /* bit 5 */
  ------------------
 1120|    135|                requiredCertType = NS_CERT_TYPE_SSL_CA;
  ------------------
  |  |  452|    135|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
 1121|    135|                break;
 1122|    465|            case certUsageEmailSigner:
  ------------------
  |  Branch (1122:13): [True: 465, False: 6.05k]
  ------------------
 1123|    465|                requiredKeyUsage = KU_KEY_CERT_SIGN;
  ------------------
  |  |  567|    465|#define KU_KEY_CERT_SIGN (0x04)     /* bit 5 */
  ------------------
 1124|    465|                requiredCertType = NS_CERT_TYPE_EMAIL_CA;
  ------------------
  |  |  453|    465|#define NS_CERT_TYPE_EMAIL_CA (0x02)          /* bit 6 */
  ------------------
 1125|    465|                break;
 1126|    253|            case certUsageEmailRecipient:
  ------------------
  |  Branch (1126:13): [True: 253, False: 6.27k]
  ------------------
 1127|    253|                requiredKeyUsage = KU_KEY_CERT_SIGN;
  ------------------
  |  |  567|    253|#define KU_KEY_CERT_SIGN (0x04)     /* bit 5 */
  ------------------
 1128|    253|                requiredCertType = NS_CERT_TYPE_EMAIL_CA;
  ------------------
  |  |  453|    253|#define NS_CERT_TYPE_EMAIL_CA (0x02)          /* bit 6 */
  ------------------
 1129|    253|                break;
 1130|     37|            case certUsageObjectSigner:
  ------------------
  |  Branch (1130:13): [True: 37, False: 6.48k]
  ------------------
 1131|     37|                requiredKeyUsage = KU_KEY_CERT_SIGN;
  ------------------
  |  |  567|     37|#define KU_KEY_CERT_SIGN (0x04)     /* bit 5 */
  ------------------
 1132|     37|                requiredCertType = NS_CERT_TYPE_OBJECT_SIGNING_CA;
  ------------------
  |  |  454|     37|#define NS_CERT_TYPE_OBJECT_SIGNING_CA (0x01) /* bit 7 */
  ------------------
 1133|     37|                break;
 1134|      0|            case certUsageAnyCA:
  ------------------
  |  Branch (1134:13): [True: 0, False: 6.52k]
  ------------------
 1135|      0|            case certUsageVerifyCA:
  ------------------
  |  Branch (1135:13): [True: 0, False: 6.52k]
  ------------------
 1136|     84|            case certUsageStatusResponder:
  ------------------
  |  Branch (1136:13): [True: 84, False: 6.44k]
  ------------------
 1137|     84|                requiredKeyUsage = KU_KEY_CERT_SIGN;
  ------------------
  |  |  567|     84|#define KU_KEY_CERT_SIGN (0x04)     /* bit 5 */
  ------------------
 1138|     84|                requiredCertType = NS_CERT_TYPE_OBJECT_SIGNING_CA |
  ------------------
  |  |  454|     84|#define NS_CERT_TYPE_OBJECT_SIGNING_CA (0x01) /* bit 7 */
  ------------------
 1139|     84|                                   NS_CERT_TYPE_EMAIL_CA | NS_CERT_TYPE_SSL_CA;
  ------------------
  |  |  453|     84|#define NS_CERT_TYPE_EMAIL_CA (0x02)          /* bit 6 */
  ------------------
                                                 NS_CERT_TYPE_EMAIL_CA | NS_CERT_TYPE_SSL_CA;
  ------------------
  |  |  452|     84|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
 1140|     84|                break;
 1141|      0|            default:
  ------------------
  |  Branch (1141:13): [True: 0, False: 6.52k]
  ------------------
 1142|      0|                PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1143|      0|                goto loser;
 1144|  6.52k|        }
 1145|  44.2k|    } else {
 1146|  44.2k|        switch (usage) {
 1147|  4.91k|            case certUsageSSLClient:
  ------------------
  |  Branch (1147:13): [True: 4.91k, False: 39.2k]
  ------------------
 1148|       |                /*
 1149|       |                 * RFC 5280 lists digitalSignature and keyAgreement for
 1150|       |                 * id-kp-clientAuth.  NSS does not support the *_fixed_dh and
 1151|       |                 * *_fixed_ecdh client certificate types.
 1152|       |                 */
 1153|  4.91k|                requiredKeyUsage = KU_DIGITAL_SIGNATURE;
  ------------------
  |  |  562|  4.91k|#define KU_DIGITAL_SIGNATURE (0x80) /* bit 0 */
  ------------------
 1154|  4.91k|                requiredCertType = NS_CERT_TYPE_SSL_CLIENT;
  ------------------
  |  |  447|  4.91k|#define NS_CERT_TYPE_SSL_CLIENT (0x80)        /* bit 0 */
  ------------------
 1155|  4.91k|                break;
 1156|  4.91k|            case certUsageSSLServer:
  ------------------
  |  Branch (1156:13): [True: 4.91k, False: 39.2k]
  ------------------
 1157|  4.91k|                requiredKeyUsage = KU_KEY_AGREEMENT_OR_ENCIPHERMENT;
  ------------------
  |  |  584|  4.91k|#define KU_KEY_AGREEMENT_OR_ENCIPHERMENT (0x4000)
  ------------------
 1158|  4.91k|                requiredCertType = NS_CERT_TYPE_SSL_SERVER;
  ------------------
  |  |  448|  4.91k|#define NS_CERT_TYPE_SSL_SERVER (0x40)        /* bit 1 */
  ------------------
 1159|  4.91k|                break;
 1160|  4.91k|            case certUsageIPsec:
  ------------------
  |  Branch (1160:13): [True: 4.91k, False: 39.2k]
  ------------------
 1161|       |                /* RFC 4945 Section 5.1.3.2 */
 1162|  4.91k|                requiredKeyUsage = KU_DIGITAL_SIGNATURE_OR_NON_REPUDIATION;
  ------------------
  |  |  578|  4.91k|#define KU_DIGITAL_SIGNATURE_OR_NON_REPUDIATION (0x2000)
  ------------------
 1163|  4.91k|                requiredCertType = NS_CERT_TYPE_IPSEC;
  ------------------
  |  |  446|  4.91k|#define NS_CERT_TYPE_IPSEC (0x100)            /* outside the NS Cert Type Extenstion */
  ------------------
 1164|  4.91k|                break;
 1165|  4.91k|            case certUsageSSLServerWithStepUp:
  ------------------
  |  Branch (1165:13): [True: 4.91k, False: 39.2k]
  ------------------
 1166|  4.91k|                requiredKeyUsage =
 1167|  4.91k|                    KU_KEY_AGREEMENT_OR_ENCIPHERMENT | KU_NS_GOVT_APPROVED;
  ------------------
  |  |  584|  4.91k|#define KU_KEY_AGREEMENT_OR_ENCIPHERMENT (0x4000)
  ------------------
                                  KU_KEY_AGREEMENT_OR_ENCIPHERMENT | KU_NS_GOVT_APPROVED;
  ------------------
  |  |  589|  4.91k|#define KU_NS_GOVT_APPROVED (0x8000) /*don't make part of KU_ALL!*/
  ------------------
 1168|  4.91k|                requiredCertType = NS_CERT_TYPE_SSL_SERVER;
  ------------------
  |  |  448|  4.91k|#define NS_CERT_TYPE_SSL_SERVER (0x40)        /* bit 1 */
  ------------------
 1169|  4.91k|                break;
 1170|  4.91k|            case certUsageSSLCA:
  ------------------
  |  Branch (1170:13): [True: 4.91k, False: 39.2k]
  ------------------
 1171|  4.91k|                requiredKeyUsage = KU_KEY_CERT_SIGN;
  ------------------
  |  |  567|  4.91k|#define KU_KEY_CERT_SIGN (0x04)     /* bit 5 */
  ------------------
 1172|  4.91k|                requiredCertType = NS_CERT_TYPE_SSL_CA;
  ------------------
  |  |  452|  4.91k|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
 1173|  4.91k|                break;
 1174|  4.91k|            case certUsageEmailSigner:
  ------------------
  |  Branch (1174:13): [True: 4.91k, False: 39.2k]
  ------------------
 1175|  4.91k|                requiredKeyUsage = KU_DIGITAL_SIGNATURE_OR_NON_REPUDIATION;
  ------------------
  |  |  578|  4.91k|#define KU_DIGITAL_SIGNATURE_OR_NON_REPUDIATION (0x2000)
  ------------------
 1176|  4.91k|                requiredCertType = NS_CERT_TYPE_EMAIL;
  ------------------
  |  |  449|  4.91k|#define NS_CERT_TYPE_EMAIL (0x20)             /* bit 2 */
  ------------------
 1177|  4.91k|                break;
 1178|  4.91k|            case certUsageEmailRecipient:
  ------------------
  |  Branch (1178:13): [True: 4.91k, False: 39.2k]
  ------------------
 1179|  4.91k|                requiredKeyUsage = KU_KEY_AGREEMENT_OR_ENCIPHERMENT;
  ------------------
  |  |  584|  4.91k|#define KU_KEY_AGREEMENT_OR_ENCIPHERMENT (0x4000)
  ------------------
 1180|  4.91k|                requiredCertType = NS_CERT_TYPE_EMAIL;
  ------------------
  |  |  449|  4.91k|#define NS_CERT_TYPE_EMAIL (0x20)             /* bit 2 */
  ------------------
 1181|  4.91k|                break;
 1182|  4.91k|            case certUsageObjectSigner:
  ------------------
  |  Branch (1182:13): [True: 4.91k, False: 39.2k]
  ------------------
 1183|       |                /* RFC 5280 lists only digitalSignature for id-kp-codeSigning.
 1184|       |                 */
 1185|  4.91k|                requiredKeyUsage = KU_DIGITAL_SIGNATURE;
  ------------------
  |  |  562|  4.91k|#define KU_DIGITAL_SIGNATURE (0x80) /* bit 0 */
  ------------------
 1186|  4.91k|                requiredCertType = NS_CERT_TYPE_OBJECT_SIGNING;
  ------------------
  |  |  450|  4.91k|#define NS_CERT_TYPE_OBJECT_SIGNING (0x10)    /* bit 3 */
  ------------------
 1187|  4.91k|                break;
 1188|  4.91k|            case certUsageStatusResponder:
  ------------------
  |  Branch (1188:13): [True: 4.91k, False: 39.2k]
  ------------------
 1189|  4.91k|                requiredKeyUsage = KU_DIGITAL_SIGNATURE_OR_NON_REPUDIATION;
  ------------------
  |  |  578|  4.91k|#define KU_DIGITAL_SIGNATURE_OR_NON_REPUDIATION (0x2000)
  ------------------
 1190|  4.91k|                requiredCertType = EXT_KEY_USAGE_STATUS_RESPONDER;
  ------------------
  |  |  457|  4.91k|#define EXT_KEY_USAGE_STATUS_RESPONDER (0x4000)
  ------------------
 1191|  4.91k|                break;
 1192|      0|            default:
  ------------------
  |  Branch (1192:13): [True: 0, False: 44.2k]
  ------------------
 1193|      0|                PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1194|      0|                goto loser;
 1195|  44.2k|        }
 1196|  44.2k|    }
 1197|       |
 1198|  50.7k|    if (retKeyUsage != NULL) {
  ------------------
  |  Branch (1198:9): [True: 50.7k, False: 0]
  ------------------
 1199|  50.7k|        *retKeyUsage = requiredKeyUsage;
 1200|  50.7k|    }
 1201|  50.7k|    if (retCertType != NULL) {
  ------------------
  |  Branch (1201:9): [True: 50.7k, False: 0]
  ------------------
 1202|  50.7k|        *retCertType = requiredCertType;
 1203|  50.7k|    }
 1204|       |
 1205|  50.7k|    return (SECSuccess);
 1206|      0|loser:
 1207|      0|    return (SECFailure);
 1208|  50.7k|}
CERT_CheckKeyUsage:
 1215|  44.2k|{
 1216|  44.2k|    if (!cert) {
  ------------------
  |  Branch (1216:9): [True: 0, False: 44.2k]
  ------------------
 1217|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1218|      0|        return SECFailure;
 1219|      0|    }
 1220|       |    /* choose between key agreement or key encipherment based on key
 1221|       |     * type in cert
 1222|       |     */
 1223|  44.2k|    if (requiredUsage & KU_KEY_AGREEMENT_OR_ENCIPHERMENT) {
  ------------------
  |  |  584|  44.2k|#define KU_KEY_AGREEMENT_OR_ENCIPHERMENT (0x4000)
  ------------------
  |  Branch (1223:9): [True: 14.7k, False: 29.5k]
  ------------------
 1224|  14.7k|        KeyType keyType = CERT_GetCertKeyType(&cert->subjectPublicKeyInfo);
 1225|       |        /* turn off the special bit */
 1226|  14.7k|        requiredUsage &= (~KU_KEY_AGREEMENT_OR_ENCIPHERMENT);
  ------------------
  |  |  584|  14.7k|#define KU_KEY_AGREEMENT_OR_ENCIPHERMENT (0x4000)
  ------------------
 1227|       |
 1228|  14.7k|        switch (keyType) {
 1229|  8.31k|            case rsaKey:
  ------------------
  |  Branch (1229:13): [True: 8.31k, False: 6.42k]
  ------------------
 1230|  8.31k|                requiredUsage |= KU_KEY_ENCIPHERMENT;
  ------------------
  |  |  564|  8.31k|#define KU_KEY_ENCIPHERMENT (0x20)  /* bit 2 */
  ------------------
 1231|  8.31k|                break;
 1232|    231|            case rsaPssKey:
  ------------------
  |  Branch (1232:13): [True: 231, False: 14.5k]
  ------------------
 1233|  4.25k|            case dsaKey:
  ------------------
  |  Branch (1233:13): [True: 4.02k, False: 10.7k]
  ------------------
 1234|  4.25k|                requiredUsage |= KU_DIGITAL_SIGNATURE;
  ------------------
  |  |  562|  4.25k|#define KU_DIGITAL_SIGNATURE (0x80) /* bit 0 */
  ------------------
 1235|  4.25k|                break;
 1236|     21|            case dhKey:
  ------------------
  |  Branch (1236:13): [True: 21, False: 14.7k]
  ------------------
 1237|     21|                requiredUsage |= KU_KEY_AGREEMENT;
  ------------------
  |  |  566|     21|#define KU_KEY_AGREEMENT (0x08)     /* bit 4 */
  ------------------
 1238|     21|                break;
 1239|  1.34k|            case ecKey:
  ------------------
  |  Branch (1239:13): [True: 1.34k, False: 13.3k]
  ------------------
 1240|       |                /* Accept either signature or agreement. */
 1241|  1.34k|                if (!(cert->keyUsage &
  ------------------
  |  Branch (1241:21): [True: 39, False: 1.30k]
  ------------------
 1242|  1.34k|                      (KU_DIGITAL_SIGNATURE | KU_KEY_AGREEMENT)))
  ------------------
  |  |  562|  1.34k|#define KU_DIGITAL_SIGNATURE (0x80) /* bit 0 */
  ------------------
                                    (KU_DIGITAL_SIGNATURE | KU_KEY_AGREEMENT)))
  ------------------
  |  |  566|  1.34k|#define KU_KEY_AGREEMENT (0x08)     /* bit 4 */
  ------------------
 1243|     39|                    goto loser;
 1244|  1.30k|                break;
 1245|  1.30k|            default:
  ------------------
  |  Branch (1245:13): [True: 810, False: 13.9k]
  ------------------
 1246|    810|                goto loser;
 1247|  14.7k|        }
 1248|  14.7k|    }
 1249|       |
 1250|       |    /* Allow either digital signature or non-repudiation */
 1251|  43.4k|    if (requiredUsage & KU_DIGITAL_SIGNATURE_OR_NON_REPUDIATION) {
  ------------------
  |  |  578|  43.4k|#define KU_DIGITAL_SIGNATURE_OR_NON_REPUDIATION (0x2000)
  ------------------
  |  Branch (1251:9): [True: 14.7k, False: 28.6k]
  ------------------
 1252|       |        /* turn off the special bit */
 1253|  14.7k|        requiredUsage &= (~KU_DIGITAL_SIGNATURE_OR_NON_REPUDIATION);
  ------------------
  |  |  578|  14.7k|#define KU_DIGITAL_SIGNATURE_OR_NON_REPUDIATION (0x2000)
  ------------------
 1254|       |
 1255|  14.7k|        if (!(cert->keyUsage & (KU_DIGITAL_SIGNATURE | KU_NON_REPUDIATION)))
  ------------------
  |  |  562|  14.7k|#define KU_DIGITAL_SIGNATURE (0x80) /* bit 0 */
  ------------------
                      if (!(cert->keyUsage & (KU_DIGITAL_SIGNATURE | KU_NON_REPUDIATION)))
  ------------------
  |  |  563|  14.7k|#define KU_NON_REPUDIATION (0x40)   /* bit 1 */
  ------------------
  |  Branch (1255:13): [True: 213, False: 14.5k]
  ------------------
 1256|    213|            goto loser;
 1257|  14.7k|    }
 1258|       |
 1259|  43.1k|    if ((cert->keyUsage & requiredUsage) == requiredUsage)
  ------------------
  |  Branch (1259:9): [True: 37.6k, False: 5.57k]
  ------------------
 1260|  37.6k|        return SECSuccess;
 1261|       |
 1262|  6.63k|loser:
 1263|  6.63k|    PORT_SetError(SEC_ERROR_INADEQUATE_KEY_USAGE);
  ------------------
  |  |   65|  6.63k|#define PORT_SetError PORT_SetError_Util
  ------------------
 1264|  6.63k|    return SECFailure;
 1265|  43.1k|}
CERT_DupCertificate:
 1269|  6.50k|{
 1270|  6.50k|    if (c) {
  ------------------
  |  Branch (1270:9): [True: 6.50k, False: 0]
  ------------------
 1271|  6.50k|        NSSCertificate *tmp = STAN_GetNSSCertificate(c);
 1272|  6.50k|        nssCertificate_AddRef(tmp);
 1273|  6.50k|    }
 1274|  6.50k|    return c;
 1275|  6.50k|}
CERT_SetDefaultCertDB:
 1296|      1|{
 1297|      1|    default_cert_db_handle = handle;
 1298|       |
 1299|      1|    return;
 1300|      1|}
CERT_GetDefaultCertDB:
 1304|  11.9k|{
 1305|  11.9k|    return (default_cert_db_handle);
 1306|  11.9k|}
cert_VerifySubjectAltName:
 1434|  5.75k|{
 1435|  5.75k|    PLArenaPool *arena = NULL;
 1436|  5.75k|    CERTGeneralName *nameList = NULL;
 1437|  5.75k|    CERTGeneralName *current;
 1438|  5.75k|    char *cn;
 1439|  5.75k|    int cnBufLen;
 1440|  5.75k|    int DNSextCount = 0;
 1441|  5.75k|    int IPextCount = 0;
 1442|  5.75k|    PRBool isIPaddr = PR_FALSE;
  ------------------
  |  |  438|  5.75k|#define PR_FALSE 0
  ------------------
 1443|  5.75k|    SECStatus rv = SECFailure;
 1444|  5.75k|    SECItem subAltName;
 1445|  5.75k|    PRNetAddr netAddr;
 1446|  5.75k|    char cnbuf[128];
 1447|       |
 1448|  5.75k|    subAltName.data = NULL;
 1449|  5.75k|    cn = cnbuf;
 1450|  5.75k|    cnBufLen = sizeof cnbuf;
 1451|       |
 1452|  5.75k|    rv = CERT_FindCertExtension(cert, SEC_OID_X509_SUBJECT_ALT_NAME,
 1453|  5.75k|                                &subAltName);
 1454|  5.75k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1454:9): [True: 5.07k, False: 681]
  ------------------
 1455|  5.07k|        goto fail;
 1456|  5.07k|    }
 1457|    681|    isIPaddr = (PR_SUCCESS == PR_StringToNetAddr(hn, &netAddr));
 1458|    681|    arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   63|    681|#define PORT_NewArena PORT_NewArena_Util
  ------------------
                  arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|    681|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
 1459|    681|    if (!arena)
  ------------------
  |  Branch (1459:9): [True: 0, False: 681]
  ------------------
 1460|      0|        goto fail;
 1461|       |
 1462|    681|    nameList = current = CERT_DecodeAltNameExtension(arena, &subAltName);
 1463|    681|    if (!current)
  ------------------
  |  Branch (1463:9): [True: 527, False: 154]
  ------------------
 1464|    527|        goto fail;
 1465|       |
 1466|  4.01k|    do {
 1467|  4.01k|        switch (current->type) {
 1468|  3.29k|            case certDNSName:
  ------------------
  |  Branch (1468:13): [True: 3.29k, False: 721]
  ------------------
 1469|  3.29k|                if (!isIPaddr) {
  ------------------
  |  Branch (1469:21): [True: 3.29k, False: 0]
  ------------------
 1470|       |                    /* DNS name current->name.other.data is not null terminated.
 1471|       |                    ** so must copy it.
 1472|       |                    */
 1473|  3.29k|                    int cnLen = current->name.other.len;
 1474|  3.29k|                    rv = CERT_RFC1485_EscapeAndQuote(
 1475|  3.29k|                        cn, cnBufLen, (char *)current->name.other.data, cnLen);
 1476|  3.29k|                    if (rv != SECSuccess &&
  ------------------
  |  Branch (1476:25): [True: 45, False: 3.24k]
  ------------------
 1477|  3.29k|                        PORT_GetError() == SEC_ERROR_OUTPUT_LEN) {
  ------------------
  |  |   62|     45|#define PORT_GetError PORT_GetError_Util
  ------------------
  |  Branch (1477:25): [True: 45, False: 0]
  ------------------
 1478|     45|                        cnBufLen =
 1479|     45|                            cnLen * 3 + 3; /* big enough for worst case */
 1480|     45|                        cn = (char *)PORT_ArenaAlloc(arena, cnBufLen);
  ------------------
  |  |   53|     45|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
 1481|     45|                        if (!cn)
  ------------------
  |  Branch (1481:29): [True: 0, False: 45]
  ------------------
 1482|      0|                            goto fail;
 1483|     45|                        rv = CERT_RFC1485_EscapeAndQuote(
 1484|     45|                            cn, cnBufLen, (char *)current->name.other.data,
 1485|     45|                            cnLen);
 1486|     45|                    }
 1487|  3.29k|                    if (rv == SECSuccess)
  ------------------
  |  Branch (1487:25): [True: 3.29k, False: 0]
  ------------------
 1488|  3.29k|                        rv = cert_TestHostName(cn, hn);
 1489|  3.29k|                    if (rv == SECSuccess)
  ------------------
  |  Branch (1489:25): [True: 0, False: 3.29k]
  ------------------
 1490|      0|                        goto finish;
 1491|  3.29k|                }
 1492|  3.29k|                DNSextCount++;
 1493|  3.29k|                break;
 1494|    284|            case certIPAddress:
  ------------------
  |  Branch (1494:13): [True: 284, False: 3.73k]
  ------------------
 1495|    284|                if (isIPaddr) {
  ------------------
  |  Branch (1495:21): [True: 0, False: 284]
  ------------------
 1496|      0|                    int match = 0;
 1497|      0|                    PRIPv6Addr v6Addr;
 1498|      0|                    if (current->name.other.len == 4 && /* IP v4 address */
  ------------------
  |  Branch (1498:25): [True: 0, False: 0]
  ------------------
 1499|      0|                        netAddr.inet.family == PR_AF_INET) {
  ------------------
  |  |   96|      0|#define PR_AF_INET AF_INET
  ------------------
  |  Branch (1499:25): [True: 0, False: 0]
  ------------------
 1500|      0|                        match = !memcmp(&netAddr.inet.ip,
 1501|      0|                                        current->name.other.data, 4);
 1502|      0|                    } else if (current->name.other.len ==
  ------------------
  |  Branch (1502:32): [True: 0, False: 0]
  ------------------
 1503|      0|                                   16 && /* IP v6 address */
 1504|      0|                               netAddr.ipv6.family == PR_AF_INET6) {
  ------------------
  |  |   27|      0|#define PR_AF_INET6 10  /* same as AF_INET6 */
  ------------------
  |  Branch (1504:32): [True: 0, False: 0]
  ------------------
 1505|      0|                        match = !memcmp(&netAddr.ipv6.ip,
 1506|      0|                                        current->name.other.data, 16);
 1507|      0|                    } else if (current->name.other.len ==
  ------------------
  |  Branch (1507:32): [True: 0, False: 0]
  ------------------
 1508|      0|                                   16 && /* IP v6 address */
 1509|      0|                               netAddr.inet.family == PR_AF_INET) {
  ------------------
  |  |   96|      0|#define PR_AF_INET AF_INET
  ------------------
  |  Branch (1509:32): [True: 0, False: 0]
  ------------------
 1510|       |                        /* convert netAddr to ipv6, then compare. */
 1511|       |                        /* ipv4 must be in Network Byte Order on input. */
 1512|      0|                        PR_ConvertIPv4AddrToIPv6(netAddr.inet.ip, &v6Addr);
 1513|      0|                        match = !memcmp(&v6Addr, current->name.other.data, 16);
 1514|      0|                    } else if (current->name.other.len == 4 && /* IP v4 address */
  ------------------
  |  Branch (1514:32): [True: 0, False: 0]
  ------------------
 1515|      0|                               netAddr.inet.family == PR_AF_INET6) {
  ------------------
  |  |   27|      0|#define PR_AF_INET6 10  /* same as AF_INET6 */
  ------------------
  |  Branch (1515:32): [True: 0, False: 0]
  ------------------
 1516|       |                        /* convert netAddr to ipv6, then compare. */
 1517|      0|                        PRUint32 ipv4 = (current->name.other.data[0] << 24) |
 1518|      0|                                        (current->name.other.data[1] << 16) |
 1519|      0|                                        (current->name.other.data[2] << 8) |
 1520|      0|                                        current->name.other.data[3];
 1521|       |                        /* ipv4 must be in Network Byte Order on input. */
 1522|      0|                        PR_ConvertIPv4AddrToIPv6(PR_htonl(ipv4), &v6Addr);
 1523|      0|                        match = !memcmp(&netAddr.ipv6.ip, &v6Addr, 16);
 1524|      0|                    }
 1525|      0|                    if (match) {
  ------------------
  |  Branch (1525:25): [True: 0, False: 0]
  ------------------
 1526|      0|                        rv = SECSuccess;
 1527|      0|                        goto finish;
 1528|      0|                    }
 1529|      0|                }
 1530|    284|                IPextCount++;
 1531|    284|                break;
 1532|    437|            default:
  ------------------
  |  Branch (1532:13): [True: 437, False: 3.57k]
  ------------------
 1533|    437|                break;
 1534|  4.01k|        }
 1535|  4.01k|        current = CERT_GetNextGeneralName(current);
 1536|  4.01k|    } while (current != nameList);
  ------------------
  |  Branch (1536:14): [True: 3.86k, False: 154]
  ------------------
 1537|       |
 1538|  5.75k|fail:
 1539|       |
 1540|  5.75k|    if (!(isIPaddr ? IPextCount : DNSextCount)) {
  ------------------
  |  Branch (1540:9): [True: 5.62k, False: 128]
  |  Branch (1540:11): [True: 0, False: 5.75k]
  ------------------
 1541|       |        /* no relevant value in the extension was found. */
 1542|  5.62k|        PORT_SetError(SEC_ERROR_EXTENSION_NOT_FOUND);
  ------------------
  |  |   65|  5.62k|#define PORT_SetError PORT_SetError_Util
  ------------------
 1543|  5.62k|    } else {
 1544|    128|        PORT_SetError(SSL_ERROR_BAD_CERT_DOMAIN);
  ------------------
  |  |   65|    128|#define PORT_SetError PORT_SetError_Util
  ------------------
 1545|    128|    }
 1546|  5.75k|    rv = SECFailure;
 1547|       |
 1548|  5.75k|finish:
 1549|       |
 1550|       |    /* Don't free nameList, it's part of the arena. */
 1551|  5.75k|    if (arena) {
  ------------------
  |  Branch (1551:9): [True: 681, False: 5.07k]
  ------------------
 1552|    681|        PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |   61|    681|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |  438|    681|#define PR_FALSE 0
  ------------------
 1553|    681|    }
 1554|       |
 1555|  5.75k|    if (subAltName.data) {
  ------------------
  |  Branch (1555:9): [True: 677, False: 5.07k]
  ------------------
 1556|    677|        SECITEM_FreeItem(&subAltName, PR_FALSE);
  ------------------
  |  |  108|    677|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(&subAltName, PR_FALSE);
  ------------------
  |  |  438|    677|#define PR_FALSE 0
  ------------------
 1557|    677|    }
 1558|       |
 1559|  5.75k|    return rv;
 1560|  5.75k|}
cert_GetSubjectAltNameList:
 1571|  6.43k|{
 1572|  6.43k|    CERTGeneralName *nameList = NULL;
 1573|  6.43k|    SECStatus rv = SECFailure;
 1574|  6.43k|    SECItem subAltName;
 1575|       |
 1576|  6.43k|    if (!cert || !arena)
  ------------------
  |  Branch (1576:9): [True: 0, False: 6.43k]
  |  Branch (1576:18): [True: 0, False: 6.43k]
  ------------------
 1577|      0|        return NULL;
 1578|       |
 1579|  6.43k|    subAltName.data = NULL;
 1580|       |
 1581|  6.43k|    rv = CERT_FindCertExtension(cert, SEC_OID_X509_SUBJECT_ALT_NAME,
 1582|  6.43k|                                &subAltName);
 1583|  6.43k|    if (rv != SECSuccess)
  ------------------
  |  Branch (1583:9): [True: 5.43k, False: 997]
  ------------------
 1584|  5.43k|        return NULL;
 1585|       |
 1586|    997|    nameList = CERT_DecodeAltNameExtension(arena, &subAltName);
 1587|    997|    SECITEM_FreeItem(&subAltName, PR_FALSE);
  ------------------
  |  |  108|    997|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                  SECITEM_FreeItem(&subAltName, PR_FALSE);
  ------------------
  |  |  438|    997|#define PR_FALSE 0
  ------------------
 1588|    997|    return nameList;
 1589|  6.43k|}
cert_CountDNSPatterns:
 1593|    205|{
 1594|    205|    CERTGeneralName *current;
 1595|    205|    PRUint32 count = 0;
 1596|       |
 1597|    205|    if (!firstName)
  ------------------
  |  Branch (1597:9): [True: 0, False: 205]
  ------------------
 1598|      0|        return 0;
 1599|       |
 1600|    205|    current = firstName;
 1601|  4.17k|    do {
 1602|  4.17k|        switch (current->type) {
 1603|  3.03k|            case certDNSName:
  ------------------
  |  Branch (1603:13): [True: 3.03k, False: 1.14k]
  ------------------
 1604|  3.57k|            case certIPAddress:
  ------------------
  |  Branch (1604:13): [True: 540, False: 3.63k]
  ------------------
 1605|  3.57k|                ++count;
 1606|  3.57k|                break;
 1607|    603|            default:
  ------------------
  |  Branch (1607:13): [True: 603, False: 3.57k]
  ------------------
 1608|    603|                break;
 1609|  4.17k|        }
 1610|  4.17k|        current = CERT_GetNextGeneralName(current);
 1611|  4.17k|    } while (current != firstName);
  ------------------
  |  Branch (1611:14): [True: 3.96k, False: 205]
  ------------------
 1612|       |
 1613|    205|    return count;
 1614|    205|}
CERT_VerifyCertName:
 1781|  5.75k|{
 1782|  5.75k|    char *cn;
 1783|  5.75k|    SECStatus rv;
 1784|  5.75k|    CERTOKDomainName *domainOK;
 1785|       |
 1786|  5.75k|    if (!hn || !strlen(hn)) {
  ------------------
  |  Branch (1786:9): [True: 0, False: 5.75k]
  |  Branch (1786:16): [True: 0, False: 5.75k]
  ------------------
 1787|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1788|      0|        return SECFailure;
 1789|      0|    }
 1790|       |
 1791|       |    /* if the name is one that the user has already approved, it's OK. */
 1792|  5.75k|    for (domainOK = cert->domainOK; domainOK; domainOK = domainOK->next) {
  ------------------
  |  Branch (1792:37): [True: 0, False: 5.75k]
  ------------------
 1793|      0|        if (0 == PORT_Strcasecmp(hn, domainOK->name)) {
  ------------------
  |  |  184|      0|#define PORT_Strcasecmp PL_strcasecmp
  ------------------
  |  Branch (1793:13): [True: 0, False: 0]
  ------------------
 1794|      0|            return SECSuccess;
 1795|      0|        }
 1796|      0|    }
 1797|       |
 1798|       |    /* Per RFC 2818, if the SubjectAltName extension is present, it must
 1799|       |    ** be used as the cert's identity.
 1800|       |    */
 1801|  5.75k|    rv = cert_VerifySubjectAltName(cert, hn);
 1802|  5.75k|    if (rv == SECSuccess || PORT_GetError() != SEC_ERROR_EXTENSION_NOT_FOUND)
  ------------------
  |  |   62|  5.75k|#define PORT_GetError PORT_GetError_Util
  ------------------
  |  Branch (1802:9): [True: 0, False: 5.75k]
  |  Branch (1802:29): [True: 128, False: 5.62k]
  ------------------
 1803|    128|        return rv;
 1804|       |
 1805|  5.62k|    cn = CERT_GetCommonName(&cert->subject);
 1806|  5.62k|    if (cn) {
  ------------------
  |  Branch (1806:9): [True: 4.92k, False: 705]
  ------------------
 1807|  4.92k|        PRBool isIPaddr = cert_IsIPAddr(hn);
 1808|  4.92k|        if (isIPaddr) {
  ------------------
  |  Branch (1808:13): [True: 0, False: 4.92k]
  ------------------
 1809|      0|            if (PORT_Strcasecmp(hn, cn) == 0) {
  ------------------
  |  |  184|      0|#define PORT_Strcasecmp PL_strcasecmp
  ------------------
  |  Branch (1809:17): [True: 0, False: 0]
  ------------------
 1810|      0|                rv = SECSuccess;
 1811|      0|            } else {
 1812|      0|                PORT_SetError(SSL_ERROR_BAD_CERT_DOMAIN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1813|      0|                rv = SECFailure;
 1814|      0|            }
 1815|  4.92k|        } else {
 1816|  4.92k|            rv = cert_TestHostName(cn, hn);
 1817|  4.92k|        }
 1818|  4.92k|        PORT_Free(cn);
  ------------------
  |  |   60|  4.92k|#define PORT_Free PORT_Free_Util
  ------------------
 1819|  4.92k|    } else
 1820|    705|        PORT_SetError(SSL_ERROR_BAD_CERT_DOMAIN);
  ------------------
  |  |   65|    705|#define PORT_SetError PORT_SetError_Util
  ------------------
 1821|  5.62k|    return rv;
 1822|  5.75k|}
CERT_IsCACert:
 2113|  5.72k|{
 2114|  5.72k|    unsigned int cType = cert->nsCertType;
 2115|  5.72k|    PRBool ret = PR_FALSE;
  ------------------
  |  |  438|  5.72k|#define PR_FALSE 0
  ------------------
 2116|       |
 2117|       |    /*
 2118|       |     * Check if the constraints are available and it's a CA, OR if it's
 2119|       |     * a X.509 v1 Root CA.
 2120|       |     */
 2121|  5.72k|    CERTBasicConstraints constraints;
 2122|  5.72k|    if ((CERT_FindBasicConstraintExten(cert, &constraints) == SECSuccess &&
  ------------------
  |  Branch (2122:10): [True: 988, False: 4.74k]
  ------------------
 2123|  5.72k|         constraints.isCA) ||
  ------------------
  |  Branch (2123:10): [True: 117, False: 871]
  ------------------
 2124|  5.72k|        (cert->isRoot && cert_Version(cert) < SEC_CERTIFICATE_VERSION_3))
  ------------------
  |  |  300|  4.56k|#define SEC_CERTIFICATE_VERSION_3 2 /* v3 extensions */
  ------------------
  |  Branch (2124:10): [True: 4.56k, False: 1.04k]
  |  Branch (2124:26): [True: 237, False: 4.32k]
  ------------------
 2125|    354|        cType |= (NS_CERT_TYPE_SSL_CA | NS_CERT_TYPE_EMAIL_CA);
  ------------------
  |  |  452|    354|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
                      cType |= (NS_CERT_TYPE_SSL_CA | NS_CERT_TYPE_EMAIL_CA);
  ------------------
  |  |  453|    354|#define NS_CERT_TYPE_EMAIL_CA (0x02)          /* bit 6 */
  ------------------
 2126|       |
 2127|       |    /*
 2128|       |     * Apply trust overrides, if any.
 2129|       |     */
 2130|  5.72k|    cType = cert_ComputeTrustOverrides(cert, cType);
 2131|  5.72k|    ret = (cType & (NS_CERT_TYPE_SSL_CA | NS_CERT_TYPE_EMAIL_CA |
  ------------------
  |  |  452|  5.72k|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
                  ret = (cType & (NS_CERT_TYPE_SSL_CA | NS_CERT_TYPE_EMAIL_CA |
  ------------------
  |  |  453|  5.72k|#define NS_CERT_TYPE_EMAIL_CA (0x02)          /* bit 6 */
  ------------------
  |  Branch (2131:11): [True: 365, False: 5.36k]
  ------------------
 2132|  5.72k|                    NS_CERT_TYPE_OBJECT_SIGNING_CA))
  ------------------
  |  |  454|  5.72k|#define NS_CERT_TYPE_OBJECT_SIGNING_CA (0x01) /* bit 7 */
  ------------------
 2133|  5.72k|              ? PR_TRUE
  ------------------
  |  |  437|    365|#define PR_TRUE 1
  ------------------
 2134|  5.72k|              : PR_FALSE;
  ------------------
  |  |  438|  11.0k|#define PR_FALSE 0
  ------------------
 2135|       |
 2136|  5.72k|    if (rettype) {
  ------------------
  |  Branch (2136:9): [True: 5.72k, False: 0]
  ------------------
 2137|  5.72k|        *rettype = cType;
 2138|  5.72k|    }
 2139|       |
 2140|  5.72k|    return ret;
 2141|  5.72k|}
CERT_LockCertTrust:
 2991|  47.0k|{
 2992|  47.0k|    PORT_Assert(certTrustLock != NULL);
  ------------------
  |  |  120|  47.0k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  47.0k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 47.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2993|  47.0k|    PZ_Lock(certTrustLock);
  ------------------
  |  |  245|  47.0k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 2994|  47.0k|}
CERT_LockCertTempPerm:
 3003|  46.5k|{
 3004|  46.5k|    PORT_Assert(certTempPermCertLock != NULL);
  ------------------
  |  |  120|  46.5k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  46.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 46.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3005|  46.5k|    PZ_Lock(certTempPermCertLock);
  ------------------
  |  |  245|  46.5k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 3006|  46.5k|}
CERT_MaybeLockCertTempPerm:
 3013|  22.4k|{
 3014|  22.4k|    if (certTempPermCertLock) {
  ------------------
  |  Branch (3014:9): [True: 22.4k, False: 0]
  ------------------
 3015|  22.4k|        PZ_Lock(certTempPermCertLock);
  ------------------
  |  |  245|  22.4k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 3016|  22.4k|    }
 3017|  22.4k|}
cert_InitLocks:
 3021|      1|{
 3022|      1|    if (certRefCountLock == NULL) {
  ------------------
  |  Branch (3022:9): [True: 1, False: 0]
  ------------------
 3023|      1|        certRefCountLock = PZ_NewLock(nssILockRefLock);
  ------------------
  |  |  243|      1|#define PZ_NewLock(t) PR_NewLock()
  ------------------
 3024|      1|        PORT_Assert(certRefCountLock != NULL);
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3025|      1|        if (!certRefCountLock) {
  ------------------
  |  Branch (3025:13): [True: 0, False: 1]
  ------------------
 3026|      0|            return SECFailure;
 3027|      0|        }
 3028|      1|    }
 3029|       |
 3030|      1|    if (certTrustLock == NULL) {
  ------------------
  |  Branch (3030:9): [True: 1, False: 0]
  ------------------
 3031|      1|        certTrustLock = PZ_NewLock(nssILockCertDB);
  ------------------
  |  |  243|      1|#define PZ_NewLock(t) PR_NewLock()
  ------------------
 3032|      1|        PORT_Assert(certTrustLock != NULL);
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3033|      1|        if (!certTrustLock) {
  ------------------
  |  Branch (3033:13): [True: 0, False: 1]
  ------------------
 3034|      0|            PZ_DestroyLock(certRefCountLock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
 3035|      0|            certRefCountLock = NULL;
 3036|      0|            return SECFailure;
 3037|      0|        }
 3038|      1|    }
 3039|       |
 3040|      1|    if (certTempPermCertLock == NULL) {
  ------------------
  |  Branch (3040:9): [True: 1, False: 0]
  ------------------
 3041|      1|        certTempPermCertLock = PZ_NewLock(nssILockCertDB);
  ------------------
  |  |  243|      1|#define PZ_NewLock(t) PR_NewLock()
  ------------------
 3042|      1|        PORT_Assert(certTempPermCertLock != NULL);
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3043|      1|        if (!certTempPermCertLock) {
  ------------------
  |  Branch (3043:13): [True: 0, False: 1]
  ------------------
 3044|      0|            PZ_DestroyLock(certTrustLock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
 3045|      0|            PZ_DestroyLock(certRefCountLock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
 3046|      0|            certRefCountLock = NULL;
 3047|      0|            certTrustLock = NULL;
 3048|      0|            return SECFailure;
 3049|      0|        }
 3050|      1|    }
 3051|       |
 3052|      1|    return SECSuccess;
 3053|      1|}
cert_DestroyLocks:
 3057|      1|{
 3058|      1|    SECStatus rv = SECSuccess;
 3059|       |
 3060|      1|    PORT_Assert(certRefCountLock != NULL);
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3061|      1|    if (certRefCountLock) {
  ------------------
  |  Branch (3061:9): [True: 1, False: 0]
  ------------------
 3062|      1|        PZ_DestroyLock(certRefCountLock);
  ------------------
  |  |  244|      1|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
 3063|      1|        certRefCountLock = NULL;
 3064|      1|    } else {
 3065|      0|        rv = SECFailure;
 3066|      0|    }
 3067|       |
 3068|      1|    PORT_Assert(certTrustLock != NULL);
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3069|      1|    if (certTrustLock) {
  ------------------
  |  Branch (3069:9): [True: 1, False: 0]
  ------------------
 3070|      1|        PZ_DestroyLock(certTrustLock);
  ------------------
  |  |  244|      1|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
 3071|      1|        certTrustLock = NULL;
 3072|      1|    } else {
 3073|      0|        rv = SECFailure;
 3074|      0|    }
 3075|       |
 3076|      1|    PORT_Assert(certTempPermCertLock != NULL);
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3077|      1|    if (certTempPermCertLock) {
  ------------------
  |  Branch (3077:9): [True: 1, False: 0]
  ------------------
 3078|      1|        PZ_DestroyLock(certTempPermCertLock);
  ------------------
  |  |  244|      1|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
 3079|      1|        certTempPermCertLock = NULL;
 3080|      1|    } else {
 3081|      0|        rv = SECFailure;
 3082|      0|    }
 3083|      1|    return rv;
 3084|      1|}
CERT_UnlockCertTrust:
 3091|  47.0k|{
 3092|  47.0k|    PORT_Assert(certTrustLock != NULL);
  ------------------
  |  |  120|  47.0k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  47.0k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 47.0k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3093|  47.0k|    PRStatus prstat = PZ_Unlock(certTrustLock);
  ------------------
  |  |  246|  47.0k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 3094|  47.0k|    PORT_AssertArg(prstat == PR_SUCCESS);
  ------------------
  |  |  124|  47.0k|#define PORT_AssertArg PR_ASSERT_ARG
  |  |  ------------------
  |  |  |  |  210|  47.0k|#define PR_ASSERT_ARG(_expr) PR_ASSERT(_expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|  47.0k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:6): [True: 47.0k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3095|  47.0k|}
CERT_UnlockCertTempPerm:
 3102|  46.5k|{
 3103|  46.5k|    PORT_Assert(certTempPermCertLock != NULL);
  ------------------
  |  |  120|  46.5k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  46.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 46.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3104|  46.5k|    PRStatus prstat = PZ_Unlock(certTempPermCertLock);
  ------------------
  |  |  246|  46.5k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 3105|  46.5k|    PORT_AssertArg(prstat == PR_SUCCESS);
  ------------------
  |  |  124|  46.5k|#define PORT_AssertArg PR_ASSERT_ARG
  |  |  ------------------
  |  |  |  |  210|  46.5k|#define PR_ASSERT_ARG(_expr) PR_ASSERT(_expr)
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|  46.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:6): [True: 46.5k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3106|  46.5k|}
CERT_MaybeUnlockCertTempPerm:
 3110|  22.4k|{
 3111|  22.4k|    if (certTempPermCertLock) {
  ------------------
  |  Branch (3111:9): [True: 22.4k, False: 0]
  ------------------
 3112|  22.4k|        PZ_Unlock(certTempPermCertLock);
  ------------------
  |  |  246|  22.4k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 3113|  22.4k|    }
 3114|  22.4k|}
cert_CreateSubjectKeyIDSlotCheckHash:
 3178|      1|{
 3179|       |    /*
 3180|       |     * This hash is used to remember the series of a slot
 3181|       |     * when we last checked for user certs
 3182|       |     */
 3183|      1|    gSubjKeyIDSlotCheckHash =
 3184|      1|        PL_NewHashTable(0, SECITEM_Hash, SECITEM_HashCompare,
 3185|      1|                        SECITEM_HashCompare, &cert_AllocOps, NULL);
 3186|      1|    if (!gSubjKeyIDSlotCheckHash) {
  ------------------
  |  Branch (3186:9): [True: 0, False: 1]
  ------------------
 3187|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 3188|      0|        return SECFailure;
 3189|      0|    }
 3190|      1|    gSubjKeyIDSlotCheckLock = PR_NewLock();
 3191|      1|    if (!gSubjKeyIDSlotCheckLock) {
  ------------------
  |  Branch (3191:9): [True: 0, False: 1]
  ------------------
 3192|      0|        PL_HashTableDestroy(gSubjKeyIDSlotCheckHash);
 3193|      0|        gSubjKeyIDSlotCheckHash = NULL;
 3194|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 3195|      0|        return SECFailure;
 3196|      0|    }
 3197|      1|    return SECSuccess;
 3198|      1|}
cert_CreateSubjectKeyIDHashTable:
 3202|      1|{
 3203|      1|    gSubjKeyIDHash = PL_NewHashTable(0, SECITEM_Hash, SECITEM_HashCompare,
 3204|      1|                                     SECITEM_HashCompare, &cert_AllocOps, NULL);
 3205|      1|    if (!gSubjKeyIDHash) {
  ------------------
  |  Branch (3205:9): [True: 0, False: 1]
  ------------------
 3206|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 3207|      0|        return SECFailure;
 3208|      0|    }
 3209|      1|    gSubjKeyIDLock = PR_NewLock();
 3210|      1|    if (!gSubjKeyIDLock) {
  ------------------
  |  Branch (3210:9): [True: 0, False: 1]
  ------------------
 3211|      0|        PL_HashTableDestroy(gSubjKeyIDHash);
 3212|      0|        gSubjKeyIDHash = NULL;
 3213|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 3214|      0|        return SECFailure;
 3215|      0|    }
 3216|       |    /* initialize the companion hash (for remembering slot series) */
 3217|      1|    if (cert_CreateSubjectKeyIDSlotCheckHash() != SECSuccess) {
  ------------------
  |  Branch (3217:9): [True: 0, False: 1]
  ------------------
 3218|      0|        cert_DestroySubjectKeyIDHashTable();
 3219|      0|        return SECFailure;
 3220|      0|    }
 3221|      1|    return SECSuccess;
 3222|      1|}
cert_DestroySubjectKeyIDSlotCheckHash:
 3355|      1|{
 3356|      1|    if (gSubjKeyIDSlotCheckHash) {
  ------------------
  |  Branch (3356:9): [True: 1, False: 0]
  ------------------
 3357|      1|        PR_Lock(gSubjKeyIDSlotCheckLock);
 3358|      1|        PL_HashTableDestroy(gSubjKeyIDSlotCheckHash);
 3359|      1|        gSubjKeyIDSlotCheckHash = NULL;
 3360|      1|        PR_Unlock(gSubjKeyIDSlotCheckLock);
 3361|      1|        PR_DestroyLock(gSubjKeyIDSlotCheckLock);
 3362|      1|        gSubjKeyIDSlotCheckLock = NULL;
 3363|      1|    }
 3364|      1|    return SECSuccess;
 3365|      1|}
cert_DestroySubjectKeyIDHashTable:
 3369|      1|{
 3370|      1|    if (gSubjKeyIDHash) {
  ------------------
  |  Branch (3370:9): [True: 1, False: 0]
  ------------------
 3371|      1|        PR_Lock(gSubjKeyIDLock);
 3372|      1|        PL_HashTableDestroy(gSubjKeyIDHash);
 3373|      1|        gSubjKeyIDHash = NULL;
 3374|      1|        PR_Unlock(gSubjKeyIDLock);
 3375|      1|        PR_DestroyLock(gSubjKeyIDLock);
 3376|      1|        gSubjKeyIDLock = NULL;
 3377|      1|    }
 3378|      1|    cert_DestroySubjectKeyIDSlotCheckHash();
 3379|      1|    return SECSuccess;
 3380|      1|}
certdb.c:findOIDinOIDSeqByTagNum:
  410|  2.66k|{
  411|  2.66k|    SECItem **oids;
  412|  2.66k|    SECItem *oid;
  413|  2.66k|    SECStatus rv = SECFailure;
  414|       |
  415|  2.66k|    if (seq != NULL) {
  ------------------
  |  Branch (415:9): [True: 1.84k, False: 812]
  ------------------
  416|  1.84k|        oids = seq->oids;
  417|  9.44k|        while (oids != NULL && *oids != NULL) {
  ------------------
  |  Branch (417:16): [True: 9.44k, False: 0]
  |  Branch (417:32): [True: 7.79k, False: 1.65k]
  ------------------
  418|  7.79k|            oid = *oids;
  419|  7.79k|            if (SECOID_FindOIDTag(oid) == tagnum) {
  ------------------
  |  |  117|  7.79k|#define SECOID_FindOIDTag SECOID_FindOIDTag_Util
  ------------------
  |  Branch (419:17): [True: 198, False: 7.59k]
  ------------------
  420|    198|                rv = SECSuccess;
  421|    198|                break;
  422|    198|            }
  423|  7.59k|            oids++;
  424|  7.59k|        }
  425|  1.84k|    }
  426|  2.66k|    return rv;
  427|  2.66k|}
certdb.c:GetKeyUsage:
  380|  5.75k|{
  381|  5.75k|    SECStatus rv;
  382|  5.75k|    SECItem tmpitem;
  383|       |
  384|  5.75k|    rv = CERT_FindKeyUsageExtension(cert, &tmpitem);
  385|  5.75k|    if (rv == SECSuccess) {
  ------------------
  |  Branch (385:9): [True: 958, False: 4.79k]
  ------------------
  386|       |        /* remember the actual value of the extension */
  387|    958|        cert->rawKeyUsage = tmpitem.len ? tmpitem.data[0] : 0;
  ------------------
  |  Branch (387:29): [True: 958, False: 0]
  ------------------
  388|    958|        cert->keyUsagePresent = PR_TRUE;
  ------------------
  |  |  437|    958|#define PR_TRUE 1
  ------------------
  389|    958|        cert->keyUsage = cert->rawKeyUsage;
  390|       |
  391|    958|        PORT_Free(tmpitem.data);
  ------------------
  |  |   60|    958|#define PORT_Free PORT_Free_Util
  ------------------
  392|    958|        tmpitem.data = NULL;
  393|  4.79k|    } else {
  394|       |        /* if the extension is not present, then we allow all uses */
  395|  4.79k|        cert->keyUsage = KU_ALL;
  ------------------
  |  |  571|  4.79k|    (KU_DIGITAL_SIGNATURE | KU_NON_REPUDIATION | KU_KEY_ENCIPHERMENT | \
  |  |  ------------------
  |  |  |  |  562|  4.79k|#define KU_DIGITAL_SIGNATURE (0x80) /* bit 0 */
  |  |  ------------------
  |  |                   (KU_DIGITAL_SIGNATURE | KU_NON_REPUDIATION | KU_KEY_ENCIPHERMENT | \
  |  |  ------------------
  |  |  |  |  563|  4.79k|#define KU_NON_REPUDIATION (0x40)   /* bit 1 */
  |  |  ------------------
  |  |                   (KU_DIGITAL_SIGNATURE | KU_NON_REPUDIATION | KU_KEY_ENCIPHERMENT | \
  |  |  ------------------
  |  |  |  |  564|  4.79k|#define KU_KEY_ENCIPHERMENT (0x20)  /* bit 2 */
  |  |  ------------------
  |  |  572|  4.79k|     KU_DATA_ENCIPHERMENT | KU_KEY_AGREEMENT | KU_KEY_CERT_SIGN |      \
  |  |  ------------------
  |  |  |  |  565|  4.79k|#define KU_DATA_ENCIPHERMENT (0x10) /* bit 3 */
  |  |  ------------------
  |  |                    KU_DATA_ENCIPHERMENT | KU_KEY_AGREEMENT | KU_KEY_CERT_SIGN |      \
  |  |  ------------------
  |  |  |  |  566|  4.79k|#define KU_KEY_AGREEMENT (0x08)     /* bit 4 */
  |  |  ------------------
  |  |                    KU_DATA_ENCIPHERMENT | KU_KEY_AGREEMENT | KU_KEY_CERT_SIGN |      \
  |  |  ------------------
  |  |  |  |  567|  4.79k|#define KU_KEY_CERT_SIGN (0x04)     /* bit 5 */
  |  |  ------------------
  |  |  573|  4.79k|     KU_CRL_SIGN | KU_ENCIPHER_ONLY)
  |  |  ------------------
  |  |  |  |  568|  4.79k|#define KU_CRL_SIGN (0x02)          /* bit 6 */
  |  |  ------------------
  |  |                    KU_CRL_SIGN | KU_ENCIPHER_ONLY)
  |  |  ------------------
  |  |  |  |  569|  4.79k|#define KU_ENCIPHER_ONLY (0x01)     /* bit 7 */
  |  |  ------------------
  ------------------
  396|  4.79k|        cert->rawKeyUsage = KU_ALL;
  ------------------
  |  |  571|  4.79k|    (KU_DIGITAL_SIGNATURE | KU_NON_REPUDIATION | KU_KEY_ENCIPHERMENT | \
  |  |  ------------------
  |  |  |  |  562|  4.79k|#define KU_DIGITAL_SIGNATURE (0x80) /* bit 0 */
  |  |  ------------------
  |  |                   (KU_DIGITAL_SIGNATURE | KU_NON_REPUDIATION | KU_KEY_ENCIPHERMENT | \
  |  |  ------------------
  |  |  |  |  563|  4.79k|#define KU_NON_REPUDIATION (0x40)   /* bit 1 */
  |  |  ------------------
  |  |                   (KU_DIGITAL_SIGNATURE | KU_NON_REPUDIATION | KU_KEY_ENCIPHERMENT | \
  |  |  ------------------
  |  |  |  |  564|  4.79k|#define KU_KEY_ENCIPHERMENT (0x20)  /* bit 2 */
  |  |  ------------------
  |  |  572|  4.79k|     KU_DATA_ENCIPHERMENT | KU_KEY_AGREEMENT | KU_KEY_CERT_SIGN |      \
  |  |  ------------------
  |  |  |  |  565|  4.79k|#define KU_DATA_ENCIPHERMENT (0x10) /* bit 3 */
  |  |  ------------------
  |  |                    KU_DATA_ENCIPHERMENT | KU_KEY_AGREEMENT | KU_KEY_CERT_SIGN |      \
  |  |  ------------------
  |  |  |  |  566|  4.79k|#define KU_KEY_AGREEMENT (0x08)     /* bit 4 */
  |  |  ------------------
  |  |                    KU_DATA_ENCIPHERMENT | KU_KEY_AGREEMENT | KU_KEY_CERT_SIGN |      \
  |  |  ------------------
  |  |  |  |  567|  4.79k|#define KU_KEY_CERT_SIGN (0x04)     /* bit 5 */
  |  |  ------------------
  |  |  573|  4.79k|     KU_CRL_SIGN | KU_ENCIPHER_ONLY)
  |  |  ------------------
  |  |  |  |  568|  4.79k|#define KU_CRL_SIGN (0x02)          /* bit 6 */
  |  |  ------------------
  |  |                    KU_CRL_SIGN | KU_ENCIPHER_ONLY)
  |  |  ------------------
  |  |  |  |  569|  4.79k|#define KU_ENCIPHER_ONLY (0x01)     /* bit 7 */
  |  |  ------------------
  ------------------
  397|  4.79k|        cert->keyUsagePresent = PR_FALSE;
  ------------------
  |  |  438|  4.79k|#define PR_FALSE 0
  ------------------
  398|  4.79k|    }
  399|       |
  400|  5.75k|    if (CERT_GovtApprovedBitSet(cert)) {
  ------------------
  |  Branch (400:9): [True: 21, False: 5.73k]
  ------------------
  401|     21|        cert->keyUsage |= KU_NS_GOVT_APPROVED;
  ------------------
  |  |  589|     21|#define KU_NS_GOVT_APPROVED (0x8000) /*don't make part of KU_ALL!*/
  ------------------
  402|     21|        cert->rawKeyUsage |= KU_NS_GOVT_APPROVED;
  ------------------
  |  |  589|     21|#define KU_NS_GOVT_APPROVED (0x8000) /*don't make part of KU_ALL!*/
  ------------------
  403|     21|    }
  404|       |
  405|  5.75k|    return (SECSuccess);
  406|  5.75k|}
certdb.c:cert_IsRootCert:
  659|  5.75k|{
  660|  5.75k|    SECStatus rv;
  661|  5.75k|    SECItem tmpitem;
  662|       |
  663|       |    /* cache the authKeyID extension, if present */
  664|  5.75k|    cert->authKeyID = CERT_FindAuthKeyIDExten(cert->arena, cert);
  665|       |
  666|       |    /* it MUST be self-issued to be a root */
  667|  5.75k|    if (cert->derIssuer.len == 0 ||
  ------------------
  |  Branch (667:9): [True: 0, False: 5.75k]
  ------------------
  668|  5.75k|        !SECITEM_ItemsAreEqual(&cert->derIssuer, &cert->derSubject)) {
  ------------------
  |  |  109|  5.75k|#define SECITEM_ItemsAreEqual SECITEM_ItemsAreEqual_Util
  ------------------
  |  Branch (668:9): [True: 1.06k, False: 4.68k]
  ------------------
  669|  1.06k|        return PR_FALSE;
  ------------------
  |  |  438|  1.06k|#define PR_FALSE 0
  ------------------
  670|  1.06k|    }
  671|       |
  672|       |    /* check the authKeyID extension */
  673|  4.68k|    if (cert->authKeyID) {
  ------------------
  |  Branch (673:9): [True: 375, False: 4.31k]
  ------------------
  674|       |        /* authority key identifier is present */
  675|    375|        if (cert->authKeyID->keyID.len > 0) {
  ------------------
  |  Branch (675:13): [True: 55, False: 320]
  ------------------
  676|       |            /* the keyIdentifier field is set, look for subjectKeyID */
  677|     55|            rv = CERT_FindSubjectKeyIDExtension(cert, &tmpitem);
  678|     55|            if (rv == SECSuccess) {
  ------------------
  |  Branch (678:17): [True: 22, False: 33]
  ------------------
  679|     22|                PRBool match;
  680|       |                /* also present, they MUST match for it to be a root */
  681|     22|                match =
  682|     22|                    SECITEM_ItemsAreEqual(&cert->authKeyID->keyID, &tmpitem);
  ------------------
  |  |  109|     22|#define SECITEM_ItemsAreEqual SECITEM_ItemsAreEqual_Util
  ------------------
  683|     22|                PORT_Free(tmpitem.data);
  ------------------
  |  |   60|     22|#define PORT_Free PORT_Free_Util
  ------------------
  684|     22|                if (!match)
  ------------------
  |  Branch (684:21): [True: 7, False: 15]
  ------------------
  685|      7|                    return PR_FALSE; /* else fall through */
  ------------------
  |  |  438|      7|#define PR_FALSE 0
  ------------------
  686|     33|            } else {
  687|       |                /* the subject key ID is required when AKI is present */
  688|     33|                return PR_FALSE;
  ------------------
  |  |  438|     33|#define PR_FALSE 0
  ------------------
  689|     33|            }
  690|     55|        }
  691|    335|        if (cert->authKeyID->authCertIssuer) {
  ------------------
  |  Branch (691:13): [True: 8, False: 327]
  ------------------
  692|      8|            SECItem *caName;
  693|      8|            caName = (SECItem *)CERT_GetGeneralNameByType(
  694|      8|                cert->authKeyID->authCertIssuer, certDirectoryName, PR_TRUE);
  ------------------
  |  |  437|      8|#define PR_TRUE 1
  ------------------
  695|      8|            if (caName) {
  ------------------
  |  Branch (695:17): [True: 7, False: 1]
  ------------------
  696|      7|                if (!SECITEM_ItemsAreEqual(&cert->derIssuer, caName)) {
  ------------------
  |  |  109|      7|#define SECITEM_ItemsAreEqual SECITEM_ItemsAreEqual_Util
  ------------------
  |  Branch (696:21): [True: 5, False: 2]
  ------------------
  697|      5|                    return PR_FALSE;
  ------------------
  |  |  438|      5|#define PR_FALSE 0
  ------------------
  698|      5|                } /* else fall through */
  699|      7|            }     /* else ??? could not get general name as directory name? */
  700|      8|        }
  701|    330|        if (cert->authKeyID->authCertSerialNumber.len > 0) {
  ------------------
  |  Branch (701:13): [True: 17, False: 313]
  ------------------
  702|     17|            if (!SECITEM_ItemsAreEqual(
  ------------------
  |  |  109|     17|#define SECITEM_ItemsAreEqual SECITEM_ItemsAreEqual_Util
  ------------------
  |  Branch (702:17): [True: 15, False: 2]
  ------------------
  703|     17|                    &cert->serialNumber,
  704|     17|                    &cert->authKeyID->authCertSerialNumber)) {
  705|     15|                return PR_FALSE;
  ------------------
  |  |  438|     15|#define PR_FALSE 0
  ------------------
  706|     15|            } /* else fall through */
  707|     17|        }
  708|       |        /* all of the AKI fields that were present passed the test */
  709|    315|        return PR_TRUE;
  ------------------
  |  |  437|    315|#define PR_TRUE 1
  ------------------
  710|    330|    }
  711|       |    /* else the AKI was not present, so this is a root */
  712|  4.31k|    return PR_TRUE;
  ------------------
  |  |  437|  4.31k|#define PR_TRUE 1
  ------------------
  713|  4.68k|}
certdb.c:cert_TestHostName:
 1373|  8.21k|{
 1374|  8.21k|    static int useShellExp = -1;
 1375|       |
 1376|  8.21k|    if (useShellExp < 0) {
  ------------------
  |  Branch (1376:9): [True: 1, False: 8.21k]
  ------------------
 1377|      1|        useShellExp = (NULL != PR_GetEnvSecure("NSS_USE_SHEXP_IN_CERT_NAME"));
 1378|      1|    }
 1379|  8.21k|    if (useShellExp) {
  ------------------
  |  Branch (1379:9): [True: 0, False: 8.21k]
  ------------------
 1380|       |        /* Backward compatible code, uses Shell Expressions (SHEXP). */
 1381|      0|        int regvalid = PORT_RegExpValid(cn);
 1382|      0|        if (regvalid != NON_SXP) {
  ------------------
  |  |   66|      0|#define NON_SXP -1
  ------------------
  |  Branch (1382:13): [True: 0, False: 0]
  ------------------
 1383|      0|            SECStatus rv;
 1384|       |            /* cn is a regular expression, try to match the shexp */
 1385|      0|            int match = PORT_RegExpCaseSearch(hn, cn);
 1386|       |
 1387|      0|            if (match == 0) {
  ------------------
  |  Branch (1387:17): [True: 0, False: 0]
  ------------------
 1388|      0|                rv = SECSuccess;
 1389|      0|            } else {
 1390|      0|                PORT_SetError(SSL_ERROR_BAD_CERT_DOMAIN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1391|      0|                rv = SECFailure;
 1392|      0|            }
 1393|      0|            return rv;
 1394|      0|        }
 1395|  8.21k|    } else {
 1396|       |        /* New approach conforms to RFC 6125. */
 1397|  8.21k|        char *wildcard = PORT_Strchr(cn, '*');
  ------------------
  |  |  186|  8.21k|#define PORT_Strchr strchr
  ------------------
 1398|  8.21k|        char *firstcndot = PORT_Strchr(cn, '.');
  ------------------
  |  |  186|  8.21k|#define PORT_Strchr strchr
  ------------------
 1399|  8.21k|        char *secondcndot =
 1400|  8.21k|            firstcndot ? PORT_Strchr(firstcndot + 1, '.') : NULL;
  ------------------
  |  |  186|  3.12k|#define PORT_Strchr strchr
  ------------------
  |  Branch (1400:13): [True: 3.12k, False: 5.08k]
  ------------------
 1401|  8.21k|        char *firsthndot = PORT_Strchr(hn, '.');
  ------------------
  |  |  186|  8.21k|#define PORT_Strchr strchr
  ------------------
 1402|       |
 1403|       |        /* For a cn pattern to be considered valid, the wildcard character...
 1404|       |         * - may occur only in a DNS name with at least 3 components, and
 1405|       |         * - may occur only as last character in the first component, and
 1406|       |         * - may be preceded by additional characters, and
 1407|       |         * - must not be preceded by an IDNA ACE prefix (xn--)
 1408|       |         */
 1409|  8.21k|        if (wildcard && secondcndot && secondcndot[1] && firsthndot &&
  ------------------
  |  Branch (1409:13): [True: 982, False: 7.23k]
  |  Branch (1409:25): [True: 830, False: 152]
  |  Branch (1409:40): [True: 820, False: 10]
  |  Branch (1409:58): [True: 820, False: 0]
  ------------------
 1410|  8.21k|            firstcndot - wildcard == 1           /* wildcard is last char in first component */
  ------------------
  |  Branch (1410:13): [True: 731, False: 89]
  ------------------
 1411|  8.21k|            && secondcndot - firstcndot > 1      /* second component is non-empty */
  ------------------
  |  Branch (1411:16): [True: 706, False: 25]
  ------------------
 1412|  8.21k|            && PORT_Strrchr(cn, '*') == wildcard /* only one wildcard in cn */
  ------------------
  |  |  187|    706|#define PORT_Strrchr strrchr
  ------------------
  |  Branch (1412:16): [True: 678, False: 28]
  ------------------
 1413|  8.21k|            && !PORT_Strncasecmp(cn, hn, wildcard - cn) &&
  ------------------
  |  |  191|    678|#define PORT_Strncasecmp PL_strncasecmp
  ------------------
  |  Branch (1413:16): [True: 585, False: 93]
  ------------------
 1414|  8.21k|            !PORT_Strcasecmp(firstcndot, firsthndot)
  ------------------
  |  |  184|    585|#define PORT_Strcasecmp PL_strcasecmp
  ------------------
  |  Branch (1414:13): [True: 0, False: 585]
  ------------------
 1415|       |            /* If hn starts with xn--, then cn must start with wildcard */
 1416|  8.21k|            && (PORT_Strncasecmp(hn, "xn--", 4) || wildcard == cn)) {
  ------------------
  |  |  191|      0|#define PORT_Strncasecmp PL_strncasecmp
  ------------------
  |  Branch (1416:17): [True: 0, False: 0]
  |  Branch (1416:52): [True: 0, False: 0]
  ------------------
 1417|       |            /* valid wildcard pattern match */
 1418|      0|            return SECSuccess;
 1419|      0|        }
 1420|  8.21k|    }
 1421|       |    /* String cn has no wildcard or shell expression.
 1422|       |     * Compare entire string hn with cert name.
 1423|       |     */
 1424|  8.21k|    if (PORT_Strcasecmp(hn, cn) == 0) {
  ------------------
  |  |  184|  8.21k|#define PORT_Strcasecmp PL_strcasecmp
  ------------------
  |  Branch (1424:9): [True: 0, False: 8.21k]
  ------------------
 1425|      0|        return SECSuccess;
 1426|      0|    }
 1427|       |
 1428|  8.21k|    PORT_SetError(SSL_ERROR_BAD_CERT_DOMAIN);
  ------------------
  |  |   65|  8.21k|#define PORT_SetError PORT_SetError_Util
  ------------------
 1429|  8.21k|    return SECFailure;
 1430|  8.21k|}
certdb.c:cert_IsIPAddr:
 1326|  4.92k|{
 1327|  4.92k|    PRBool isIPaddr = PR_FALSE;
  ------------------
  |  |  438|  4.92k|#define PR_FALSE 0
  ------------------
 1328|  4.92k|    PRNetAddr netAddr;
 1329|  4.92k|    isIPaddr = (PR_SUCCESS == PR_StringToNetAddr(hn, &netAddr));
 1330|  4.92k|    return isIPaddr;
 1331|  4.92k|}
certdb.c:cert_Version:
 2055|  4.56k|{
 2056|  4.56k|    int version = 0;
 2057|  4.56k|    if (cert && cert->version.data && cert->version.len) {
  ------------------
  |  Branch (2057:9): [True: 4.56k, False: 0]
  |  Branch (2057:17): [True: 4.56k, False: 3]
  |  Branch (2057:39): [True: 4.56k, False: 0]
  ------------------
 2058|  4.56k|        version = DER_GetInteger(&cert->version);
  ------------------
  |  |   27|  4.56k|#define DER_GetInteger DER_GetInteger_Util
  ------------------
 2059|  4.56k|        if (version < 0)
  ------------------
  |  Branch (2059:13): [True: 211, False: 4.34k]
  ------------------
 2060|    211|            version = 0;
 2061|  4.56k|    }
 2062|  4.56k|    return version;
 2063|  4.56k|}
certdb.c:cert_ComputeTrustOverrides:
 2067|  5.72k|{
 2068|  5.72k|    CERTCertTrust trust;
 2069|  5.72k|    SECStatus rv = SECFailure;
 2070|       |
 2071|  5.72k|    rv = CERT_GetCertTrust(cert, &trust);
 2072|       |
 2073|  5.72k|    if (rv == SECSuccess &&
  ------------------
  |  Branch (2073:9): [True: 0, False: 5.72k]
  ------------------
 2074|  5.72k|        (trust.sslFlags | trust.emailFlags | trust.objectSigningFlags)) {
  ------------------
  |  Branch (2074:9): [True: 0, False: 0]
  ------------------
 2075|       |
 2076|      0|        if (trust.sslFlags & (CERTDB_TERMINAL_RECORD | CERTDB_TRUSTED))
  ------------------
  |  |    9|      0|#define CERTDB_TERMINAL_RECORD (1u << 0)
  ------------------
                      if (trust.sslFlags & (CERTDB_TERMINAL_RECORD | CERTDB_TRUSTED))
  ------------------
  |  |   10|      0|#define CERTDB_TRUSTED (1u << 1)
  ------------------
  |  Branch (2076:13): [True: 0, False: 0]
  ------------------
 2077|      0|            cType |= NS_CERT_TYPE_SSL_SERVER | NS_CERT_TYPE_SSL_CLIENT;
  ------------------
  |  |  448|      0|#define NS_CERT_TYPE_SSL_SERVER (0x40)        /* bit 1 */
  ------------------
                          cType |= NS_CERT_TYPE_SSL_SERVER | NS_CERT_TYPE_SSL_CLIENT;
  ------------------
  |  |  447|      0|#define NS_CERT_TYPE_SSL_CLIENT (0x80)        /* bit 0 */
  ------------------
 2078|      0|        if (trust.sslFlags & (CERTDB_VALID_CA | CERTDB_TRUSTED_CA))
  ------------------
  |  |   12|      0|#define CERTDB_VALID_CA (1u << 3)
  ------------------
                      if (trust.sslFlags & (CERTDB_VALID_CA | CERTDB_TRUSTED_CA))
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  |  Branch (2078:13): [True: 0, False: 0]
  ------------------
 2079|      0|            cType |= NS_CERT_TYPE_SSL_CA;
  ------------------
  |  |  452|      0|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
 2080|       |#if defined(CERTDB_NOT_TRUSTED)
 2081|       |        if (trust.sslFlags & CERTDB_NOT_TRUSTED)
 2082|       |            cType &= ~(NS_CERT_TYPE_SSL_SERVER | NS_CERT_TYPE_SSL_CLIENT |
 2083|       |                       NS_CERT_TYPE_SSL_CA);
 2084|       |#endif
 2085|      0|        if (trust.emailFlags & (CERTDB_TERMINAL_RECORD | CERTDB_TRUSTED))
  ------------------
  |  |    9|      0|#define CERTDB_TERMINAL_RECORD (1u << 0)
  ------------------
                      if (trust.emailFlags & (CERTDB_TERMINAL_RECORD | CERTDB_TRUSTED))
  ------------------
  |  |   10|      0|#define CERTDB_TRUSTED (1u << 1)
  ------------------
  |  Branch (2085:13): [True: 0, False: 0]
  ------------------
 2086|      0|            cType |= NS_CERT_TYPE_EMAIL;
  ------------------
  |  |  449|      0|#define NS_CERT_TYPE_EMAIL (0x20)             /* bit 2 */
  ------------------
 2087|      0|        if (trust.emailFlags & (CERTDB_VALID_CA | CERTDB_TRUSTED_CA))
  ------------------
  |  |   12|      0|#define CERTDB_VALID_CA (1u << 3)
  ------------------
                      if (trust.emailFlags & (CERTDB_VALID_CA | CERTDB_TRUSTED_CA))
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  |  Branch (2087:13): [True: 0, False: 0]
  ------------------
 2088|      0|            cType |= NS_CERT_TYPE_EMAIL_CA;
  ------------------
  |  |  453|      0|#define NS_CERT_TYPE_EMAIL_CA (0x02)          /* bit 6 */
  ------------------
 2089|       |#if defined(CERTDB_NOT_TRUSTED)
 2090|       |        if (trust.emailFlags & CERTDB_NOT_TRUSTED)
 2091|       |            cType &= ~(NS_CERT_TYPE_EMAIL | NS_CERT_TYPE_EMAIL_CA);
 2092|       |#endif
 2093|      0|        if (trust.objectSigningFlags &
  ------------------
  |  Branch (2093:13): [True: 0, False: 0]
  ------------------
 2094|      0|            (CERTDB_TERMINAL_RECORD | CERTDB_TRUSTED))
  ------------------
  |  |    9|      0|#define CERTDB_TERMINAL_RECORD (1u << 0)
  ------------------
                          (CERTDB_TERMINAL_RECORD | CERTDB_TRUSTED))
  ------------------
  |  |   10|      0|#define CERTDB_TRUSTED (1u << 1)
  ------------------
 2095|      0|            cType |= NS_CERT_TYPE_OBJECT_SIGNING;
  ------------------
  |  |  450|      0|#define NS_CERT_TYPE_OBJECT_SIGNING (0x10)    /* bit 3 */
  ------------------
 2096|      0|        if (trust.objectSigningFlags & (CERTDB_VALID_CA | CERTDB_TRUSTED_CA))
  ------------------
  |  |   12|      0|#define CERTDB_VALID_CA (1u << 3)
  ------------------
                      if (trust.objectSigningFlags & (CERTDB_VALID_CA | CERTDB_TRUSTED_CA))
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  |  Branch (2096:13): [True: 0, False: 0]
  ------------------
 2097|      0|            cType |= NS_CERT_TYPE_OBJECT_SIGNING_CA;
  ------------------
  |  |  454|      0|#define NS_CERT_TYPE_OBJECT_SIGNING_CA (0x01) /* bit 7 */
  ------------------
 2098|       |#if defined(CERTDB_NOT_TRUSTED)
 2099|       |        if (trust.objectSigningFlags & CERTDB_NOT_TRUSTED)
 2100|       |            cType &=
 2101|       |                ~(NS_CERT_TYPE_OBJECT_SIGNING | NS_CERT_TYPE_OBJECT_SIGNING_CA);
 2102|       |#endif
 2103|      0|    }
 2104|  5.72k|    return cType;
 2105|  5.72k|}
certdb.c:cert_AllocTable:
 3147|      4|{
 3148|      4|    return PORT_Alloc(size);
  ------------------
  |  |   52|      4|#define PORT_Alloc PORT_Alloc_Util
  ------------------
 3149|      4|}
certdb.c:cert_FreeTable:
 3153|      4|{
 3154|      4|    PORT_Free(item);
  ------------------
  |  |   60|      4|#define PORT_Free PORT_Free_Util
  ------------------
 3155|      4|}

CERT_FindCertExtension:
   25|  29.5k|{
   26|  29.5k|    return (cert_FindExtension(cert->extensions, tag, value));
   27|  29.5k|}
CERT_FindNSCertTypeExtension:
   49|  5.77k|{
   50|       |
   51|  5.77k|    return (CERT_FindBitStringExtension(
   52|  5.77k|        cert->extensions, SEC_OID_NS_CERT_EXT_CERT_TYPE, retItem));
   53|  5.77k|}
CERT_FindKeyUsageExtension:
  112|  5.75k|{
  113|       |
  114|  5.75k|    return (CERT_FindBitStringExtension(cert->extensions,
  115|  5.75k|                                        SEC_OID_X509_KEY_USAGE, retItem));
  116|  5.75k|}
CERT_FindSubjectKeyIDExtension:
  123|  5.95k|{
  124|       |
  125|  5.95k|    SECStatus rv;
  126|  5.95k|    SECItem encodedValue = { siBuffer, NULL, 0 };
  127|  5.95k|    SECItem decodedValue = { siBuffer, NULL, 0 };
  128|       |
  129|  5.95k|    rv = cert_FindExtension(cert->extensions, SEC_OID_X509_SUBJECT_KEY_ID,
  130|  5.95k|                            &encodedValue);
  131|  5.95k|    if (rv == SECSuccess) {
  ------------------
  |  Branch (131:9): [True: 1.09k, False: 4.85k]
  ------------------
  132|  1.09k|        PORTCheapArenaPool tmpArena;
  133|  1.09k|        PORT_InitCheapArena(&tmpArena, DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|  1.09k|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  134|  1.09k|        rv = SEC_QuickDERDecodeItem(&tmpArena.arena, &decodedValue,
  ------------------
  |  |  102|  1.09k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  135|  1.09k|                                    SEC_ASN1_GET(SEC_OctetStringTemplate),
  ------------------
  |  |  188|  1.09k|#define SEC_ASN1_GET(x) x
  ------------------
  136|  1.09k|                                    &encodedValue);
  137|  1.09k|        if (rv == SECSuccess) {
  ------------------
  |  Branch (137:13): [True: 219, False: 880]
  ------------------
  138|    219|            rv = SECITEM_CopyItem(NULL, retItem, &decodedValue);
  ------------------
  |  |  106|    219|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
  139|    219|        }
  140|  1.09k|        PORT_DestroyCheapArena(&tmpArena);
  141|  1.09k|    }
  142|  5.95k|    SECITEM_FreeItem(&encodedValue, PR_FALSE);
  ------------------
  |  |  108|  5.95k|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                  SECITEM_FreeItem(&encodedValue, PR_FALSE);
  ------------------
  |  |  438|  5.95k|#define PR_FALSE 0
  ------------------
  143|  5.95k|    return rv;
  144|  5.95k|}
CERT_FindBasicConstraintExten:
  149|  11.6k|{
  150|  11.6k|    SECItem encodedExtenValue;
  151|  11.6k|    SECStatus rv;
  152|       |
  153|  11.6k|    encodedExtenValue.data = NULL;
  154|  11.6k|    encodedExtenValue.len = 0;
  155|       |
  156|  11.6k|    rv = cert_FindExtension(cert->extensions, SEC_OID_X509_BASIC_CONSTRAINTS,
  157|  11.6k|                            &encodedExtenValue);
  158|  11.6k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (158:9): [True: 6.24k, False: 5.43k]
  ------------------
  159|  6.24k|        return (rv);
  160|  6.24k|    }
  161|       |
  162|  5.43k|    rv = CERT_DecodeBasicConstraintValue(value, &encodedExtenValue);
  163|       |
  164|       |    /* free the raw extension data */
  165|  5.43k|    PORT_Free(encodedExtenValue.data);
  ------------------
  |  |   60|  5.43k|#define PORT_Free PORT_Free_Util
  ------------------
  166|  5.43k|    encodedExtenValue.data = NULL;
  167|       |
  168|  5.43k|    return (rv);
  169|  11.6k|}
CERT_FindAuthKeyIDExten:
  173|  5.75k|{
  174|  5.75k|    SECItem encodedExtenValue;
  175|  5.75k|    SECStatus rv;
  176|  5.75k|    CERTAuthKeyID *ret;
  177|       |
  178|  5.75k|    encodedExtenValue.data = NULL;
  179|  5.75k|    encodedExtenValue.len = 0;
  180|       |
  181|  5.75k|    rv = cert_FindExtension(cert->extensions, SEC_OID_X509_AUTH_KEY_ID,
  182|  5.75k|                            &encodedExtenValue);
  183|  5.75k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (183:9): [True: 5.09k, False: 659]
  ------------------
  184|  5.09k|        return (NULL);
  185|  5.09k|    }
  186|       |
  187|    659|    ret = CERT_DecodeAuthKeyID(arena, &encodedExtenValue);
  188|       |
  189|    659|    PORT_Free(encodedExtenValue.data);
  ------------------
  |  |   60|    659|#define PORT_Free PORT_Free_Util
  ------------------
  190|    659|    encodedExtenValue.data = NULL;
  191|       |
  192|    659|    return (ret);
  193|  5.75k|}

cert_FindExtensionByOID:
   49|  64.4k|{
   50|  64.4k|    CERTCertExtension *ext;
   51|  64.4k|    SECStatus rv = SECSuccess;
   52|       |
   53|  64.4k|    ext = GetExtension(extensions, oid);
   54|  64.4k|    if (ext == NULL) {
  ------------------
  |  Branch (54:9): [True: 52.5k, False: 11.8k]
  ------------------
   55|  52.5k|        PORT_SetError(SEC_ERROR_EXTENSION_NOT_FOUND);
  ------------------
  |  |   65|  52.5k|#define PORT_SetError PORT_SetError_Util
  ------------------
   56|  52.5k|        return (SECFailure);
   57|  52.5k|    }
   58|  11.8k|    if (value)
  ------------------
  |  Branch (58:9): [True: 11.8k, False: 0]
  ------------------
   59|  11.8k|        rv = SECITEM_CopyItem(NULL, value, &ext->value);
  ------------------
  |  |  106|  11.8k|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
   60|  11.8k|    return (rv);
   61|  64.4k|}
cert_FindExtension:
   95|  64.4k|{
   96|  64.4k|    SECOidData *oid;
   97|       |
   98|  64.4k|    oid = SECOID_FindOIDByTag((SECOidTag)tag);
  ------------------
  |  |  116|  64.4k|#define SECOID_FindOIDByTag SECOID_FindOIDByTag_Util
  ------------------
   99|  64.4k|    if (!oid) {
  ------------------
  |  Branch (99:9): [True: 0, False: 64.4k]
  ------------------
  100|      0|        return (SECFailure);
  101|      0|    }
  102|       |
  103|  64.4k|    return (cert_FindExtensionByOID(extensions, &oid->oid, value));
  104|  64.4k|}
CERT_FindBitStringExtension:
  397|  11.5k|{
  398|  11.5k|    SECItem wrapperItem, tmpItem = { siBuffer, 0 };
  399|  11.5k|    SECStatus rv;
  400|  11.5k|    PORTCheapArenaPool tmpArena;
  401|       |
  402|  11.5k|    wrapperItem.data = NULL;
  403|  11.5k|    tmpItem.data = NULL;
  404|       |
  405|  11.5k|    PORT_InitCheapArena(&tmpArena, DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|  11.5k|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  406|       |
  407|  11.5k|    rv = cert_FindExtension(extensions, tag, &wrapperItem);
  408|  11.5k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (408:9): [True: 10.1k, False: 1.36k]
  ------------------
  409|  10.1k|        goto loser;
  410|  10.1k|    }
  411|       |
  412|  1.36k|    rv = SEC_QuickDERDecodeItem(&tmpArena.arena, &tmpItem,
  ------------------
  |  |  102|  1.36k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  413|  1.36k|                                SEC_ASN1_GET(SEC_BitStringTemplate),
  ------------------
  |  |  188|  1.36k|#define SEC_ASN1_GET(x) x
  ------------------
  414|  1.36k|                                &wrapperItem);
  415|       |
  416|  1.36k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (416:9): [True: 334, False: 1.02k]
  ------------------
  417|    334|        goto loser;
  418|    334|    }
  419|       |
  420|  1.02k|    retItem->data = (unsigned char *)PORT_ZAlloc((tmpItem.len + 7) >> 3);
  ------------------
  |  |   72|  1.02k|#define PORT_ZAlloc PORT_ZAlloc_Util
  ------------------
  421|  1.02k|    if (retItem->data == NULL) {
  ------------------
  |  Branch (421:9): [True: 0, False: 1.02k]
  ------------------
  422|      0|        goto loser;
  423|      0|    }
  424|       |
  425|  1.02k|    if (tmpItem.len > 0) {
  ------------------
  |  Branch (425:9): [True: 1.02k, False: 0]
  ------------------
  426|  1.02k|        PORT_Memcpy(retItem->data, tmpItem.data, (tmpItem.len + 7) >> 3);
  ------------------
  |  |  180|  1.02k|#define PORT_Memcpy memcpy
  ------------------
  427|  1.02k|    }
  428|       |
  429|  1.02k|    retItem->len = tmpItem.len;
  430|       |
  431|  1.02k|    rv = SECSuccess;
  432|  1.02k|    goto done;
  433|       |
  434|  10.5k|loser:
  435|  10.5k|    rv = SECFailure;
  436|       |
  437|  11.5k|done:
  438|  11.5k|    PORT_DestroyCheapArena(&tmpArena);
  439|       |
  440|  11.5k|    if (wrapperItem.data) {
  ------------------
  |  Branch (440:9): [True: 1.35k, False: 10.1k]
  ------------------
  441|  1.35k|        PORT_Free(wrapperItem.data);
  ------------------
  |  |   60|  1.35k|#define PORT_Free PORT_Free_Util
  ------------------
  442|  1.35k|    }
  443|       |
  444|  11.5k|    return (rv);
  445|  10.5k|}
cert_HasUnknownCriticalExten:
  472|  5.75k|{
  473|  5.75k|    CERTCertExtension **exts;
  474|  5.75k|    CERTCertExtension *ext = NULL;
  475|  5.75k|    PRBool hasUnknownCriticalExten = PR_FALSE;
  ------------------
  |  |  438|  5.75k|#define PR_FALSE 0
  ------------------
  476|       |
  477|  5.75k|    exts = extensions;
  478|       |
  479|  5.75k|    if (exts) {
  ------------------
  |  Branch (479:9): [True: 5.50k, False: 247]
  ------------------
  480|  16.3k|        while (*exts) {
  ------------------
  |  Branch (480:16): [True: 10.8k, False: 5.44k]
  ------------------
  481|  10.8k|            ext = *exts;
  482|       |            /* If the criticality is omitted, it's non-critical.
  483|       |               If an extension is critical, make sure that we know
  484|       |               how to process the extension.
  485|       |             */
  486|  10.8k|            if (ext->critical.data && ext->critical.data[0] == 0xff) {
  ------------------
  |  Branch (486:17): [True: 529, False: 10.3k]
  |  Branch (486:39): [True: 221, False: 308]
  ------------------
  487|    221|                if (SECOID_KnownCertExtenOID(&ext->id) == PR_FALSE) {
  ------------------
  |  |  438|    221|#define PR_FALSE 0
  ------------------
  |  Branch (487:21): [True: 64, False: 157]
  ------------------
  488|     64|                    hasUnknownCriticalExten = PR_TRUE;
  ------------------
  |  |  437|     64|#define PR_TRUE 1
  ------------------
  489|     64|                    break;
  490|     64|                }
  491|    221|            }
  492|  10.8k|            exts++;
  493|  10.8k|        }
  494|  5.50k|    }
  495|  5.75k|    return (hasUnknownCriticalExten);
  496|  5.75k|}
certxutl.c:GetExtension:
   25|  64.4k|{
   26|  64.4k|    CERTCertExtension **exts;
   27|  64.4k|    CERTCertExtension *ext = NULL;
   28|  64.4k|    SECComparison comp;
   29|       |
   30|  64.4k|    exts = extensions;
   31|       |
   32|  64.4k|    if (exts) {
  ------------------
  |  Branch (32:9): [True: 61.8k, False: 2.62k]
  ------------------
   33|   159k|        while (*exts) {
  ------------------
  |  Branch (33:16): [True: 109k, False: 49.9k]
  ------------------
   34|   109k|            ext = *exts;
   35|   109k|            comp = SECITEM_CompareItem(oid, &ext->id);
  ------------------
  |  |  105|   109k|#define SECITEM_CompareItem SECITEM_CompareItem_Util
  ------------------
   36|   109k|            if (comp == SECEqual)
  ------------------
  |  Branch (36:17): [True: 11.8k, False: 97.8k]
  ------------------
   37|  11.8k|                break;
   38|       |
   39|  97.8k|            exts++;
   40|  97.8k|        }
   41|  61.8k|        return (*exts ? ext : NULL);
  ------------------
  |  Branch (41:17): [True: 11.8k, False: 49.9k]
  ------------------
   42|  61.8k|    }
   43|  2.62k|    return (NULL);
   44|  64.4k|}

InitCRLCache:
  962|      1|{
  963|      1|    if (PR_FALSE == crlcache_initialized) {
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  |  Branch (963:9): [True: 1, False: 0]
  ------------------
  964|      1|        PORT_Assert(NULL == crlcache.lock);
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  965|      1|        PORT_Assert(NULL == crlcache.issuers);
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  966|      1|        PORT_Assert(NULL == namedCRLCache.lock);
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  967|      1|        PORT_Assert(NULL == namedCRLCache.entries);
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  968|      1|        if (crlcache.lock || crlcache.issuers || namedCRLCache.lock ||
  ------------------
  |  Branch (968:13): [True: 0, False: 1]
  |  Branch (968:30): [True: 0, False: 1]
  |  Branch (968:50): [True: 0, False: 1]
  ------------------
  969|      1|            namedCRLCache.entries) {
  ------------------
  |  Branch (969:13): [True: 0, False: 1]
  ------------------
  970|       |            /* CRL cache already partially initialized */
  971|      0|            PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  972|      0|            return SECFailure;
  973|      0|        }
  974|       |#ifdef GLOBAL_RWLOCK
  975|       |        crlcache.lock = NSSRWLock_New(NSS_RWLOCK_RANK_NONE, NULL);
  976|       |#else
  977|      1|        crlcache.lock = PR_NewLock();
  978|      1|#endif
  979|      1|        namedCRLCache.lock = PR_NewLock();
  980|      1|        crlcache.issuers = PL_NewHashTable(0, SECITEM_Hash, SECITEM_HashCompare,
  981|      1|                                           PL_CompareValues, NULL, NULL);
  982|      1|        namedCRLCache.entries = PL_NewHashTable(
  983|      1|            0, SECITEM_Hash, SECITEM_HashCompare, PL_CompareValues, NULL, NULL);
  984|      1|        if (!crlcache.lock || !namedCRLCache.lock || !crlcache.issuers ||
  ------------------
  |  Branch (984:13): [True: 0, False: 1]
  |  Branch (984:31): [True: 0, False: 1]
  |  Branch (984:54): [True: 0, False: 1]
  ------------------
  985|      1|            !namedCRLCache.entries) {
  ------------------
  |  Branch (985:13): [True: 0, False: 1]
  ------------------
  986|      0|            if (crlcache.lock) {
  ------------------
  |  Branch (986:17): [True: 0, False: 0]
  ------------------
  987|       |#ifdef GLOBAL_RWLOCK
  988|       |                NSSRWLock_Destroy(crlcache.lock);
  989|       |#else
  990|      0|                PR_DestroyLock(crlcache.lock);
  991|      0|#endif
  992|      0|                crlcache.lock = NULL;
  993|      0|            }
  994|      0|            if (namedCRLCache.lock) {
  ------------------
  |  Branch (994:17): [True: 0, False: 0]
  ------------------
  995|      0|                PR_DestroyLock(namedCRLCache.lock);
  996|      0|                namedCRLCache.lock = NULL;
  997|      0|            }
  998|      0|            if (crlcache.issuers) {
  ------------------
  |  Branch (998:17): [True: 0, False: 0]
  ------------------
  999|      0|                PL_HashTableDestroy(crlcache.issuers);
 1000|      0|                crlcache.issuers = NULL;
 1001|      0|            }
 1002|      0|            if (namedCRLCache.entries) {
  ------------------
  |  Branch (1002:17): [True: 0, False: 0]
  ------------------
 1003|      0|                PL_HashTableDestroy(namedCRLCache.entries);
 1004|      0|                namedCRLCache.entries = NULL;
 1005|      0|            }
 1006|       |
 1007|      0|            return SECFailure;
 1008|      0|        }
 1009|      1|        crlcache_initialized = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
 1010|      1|        return SECSuccess;
 1011|      1|    } else {
 1012|      0|        PORT_Assert(crlcache.lock);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1013|      0|        PORT_Assert(crlcache.issuers);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1014|      0|        if ((NULL == crlcache.lock) || (NULL == crlcache.issuers)) {
  ------------------
  |  Branch (1014:13): [True: 0, False: 0]
  |  Branch (1014:40): [True: 0, False: 0]
  ------------------
 1015|       |            /* CRL cache not fully initialized */
 1016|      0|            return SECFailure;
 1017|      0|        } else {
 1018|       |            /* CRL cache already initialized */
 1019|      0|            return SECSuccess;
 1020|      0|        }
 1021|      0|    }
 1022|      1|}
IssuerCache_Destroy:
 1075|      9|{
 1076|      9|    PORT_Assert(cache);
  ------------------
  |  |  120|      9|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1077|      9|    if (!cache) {
  ------------------
  |  Branch (1077:9): [True: 0, False: 9]
  ------------------
 1078|      0|        PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1079|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1080|      0|        return SECFailure;
 1081|      0|    }
 1082|       |#ifdef XCRL
 1083|       |    if (cache->lock) {
 1084|       |        NSSRWLock_Destroy(cache->lock);
 1085|       |    } else {
 1086|       |        PORT_Assert(0);
 1087|       |        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
 1088|       |        return SECFailure;
 1089|       |    }
 1090|       |    if (cache->issuer) {
 1091|       |        CERT_DestroyCertificate(cache->issuer);
 1092|       |    }
 1093|       |#endif
 1094|       |    /* free the subject */
 1095|      9|    if (cache->subject) {
  ------------------
  |  Branch (1095:9): [True: 9, False: 0]
  ------------------
 1096|      9|        SECITEM_FreeItem(cache->subject, PR_TRUE);
  ------------------
  |  |  108|      9|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(cache->subject, PR_TRUE);
  ------------------
  |  |  437|      9|#define PR_TRUE 1
  ------------------
 1097|      9|    }
 1098|      9|    if (SECSuccess != DPCache_Destroy(cache->dpp)) {
  ------------------
  |  Branch (1098:9): [True: 0, False: 9]
  ------------------
 1099|      0|        PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1100|      0|        return SECFailure;
 1101|      0|    }
 1102|      9|    PORT_Free(cache);
  ------------------
  |  |   60|      9|#define PORT_Free PORT_Free_Util
  ------------------
 1103|      9|    return SECSuccess;
 1104|      9|}
ShutdownCRLCache:
 1202|      1|{
 1203|      1|    SECStatus rv = SECSuccess;
 1204|      1|    if (PR_FALSE == crlcache_initialized && !crlcache.lock &&
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  |  Branch (1204:9): [True: 0, False: 1]
  |  Branch (1204:45): [True: 0, False: 0]
  ------------------
 1205|      1|        !crlcache.issuers) {
  ------------------
  |  Branch (1205:9): [True: 0, False: 0]
  ------------------
 1206|       |        /* CRL cache has already been shut down */
 1207|      0|        return SECSuccess;
 1208|      0|    }
 1209|      1|    if (PR_TRUE == crlcache_initialized &&
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  |  Branch (1209:9): [True: 1, False: 0]
  ------------------
 1210|      1|        (!crlcache.lock || !crlcache.issuers || !namedCRLCache.lock ||
  ------------------
  |  Branch (1210:10): [True: 0, False: 1]
  |  Branch (1210:28): [True: 0, False: 1]
  |  Branch (1210:49): [True: 0, False: 1]
  ------------------
 1211|      1|         !namedCRLCache.entries)) {
  ------------------
  |  Branch (1211:10): [True: 0, False: 1]
  ------------------
 1212|       |        /* CRL cache has partially been shut down */
 1213|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1214|      0|        return SECFailure;
 1215|      0|    }
 1216|       |    /* empty the CRL cache */
 1217|       |    /* free the issuers */
 1218|      1|    PL_HashTableEnumerateEntries(crlcache.issuers, &FreeIssuer, &rv);
 1219|       |    /* free the hash table of issuers */
 1220|      1|    PL_HashTableDestroy(crlcache.issuers);
 1221|      1|    crlcache.issuers = NULL;
 1222|       |/* free the global lock */
 1223|       |#ifdef GLOBAL_RWLOCK
 1224|       |    NSSRWLock_Destroy(crlcache.lock);
 1225|       |#else
 1226|      1|    PR_DestroyLock(crlcache.lock);
 1227|      1|#endif
 1228|      1|    crlcache.lock = NULL;
 1229|       |
 1230|       |    /* empty the named CRL cache. This must be done after freeing the CRL
 1231|       |     * cache, since some CRLs in this cache are in the memory for the other  */
 1232|       |    /* free the entries */
 1233|      1|    PL_HashTableEnumerateEntries(namedCRLCache.entries, &FreeNamedEntries, &rv);
 1234|       |    /* free the hash table of issuers */
 1235|      1|    PL_HashTableDestroy(namedCRLCache.entries);
 1236|      1|    namedCRLCache.entries = NULL;
 1237|       |    /* free the global lock */
 1238|      1|    PR_DestroyLock(namedCRLCache.lock);
 1239|      1|    namedCRLCache.lock = NULL;
 1240|       |
 1241|      1|    crlcache_initialized = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
 1242|      1|    return rv;
 1243|      1|}
DPCache_Lookup:
 1590|     81|{
 1591|     81|    SECStatus rv;
 1592|     81|    if (!cache || !sn || !returned) {
  ------------------
  |  Branch (1592:9): [True: 0, False: 81]
  |  Branch (1592:19): [True: 0, False: 81]
  |  Branch (1592:26): [True: 0, False: 81]
  ------------------
 1593|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1594|       |        /* no cache or SN to look up, or no way to return entry */
 1595|      0|        return dpcacheCallerError;
 1596|      0|    }
 1597|     81|    *returned = NULL;
 1598|     81|    if (0 != cache->invalid) {
  ------------------
  |  Branch (1598:9): [True: 0, False: 81]
  ------------------
 1599|       |        /* the cache contains a bad CRL, or there was a CRL fetching error. */
 1600|      0|        PORT_SetError(SEC_ERROR_CRL_INVALID);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1601|      0|        return dpcacheInvalidCacheError;
 1602|      0|    }
 1603|     81|    if (!cache->selected) {
  ------------------
  |  Branch (1603:9): [True: 81, False: 0]
  ------------------
 1604|       |        /* no CRL means no entry to return. This is OK, except for
 1605|       |         * NIST policy */
 1606|     81|        return dpcacheEmpty;
 1607|     81|    }
 1608|      0|    rv = CachedCrl_GetEntry(cache->selected, sn, returned);
 1609|      0|    if (SECSuccess != rv) {
  ------------------
  |  Branch (1609:9): [True: 0, False: 0]
  ------------------
 1610|      0|        return dpcacheLookupError;
 1611|      0|    } else {
 1612|      0|        if (*returned) {
  ------------------
  |  Branch (1612:13): [True: 0, False: 0]
  ------------------
 1613|      0|            return dpcacheFoundEntry;
 1614|      0|        } else {
 1615|      0|            return dpcacheNoEntry;
 1616|      0|        }
 1617|      0|    }
 1618|      0|}
AcquireDPCache:
 2201|     81|{
 2202|     81|    SECStatus rv = SECSuccess;
 2203|     81|    CRLIssuerCache* issuercache = NULL;
 2204|       |#ifdef GLOBAL_RWLOCK
 2205|       |    PRBool globalwrite = PR_FALSE;
 2206|       |#endif
 2207|     81|    PORT_Assert(crlcache.lock);
  ------------------
  |  |  120|     81|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     81|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 81, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2208|     81|    if (!crlcache.lock) {
  ------------------
  |  Branch (2208:9): [True: 0, False: 81]
  ------------------
 2209|       |        /* CRL cache is not initialized */
 2210|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2211|      0|        return SECFailure;
 2212|      0|    }
 2213|       |#ifdef GLOBAL_RWLOCK
 2214|       |    NSSRWLock_LockRead(crlcache.lock);
 2215|       |#else
 2216|     81|    PR_Lock(crlcache.lock);
 2217|     81|#endif
 2218|     81|    rv = CRLCache_GetIssuerCache(&crlcache, subject, &issuercache);
 2219|     81|    if (SECSuccess != rv) {
  ------------------
  |  Branch (2219:9): [True: 0, False: 81]
  ------------------
 2220|       |#ifdef GLOBAL_RWLOCK
 2221|       |        NSSRWLock_UnlockRead(crlcache.lock);
 2222|       |#else
 2223|      0|        PR_Unlock(crlcache.lock);
 2224|      0|#endif
 2225|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2226|      0|        return SECFailure;
 2227|      0|    }
 2228|     81|    if (!issuercache) {
  ------------------
  |  Branch (2228:9): [True: 9, False: 72]
  ------------------
 2229|       |        /* there is no cache for this issuer yet. This means this is the
 2230|       |           first time we look up a cert from that issuer, and we need to
 2231|       |           create the cache. */
 2232|       |
 2233|      9|        rv = IssuerCache_Create(&issuercache, issuer, subject, dp);
 2234|      9|        if (SECSuccess == rv && !issuercache) {
  ------------------
  |  Branch (2234:13): [True: 9, False: 0]
  |  Branch (2234:33): [True: 0, False: 9]
  ------------------
 2235|      0|            PORT_Assert(issuercache);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2236|      0|            rv = SECFailure;
 2237|      0|        }
 2238|       |
 2239|      9|        if (SECSuccess == rv) {
  ------------------
  |  Branch (2239:13): [True: 9, False: 0]
  ------------------
 2240|       |            /* This is the first time we look up a cert of this issuer.
 2241|       |               Create the DPCache for this DP . */
 2242|      9|            rv = IssuerCache_AddDP(issuercache, issuer, subject, dp, dpcache);
 2243|      9|        }
 2244|       |
 2245|      9|        if (SECSuccess == rv) {
  ------------------
  |  Branch (2245:13): [True: 9, False: 0]
  ------------------
 2246|       |            /* lock the DPCache for write to ensure the update happens in this
 2247|       |               thread */
 2248|      9|            *writeLocked = PR_TRUE;
  ------------------
  |  |  437|      9|#define PR_TRUE 1
  ------------------
 2249|      9|#ifdef DPC_RWLOCK
 2250|      9|            NSSRWLock_LockWrite((*dpcache)->lock);
  ------------------
  |  |   48|      9|#define NSSRWLock_LockWrite NSSRWLock_LockWrite_Util
  ------------------
 2251|       |#else
 2252|       |            PR_Lock((*dpcache)->lock);
 2253|       |#endif
 2254|      9|        }
 2255|       |
 2256|      9|        if (SECSuccess == rv) {
  ------------------
  |  Branch (2256:13): [True: 9, False: 0]
  ------------------
 2257|       |/* now add the new issuer cache to the global hash table of
 2258|       |   issuers */
 2259|       |#ifdef GLOBAL_RWLOCK
 2260|       |            CRLIssuerCache* existing = NULL;
 2261|       |            NSSRWLock_UnlockRead(crlcache.lock);
 2262|       |            /* when using a r/w lock for the global cache, check if the issuer
 2263|       |               already exists before adding to the hash table */
 2264|       |            NSSRWLock_LockWrite(crlcache.lock);
 2265|       |            globalwrite = PR_TRUE;
 2266|       |            rv = CRLCache_GetIssuerCache(&crlcache, subject, &existing);
 2267|       |            if (!existing) {
 2268|       |#endif
 2269|      9|                rv = CRLCache_AddIssuer(issuercache);
 2270|      9|                if (SECSuccess != rv) {
  ------------------
  |  Branch (2270:21): [True: 0, False: 9]
  ------------------
 2271|       |                    /* failure */
 2272|      0|                    rv = SECFailure;
 2273|      0|                }
 2274|       |#ifdef GLOBAL_RWLOCK
 2275|       |            } else {
 2276|       |                /* somebody else updated before we did */
 2277|       |                IssuerCache_Destroy(issuercache); /* destroy the new object */
 2278|       |                issuercache = existing;           /* use the existing one */
 2279|       |                *dpcache = IssuerCache_GetDPCache(issuercache, dp);
 2280|       |            }
 2281|       |#endif
 2282|      9|        }
 2283|       |
 2284|       |/* now unlock the global cache. We only want to lock the issuer hash
 2285|       |   table addition. Holding it longer would hurt scalability */
 2286|       |#ifdef GLOBAL_RWLOCK
 2287|       |        if (PR_TRUE == globalwrite) {
 2288|       |            NSSRWLock_UnlockWrite(crlcache.lock);
 2289|       |            globalwrite = PR_FALSE;
 2290|       |        } else {
 2291|       |            NSSRWLock_UnlockRead(crlcache.lock);
 2292|       |        }
 2293|       |#else
 2294|      9|        PR_Unlock(crlcache.lock);
 2295|      9|#endif
 2296|       |
 2297|       |        /* if there was a failure adding an issuer cache object, destroy it */
 2298|      9|        if (SECSuccess != rv && issuercache) {
  ------------------
  |  Branch (2298:13): [True: 0, False: 9]
  |  Branch (2298:33): [True: 0, False: 0]
  ------------------
 2299|      0|            if (PR_TRUE == *writeLocked) {
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  |  Branch (2299:17): [True: 0, False: 0]
  ------------------
 2300|      0|#ifdef DPC_RWLOCK
 2301|      0|                NSSRWLock_UnlockWrite((*dpcache)->lock);
  ------------------
  |  |   51|      0|#define NSSRWLock_UnlockWrite NSSRWLock_UnlockWrite_Util
  ------------------
 2302|       |#else
 2303|       |                PR_Unlock((*dpcache)->lock);
 2304|       |#endif
 2305|      0|            }
 2306|      0|            IssuerCache_Destroy(issuercache);
 2307|      0|            issuercache = NULL;
 2308|      0|        }
 2309|       |
 2310|      9|        if (SECSuccess != rv) {
  ------------------
  |  Branch (2310:13): [True: 0, False: 9]
  ------------------
 2311|      0|            return SECFailure;
 2312|      0|        }
 2313|     72|    } else {
 2314|       |#ifdef GLOBAL_RWLOCK
 2315|       |        NSSRWLock_UnlockRead(crlcache.lock);
 2316|       |#else
 2317|     72|        PR_Unlock(crlcache.lock);
 2318|     72|#endif
 2319|     72|        *dpcache = IssuerCache_GetDPCache(issuercache, dp);
 2320|     72|    }
 2321|       |    /* we now have a DPCache that we can use for lookups */
 2322|       |    /* lock it for read, unless we already locked for write */
 2323|     81|    if (PR_FALSE == *writeLocked) {
  ------------------
  |  |  438|     81|#define PR_FALSE 0
  ------------------
  |  Branch (2323:9): [True: 72, False: 9]
  ------------------
 2324|     72|#ifdef DPC_RWLOCK
 2325|     72|        NSSRWLock_LockRead((*dpcache)->lock);
  ------------------
  |  |   47|     72|#define NSSRWLock_LockRead NSSRWLock_LockRead_Util
  ------------------
 2326|       |#else
 2327|       |        PR_Lock((*dpcache)->lock);
 2328|       |#endif
 2329|     72|    }
 2330|       |
 2331|     81|    if (SECSuccess == rv) {
  ------------------
  |  Branch (2331:9): [True: 81, False: 0]
  ------------------
 2332|       |        /* currently there is always one and only one DPCache per issuer */
 2333|     81|        PORT_Assert(*dpcache);
  ------------------
  |  |  120|     81|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     81|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 81, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2334|     81|        if (*dpcache) {
  ------------------
  |  Branch (2334:13): [True: 81, False: 0]
  ------------------
 2335|       |            /* make sure the DP cache is up to date before using it */
 2336|     81|            rv = DPCache_GetUpToDate(*dpcache, issuer, PR_FALSE == *writeLocked,
  ------------------
  |  |  438|     81|#define PR_FALSE 0
  ------------------
 2337|     81|                                     t, wincx);
 2338|     81|        } else {
 2339|      0|            rv = SECFailure;
 2340|      0|        }
 2341|     81|    }
 2342|     81|    return rv;
 2343|     81|}
ReleaseDPCache:
 2348|     81|{
 2349|     81|    if (!dpcache) {
  ------------------
  |  Branch (2349:9): [True: 0, False: 81]
  ------------------
 2350|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2351|      0|        return;
 2352|      0|    }
 2353|     81|#ifdef DPC_RWLOCK
 2354|     81|    if (PR_TRUE == writeLocked) {
  ------------------
  |  |  437|     81|#define PR_TRUE 1
  ------------------
  |  Branch (2354:9): [True: 9, False: 72]
  ------------------
 2355|      9|        NSSRWLock_UnlockWrite(dpcache->lock);
  ------------------
  |  |   51|      9|#define NSSRWLock_UnlockWrite NSSRWLock_UnlockWrite_Util
  ------------------
 2356|     72|    } else {
 2357|     72|        NSSRWLock_UnlockRead(dpcache->lock);
  ------------------
  |  |   50|     72|#define NSSRWLock_UnlockRead NSSRWLock_UnlockRead_Util
  ------------------
 2358|     72|    }
 2359|       |#else
 2360|       |    PR_Unlock(dpcache->lock);
 2361|       |#endif
 2362|     81|}
cert_CheckCertRevocationStatus:
 2369|     81|{
 2370|     81|    PRBool lockedwrite = PR_FALSE;
  ------------------
  |  |  438|     81|#define PR_FALSE 0
  ------------------
 2371|     81|    SECStatus rv = SECSuccess;
 2372|     81|    CRLDPCache* dpcache = NULL;
 2373|     81|    CERTRevocationStatus status = certRevocationStatusRevoked;
 2374|     81|    CERTCRLEntryReasonCode reason = crlEntryReasonUnspecified;
 2375|     81|    CERTCrlEntry* entry = NULL;
 2376|     81|    dpcacheStatus ds;
 2377|       |
 2378|     81|    if (!cert || !issuer) {
  ------------------
  |  Branch (2378:9): [True: 0, False: 81]
  |  Branch (2378:18): [True: 0, False: 81]
  ------------------
 2379|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2380|      0|        return SECFailure;
 2381|      0|    }
 2382|       |
 2383|     81|    if (revStatus) {
  ------------------
  |  Branch (2383:9): [True: 0, False: 81]
  ------------------
 2384|      0|        *revStatus = status;
 2385|      0|    }
 2386|     81|    if (revReason) {
  ------------------
  |  Branch (2386:9): [True: 0, False: 81]
  ------------------
 2387|      0|        *revReason = reason;
 2388|      0|    }
 2389|       |
 2390|     81|    if (t &&
  ------------------
  |  Branch (2390:9): [True: 81, False: 0]
  ------------------
 2391|     81|        secCertTimeValid != CERT_CheckCertValidTimes(issuer, t, PR_FALSE)) {
  ------------------
  |  |  438|     81|#define PR_FALSE 0
  ------------------
  |  Branch (2391:9): [True: 0, False: 81]
  ------------------
 2392|       |        /* we won't be able to check the CRL's signature if the issuer cert
 2393|       |           is expired as of the time we are verifying. This may cause a valid
 2394|       |           CRL to be cached as bad. short-circuit to avoid this case. */
 2395|      0|        PORT_SetError(SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2396|      0|        return SECFailure;
 2397|      0|    }
 2398|       |
 2399|     81|    rv = AcquireDPCache(issuer, &issuer->derSubject, dp, t, wincx, &dpcache,
 2400|     81|                        &lockedwrite);
 2401|     81|    PORT_Assert(SECSuccess == rv);
  ------------------
  |  |  120|     81|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     81|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 81, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2402|     81|    if (SECSuccess != rv) {
  ------------------
  |  Branch (2402:9): [True: 0, False: 81]
  ------------------
 2403|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2404|      0|        return SECFailure;
 2405|      0|    }
 2406|       |    /* now look up the certificate SN in the DP cache's CRL */
 2407|     81|    ds = DPCache_Lookup(dpcache, &cert->serialNumber, &entry);
 2408|     81|    switch (ds) {
 2409|      0|        case dpcacheFoundEntry:
  ------------------
  |  Branch (2409:9): [True: 0, False: 81]
  ------------------
 2410|      0|            PORT_Assert(entry);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2411|       |            /* check the time if we have one */
 2412|      0|            if (entry->revocationDate.data && entry->revocationDate.len) {
  ------------------
  |  Branch (2412:17): [True: 0, False: 0]
  |  Branch (2412:47): [True: 0, False: 0]
  ------------------
 2413|      0|                PRTime revocationDate = 0;
 2414|      0|                if (SECSuccess ==
  ------------------
  |  Branch (2414:21): [True: 0, False: 0]
  ------------------
 2415|      0|                    DER_DecodeTimeChoice(&revocationDate,
  ------------------
  |  |   22|      0|#define DER_DecodeTimeChoice DER_DecodeTimeChoice_Util
  ------------------
 2416|      0|                                         &entry->revocationDate)) {
 2417|       |                    /* we got a good revocation date, only consider the
 2418|       |                       certificate revoked if the time we are inquiring about
 2419|       |                       is past the revocation date */
 2420|      0|                    if (t >= revocationDate) {
  ------------------
  |  Branch (2420:25): [True: 0, False: 0]
  ------------------
 2421|      0|                        rv = SECFailure;
 2422|      0|                    } else {
 2423|      0|                        status = certRevocationStatusValid;
 2424|      0|                    }
 2425|      0|                } else {
 2426|       |                    /* invalid revocation date, consider the certificate
 2427|       |                       permanently revoked */
 2428|      0|                    rv = SECFailure;
 2429|      0|                }
 2430|      0|            } else {
 2431|       |                /* no revocation date, certificate is permanently revoked */
 2432|      0|                rv = SECFailure;
 2433|      0|            }
 2434|      0|            if (SECFailure == rv) {
  ------------------
  |  Branch (2434:17): [True: 0, False: 0]
  ------------------
 2435|      0|                (void)CERT_FindCRLEntryReasonExten(entry, &reason);
 2436|      0|                PORT_SetError(SEC_ERROR_REVOKED_CERTIFICATE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2437|      0|            }
 2438|      0|            break;
 2439|       |
 2440|     81|        case dpcacheEmpty:
  ------------------
  |  Branch (2440:9): [True: 81, False: 0]
  ------------------
 2441|       |            /* useful for NIST policy */
 2442|     81|            status = certRevocationStatusUnknown;
 2443|     81|            break;
 2444|       |
 2445|      0|        case dpcacheNoEntry:
  ------------------
  |  Branch (2445:9): [True: 0, False: 81]
  ------------------
 2446|      0|            status = certRevocationStatusValid;
 2447|      0|            break;
 2448|       |
 2449|      0|        case dpcacheInvalidCacheError:
  ------------------
  |  Branch (2449:9): [True: 0, False: 81]
  ------------------
 2450|       |            /* treat it as unknown and let the caller decide based on
 2451|       |               the policy */
 2452|      0|            status = certRevocationStatusUnknown;
 2453|      0|            break;
 2454|       |
 2455|      0|        default:
  ------------------
  |  Branch (2455:9): [True: 0, False: 81]
  ------------------
 2456|       |            /* leave status as revoked */
 2457|      0|            break;
 2458|     81|    }
 2459|       |
 2460|     81|    ReleaseDPCache(dpcache, lockedwrite);
 2461|     81|    if (revStatus) {
  ------------------
  |  Branch (2461:9): [True: 0, False: 81]
  ------------------
 2462|      0|        *revStatus = status;
 2463|      0|    }
 2464|     81|    if (revReason) {
  ------------------
  |  Branch (2464:9): [True: 0, False: 81]
  ------------------
 2465|      0|        *revReason = reason;
 2466|      0|    }
 2467|     81|    return rv;
 2468|     81|}
CERT_CheckCRL:
 2474|     81|{
 2475|     81|    return cert_CheckCertRevocationStatus(cert, issuer, dp, t, wincx, NULL,
 2476|     81|                                          NULL);
 2477|     81|}
crl.c:DPCache_Destroy:
 1027|      9|{
 1028|      9|    PRUint32 i = 0;
 1029|      9|    PORT_Assert(cache);
  ------------------
  |  |  120|      9|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1030|      9|    if (!cache) {
  ------------------
  |  Branch (1030:9): [True: 0, False: 9]
  ------------------
 1031|      0|        PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1032|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1033|      0|        return SECFailure;
 1034|      0|    }
 1035|      9|    if (cache->lock) {
  ------------------
  |  Branch (1035:9): [True: 9, False: 0]
  ------------------
 1036|      9|#ifdef DPC_RWLOCK
 1037|      9|        NSSRWLock_Destroy(cache->lock);
  ------------------
  |  |   45|      9|#define NSSRWLock_Destroy NSSRWLock_Destroy_Util
  ------------------
 1038|       |#else
 1039|       |        PR_DestroyLock(cache->lock);
 1040|       |#endif
 1041|      9|    } else {
 1042|      0|        PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1043|      0|        return SECFailure;
 1044|      0|    }
 1045|       |    /* destroy all our CRL objects */
 1046|      9|    for (i = 0; i < cache->ncrls; i++) {
  ------------------
  |  Branch (1046:17): [True: 0, False: 9]
  ------------------
 1047|      0|        if (!cache->crls || !cache->crls[i] ||
  ------------------
  |  Branch (1047:13): [True: 0, False: 0]
  |  Branch (1047:29): [True: 0, False: 0]
  ------------------
 1048|      0|            SECSuccess != CachedCrl_Destroy(cache->crls[i])) {
  ------------------
  |  Branch (1048:13): [True: 0, False: 0]
  ------------------
 1049|      0|            return SECFailure;
 1050|      0|        }
 1051|      0|    }
 1052|       |    /* free the array of CRLs */
 1053|      9|    if (cache->crls) {
  ------------------
  |  Branch (1053:9): [True: 0, False: 9]
  ------------------
 1054|      0|        PORT_Free(cache->crls);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1055|      0|    }
 1056|       |    /* destroy the cert */
 1057|      9|    if (cache->issuerDERCert) {
  ------------------
  |  Branch (1057:9): [True: 9, False: 0]
  ------------------
 1058|      9|        SECITEM_FreeItem(cache->issuerDERCert, PR_TRUE);
  ------------------
  |  |  108|      9|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(cache->issuerDERCert, PR_TRUE);
  ------------------
  |  |  437|      9|#define PR_TRUE 1
  ------------------
 1059|      9|    }
 1060|       |    /* free the subject */
 1061|      9|    if (cache->subject) {
  ------------------
  |  Branch (1061:9): [True: 9, False: 0]
  ------------------
 1062|      9|        SECITEM_FreeItem(cache->subject, PR_TRUE);
  ------------------
  |  |  108|      9|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(cache->subject, PR_TRUE);
  ------------------
  |  |  437|      9|#define PR_TRUE 1
  ------------------
 1063|      9|    }
 1064|       |    /* free the distribution points */
 1065|      9|    if (cache->distributionPoint) {
  ------------------
  |  Branch (1065:9): [True: 0, False: 9]
  ------------------
 1066|      0|        SECITEM_FreeItem(cache->distributionPoint, PR_TRUE);
  ------------------
  |  |  108|      0|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(cache->distributionPoint, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1067|      0|    }
 1068|      9|    PORT_Free(cache);
  ------------------
  |  |   60|      9|#define PORT_Free PORT_Free_Util
  ------------------
 1069|      9|    return SECSuccess;
 1070|      9|}
crl.c:FreeIssuer:
 1148|      9|{
 1149|      9|    CRLIssuerCache* issuer = NULL;
 1150|      9|    SECStatus* rv = (SECStatus*)arg;
 1151|       |
 1152|      9|    PORT_Assert(he);
  ------------------
  |  |  120|      9|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1153|      9|    if (!he) {
  ------------------
  |  Branch (1153:9): [True: 0, False: 9]
  ------------------
 1154|      0|        return HT_ENUMERATE_NEXT;
  ------------------
  |  |   26|      0|#define HT_ENUMERATE_NEXT       0       /* continue enumerating entries */
  ------------------
 1155|      0|    }
 1156|      9|    issuer = (CRLIssuerCache*)he->value;
 1157|      9|    PORT_Assert(issuer);
  ------------------
  |  |  120|      9|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1158|      9|    if (issuer) {
  ------------------
  |  Branch (1158:9): [True: 9, False: 0]
  ------------------
 1159|      9|        if (SECSuccess != IssuerCache_Destroy(issuer)) {
  ------------------
  |  Branch (1159:13): [True: 0, False: 9]
  ------------------
 1160|      0|            PORT_Assert(rv);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1161|      0|            if (rv) {
  ------------------
  |  Branch (1161:17): [True: 0, False: 0]
  ------------------
 1162|      0|                *rv = SECFailure;
 1163|      0|            }
 1164|      0|            return HT_ENUMERATE_NEXT;
  ------------------
  |  |   26|      0|#define HT_ENUMERATE_NEXT       0       /* continue enumerating entries */
  ------------------
 1165|      0|        }
 1166|      9|    }
 1167|      9|    return HT_ENUMERATE_NEXT;
  ------------------
  |  |   26|      9|#define HT_ENUMERATE_NEXT       0       /* continue enumerating entries */
  ------------------
 1168|      9|}
crl.c:CRLCache_GetIssuerCache:
 2110|     81|{
 2111|       |    /* we need to look up the issuer in the hash table */
 2112|     81|    SECStatus rv = SECSuccess;
 2113|     81|    PORT_Assert(cache);
  ------------------
  |  |  120|     81|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     81|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 81, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2114|     81|    PORT_Assert(subject);
  ------------------
  |  |  120|     81|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     81|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 81, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2115|     81|    PORT_Assert(returned);
  ------------------
  |  |  120|     81|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     81|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 81, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2116|     81|    PORT_Assert(crlcache.issuers);
  ------------------
  |  |  120|     81|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     81|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 81, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2117|     81|    if (!cache || !subject || !returned || !crlcache.issuers) {
  ------------------
  |  Branch (2117:9): [True: 0, False: 81]
  |  Branch (2117:19): [True: 0, False: 81]
  |  Branch (2117:31): [True: 0, False: 81]
  |  Branch (2117:44): [True: 0, False: 81]
  ------------------
 2118|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2119|      0|        rv = SECFailure;
 2120|      0|    }
 2121|       |
 2122|     81|    if (SECSuccess == rv) {
  ------------------
  |  Branch (2122:9): [True: 81, False: 0]
  ------------------
 2123|     81|        *returned = (CRLIssuerCache*)PL_HashTableLookup(crlcache.issuers,
 2124|     81|                                                        (void*)subject);
 2125|     81|    }
 2126|       |
 2127|     81|    return rv;
 2128|     81|}
crl.c:IssuerCache_Create:
 2024|      9|{
 2025|      9|    SECStatus rv = SECSuccess;
 2026|      9|    CRLIssuerCache* cache = NULL;
 2027|      9|    PORT_Assert(returned);
  ------------------
  |  |  120|      9|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2028|      9|    PORT_Assert(subject);
  ------------------
  |  |  120|      9|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2029|       |    /* issuer and dp are allowed to be NULL */
 2030|      9|    if (!returned || !subject) {
  ------------------
  |  Branch (2030:9): [True: 0, False: 9]
  |  Branch (2030:22): [True: 0, False: 9]
  ------------------
 2031|      0|        PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2032|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2033|      0|        return SECFailure;
 2034|      0|    }
 2035|      9|    *returned = NULL;
 2036|      9|    cache = (CRLIssuerCache*)PORT_ZAlloc(sizeof(CRLIssuerCache));
  ------------------
  |  |   72|      9|#define PORT_ZAlloc PORT_ZAlloc_Util
  ------------------
 2037|      9|    if (!cache) {
  ------------------
  |  Branch (2037:9): [True: 0, False: 9]
  ------------------
 2038|      0|        return SECFailure;
 2039|      0|    }
 2040|      9|    cache->subject = SECITEM_DupItem(subject);
  ------------------
  |  |  107|      9|#define SECITEM_DupItem SECITEM_DupItem_Util
  ------------------
 2041|       |#ifdef XCRL
 2042|       |    cache->lock = NSSRWLock_New(NSS_RWLOCK_RANK_NONE, NULL);
 2043|       |    if (!cache->lock) {
 2044|       |        rv = SECFailure;
 2045|       |    }
 2046|       |    if (SECSuccess == rv && issuer) {
 2047|       |        cache->issuer = CERT_DupCertificate(issuer);
 2048|       |        if (!cache->issuer) {
 2049|       |            rv = SECFailure;
 2050|       |        }
 2051|       |    }
 2052|       |#endif
 2053|      9|    if (SECSuccess != rv) {
  ------------------
  |  Branch (2053:9): [True: 0, False: 9]
  ------------------
 2054|      0|        PORT_Assert(SECSuccess == IssuerCache_Destroy(cache));
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2055|      0|        return SECFailure;
 2056|      0|    }
 2057|      9|    *returned = cache;
 2058|      9|    return SECSuccess;
 2059|      9|}
crl.c:IssuerCache_AddDP:
 2066|      9|{
 2067|       |    /* now create the required DP cache object */
 2068|      9|    if (!cache || !subject || !newdpc) {
  ------------------
  |  Branch (2068:9): [True: 0, False: 9]
  |  Branch (2068:19): [True: 0, False: 9]
  |  Branch (2068:31): [True: 0, False: 9]
  ------------------
 2069|      0|        PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2070|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2071|      0|        return SECFailure;
 2072|      0|    }
 2073|      9|    if (!dp) {
  ------------------
  |  Branch (2073:9): [True: 9, False: 0]
  ------------------
 2074|       |        /* default distribution point */
 2075|      9|        SECStatus rv = DPCache_Create(&cache->dpp, issuer, subject, NULL);
 2076|      9|        if (SECSuccess == rv) {
  ------------------
  |  Branch (2076:13): [True: 9, False: 0]
  ------------------
 2077|      9|            *newdpc = cache->dpp;
 2078|      9|            return SECSuccess;
 2079|      9|        }
 2080|      9|    } else {
 2081|       |        /* we should never hit this until we support multiple DPs */
 2082|      0|        PORT_Assert(dp);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2083|       |        /* XCRL allocate a new distribution point cache object, initialize it,
 2084|       |           and add it to the hash table of DPs */
 2085|      0|    }
 2086|      0|    return SECFailure;
 2087|      9|}
crl.c:DPCache_Create:
 1985|      9|{
 1986|      9|    CRLDPCache* cache = NULL;
 1987|      9|    PORT_Assert(returned);
  ------------------
  |  |  120|      9|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1988|       |    /* issuer and dp are allowed to be NULL */
 1989|      9|    if (!returned || !subject) {
  ------------------
  |  Branch (1989:9): [True: 0, False: 9]
  |  Branch (1989:22): [True: 0, False: 9]
  ------------------
 1990|      0|        PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1991|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1992|      0|        return SECFailure;
 1993|      0|    }
 1994|      9|    *returned = NULL;
 1995|      9|    cache = PORT_ZAlloc(sizeof(CRLDPCache));
  ------------------
  |  |   72|      9|#define PORT_ZAlloc PORT_ZAlloc_Util
  ------------------
 1996|      9|    if (!cache) {
  ------------------
  |  Branch (1996:9): [True: 0, False: 9]
  ------------------
 1997|      0|        return SECFailure;
 1998|      0|    }
 1999|      9|#ifdef DPC_RWLOCK
 2000|      9|    cache->lock = NSSRWLock_New(NSS_RWLOCK_RANK_NONE, NULL);
  ------------------
  |  |   49|      9|#define NSSRWLock_New NSSRWLock_New_Util
  ------------------
                  cache->lock = NSSRWLock_New(NSS_RWLOCK_RANK_NONE, NULL);
  ------------------
  |  |   29|      9|#define NSS_RWLOCK_RANK_NONE 0
  ------------------
 2001|       |#else
 2002|       |    cache->lock = PR_NewLock();
 2003|       |#endif
 2004|      9|    if (!cache->lock) {
  ------------------
  |  Branch (2004:9): [True: 0, False: 9]
  ------------------
 2005|      0|        PORT_Free(cache);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 2006|      0|        return SECFailure;
 2007|      0|    }
 2008|      9|    if (issuer) {
  ------------------
  |  Branch (2008:9): [True: 9, False: 0]
  ------------------
 2009|      9|        cache->dbHandle = issuer->dbhandle;
 2010|      9|        cache->issuerDERCert = SECITEM_DupItem(&issuer->derCert);
  ------------------
  |  |  107|      9|#define SECITEM_DupItem SECITEM_DupItem_Util
  ------------------
 2011|      9|    }
 2012|      9|    cache->distributionPoint = SECITEM_DupItem(dp);
  ------------------
  |  |  107|      9|#define SECITEM_DupItem SECITEM_DupItem_Util
  ------------------
 2013|      9|    cache->subject = SECITEM_DupItem(subject);
  ------------------
  |  |  107|      9|#define SECITEM_DupItem SECITEM_DupItem_Util
  ------------------
 2014|      9|    cache->lastfetch = 0;
 2015|      9|    cache->lastcheck = 0;
 2016|      9|    *returned = cache;
 2017|      9|    return SECSuccess;
 2018|      9|}
crl.c:CRLCache_AddIssuer:
 2092|      9|{
 2093|      9|    PORT_Assert(issuer);
  ------------------
  |  |  120|      9|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2094|      9|    PORT_Assert(crlcache.issuers);
  ------------------
  |  |  120|      9|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2095|      9|    if (!issuer || !crlcache.issuers) {
  ------------------
  |  Branch (2095:9): [True: 0, False: 9]
  |  Branch (2095:20): [True: 0, False: 9]
  ------------------
 2096|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2097|      0|        return SECFailure;
 2098|      0|    }
 2099|      9|    if (NULL == PL_HashTableAdd(crlcache.issuers, (void*)issuer->subject,
  ------------------
  |  Branch (2099:9): [True: 0, False: 9]
  ------------------
 2100|      9|                                (void*)issuer)) {
 2101|      0|        return SECFailure;
 2102|      0|    }
 2103|      9|    return SECSuccess;
 2104|      9|}
crl.c:IssuerCache_GetDPCache:
 2173|     72|{
 2174|     72|    CRLDPCache* dpp = NULL;
 2175|     72|    PORT_Assert(cache);
  ------------------
  |  |  120|     72|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     72|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 72, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2176|       |    /* XCRL for now we only support the "default" DP, ie. the
 2177|       |       full CRL. So we can return the global one without locking. In
 2178|       |       the future we will have a lock */
 2179|     72|    PORT_Assert(NULL == dp);
  ------------------
  |  |  120|     72|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     72|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 72, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2180|     72|    if (!cache || dp) {
  ------------------
  |  Branch (2180:9): [True: 0, False: 72]
  |  Branch (2180:19): [True: 0, False: 72]
  ------------------
 2181|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2182|      0|        return NULL;
 2183|      0|    }
 2184|       |#ifdef XCRL
 2185|       |    NSSRWLock_LockRead(cache->lock);
 2186|       |#endif
 2187|     72|    dpp = cache->dpp;
 2188|       |#ifdef XCRL
 2189|       |    NSSRWLock_UnlockRead(cache->lock);
 2190|       |#endif
 2191|     72|    return dpp;
 2192|     72|}
crl.c:DPCache_GetUpToDate:
 1659|     81|{
 1660|       |    /* Update the CRLDPCache now. We don't cache token CRL lookup misses
 1661|       |       yet, as we have no way of getting notified of new PKCS#11 object
 1662|       |       creation that happens in a token  */
 1663|     81|    SECStatus rv = SECSuccess;
 1664|     81|    PRUint32 i = 0;
 1665|     81|    PRBool forcedrefresh = PR_FALSE;
  ------------------
  |  |  438|     81|#define PR_FALSE 0
  ------------------
 1666|     81|    PRBool dirty = PR_FALSE; /* whether something was changed in the
  ------------------
  |  |  438|     81|#define PR_FALSE 0
  ------------------
 1667|       |                                cache state during this update cycle */
 1668|     81|    PRBool hastokenCRLs = PR_FALSE;
  ------------------
  |  |  438|     81|#define PR_FALSE 0
  ------------------
 1669|     81|    PRTime now = 0;
 1670|     81|    PRTime lastfetch = 0;
 1671|     81|    PRBool mustunlock = PR_FALSE;
  ------------------
  |  |  438|     81|#define PR_FALSE 0
  ------------------
 1672|       |
 1673|     81|    if (!cache) {
  ------------------
  |  Branch (1673:9): [True: 0, False: 81]
  ------------------
 1674|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1675|      0|        return SECFailure;
 1676|      0|    }
 1677|       |
 1678|       |    /* first, make sure we have obtained all the CRLs we need.
 1679|       |       We do an expensive token fetch in the following cases :
 1680|       |       1) cache is empty because no fetch was ever performed yet
 1681|       |       2) cache is explicitly set to refresh state
 1682|       |       3) cache is in invalid state because last fetch failed
 1683|       |       4) cache contains no token CRLs, and it's been more than one minute
 1684|       |          since the last fetch
 1685|       |       5) cache contains token CRLs, and it's been more than 10 minutes since
 1686|       |          the last fetch
 1687|       |    */
 1688|     81|    forcedrefresh = cache->refresh;
 1689|     81|    lastfetch = cache->lastfetch;
 1690|     81|    if (PR_TRUE != forcedrefresh &&
  ------------------
  |  |  437|     81|#define PR_TRUE 1
  ------------------
  |  Branch (1690:9): [True: 81, False: 0]
  ------------------
 1691|     81|        (!(cache->invalid & CRL_CACHE_LAST_FETCH_FAILED))) {
  ------------------
  |  |   61|     81|#define CRL_CACHE_LAST_FETCH_FAILED 0x0002 /* this state will be set        \
  ------------------
  |  Branch (1691:9): [True: 81, False: 0]
  ------------------
 1692|     81|        now = PR_Now();
 1693|     81|        hastokenCRLs = DPCache_HasTokenCRLs(cache);
 1694|     81|    }
 1695|     81|    if ((0 == lastfetch) ||
  ------------------
  |  Branch (1695:9): [True: 9, False: 72]
  ------------------
 1696|       |
 1697|     81|        (PR_TRUE == forcedrefresh) ||
  ------------------
  |  |  437|     72|#define PR_TRUE 1
  ------------------
  |  Branch (1697:9): [True: 0, False: 72]
  ------------------
 1698|       |
 1699|     81|        (cache->invalid & CRL_CACHE_LAST_FETCH_FAILED) ||
  ------------------
  |  |   61|     72|#define CRL_CACHE_LAST_FETCH_FAILED 0x0002 /* this state will be set        \
  ------------------
  |  Branch (1699:9): [True: 0, False: 72]
  ------------------
 1700|       |
 1701|     81|        ((PR_FALSE == hastokenCRLs) &&
  ------------------
  |  |  438|     72|#define PR_FALSE 0
  ------------------
  |  Branch (1701:10): [True: 72, False: 0]
  ------------------
 1702|     72|         ((now - cache->lastfetch > CRLCache_Empty_TokenFetch_Interval) ||
  ------------------
  |  Branch (1702:11): [True: 0, False: 72]
  ------------------
 1703|     72|          (now < cache->lastfetch))) ||
  ------------------
  |  Branch (1703:11): [True: 0, False: 72]
  ------------------
 1704|       |
 1705|     81|        ((PR_TRUE == hastokenCRLs) &&
  ------------------
  |  |  437|     72|#define PR_TRUE 1
  ------------------
  |  Branch (1705:10): [True: 0, False: 72]
  ------------------
 1706|     72|         ((now - cache->lastfetch > CRLCache_TokenRefetch_Interval) ||
  ------------------
  |  Branch (1706:11): [True: 0, False: 0]
  ------------------
 1707|      9|          (now < cache->lastfetch)))) {
  ------------------
  |  Branch (1707:11): [True: 0, False: 0]
  ------------------
 1708|       |        /* the cache needs to be refreshed, and/or we had zero CRL for this
 1709|       |           DP. Try to get one from PKCS#11 tokens */
 1710|      9|        DPCache_LockWrite();
  ------------------
  |  | 1623|      9|    {                                          \
  |  | 1624|      9|        if (readlocked) {                      \
  |  |  ------------------
  |  |  |  Branch (1624:13): [True: 0, False: 9]
  |  |  ------------------
  |  | 1625|      0|            NSSRWLock_UnlockRead(cache->lock); \
  |  |  ------------------
  |  |  |  |   50|      0|#define NSSRWLock_UnlockRead NSSRWLock_UnlockRead_Util
  |  |  ------------------
  |  | 1626|      0|        }                                      \
  |  | 1627|      9|        NSSRWLock_LockWrite(cache->lock);      \
  |  |  ------------------
  |  |  |  |   48|      9|#define NSSRWLock_LockWrite NSSRWLock_LockWrite_Util
  |  |  ------------------
  |  | 1628|      9|    }
  ------------------
 1711|       |        /* check if another thread updated before us, and skip update if so */
 1712|      9|        if (lastfetch == cache->lastfetch) {
  ------------------
  |  Branch (1712:13): [True: 9, False: 0]
  ------------------
 1713|       |            /* we are the first */
 1714|      9|            rv = DPCache_FetchFromTokens(cache, vfdate, wincx);
 1715|      9|            if (PR_TRUE == cache->refresh) {
  ------------------
  |  |  437|      9|#define PR_TRUE 1
  ------------------
  |  Branch (1715:17): [True: 0, False: 9]
  ------------------
 1716|      0|                cache->refresh = PR_FALSE; /* clear refresh state */
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1717|      0|            }
 1718|      9|            dirty = PR_TRUE;
  ------------------
  |  |  437|      9|#define PR_TRUE 1
  ------------------
 1719|      9|            cache->lastfetch = PR_Now();
 1720|      9|        }
 1721|      9|        DPCache_UnlockWrite();
  ------------------
  |  | 1631|      9|    {                                        \
  |  | 1632|      9|        if (readlocked) {                    \
  |  |  ------------------
  |  |  |  Branch (1632:13): [True: 0, False: 9]
  |  |  ------------------
  |  | 1633|      0|            NSSRWLock_LockRead(cache->lock); \
  |  |  ------------------
  |  |  |  |   47|      0|#define NSSRWLock_LockRead NSSRWLock_LockRead_Util
  |  |  ------------------
  |  | 1634|      0|        }                                    \
  |  | 1635|      9|        NSSRWLock_UnlockWrite(cache->lock);  \
  |  |  ------------------
  |  |  |  |   51|      9|#define NSSRWLock_UnlockWrite NSSRWLock_UnlockWrite_Util
  |  |  ------------------
  |  | 1636|      9|    }
  ------------------
 1722|      9|    }
 1723|       |
 1724|       |    /* now, make sure we have no extraneous CRLs (deleted token objects)
 1725|       |       we'll do this inexpensive existence check either
 1726|       |       1) if there was a token object fetch
 1727|       |       2) every minute */
 1728|     81|    if ((PR_TRUE != dirty) && (!now)) {
  ------------------
  |  |  437|     81|#define PR_TRUE 1
  ------------------
  |  Branch (1728:9): [True: 72, False: 9]
  |  Branch (1728:31): [True: 0, False: 72]
  ------------------
 1729|      0|        now = PR_Now();
 1730|      0|    }
 1731|     81|    if ((PR_TRUE == dirty) ||
  ------------------
  |  |  437|     81|#define PR_TRUE 1
  ------------------
  |  Branch (1731:9): [True: 9, False: 72]
  ------------------
 1732|     81|        ((now - cache->lastcheck > CRLCache_ExistenceCheck_Interval) ||
  ------------------
  |  Branch (1732:10): [True: 72, False: 0]
  ------------------
 1733|     81|         (now < cache->lastcheck))) {
  ------------------
  |  Branch (1733:10): [True: 0, False: 0]
  ------------------
 1734|     81|        PRTime lastcheck = cache->lastcheck;
 1735|     81|        mustunlock = PR_FALSE;
  ------------------
  |  |  438|     81|#define PR_FALSE 0
  ------------------
 1736|       |        /* check if all CRLs still exist */
 1737|     81|        for (i = 0; (i < cache->ncrls); i++) {
  ------------------
  |  Branch (1737:21): [True: 0, False: 81]
  ------------------
 1738|      0|            CachedCrl* savcrl = cache->crls[i];
 1739|      0|            if ((!savcrl) || (savcrl && CRL_OriginToken != savcrl->origin)) {
  ------------------
  |  Branch (1739:17): [True: 0, False: 0]
  |  Branch (1739:31): [True: 0, False: 0]
  |  Branch (1739:41): [True: 0, False: 0]
  ------------------
 1740|       |                /* we only want to check token CRLs */
 1741|      0|                continue;
 1742|      0|            }
 1743|      0|            if ((PR_TRUE != TokenCRLStillExists(savcrl->crl))) {
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  |  Branch (1743:17): [True: 0, False: 0]
  ------------------
 1744|       |
 1745|       |                /* this CRL is gone */
 1746|      0|                if (PR_TRUE != mustunlock) {
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  |  Branch (1746:21): [True: 0, False: 0]
  ------------------
 1747|      0|                    DPCache_LockWrite();
  ------------------
  |  | 1623|      0|    {                                          \
  |  | 1624|      0|        if (readlocked) {                      \
  |  |  ------------------
  |  |  |  Branch (1624:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1625|      0|            NSSRWLock_UnlockRead(cache->lock); \
  |  |  ------------------
  |  |  |  |   50|      0|#define NSSRWLock_UnlockRead NSSRWLock_UnlockRead_Util
  |  |  ------------------
  |  | 1626|      0|        }                                      \
  |  | 1627|      0|        NSSRWLock_LockWrite(cache->lock);      \
  |  |  ------------------
  |  |  |  |   48|      0|#define NSSRWLock_LockWrite NSSRWLock_LockWrite_Util
  |  |  ------------------
  |  | 1628|      0|    }
  ------------------
 1748|      0|                    mustunlock = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1749|      0|                }
 1750|       |                /* first, we need to check if another thread did an update
 1751|       |                   before we did */
 1752|      0|                if (lastcheck == cache->lastcheck) {
  ------------------
  |  Branch (1752:21): [True: 0, False: 0]
  ------------------
 1753|       |                    /* the CRL is gone. And we are the one to do the update */
 1754|      0|                    DPCache_RemoveCRL(cache, i);
 1755|      0|                    dirty = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1756|      0|                }
 1757|       |                /* stay locked here intentionally so we do all the other
 1758|       |                   updates in this thread for the remaining CRLs */
 1759|      0|            }
 1760|      0|        }
 1761|     81|        if (PR_TRUE == mustunlock) {
  ------------------
  |  |  437|     81|#define PR_TRUE 1
  ------------------
  |  Branch (1761:13): [True: 0, False: 81]
  ------------------
 1762|      0|            cache->lastcheck = PR_Now();
 1763|      0|            DPCache_UnlockWrite();
  ------------------
  |  | 1631|      0|    {                                        \
  |  | 1632|      0|        if (readlocked) {                    \
  |  |  ------------------
  |  |  |  Branch (1632:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1633|      0|            NSSRWLock_LockRead(cache->lock); \
  |  |  ------------------
  |  |  |  |   47|      0|#define NSSRWLock_LockRead NSSRWLock_LockRead_Util
  |  |  ------------------
  |  | 1634|      0|        }                                    \
  |  | 1635|      0|        NSSRWLock_UnlockWrite(cache->lock);  \
  |  |  ------------------
  |  |  |  |   51|      0|#define NSSRWLock_UnlockWrite NSSRWLock_UnlockWrite_Util
  |  |  ------------------
  |  | 1636|      0|    }
  ------------------
 1764|      0|            mustunlock = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1765|      0|        }
 1766|     81|    }
 1767|       |
 1768|       |    /* add issuer certificate if it was previously unavailable */
 1769|     81|    if (issuer && (NULL == cache->issuerDERCert) &&
  ------------------
  |  Branch (1769:9): [True: 81, False: 0]
  |  Branch (1769:19): [True: 0, False: 81]
  ------------------
 1770|     81|        (SECSuccess == CERT_CheckCertUsage(issuer, KU_CRL_SIGN))) {
  ------------------
  |  |  568|      0|#define KU_CRL_SIGN (0x02)          /* bit 6 */
  ------------------
  |  Branch (1770:9): [True: 0, False: 0]
  ------------------
 1771|       |        /* if we didn't have a valid issuer cert yet, but we do now. add it */
 1772|      0|        DPCache_LockWrite();
  ------------------
  |  | 1623|      0|    {                                          \
  |  | 1624|      0|        if (readlocked) {                      \
  |  |  ------------------
  |  |  |  Branch (1624:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1625|      0|            NSSRWLock_UnlockRead(cache->lock); \
  |  |  ------------------
  |  |  |  |   50|      0|#define NSSRWLock_UnlockRead NSSRWLock_UnlockRead_Util
  |  |  ------------------
  |  | 1626|      0|        }                                      \
  |  | 1627|      0|        NSSRWLock_LockWrite(cache->lock);      \
  |  |  ------------------
  |  |  |  |   48|      0|#define NSSRWLock_LockWrite NSSRWLock_LockWrite_Util
  |  |  ------------------
  |  | 1628|      0|    }
  ------------------
 1773|      0|        if (!cache->issuerDERCert) {
  ------------------
  |  Branch (1773:13): [True: 0, False: 0]
  ------------------
 1774|      0|            dirty = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1775|      0|            cache->dbHandle = issuer->dbhandle;
 1776|      0|            cache->issuerDERCert = SECITEM_DupItem(&issuer->derCert);
  ------------------
  |  |  107|      0|#define SECITEM_DupItem SECITEM_DupItem_Util
  ------------------
 1777|      0|        }
 1778|      0|        DPCache_UnlockWrite();
  ------------------
  |  | 1631|      0|    {                                        \
  |  | 1632|      0|        if (readlocked) {                    \
  |  |  ------------------
  |  |  |  Branch (1632:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1633|      0|            NSSRWLock_LockRead(cache->lock); \
  |  |  ------------------
  |  |  |  |   47|      0|#define NSSRWLock_LockRead NSSRWLock_LockRead_Util
  |  |  ------------------
  |  | 1634|      0|        }                                    \
  |  | 1635|      0|        NSSRWLock_UnlockWrite(cache->lock);  \
  |  |  ------------------
  |  |  |  |   51|      0|#define NSSRWLock_UnlockWrite NSSRWLock_UnlockWrite_Util
  |  |  ------------------
  |  | 1636|      0|    }
  ------------------
 1779|      0|    }
 1780|       |
 1781|       |    /* verify CRLs that couldn't be checked when inserted into the cache
 1782|       |       because the issuer cert or a verification date was unavailable.
 1783|       |       These are CRLs that were inserted into the cache through
 1784|       |       SEC_FindCrlByName, or through manual insertion, rather than through a
 1785|       |       certificate verification (CERT_CheckCRL) */
 1786|       |
 1787|     81|    if (cache->issuerDERCert && vfdate) {
  ------------------
  |  Branch (1787:9): [True: 81, False: 0]
  |  Branch (1787:33): [True: 81, False: 0]
  ------------------
 1788|     81|        mustunlock = PR_FALSE;
  ------------------
  |  |  438|     81|#define PR_FALSE 0
  ------------------
 1789|       |        /* re-process all unverified CRLs */
 1790|     81|        for (i = 0; i < cache->ncrls; i++) {
  ------------------
  |  Branch (1790:21): [True: 0, False: 81]
  ------------------
 1791|      0|            CachedCrl* savcrl = cache->crls[i];
 1792|      0|            if (!savcrl) {
  ------------------
  |  Branch (1792:17): [True: 0, False: 0]
  ------------------
 1793|      0|                continue;
 1794|      0|            }
 1795|      0|            if (PR_TRUE != savcrl->sigChecked) {
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  |  Branch (1795:17): [True: 0, False: 0]
  ------------------
 1796|      0|                if (!mustunlock) {
  ------------------
  |  Branch (1796:21): [True: 0, False: 0]
  ------------------
 1797|      0|                    DPCache_LockWrite();
  ------------------
  |  | 1623|      0|    {                                          \
  |  | 1624|      0|        if (readlocked) {                      \
  |  |  ------------------
  |  |  |  Branch (1624:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1625|      0|            NSSRWLock_UnlockRead(cache->lock); \
  |  |  ------------------
  |  |  |  |   50|      0|#define NSSRWLock_UnlockRead NSSRWLock_UnlockRead_Util
  |  |  ------------------
  |  | 1626|      0|        }                                      \
  |  | 1627|      0|        NSSRWLock_LockWrite(cache->lock);      \
  |  |  ------------------
  |  |  |  |   48|      0|#define NSSRWLock_LockWrite NSSRWLock_LockWrite_Util
  |  |  ------------------
  |  | 1628|      0|    }
  ------------------
 1798|      0|                    mustunlock = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1799|      0|                }
 1800|       |                /* first, we need to check if another thread updated
 1801|       |                   it before we did, and abort if it has been modified since
 1802|       |                   we acquired the lock. Make sure first that the CRL is still
 1803|       |                   in the array at the same position */
 1804|      0|                if ((i < cache->ncrls) && (savcrl == cache->crls[i]) &&
  ------------------
  |  Branch (1804:21): [True: 0, False: 0]
  |  Branch (1804:43): [True: 0, False: 0]
  ------------------
 1805|      0|                    (PR_TRUE != savcrl->sigChecked)) {
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  |  Branch (1805:21): [True: 0, False: 0]
  ------------------
 1806|       |                    /* the CRL is still there, unverified. Do it */
 1807|      0|                    CachedCrl_Verify(cache, savcrl, vfdate, wincx);
 1808|      0|                    dirty = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1809|      0|                }
 1810|       |                /* stay locked here intentionally so we do all the other
 1811|       |                   updates in this thread for the remaining CRLs */
 1812|      0|            }
 1813|      0|            if (mustunlock && !dirty) {
  ------------------
  |  Branch (1813:17): [True: 0, False: 0]
  |  Branch (1813:31): [True: 0, False: 0]
  ------------------
 1814|      0|                DPCache_UnlockWrite();
  ------------------
  |  | 1631|      0|    {                                        \
  |  | 1632|      0|        if (readlocked) {                    \
  |  |  ------------------
  |  |  |  Branch (1632:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1633|      0|            NSSRWLock_LockRead(cache->lock); \
  |  |  ------------------
  |  |  |  |   47|      0|#define NSSRWLock_LockRead NSSRWLock_LockRead_Util
  |  |  ------------------
  |  | 1634|      0|        }                                    \
  |  | 1635|      0|        NSSRWLock_UnlockWrite(cache->lock);  \
  |  |  ------------------
  |  |  |  |   51|      0|#define NSSRWLock_UnlockWrite NSSRWLock_UnlockWrite_Util
  |  |  ------------------
  |  | 1636|      0|    }
  ------------------
 1815|      0|                mustunlock = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1816|      0|            }
 1817|      0|        }
 1818|     81|    }
 1819|       |
 1820|     81|    if (dirty || cache->mustchoose) {
  ------------------
  |  Branch (1820:9): [True: 9, False: 72]
  |  Branch (1820:18): [True: 0, False: 72]
  ------------------
 1821|       |        /* changes to the content of the CRL cache necessitate examining all
 1822|       |           CRLs for selection of the most appropriate one to cache */
 1823|      9|        if (!mustunlock) {
  ------------------
  |  Branch (1823:13): [True: 9, False: 0]
  ------------------
 1824|      9|            DPCache_LockWrite();
  ------------------
  |  | 1623|      9|    {                                          \
  |  | 1624|      9|        if (readlocked) {                      \
  |  |  ------------------
  |  |  |  Branch (1624:13): [True: 0, False: 9]
  |  |  ------------------
  |  | 1625|      0|            NSSRWLock_UnlockRead(cache->lock); \
  |  |  ------------------
  |  |  |  |   50|      0|#define NSSRWLock_UnlockRead NSSRWLock_UnlockRead_Util
  |  |  ------------------
  |  | 1626|      0|        }                                      \
  |  | 1627|      9|        NSSRWLock_LockWrite(cache->lock);      \
  |  |  ------------------
  |  |  |  |   48|      9|#define NSSRWLock_LockWrite NSSRWLock_LockWrite_Util
  |  |  ------------------
  |  | 1628|      9|    }
  ------------------
 1825|      9|            mustunlock = PR_TRUE;
  ------------------
  |  |  437|      9|#define PR_TRUE 1
  ------------------
 1826|      9|        }
 1827|      9|        DPCache_SelectCRL(cache);
 1828|      9|        cache->mustchoose = PR_FALSE;
  ------------------
  |  |  438|      9|#define PR_FALSE 0
  ------------------
 1829|      9|    }
 1830|     81|    if (mustunlock)
  ------------------
  |  Branch (1830:9): [True: 9, False: 72]
  ------------------
 1831|      9|        DPCache_UnlockWrite();
  ------------------
  |  | 1631|      9|    {                                        \
  |  | 1632|      9|        if (readlocked) {                    \
  |  |  ------------------
  |  |  |  Branch (1632:13): [True: 0, False: 9]
  |  |  ------------------
  |  | 1633|      0|            NSSRWLock_LockRead(cache->lock); \
  |  |  ------------------
  |  |  |  |   47|      0|#define NSSRWLock_LockRead NSSRWLock_LockRead_Util
  |  |  ------------------
  |  | 1634|      0|        }                                    \
  |  | 1635|      9|        NSSRWLock_UnlockWrite(cache->lock);  \
  |  |  ------------------
  |  |  |  |   51|      9|#define NSSRWLock_UnlockWrite NSSRWLock_UnlockWrite_Util
  |  |  ------------------
  |  | 1636|      9|    }
  ------------------
 1832|       |
 1833|     81|    return rv;
 1834|     81|}
crl.c:DPCache_HasTokenCRLs:
 2981|     81|{
 2982|     81|    PRBool answer = PR_FALSE;
  ------------------
  |  |  438|     81|#define PR_FALSE 0
  ------------------
 2983|     81|    PRUint32 i;
 2984|     81|    for (i = 0; i < cache->ncrls; i++) {
  ------------------
  |  Branch (2984:17): [True: 0, False: 81]
  ------------------
 2985|      0|        if (cache->crls[i] && (CRL_OriginToken == cache->crls[i]->origin)) {
  ------------------
  |  Branch (2985:13): [True: 0, False: 0]
  |  Branch (2985:31): [True: 0, False: 0]
  ------------------
 2986|      0|            answer = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 2987|      0|            break;
 2988|      0|        }
 2989|      0|    }
 2990|     81|    return answer;
 2991|     81|}
crl.c:DPCache_FetchFromTokens:
 1492|      9|{
 1493|      9|    SECStatus rv = SECSuccess;
 1494|      9|    CERTCrlHeadNode head;
 1495|      9|    if (!cache) {
  ------------------
  |  Branch (1495:9): [True: 0, False: 9]
  ------------------
 1496|      0|        PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1497|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1498|      0|        return SECFailure;
 1499|      0|    }
 1500|       |    /* first, initialize list */
 1501|      9|    memset(&head, 0, sizeof(head));
 1502|      9|    head.arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   63|      9|#define PORT_NewArena PORT_NewArena_Util
  ------------------
                  head.arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|      9|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
 1503|      9|    rv = pk11_RetrieveCrls(&head, cache->subject, wincx);
 1504|       |
 1505|       |    /* if this function fails, something very wrong happened, such as an out
 1506|       |       of memory error during CRL decoding. We don't want to proceed and must
 1507|       |       mark the cache object invalid */
 1508|      9|    if (SECFailure == rv) {
  ------------------
  |  Branch (1508:9): [True: 0, False: 9]
  ------------------
 1509|       |        /* fetch failed, add error bit */
 1510|      0|        cache->invalid |= CRL_CACHE_LAST_FETCH_FAILED;
  ------------------
  |  |   61|      0|#define CRL_CACHE_LAST_FETCH_FAILED 0x0002 /* this state will be set        \
  ------------------
 1511|      9|    } else {
 1512|       |        /* fetch was successful, clear this error bit */
 1513|      9|        cache->invalid &= (~CRL_CACHE_LAST_FETCH_FAILED);
  ------------------
  |  |   61|      9|#define CRL_CACHE_LAST_FETCH_FAILED 0x0002 /* this state will be set        \
  ------------------
 1514|      9|    }
 1515|       |
 1516|       |    /* add any CRLs found to our array */
 1517|      9|    if (SECSuccess == rv) {
  ------------------
  |  Branch (1517:9): [True: 9, False: 0]
  ------------------
 1518|      9|        CERTCrlNode* crlNode = NULL;
 1519|       |
 1520|      9|        for (crlNode = head.first; crlNode; crlNode = crlNode->next) {
  ------------------
  |  Branch (1520:36): [True: 0, False: 9]
  ------------------
 1521|      0|            CachedCrl* returned = NULL;
 1522|      0|            CERTSignedCrl* crlobject = crlNode->crl;
 1523|      0|            if (!crlobject) {
  ------------------
  |  Branch (1523:17): [True: 0, False: 0]
  ------------------
 1524|      0|                PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1525|      0|                continue;
 1526|      0|            }
 1527|      0|            rv = CachedCrl_Create(&returned, crlobject, CRL_OriginToken);
 1528|      0|            if (SECSuccess == rv) {
  ------------------
  |  Branch (1528:17): [True: 0, False: 0]
  ------------------
 1529|      0|                PRBool added = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1530|      0|                rv = DPCache_AddCRL(cache, returned, &added);
 1531|      0|                if (PR_TRUE != added) {
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  |  Branch (1531:21): [True: 0, False: 0]
  ------------------
 1532|      0|                    rv = CachedCrl_Destroy(returned);
 1533|      0|                    returned = NULL;
 1534|      0|                } else if (vfdate) {
  ------------------
  |  Branch (1534:28): [True: 0, False: 0]
  ------------------
 1535|      0|                    rv = CachedCrl_Verify(cache, returned, vfdate, wincx);
 1536|      0|                }
 1537|      0|            } else {
 1538|       |                /* not enough memory to add the CRL to the cache. mark it
 1539|       |                   invalid so we will try again . */
 1540|      0|                cache->invalid |= CRL_CACHE_LAST_FETCH_FAILED;
  ------------------
  |  |   61|      0|#define CRL_CACHE_LAST_FETCH_FAILED 0x0002 /* this state will be set        \
  ------------------
 1541|      0|            }
 1542|      0|            if (SECFailure == rv) {
  ------------------
  |  Branch (1542:17): [True: 0, False: 0]
  ------------------
 1543|      0|                break;
 1544|      0|            }
 1545|      0|        }
 1546|      9|    }
 1547|       |
 1548|      9|    if (head.arena) {
  ------------------
  |  Branch (1548:9): [True: 9, False: 0]
  ------------------
 1549|      9|        CERTCrlNode* crlNode = NULL;
 1550|       |        /* clean up the CRL list in case we got a partial one
 1551|       |           during a failed fetch */
 1552|      9|        for (crlNode = head.first; crlNode; crlNode = crlNode->next) {
  ------------------
  |  Branch (1552:36): [True: 0, False: 9]
  ------------------
 1553|      0|            if (crlNode->crl) {
  ------------------
  |  Branch (1553:17): [True: 0, False: 0]
  ------------------
 1554|      0|                SEC_DestroyCrl(crlNode->crl); /* free the CRL. Either it got
 1555|       |                   added to the cache and the refcount got bumped, or not, and
 1556|       |                   thus we need to free its RAM */
 1557|      0|            }
 1558|      0|        }
 1559|      9|        PORT_FreeArena(head.arena, PR_FALSE); /* destroy CRL list */
  ------------------
  |  |   61|      9|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(head.arena, PR_FALSE); /* destroy CRL list */
  ------------------
  |  |  438|      9|#define PR_FALSE 0
  ------------------
 1560|      9|    }
 1561|       |
 1562|      9|    return rv;
 1563|      9|}
crl.c:DPCache_SelectCRL:
 1926|      9|{
 1927|      9|    PRUint32 i;
 1928|      9|    PRBool valid = PR_TRUE;
  ------------------
  |  |  437|      9|#define PR_TRUE 1
  ------------------
 1929|      9|    CachedCrl* selected = NULL;
 1930|       |
 1931|      9|    PORT_Assert(cache);
  ------------------
  |  |  120|      9|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      9|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1932|      9|    if (!cache) {
  ------------------
  |  Branch (1932:9): [True: 0, False: 9]
  ------------------
 1933|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1934|      0|        return SECFailure;
 1935|      0|    }
 1936|       |    /* if any invalid CRL is present, then the CRL cache is
 1937|       |       considered invalid, for security reasons */
 1938|      9|    for (i = 0; i < cache->ncrls; i++) {
  ------------------
  |  Branch (1938:17): [True: 0, False: 9]
  ------------------
 1939|      0|        if (!cache->crls[i] || !cache->crls[i]->sigChecked ||
  ------------------
  |  Branch (1939:13): [True: 0, False: 0]
  |  Branch (1939:32): [True: 0, False: 0]
  ------------------
 1940|      0|            !cache->crls[i]->sigValid) {
  ------------------
  |  Branch (1940:13): [True: 0, False: 0]
  ------------------
 1941|      0|            valid = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1942|      0|            break;
 1943|      0|        }
 1944|      0|    }
 1945|      9|    if (PR_TRUE == valid) {
  ------------------
  |  |  437|      9|#define PR_TRUE 1
  ------------------
  |  Branch (1945:9): [True: 9, False: 0]
  ------------------
 1946|       |        /* all CRLs are valid, clear this error */
 1947|      9|        cache->invalid &= (~CRL_CACHE_INVALID_CRLS);
  ------------------
  |  |   58|      9|#define CRL_CACHE_INVALID_CRLS 0x0001      /* this state will be set             \
  ------------------
 1948|      9|    } else {
 1949|       |        /* some CRLs are invalid, set this error */
 1950|      0|        cache->invalid |= CRL_CACHE_INVALID_CRLS;
  ------------------
  |  |   58|      0|#define CRL_CACHE_INVALID_CRLS 0x0001      /* this state will be set             \
  ------------------
 1951|      0|    }
 1952|       |
 1953|      9|    if (cache->invalid) {
  ------------------
  |  Branch (1953:9): [True: 0, False: 9]
  ------------------
 1954|       |        /* cache is in an invalid state, so reset it */
 1955|      0|        if (cache->selected) {
  ------------------
  |  Branch (1955:13): [True: 0, False: 0]
  ------------------
 1956|      0|            cache->selected = NULL;
 1957|      0|        }
 1958|       |        /* also sort the CRLs imperfectly */
 1959|      0|        qsort(cache->crls, cache->ncrls, sizeof(CachedCrl*), SortImperfectCRLs);
 1960|      0|        return SECSuccess;
 1961|      0|    }
 1962|       |
 1963|      9|    if (cache->ncrls) {
  ------------------
  |  Branch (1963:9): [True: 0, False: 9]
  ------------------
 1964|       |        /* all CRLs are good, sort them by thisUpdate */
 1965|      0|        qsort(cache->crls, cache->ncrls, sizeof(CachedCrl*), SortCRLsByThisUpdate);
 1966|       |
 1967|       |        /* pick the newest CRL */
 1968|      0|        selected = cache->crls[cache->ncrls - 1];
 1969|       |
 1970|       |        /* and populate the cache */
 1971|      0|        if (SECSuccess != CachedCrl_Populate(selected)) {
  ------------------
  |  Branch (1971:13): [True: 0, False: 0]
  ------------------
 1972|      0|            return SECFailure;
 1973|      0|        }
 1974|      0|    }
 1975|       |
 1976|      9|    cache->selected = selected;
 1977|       |
 1978|      9|    return SECSuccess;
 1979|      9|}

CERT_NewGeneralName:
  153|  21.1k|{
  154|  21.1k|    CERTGeneralName *name = arena ? PORT_ArenaZNew(arena, CERTGeneralName)
  ------------------
  |  |  155|  21.1k|    (type *)PORT_ArenaZAlloc(poolp, sizeof(type))
  |  |  ------------------
  |  |  |  |   59|  21.1k|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  |  |  ------------------
  ------------------
  |  Branch (154:29): [True: 21.1k, False: 0]
  ------------------
  155|  21.1k|                                  : PORT_ZNew(CERTGeneralName);
  ------------------
  |  |  148|      0|#define PORT_ZNew(type) (type *)PORT_ZAlloc(sizeof(type))
  |  |  ------------------
  |  |  |  |   72|      0|#define PORT_ZAlloc PORT_ZAlloc_Util
  |  |  ------------------
  ------------------
  156|  21.1k|    if (name) {
  ------------------
  |  Branch (156:9): [True: 21.1k, False: 0]
  ------------------
  157|  21.1k|        name->type = type;
  158|  21.1k|        name->l.prev = name->l.next = &name->l;
  159|  21.1k|    }
  160|  21.1k|    return name;
  161|  21.1k|}
CERT_GetNextGeneralName:
  264|  24.1k|{
  265|  24.1k|    PRCList *next;
  266|       |
  267|  24.1k|    next = current->l.next;
  268|  24.1k|    return (CERTGeneralName *)(((char *)next) - offsetof(CERTGeneralName, l));
  269|  24.1k|}
CERT_DecodeGeneralName:
  418|  13.9k|{
  419|  13.9k|    const SEC_ASN1Template *template;
  420|  13.9k|    CERTGeneralNameType genNameType;
  421|  13.9k|    SECStatus rv = SECSuccess;
  422|  13.9k|    SECItem *newEncodedName;
  423|       |
  424|  13.9k|    if (!reqArena) {
  ------------------
  |  Branch (424:9): [True: 0, False: 13.9k]
  ------------------
  425|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  426|      0|        return NULL;
  427|      0|    }
  428|       |    /* make a copy for decoding so the data decoded with QuickDER doesn't
  429|       |       point to temporary memory */
  430|  13.9k|    newEncodedName = SECITEM_ArenaDupItem(reqArena, encodedName);
  ------------------
  |  |  104|  13.9k|#define SECITEM_ArenaDupItem SECITEM_ArenaDupItem_Util
  ------------------
  431|  13.9k|    if (!newEncodedName) {
  ------------------
  |  Branch (431:9): [True: 0, False: 13.9k]
  ------------------
  432|      0|        return NULL;
  433|      0|    }
  434|       |    /* TODO: mark arena */
  435|  13.9k|    genNameType = (CERTGeneralNameType)((*(newEncodedName->data) & 0x0f) + 1);
  436|  13.9k|    if (genName == NULL) {
  ------------------
  |  Branch (436:9): [True: 13.9k, False: 0]
  ------------------
  437|  13.9k|        genName = CERT_NewGeneralName(reqArena, genNameType);
  438|  13.9k|        if (!genName)
  ------------------
  |  Branch (438:13): [True: 0, False: 13.9k]
  ------------------
  439|      0|            goto loser;
  440|  13.9k|    } else {
  441|      0|        genName->type = genNameType;
  442|      0|        genName->l.prev = genName->l.next = &genName->l;
  443|      0|    }
  444|       |
  445|  13.9k|    switch (genNameType) {
  446|    489|        case certURI:
  ------------------
  |  Branch (446:9): [True: 489, False: 13.4k]
  ------------------
  447|    489|            template = CERT_URITemplate;
  448|    489|            break;
  449|    718|        case certRFC822Name:
  ------------------
  |  Branch (449:9): [True: 718, False: 13.2k]
  ------------------
  450|    718|            template = CERT_RFC822NameTemplate;
  451|    718|            break;
  452|  10.0k|        case certDNSName:
  ------------------
  |  Branch (452:9): [True: 10.0k, False: 3.94k]
  ------------------
  453|  10.0k|            template = CERT_DNSNameTemplate;
  454|  10.0k|            break;
  455|  1.75k|        case certIPAddress:
  ------------------
  |  Branch (455:9): [True: 1.75k, False: 12.2k]
  ------------------
  456|  1.75k|            template = CERT_IPAddressTemplate;
  457|  1.75k|            break;
  458|    466|        case certOtherName:
  ------------------
  |  Branch (458:9): [True: 466, False: 13.4k]
  ------------------
  459|    466|            template = CERTOtherNameTemplate;
  460|    466|            break;
  461|    197|        case certRegisterID:
  ------------------
  |  Branch (461:9): [True: 197, False: 13.7k]
  ------------------
  462|    197|            template = CERT_RegisteredIDTemplate;
  463|    197|            break;
  464|     22|        case certEDIPartyName:
  ------------------
  |  Branch (464:9): [True: 22, False: 13.9k]
  ------------------
  465|     22|            template = CERT_EDIPartyNameTemplate;
  466|     22|            break;
  467|     41|        case certX400Address:
  ------------------
  |  Branch (467:9): [True: 41, False: 13.9k]
  ------------------
  468|     41|            template = CERT_X400AddressTemplate;
  469|     41|            break;
  470|    205|        case certDirectoryName:
  ------------------
  |  Branch (470:9): [True: 205, False: 13.7k]
  ------------------
  471|    205|            template = CERT_DirectoryNameTemplate;
  472|    205|            break;
  473|     48|        default:
  ------------------
  |  Branch (473:9): [True: 48, False: 13.9k]
  ------------------
  474|     48|            goto loser;
  475|  13.9k|    }
  476|  13.9k|    rv = SEC_QuickDERDecodeItem(reqArena, genName, template, newEncodedName);
  ------------------
  |  |  102|  13.9k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  477|  13.9k|    if (rv != SECSuccess)
  ------------------
  |  Branch (477:9): [True: 258, False: 13.6k]
  ------------------
  478|    258|        goto loser;
  479|  13.6k|    if (genNameType == certDirectoryName) {
  ------------------
  |  Branch (479:9): [True: 158, False: 13.5k]
  ------------------
  480|    158|        rv = SEC_QuickDERDecodeItem(reqArena, &(genName->name.directoryName),
  ------------------
  |  |  102|    158|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  481|    158|                                    CERT_NameTemplate,
  482|    158|                                    &(genName->derDirectoryName));
  483|    158|        if (rv != SECSuccess)
  ------------------
  |  Branch (483:13): [True: 44, False: 114]
  ------------------
  484|     44|            goto loser;
  485|    158|    }
  486|       |
  487|       |    /* TODO: unmark arena */
  488|  13.6k|    return genName;
  489|    350|loser:
  490|       |    /* TODO: release arena to mark */
  491|    350|    return NULL;
  492|  13.6k|}
cert_DecodeGeneralNames:
  496|  1.29k|{
  497|  1.29k|    PRCList *head = NULL;
  498|  1.29k|    PRCList *tail = NULL;
  499|  1.29k|    CERTGeneralName *currentName = NULL;
  500|       |
  501|  1.29k|    PORT_Assert(arena);
  ------------------
  |  |  120|  1.29k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  1.29k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1.29k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  502|  1.29k|    if (!encodedGenName || !arena) {
  ------------------
  |  Branch (502:9): [True: 404, False: 889]
  |  Branch (502:28): [True: 0, False: 889]
  ------------------
  503|    404|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|    404|#define PORT_SetError PORT_SetError_Util
  ------------------
  504|    404|        return NULL;
  505|    404|    }
  506|       |    /* TODO: mark arena */
  507|  14.5k|    while (*encodedGenName != NULL) {
  ------------------
  |  Branch (507:12): [True: 13.9k, False: 539]
  ------------------
  508|  13.9k|        currentName = CERT_DecodeGeneralName(arena, *encodedGenName, NULL);
  509|  13.9k|        if (currentName == NULL)
  ------------------
  |  Branch (509:13): [True: 350, False: 13.6k]
  ------------------
  510|    350|            break;
  511|  13.6k|        if (head == NULL) {
  ------------------
  |  Branch (511:13): [True: 665, False: 12.9k]
  ------------------
  512|    665|            head = &(currentName->l);
  513|    665|            tail = head;
  514|    665|        }
  515|  13.6k|        currentName->l.next = head;
  516|  13.6k|        currentName->l.prev = tail;
  517|  13.6k|        tail = head->prev = tail->next = &(currentName->l);
  518|  13.6k|        encodedGenName++;
  519|  13.6k|    }
  520|    889|    if (currentName) {
  ------------------
  |  Branch (520:9): [True: 539, False: 350]
  ------------------
  521|       |        /* TODO: unmark arena */
  522|    539|        return CERT_GetNextGeneralName(currentName);
  523|    539|    }
  524|       |    /* TODO: release arena to mark */
  525|    350|    return NULL;
  526|    889|}
cert_CombineNamesLists:
  882|  13.7k|{
  883|  13.7k|    PRCList *begin1;
  884|  13.7k|    PRCList *begin2;
  885|  13.7k|    PRCList *end1;
  886|  13.7k|    PRCList *end2;
  887|       |
  888|  13.7k|    if (list1 == NULL) {
  ------------------
  |  Branch (888:9): [True: 6.61k, False: 7.12k]
  ------------------
  889|  6.61k|        return list2;
  890|  7.12k|    } else if (list2 == NULL) {
  ------------------
  |  Branch (890:16): [True: 6.24k, False: 874]
  ------------------
  891|  6.24k|        return list1;
  892|  6.24k|    } else {
  893|    874|        begin1 = &list1->l;
  894|    874|        begin2 = &list2->l;
  895|    874|        end1 = list1->l.prev;
  896|    874|        end2 = list2->l.prev;
  897|    874|        end1->next = begin2;
  898|    874|        end2->next = begin1;
  899|    874|        begin1->prev = end2;
  900|    874|        begin2->prev = end1;
  901|    874|        return list1;
  902|    874|    }
  903|  13.7k|}
CERT_GetGeneralNameByType:
  979|     62|{
  980|     62|    CERTGeneralName *current;
  981|       |
  982|     62|    if (!genNames)
  ------------------
  |  Branch (982:9): [True: 0, False: 62]
  ------------------
  983|      0|        return NULL;
  984|     62|    current = genNames;
  985|       |
  986|     84|    do {
  987|     84|        if (current->type == type) {
  ------------------
  |  Branch (987:13): [True: 46, False: 38]
  ------------------
  988|     46|            switch (type) {
  ------------------
  |  Branch (988:21): [True: 0, False: 46]
  ------------------
  989|      0|                case certDNSName:
  ------------------
  |  Branch (989:17): [True: 0, False: 46]
  ------------------
  990|      0|                case certEDIPartyName:
  ------------------
  |  Branch (990:17): [True: 0, False: 46]
  ------------------
  991|      0|                case certIPAddress:
  ------------------
  |  Branch (991:17): [True: 0, False: 46]
  ------------------
  992|      0|                case certRegisterID:
  ------------------
  |  Branch (992:17): [True: 0, False: 46]
  ------------------
  993|      0|                case certRFC822Name:
  ------------------
  |  Branch (993:17): [True: 0, False: 46]
  ------------------
  994|      0|                case certX400Address:
  ------------------
  |  Branch (994:17): [True: 0, False: 46]
  ------------------
  995|      0|                case certURI:
  ------------------
  |  Branch (995:17): [True: 0, False: 46]
  ------------------
  996|      0|                    return (void *)&current->name.other; /* SECItem * */
  997|       |
  998|      0|                case certOtherName:
  ------------------
  |  Branch (998:17): [True: 0, False: 46]
  ------------------
  999|      0|                    return (void *)&current->name.OthName; /* OthName * */
 1000|       |
 1001|     46|                case certDirectoryName:
  ------------------
  |  Branch (1001:17): [True: 46, False: 0]
  ------------------
 1002|     46|                    return derFormat
  ------------------
  |  Branch (1002:28): [True: 46, False: 0]
  ------------------
 1003|     46|                               ? (void *)&current
 1004|     46|                                     ->derDirectoryName /* SECItem * */
 1005|     46|                               : (void *)&current->name
 1006|      0|                                     .directoryName; /* CERTName * */
 1007|     46|            }
 1008|      0|            PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1009|      0|            return NULL;
 1010|     46|        }
 1011|     38|        current = CERT_GetNextGeneralName(current);
 1012|     38|    } while (current != genNames);
  ------------------
  |  Branch (1012:14): [True: 22, False: 16]
  ------------------
 1013|     16|    return NULL;
 1014|     62|}
CERT_GetNamesLength:
 1018|  6.43k|{
 1019|  6.43k|    int length = 0;
 1020|  6.43k|    CERTGeneralName *first;
 1021|       |
 1022|  6.43k|    first = names;
 1023|  6.43k|    if (names != NULL) {
  ------------------
  |  Branch (1023:9): [True: 6.43k, False: 0]
  ------------------
 1024|  11.2k|        do {
 1025|  11.2k|            length++;
 1026|  11.2k|            names = CERT_GetNextGeneralName(names);
 1027|  11.2k|        } while (names != first);
  ------------------
  |  Branch (1027:18): [True: 4.84k, False: 6.43k]
  ------------------
 1028|  6.43k|    }
 1029|  6.43k|    return length;
 1030|  6.43k|}
cert_ExtractDNEmailAddrs:
 1037|  6.50k|{
 1038|  6.50k|    CERTGeneralName *nameList = NULL;
 1039|  6.50k|    const CERTRDN **nRDNs = (const CERTRDN **)(name->name.directoryName.rdns);
 1040|  6.50k|    SECStatus rv = SECSuccess;
 1041|       |
 1042|  6.50k|    PORT_Assert(name->type == certDirectoryName);
  ------------------
  |  |  120|  6.50k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  6.50k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 6.50k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1043|  6.50k|    if (name->type != certDirectoryName) {
  ------------------
  |  Branch (1043:9): [True: 0, False: 6.50k]
  ------------------
 1044|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1045|      0|        return SECFailure;
 1046|      0|    }
 1047|       |    /* TODO: mark arena */
 1048|  22.1k|    while (nRDNs && *nRDNs) { /* loop over RDNs */
  ------------------
  |  Branch (1048:12): [True: 22.1k, False: 0]
  |  Branch (1048:21): [True: 15.6k, False: 6.43k]
  ------------------
 1049|  15.6k|        const CERTRDN *nRDN = *nRDNs++;
 1050|  15.6k|        CERTAVA **nAVAs = nRDN->avas;
 1051|  31.1k|        while (nAVAs && *nAVAs) { /* loop over AVAs */
  ------------------
  |  Branch (1051:16): [True: 31.1k, False: 0]
  |  Branch (1051:25): [True: 15.5k, False: 15.5k]
  ------------------
 1052|  15.5k|            int tag;
 1053|  15.5k|            CERTAVA *nAVA = *nAVAs++;
 1054|  15.5k|            tag = CERT_GetAVATag(nAVA);
 1055|  15.5k|            if (tag == SEC_OID_PKCS9_EMAIL_ADDRESS ||
  ------------------
  |  Branch (1055:17): [True: 271, False: 15.2k]
  ------------------
 1056|  15.5k|                tag == SEC_OID_RFC1274_MAIL) { /* email AVA */
  ------------------
  |  Branch (1056:17): [True: 0, False: 15.2k]
  ------------------
 1057|    271|                CERTGeneralName *newName = NULL;
 1058|    271|                SECItem *avaValue = CERT_DecodeAVAValue(&nAVA->value);
 1059|    271|                if (!avaValue)
  ------------------
  |  Branch (1059:21): [True: 78, False: 193]
  ------------------
 1060|     78|                    goto loser;
 1061|    193|                rv = SECFailure;
 1062|    193|                newName = CERT_NewGeneralName(arena, certRFC822Name);
 1063|    193|                if (newName) {
  ------------------
  |  Branch (1063:21): [True: 193, False: 0]
  ------------------
 1064|    193|                    rv =
 1065|    193|                        SECITEM_CopyItem(arena, &newName->name.other, avaValue);
  ------------------
  |  |  106|    193|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1066|    193|                }
 1067|    193|                SECITEM_FreeItem(avaValue, PR_TRUE);
  ------------------
  |  |  108|    193|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                              SECITEM_FreeItem(avaValue, PR_TRUE);
  ------------------
  |  |  437|    193|#define PR_TRUE 1
  ------------------
 1068|    193|                if (rv != SECSuccess)
  ------------------
  |  Branch (1068:21): [True: 0, False: 193]
  ------------------
 1069|      0|                    goto loser;
 1070|    193|                nameList = cert_CombineNamesLists(nameList, newName);
 1071|    193|            } /* handle one email AVA */
 1072|  15.5k|        }     /* loop over AVAs */
 1073|  15.6k|    }         /* loop over RDNs */
 1074|       |    /* combine new names with old one. */
 1075|  6.43k|    (void)cert_CombineNamesLists(name, nameList);
 1076|       |    /* TODO: unmark arena */
 1077|  6.43k|    return SECSuccess;
 1078|       |
 1079|     78|loser:
 1080|       |    /* TODO: release arena back to mark */
 1081|     78|    return SECFailure;
 1082|  6.50k|}
CERT_GetConstrainedCertificateNames:
 1100|  6.50k|{
 1101|  6.50k|    CERTGeneralName *DN;
 1102|  6.50k|    CERTGeneralName *SAN;
 1103|  6.50k|    PRUint32 numDNSNames = 0;
 1104|  6.50k|    SECStatus rv;
 1105|       |
 1106|  6.50k|    if (!arena) {
  ------------------
  |  Branch (1106:9): [True: 0, False: 6.50k]
  ------------------
 1107|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1108|      0|        return NULL;
 1109|      0|    }
 1110|       |    /* TODO: mark arena */
 1111|  6.50k|    DN = CERT_NewGeneralName(arena, certDirectoryName);
 1112|  6.50k|    if (DN == NULL) {
  ------------------
  |  Branch (1112:9): [True: 0, False: 6.50k]
  ------------------
 1113|      0|        goto loser;
 1114|      0|    }
 1115|  6.50k|    rv = CERT_CopyName(arena, &DN->name.directoryName, &cert->subject);
 1116|  6.50k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1116:9): [True: 0, False: 6.50k]
  ------------------
 1117|      0|        goto loser;
 1118|      0|    }
 1119|  6.50k|    rv = SECITEM_CopyItem(arena, &DN->derDirectoryName, &cert->derSubject);
  ------------------
  |  |  106|  6.50k|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1120|  6.50k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1120:9): [True: 0, False: 6.50k]
  ------------------
 1121|      0|        goto loser;
 1122|      0|    }
 1123|       |    /* Extract email addresses from DN, construct CERTGeneralName structs
 1124|       |    ** for them, add them to the name list
 1125|       |    */
 1126|  6.50k|    rv = cert_ExtractDNEmailAddrs(DN, arena);
 1127|  6.50k|    if (rv != SECSuccess)
  ------------------
  |  Branch (1127:9): [True: 78, False: 6.43k]
  ------------------
 1128|     78|        goto loser;
 1129|       |
 1130|       |    /* Now extract any GeneralNames from the subject name names extension. */
 1131|  6.43k|    SAN = cert_GetSubjectAltNameList(cert, arena);
 1132|  6.43k|    if (SAN) {
  ------------------
  |  Branch (1132:9): [True: 205, False: 6.22k]
  ------------------
 1133|    205|        numDNSNames = cert_CountDNSPatterns(SAN);
 1134|    205|        DN = cert_CombineNamesLists(DN, SAN);
 1135|    205|    }
 1136|  6.43k|    if (!numDNSNames && includeSubjectCommonName) {
  ------------------
  |  Branch (1136:9): [True: 6.26k, False: 162]
  |  Branch (1136:25): [True: 685, False: 5.58k]
  ------------------
 1137|    685|        char *cn = CERT_GetCommonName(&cert->subject);
 1138|    685|        if (cn) {
  ------------------
  |  Branch (1138:13): [True: 476, False: 209]
  ------------------
 1139|    476|            CERTGeneralName *CN = CERT_NewGeneralName(arena, certDNSName);
 1140|    476|            if (CN) {
  ------------------
  |  Branch (1140:17): [True: 476, False: 0]
  ------------------
 1141|    476|                SECItem cnItem = { siBuffer, NULL, 0 };
 1142|    476|                cnItem.data = (unsigned char *)cn;
 1143|    476|                cnItem.len = strlen(cn);
 1144|    476|                rv = SECITEM_CopyItem(arena, &CN->name.other, &cnItem);
  ------------------
  |  |  106|    476|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1145|    476|                if (rv == SECSuccess) {
  ------------------
  |  Branch (1145:21): [True: 476, False: 0]
  ------------------
 1146|    476|                    DN = cert_CombineNamesLists(DN, CN);
 1147|    476|                }
 1148|    476|            }
 1149|    476|            PORT_Free(cn);
  ------------------
  |  |   60|    476|#define PORT_Free PORT_Free_Util
  ------------------
 1150|    476|        }
 1151|    685|    }
 1152|  6.43k|    if (rv == SECSuccess) {
  ------------------
  |  Branch (1152:9): [True: 6.43k, False: 0]
  ------------------
 1153|       |        /* TODO: unmark arena */
 1154|  6.43k|        return DN;
 1155|  6.43k|    }
 1156|     78|loser:
 1157|       |    /* TODO: release arena to mark */
 1158|     78|    return NULL;
 1159|  6.43k|}
CERT_GetImposedNameConstraints:
 1650|     81|{
 1651|     81|    size_t i;
 1652|       |
 1653|     81|    if (!extensions) {
  ------------------
  |  Branch (1653:9): [True: 0, False: 81]
  ------------------
 1654|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1655|      0|        return SECFailure;
 1656|      0|    }
 1657|       |
 1658|    243|    for (i = 0; i < PR_ARRAY_SIZE(builtInNameConstraints); ++i) {
  ------------------
  |  |  167|    243|#define PR_ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0]))
  ------------------
  |  Branch (1658:17): [True: 162, False: 81]
  ------------------
 1659|    162|        if (SECITEM_ItemsAreEqual(derSubject, &builtInNameConstraints[i][0])) {
  ------------------
  |  |  109|    162|#define SECITEM_ItemsAreEqual SECITEM_ItemsAreEqual_Util
  ------------------
  |  Branch (1659:13): [True: 0, False: 162]
  ------------------
 1660|      0|            return SECITEM_CopyItem(NULL, extensions,
  ------------------
  |  |  106|      0|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1661|      0|                                    &builtInNameConstraints[i][1]);
 1662|      0|        }
 1663|    162|    }
 1664|       |
 1665|     81|    PORT_SetError(SEC_ERROR_EXTENSION_NOT_FOUND);
  ------------------
  |  |   65|     81|#define PORT_SetError PORT_SetError_Util
  ------------------
 1666|     81|    return SECFailure;
 1667|     81|}
CERT_FindNameConstraintsExten:
 1678|     81|{
 1679|     81|    SECStatus rv = SECSuccess;
 1680|     81|    SECItem constraintsExtension;
 1681|     81|    void *mark = NULL;
 1682|       |
 1683|     81|    *constraints = NULL;
 1684|       |
 1685|     81|    rv = CERT_FindCertExtension(cert, SEC_OID_X509_NAME_CONSTRAINTS,
 1686|     81|                                &constraintsExtension);
 1687|     81|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1687:9): [True: 81, False: 0]
  ------------------
 1688|     81|        if (PORT_GetError() != SEC_ERROR_EXTENSION_NOT_FOUND) {
  ------------------
  |  |   62|     81|#define PORT_GetError PORT_GetError_Util
  ------------------
  |  Branch (1688:13): [True: 0, False: 81]
  ------------------
 1689|      0|            return rv;
 1690|      0|        }
 1691|     81|        rv = CERT_GetImposedNameConstraints(&cert->derSubject,
 1692|     81|                                            &constraintsExtension);
 1693|     81|        if (rv != SECSuccess) {
  ------------------
  |  Branch (1693:13): [True: 81, False: 0]
  ------------------
 1694|     81|            if (PORT_GetError() == SEC_ERROR_EXTENSION_NOT_FOUND) {
  ------------------
  |  |   62|     81|#define PORT_GetError PORT_GetError_Util
  ------------------
  |  Branch (1694:17): [True: 81, False: 0]
  ------------------
 1695|     81|                return SECSuccess;
 1696|     81|            }
 1697|      0|            return rv;
 1698|     81|        }
 1699|     81|    }
 1700|       |
 1701|      0|    mark = PORT_ArenaMark(arena);
  ------------------
  |  |   55|      0|#define PORT_ArenaMark PORT_ArenaMark_Util
  ------------------
 1702|       |
 1703|      0|    *constraints = cert_DecodeNameConstraints(arena, &constraintsExtension);
 1704|      0|    if (*constraints == NULL) { /* decode failed */
  ------------------
  |  Branch (1704:9): [True: 0, False: 0]
  ------------------
 1705|      0|        rv = SECFailure;
 1706|      0|    }
 1707|      0|    PORT_Free(constraintsExtension.data);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1708|       |
 1709|      0|    if (rv == SECFailure) {
  ------------------
  |  Branch (1709:9): [True: 0, False: 0]
  ------------------
 1710|      0|        PORT_ArenaRelease(arena, mark);
  ------------------
  |  |   56|      0|#define PORT_ArenaRelease PORT_ArenaRelease_Util
  ------------------
 1711|      0|    } else {
 1712|      0|        PORT_ArenaUnmark(arena, mark);
  ------------------
  |  |   58|      0|#define PORT_ArenaUnmark PORT_ArenaUnmark_Util
  ------------------
 1713|      0|    }
 1714|       |
 1715|      0|    return rv;
 1716|     81|}
CERT_CompareNameSpace:
 1768|     81|{
 1769|     81|    SECStatus rv = SECSuccess;
 1770|     81|    CERTNameConstraints *constraints;
 1771|     81|    CERTGeneralName *currentName;
 1772|     81|    int count = 0;
 1773|     81|    CERTCertificate *badCert = NULL;
 1774|       |
 1775|       |    /* If no names to check, then no names can be bad. */
 1776|     81|    if (!namesList)
  ------------------
  |  Branch (1776:9): [True: 0, False: 81]
  ------------------
 1777|      0|        goto done;
 1778|     81|    rv = CERT_FindNameConstraintsExten(reqArena, cert, &constraints);
 1779|     81|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1779:9): [True: 0, False: 81]
  ------------------
 1780|      0|        count = -1;
 1781|      0|        goto done;
 1782|      0|    }
 1783|       |
 1784|     81|    currentName = namesList;
 1785|    111|    do {
 1786|    111|        if (constraints) {
  ------------------
  |  Branch (1786:13): [True: 0, False: 111]
  ------------------
 1787|      0|            rv = CERT_CheckNameSpace(reqArena, constraints, currentName);
 1788|      0|            if (rv != SECSuccess) {
  ------------------
  |  Branch (1788:17): [True: 0, False: 0]
  ------------------
 1789|      0|                break;
 1790|      0|            }
 1791|      0|        }
 1792|    111|        currentName = CERT_GetNextGeneralName(currentName);
 1793|    111|        count++;
 1794|    111|    } while (currentName != namesList);
  ------------------
  |  Branch (1794:14): [True: 30, False: 81]
  ------------------
 1795|       |
 1796|     81|done:
 1797|     81|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1797:9): [True: 0, False: 81]
  ------------------
 1798|      0|        badCert = (count >= 0) ? certsList[count] : cert;
  ------------------
  |  Branch (1798:19): [True: 0, False: 0]
  ------------------
 1799|      0|    }
 1800|     81|    if (pBadCert)
  ------------------
  |  Branch (1800:9): [True: 81, False: 0]
  ------------------
 1801|     81|        *pBadCert = badCert;
 1802|       |
 1803|     81|    return rv;
 1804|     81|}

CERT_DecodeOidSequence:
  590|    954|{
  591|    954|    PLArenaPool *arena = NULL;
  592|    954|    SECStatus rv;
  593|    954|    CERTOidSequence *oidSeq;
  594|    954|    SECItem newSeqItem;
  595|       |
  596|       |    /* make a new arena */
  597|    954|    arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   63|    954|#define PORT_NewArena PORT_NewArena_Util
  ------------------
                  arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|    954|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  598|       |
  599|    954|    if (!arena) {
  ------------------
  |  Branch (599:9): [True: 0, False: 954]
  ------------------
  600|      0|        goto loser;
  601|      0|    }
  602|       |
  603|       |    /* allocate the userNotice structure */
  604|    954|    oidSeq =
  605|    954|        (CERTOidSequence *)PORT_ArenaZAlloc(arena, sizeof(CERTOidSequence));
  ------------------
  |  |   59|    954|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
  606|       |
  607|    954|    if (oidSeq == NULL) {
  ------------------
  |  Branch (607:9): [True: 0, False: 954]
  ------------------
  608|      0|        goto loser;
  609|      0|    }
  610|       |
  611|    954|    oidSeq->arena = arena;
  612|       |
  613|       |    /* copy the DER into the arena, since Quick DER returns data that points
  614|       |       into the DER input, which may get freed by the caller */
  615|    954|    rv = SECITEM_CopyItem(arena, &newSeqItem, seqItem);
  ------------------
  |  |  106|    954|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
  616|    954|    if (rv != SECSuccess) {
  ------------------
  |  Branch (616:9): [True: 0, False: 954]
  ------------------
  617|      0|        goto loser;
  618|      0|    }
  619|       |
  620|       |    /* decode the user notice */
  621|    954|    rv =
  622|    954|        SEC_QuickDERDecodeItem(arena, oidSeq, CERT_OidSeqTemplate, &newSeqItem);
  ------------------
  |  |  102|    954|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  623|       |
  624|    954|    if (rv != SECSuccess) {
  ------------------
  |  Branch (624:9): [True: 695, False: 259]
  ------------------
  625|    695|        goto loser;
  626|    695|    }
  627|       |
  628|    259|    return (oidSeq);
  629|       |
  630|    695|loser:
  631|    695|    if (arena) {
  ------------------
  |  Branch (631:9): [True: 695, False: 0]
  ------------------
  632|    695|        PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |   61|    695|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |  438|    695|#define PR_FALSE 0
  ------------------
  633|    695|    }
  634|    695|    return (NULL);
  635|    954|}
CERT_DestroyOidSequence:
  639|    259|{
  640|    259|    if (oidSeq != NULL) {
  ------------------
  |  Branch (640:9): [True: 259, False: 0]
  ------------------
  641|    259|        PORT_FreeArena(oidSeq->arena, PR_FALSE);
  ------------------
  |  |   61|    259|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(oidSeq->arena, PR_FALSE);
  ------------------
  |  |  438|    259|#define PR_FALSE 0
  ------------------
  642|    259|    }
  643|    259|    return;
  644|    259|}
CERT_GovtApprovedBitSet:
  648|  5.75k|{
  649|  5.75k|    SECStatus rv;
  650|  5.75k|    SECItem extItem;
  651|  5.75k|    CERTOidSequence *oidSeq = NULL;
  652|  5.75k|    PRBool ret;
  653|  5.75k|    SECItem **oids;
  654|  5.75k|    SECItem *oid;
  655|  5.75k|    SECOidTag oidTag;
  656|       |
  657|  5.75k|    extItem.data = NULL;
  658|  5.75k|    rv = CERT_FindCertExtension(cert, SEC_OID_X509_EXT_KEY_USAGE, &extItem);
  659|  5.75k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (659:9): [True: 5.28k, False: 468]
  ------------------
  660|  5.28k|        goto loser;
  661|  5.28k|    }
  662|       |
  663|    468|    oidSeq = CERT_DecodeOidSequence(&extItem);
  664|    468|    if (oidSeq == NULL) {
  ------------------
  |  Branch (664:9): [True: 347, False: 121]
  ------------------
  665|    347|        goto loser;
  666|    347|    }
  667|       |
  668|    121|    oids = oidSeq->oids;
  669|    625|    while (oids != NULL && *oids != NULL) {
  ------------------
  |  Branch (669:12): [True: 625, False: 0]
  |  Branch (669:28): [True: 525, False: 100]
  ------------------
  670|    525|        oid = *oids;
  671|       |
  672|    525|        oidTag = SECOID_FindOIDTag(oid);
  ------------------
  |  |  117|    525|#define SECOID_FindOIDTag SECOID_FindOIDTag_Util
  ------------------
  673|       |
  674|    525|        if (oidTag == SEC_OID_NS_KEY_USAGE_GOVT_APPROVED) {
  ------------------
  |  Branch (674:13): [True: 21, False: 504]
  ------------------
  675|     21|            goto success;
  676|     21|        }
  677|       |
  678|    504|        oids++;
  679|    504|    }
  680|       |
  681|  5.73k|loser:
  682|  5.73k|    ret = PR_FALSE;
  ------------------
  |  |  438|  5.73k|#define PR_FALSE 0
  ------------------
  683|  5.73k|    goto done;
  684|     21|success:
  685|     21|    ret = PR_TRUE;
  ------------------
  |  |  437|     21|#define PR_TRUE 1
  ------------------
  686|  5.75k|done:
  687|  5.75k|    if (oidSeq != NULL) {
  ------------------
  |  Branch (687:9): [True: 121, False: 5.63k]
  ------------------
  688|    121|        CERT_DestroyOidSequence(oidSeq);
  689|    121|    }
  690|  5.75k|    if (extItem.data != NULL) {
  ------------------
  |  Branch (690:9): [True: 468, False: 5.28k]
  ------------------
  691|    468|        PORT_Free(extItem.data);
  ------------------
  |  |   60|    468|#define PORT_Free PORT_Free_Util
  ------------------
  692|    468|    }
  693|  5.75k|    return (ret);
  694|     21|}

CERT_GetAVATag:
   69|  65.8k|{
   70|  65.8k|    SECOidData *oid;
   71|  65.8k|    if (!ava->type.data)
  ------------------
  |  Branch (71:9): [True: 0, False: 65.8k]
  ------------------
   72|      0|        return (SECOidTag)-1;
   73|       |
   74|  65.8k|    oid = SECOID_FindOID(&ava->type);
  ------------------
  |  |  115|  65.8k|#define SECOID_FindOID SECOID_FindOID_Util
  ------------------
   75|       |
   76|  65.8k|    if (oid) {
  ------------------
  |  Branch (76:9): [True: 52.7k, False: 13.1k]
  ------------------
   77|  52.7k|        return (oid->offset);
   78|  52.7k|    }
   79|  13.1k|    return (SECOidTag)-1;
   80|  65.8k|}
CERT_CopyAVA:
  223|  16.2k|{
  224|  16.2k|    CERTAVA *ava;
  225|  16.2k|    int rv;
  226|       |
  227|  16.2k|    ava = (CERTAVA *)PORT_ArenaZAlloc(arena, sizeof(CERTAVA));
  ------------------
  |  |   59|  16.2k|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
  228|  16.2k|    if (ava) {
  ------------------
  |  Branch (228:9): [True: 16.2k, False: 0]
  ------------------
  229|  16.2k|        rv = SECITEM_CopyItem(arena, &ava->type, &from->type);
  ------------------
  |  |  106|  16.2k|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
  230|  16.2k|        if (rv)
  ------------------
  |  Branch (230:13): [True: 0, False: 16.2k]
  ------------------
  231|      0|            goto loser;
  232|  16.2k|        rv = SECITEM_CopyItem(arena, &ava->value, &from->value);
  ------------------
  |  |  106|  16.2k|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
  233|  16.2k|        if (rv)
  ------------------
  |  Branch (233:13): [True: 0, False: 16.2k]
  ------------------
  234|      0|            goto loser;
  235|  16.2k|    }
  236|  16.2k|    return ava;
  237|       |
  238|      0|loser:
  239|      0|    return 0;
  240|  16.2k|}
CERT_CreateRDN:
  244|  16.2k|{
  245|  16.2k|    CERTAVA *ava;
  246|  16.2k|    CERTRDN *rdn;
  247|  16.2k|    va_list ap;
  248|  16.2k|    unsigned count;
  249|  16.2k|    CERTAVA **avap;
  250|       |
  251|  16.2k|    rdn = (CERTRDN *)PORT_ArenaAlloc(arena, sizeof(CERTRDN));
  ------------------
  |  |   53|  16.2k|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  252|  16.2k|    if (rdn) {
  ------------------
  |  Branch (252:9): [True: 16.2k, False: 0]
  ------------------
  253|       |        /* Count number of avas going into the rdn */
  254|  16.2k|        count = 0;
  255|  16.2k|        if (ava0) {
  ------------------
  |  Branch (255:13): [True: 0, False: 16.2k]
  ------------------
  256|      0|            count++;
  257|      0|            va_start(ap, ava0);
  258|      0|            while (va_arg(ap, CERTAVA *) != 0) {
  ------------------
  |  Branch (258:20): [True: 0, False: 0]
  ------------------
  259|      0|                count++;
  260|      0|            }
  261|      0|            va_end(ap);
  262|      0|        }
  263|       |
  264|       |        /* Now fill in the pointers */
  265|  16.2k|        rdn->avas = avap =
  266|  16.2k|            (CERTAVA **)PORT_ArenaAlloc(arena, (count + 1) * sizeof(CERTAVA *));
  ------------------
  |  |   53|  16.2k|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  267|  16.2k|        if (!avap) {
  ------------------
  |  Branch (267:13): [True: 0, False: 16.2k]
  ------------------
  268|      0|            return 0;
  269|      0|        }
  270|  16.2k|        if (ava0) {
  ------------------
  |  Branch (270:13): [True: 0, False: 16.2k]
  ------------------
  271|      0|            *avap++ = ava0;
  272|      0|            va_start(ap, ava0);
  273|      0|            while ((ava = va_arg(ap, CERTAVA *)) != 0) {
  ------------------
  |  Branch (273:20): [True: 0, False: 0]
  ------------------
  274|      0|                *avap++ = ava;
  275|      0|            }
  276|      0|            va_end(ap);
  277|      0|        }
  278|  16.2k|        *avap++ = 0;
  279|  16.2k|    }
  280|  16.2k|    return rdn;
  281|  16.2k|}
CERT_AddAVA:
  285|  16.4k|{
  286|  16.4k|    rdn->avas = (CERTAVA **)AddToArray(arena, (void **)rdn->avas, ava);
  287|  16.4k|    return rdn->avas ? SECSuccess : SECFailure;
  ------------------
  |  Branch (287:12): [True: 16.4k, False: 0]
  ------------------
  288|  16.4k|}
CERT_CopyRDN:
  292|  16.2k|{
  293|  16.2k|    CERTAVA **avas, *fava, *tava;
  294|  16.2k|    SECStatus rv = SECSuccess;
  295|       |
  296|       |    /* Copy each ava from from */
  297|  16.2k|    avas = from->avas;
  298|  16.2k|    if (avas) {
  ------------------
  |  Branch (298:9): [True: 16.2k, False: 0]
  ------------------
  299|  16.2k|        if (avas[0] == NULL) {
  ------------------
  |  Branch (299:13): [True: 264, False: 16.0k]
  ------------------
  300|    264|            rv = CERT_AddAVA(arena, to, NULL);
  301|    264|            return rv;
  302|    264|        }
  303|  32.2k|        while ((fava = *avas++) != 0) {
  ------------------
  |  Branch (303:16): [True: 16.2k, False: 16.0k]
  ------------------
  304|  16.2k|            tava = CERT_CopyAVA(arena, fava);
  305|  16.2k|            if (!tava) {
  ------------------
  |  Branch (305:17): [True: 0, False: 16.2k]
  ------------------
  306|      0|                rv = SECFailure;
  307|      0|                break;
  308|      0|            }
  309|  16.2k|            rv = CERT_AddAVA(arena, to, tava);
  310|  16.2k|            if (rv != SECSuccess)
  ------------------
  |  Branch (310:17): [True: 0, False: 16.2k]
  ------------------
  311|      0|                break;
  312|  16.2k|        }
  313|  16.0k|    }
  314|  16.0k|    return rv;
  315|  16.2k|}
CERT_DestroyName:
  386|  6.50k|{
  387|  6.50k|    if (name) {
  ------------------
  |  Branch (387:9): [True: 6.50k, False: 0]
  ------------------
  388|  6.50k|        PLArenaPool *arena = name->arena;
  389|  6.50k|        name->rdns = NULL;
  390|  6.50k|        name->arena = NULL;
  391|  6.50k|        if (arena)
  ------------------
  |  Branch (391:13): [True: 0, False: 6.50k]
  ------------------
  392|      0|            PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |   61|      0|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                          PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  393|  6.50k|    }
  394|  6.50k|}
CERT_AddRDN:
  398|  16.3k|{
  399|  16.3k|    name->rdns = (CERTRDN **)AddToArray(name->arena, (void **)name->rdns, rdn);
  400|  16.3k|    return name->rdns ? SECSuccess : SECFailure;
  ------------------
  |  Branch (400:12): [True: 16.3k, False: 0]
  ------------------
  401|  16.3k|}
CERT_CopyName:
  405|  6.50k|{
  406|  6.50k|    CERTRDN **rdns, *frdn, *trdn;
  407|  6.50k|    SECStatus rv = SECSuccess;
  408|       |
  409|  6.50k|    if (!to || !from) {
  ------------------
  |  Branch (409:9): [True: 0, False: 6.50k]
  |  Branch (409:16): [True: 0, False: 6.50k]
  ------------------
  410|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  411|      0|        return SECFailure;
  412|      0|    }
  413|       |
  414|  6.50k|    CERT_DestroyName(to);
  415|  6.50k|    to->arena = arena;
  416|       |
  417|       |    /* Copy each rdn from from */
  418|  6.50k|    rdns = from->rdns;
  419|  6.50k|    if (rdns) {
  ------------------
  |  Branch (419:9): [True: 6.50k, False: 0]
  ------------------
  420|  6.50k|        if (rdns[0] == NULL) {
  ------------------
  |  Branch (420:13): [True: 58, False: 6.45k]
  ------------------
  421|     58|            rv = CERT_AddRDN(to, NULL);
  422|     58|            return rv;
  423|     58|        }
  424|  22.7k|        while ((frdn = *rdns++) != NULL) {
  ------------------
  |  Branch (424:16): [True: 16.2k, False: 6.45k]
  ------------------
  425|  16.2k|            trdn = CERT_CreateRDN(arena, NULL);
  426|  16.2k|            if (!trdn) {
  ------------------
  |  Branch (426:17): [True: 0, False: 16.2k]
  ------------------
  427|      0|                rv = SECFailure;
  428|      0|                break;
  429|      0|            }
  430|  16.2k|            rv = CERT_CopyRDN(arena, trdn, frdn);
  431|  16.2k|            if (rv != SECSuccess)
  ------------------
  |  Branch (431:17): [True: 0, False: 16.2k]
  ------------------
  432|      0|                break;
  433|  16.2k|            rv = CERT_AddRDN(to, trdn);
  434|  16.2k|            if (rv != SECSuccess)
  ------------------
  |  Branch (434:17): [True: 0, False: 16.2k]
  ------------------
  435|      0|                break;
  436|  16.2k|        }
  437|  6.45k|    }
  438|  6.45k|    return rv;
  439|  6.50k|}
CERT_DecodeAVAValue:
  599|  22.9k|{
  600|  22.9k|    SECItem *retItem;
  601|  22.9k|    const SEC_ASN1Template *theTemplate = NULL;
  602|  22.9k|    enum { conv_none,
  603|  22.9k|           conv_ucs4,
  604|  22.9k|           conv_ucs2,
  605|  22.9k|           conv_iso88591 } convert = conv_none;
  606|  22.9k|    SECItem avaValue = { siBuffer, 0 };
  607|  22.9k|    PORTCheapArenaPool tmpArena;
  608|       |
  609|  22.9k|    if (!derAVAValue || !derAVAValue->len || !derAVAValue->data) {
  ------------------
  |  Branch (609:9): [True: 0, False: 22.9k]
  |  Branch (609:25): [True: 0, False: 22.9k]
  |  Branch (609:46): [True: 0, False: 22.9k]
  ------------------
  610|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  611|      0|        return NULL;
  612|      0|    }
  613|       |
  614|  22.9k|    switch (derAVAValue->data[0]) {
  615|    235|        case SEC_ASN1_UNIVERSAL_STRING:
  ------------------
  |  |  104|    235|#define SEC_ASN1_UNIVERSAL_STRING 0x1c
  ------------------
  |  Branch (615:9): [True: 235, False: 22.7k]
  ------------------
  616|    235|            convert = conv_ucs4;
  617|    235|            theTemplate = SEC_ASN1_GET(SEC_UniversalStringTemplate);
  ------------------
  |  |  188|    235|#define SEC_ASN1_GET(x) x
  ------------------
  618|    235|            break;
  619|    400|        case SEC_ASN1_IA5_STRING:
  ------------------
  |  |   98|    400|#define SEC_ASN1_IA5_STRING 0x16
  ------------------
  |  Branch (619:9): [True: 400, False: 22.5k]
  ------------------
  620|    400|            theTemplate = SEC_ASN1_GET(SEC_IA5StringTemplate);
  ------------------
  |  |  188|    400|#define SEC_ASN1_GET(x) x
  ------------------
  621|    400|            break;
  622|  15.9k|        case SEC_ASN1_PRINTABLE_STRING:
  ------------------
  |  |   95|  15.9k|#define SEC_ASN1_PRINTABLE_STRING 0x13
  ------------------
  |  Branch (622:9): [True: 15.9k, False: 7.02k]
  ------------------
  623|  15.9k|            theTemplate = SEC_ASN1_GET(SEC_PrintableStringTemplate);
  ------------------
  |  |  188|  15.9k|#define SEC_ASN1_GET(x) x
  ------------------
  624|  15.9k|            break;
  625|  2.29k|        case SEC_ASN1_T61_STRING:
  ------------------
  |  |   96|  2.29k|#define SEC_ASN1_T61_STRING 0x14
  ------------------
  |  Branch (625:9): [True: 2.29k, False: 20.6k]
  ------------------
  626|       |            /*
  627|       |             * Per common practice, we're not decoding actual T.61, but instead
  628|       |             * treating T61-labeled strings as containing ISO-8859-1.
  629|       |             */
  630|  2.29k|            convert = conv_iso88591;
  631|  2.29k|            theTemplate = SEC_ASN1_GET(SEC_T61StringTemplate);
  ------------------
  |  |  188|  2.29k|#define SEC_ASN1_GET(x) x
  ------------------
  632|  2.29k|            break;
  633|    373|        case SEC_ASN1_BMP_STRING:
  ------------------
  |  |  106|    373|#define SEC_ASN1_BMP_STRING 0x1e
  ------------------
  |  Branch (633:9): [True: 373, False: 22.6k]
  ------------------
  634|    373|            convert = conv_ucs2;
  635|    373|            theTemplate = SEC_ASN1_GET(SEC_BMPStringTemplate);
  ------------------
  |  |  188|    373|#define SEC_ASN1_GET(x) x
  ------------------
  636|    373|            break;
  637|  1.94k|        case SEC_ASN1_UTF8_STRING:
  ------------------
  |  |   88|  1.94k|#define SEC_ASN1_UTF8_STRING 0x0c
  ------------------
  |  Branch (637:9): [True: 1.94k, False: 21.0k]
  ------------------
  638|       |            /* No conversion needed ! */
  639|  1.94k|            theTemplate = SEC_ASN1_GET(SEC_UTF8StringTemplate);
  ------------------
  |  |  188|  1.94k|#define SEC_ASN1_GET(x) x
  ------------------
  640|  1.94k|            break;
  641|  1.78k|        default:
  ------------------
  |  Branch (641:9): [True: 1.78k, False: 21.1k]
  ------------------
  642|  1.78k|            PORT_SetError(SEC_ERROR_INVALID_AVA);
  ------------------
  |  |   65|  1.78k|#define PORT_SetError PORT_SetError_Util
  ------------------
  643|  1.78k|            return NULL;
  644|  22.9k|    }
  645|       |
  646|  21.1k|    PORT_Memset(&avaValue, 0, sizeof(SECItem));
  ------------------
  |  |  182|  21.1k|#define PORT_Memset memset
  ------------------
  647|  21.1k|    PORT_InitCheapArena(&tmpArena, DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|  21.1k|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  648|  21.1k|    if (SEC_QuickDERDecodeItem(&tmpArena.arena, &avaValue, theTemplate,
  ------------------
  |  |  102|  21.1k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  |  Branch (648:9): [True: 0, False: 21.1k]
  ------------------
  649|  21.1k|                               derAVAValue) != SECSuccess) {
  650|      0|        PORT_DestroyCheapArena(&tmpArena);
  651|      0|        return NULL;
  652|      0|    }
  653|       |
  654|  21.1k|    if (convert != conv_none) {
  ------------------
  |  Branch (654:9): [True: 2.90k, False: 18.2k]
  ------------------
  655|  2.90k|        unsigned int utf8ValLen = avaValue.len * 3;
  656|  2.90k|        unsigned char *utf8Val =
  657|  2.90k|            (unsigned char *)PORT_ArenaZAlloc(&tmpArena.arena, utf8ValLen);
  ------------------
  |  |   59|  2.90k|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
  658|       |
  659|  2.90k|        switch (convert) {
  ------------------
  |  Branch (659:17): [True: 0, False: 2.90k]
  ------------------
  660|    235|            case conv_ucs4:
  ------------------
  |  Branch (660:13): [True: 235, False: 2.66k]
  ------------------
  661|    235|                if (avaValue.len % 4 != 0 ||
  ------------------
  |  Branch (661:21): [True: 78, False: 157]
  ------------------
  662|    235|                    !PORT_UCS4_UTF8Conversion(PR_FALSE, avaValue.data,
  ------------------
  |  |  438|    157|#define PR_FALSE 0
  ------------------
  |  Branch (662:21): [True: 58, False: 99]
  ------------------
  663|    157|                                              avaValue.len, utf8Val, utf8ValLen,
  664|    157|                                              &utf8ValLen)) {
  665|    136|                    PORT_DestroyCheapArena(&tmpArena);
  666|    136|                    PORT_SetError(SEC_ERROR_INVALID_AVA);
  ------------------
  |  |   65|    136|#define PORT_SetError PORT_SetError_Util
  ------------------
  667|    136|                    return NULL;
  668|    136|                }
  669|     99|                break;
  670|    373|            case conv_ucs2:
  ------------------
  |  Branch (670:13): [True: 373, False: 2.52k]
  ------------------
  671|    373|                if (avaValue.len % 2 != 0 ||
  ------------------
  |  Branch (671:21): [True: 105, False: 268]
  ------------------
  672|    373|                    !PORT_UCS2_UTF8Conversion(PR_FALSE, avaValue.data,
  ------------------
  |  |   71|    268|#define PORT_UCS2_UTF8Conversion PORT_UCS2_UTF8Conversion_Util
  ------------------
                                  !PORT_UCS2_UTF8Conversion(PR_FALSE, avaValue.data,
  ------------------
  |  |  438|    268|#define PR_FALSE 0
  ------------------
  |  Branch (672:21): [True: 76, False: 192]
  ------------------
  673|    268|                                              avaValue.len, utf8Val, utf8ValLen,
  674|    268|                                              &utf8ValLen)) {
  675|    181|                    PORT_DestroyCheapArena(&tmpArena);
  676|    181|                    PORT_SetError(SEC_ERROR_INVALID_AVA);
  ------------------
  |  |   65|    181|#define PORT_SetError PORT_SetError_Util
  ------------------
  677|    181|                    return NULL;
  678|    181|                }
  679|    192|                break;
  680|  2.29k|            case conv_iso88591:
  ------------------
  |  Branch (680:13): [True: 2.29k, False: 608]
  ------------------
  681|  2.29k|                if (!PORT_ISO88591_UTF8Conversion(avaValue.data, avaValue.len,
  ------------------
  |  Branch (681:21): [True: 0, False: 2.29k]
  ------------------
  682|  2.29k|                                                  utf8Val, utf8ValLen,
  683|  2.29k|                                                  &utf8ValLen)) {
  684|      0|                    PORT_DestroyCheapArena(&tmpArena);
  685|      0|                    PORT_SetError(SEC_ERROR_INVALID_AVA);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  686|      0|                    return NULL;
  687|      0|                }
  688|  2.29k|                break;
  689|  2.29k|            case conv_none:
  ------------------
  |  Branch (689:13): [True: 0, False: 2.90k]
  ------------------
  690|      0|                PORT_Assert(0); /* not reached */
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  691|      0|                break;
  692|  2.90k|        }
  693|       |
  694|  2.58k|        avaValue.data = utf8Val;
  695|  2.58k|        avaValue.len = utf8ValLen;
  696|  2.58k|    }
  697|       |
  698|  20.8k|    retItem = SECITEM_DupItem(&avaValue);
  ------------------
  |  |  107|  20.8k|#define SECITEM_DupItem SECITEM_DupItem_Util
  ------------------
  699|  20.8k|    PORT_DestroyCheapArena(&tmpArena);
  700|  20.8k|    return retItem;
  701|  21.1k|}
secname.c:AddToArray:
   40|  32.8k|{
   41|  32.8k|    unsigned count;
   42|  32.8k|    void **ap;
   43|       |
   44|       |    /* Count up number of slots already in use in the array */
   45|  32.8k|    count = 0;
   46|  32.8k|    ap = array;
   47|  32.8k|    if (ap) {
  ------------------
  |  Branch (47:9): [True: 26.2k, False: 6.50k]
  ------------------
   48|   484k|        while (*ap++) {
  ------------------
  |  Branch (48:16): [True: 457k, False: 26.2k]
  ------------------
   49|   457k|            count++;
   50|   457k|        }
   51|  26.2k|    }
   52|       |
   53|  32.8k|    if (array) {
  ------------------
  |  Branch (53:9): [True: 26.2k, False: 6.50k]
  ------------------
   54|  26.2k|        array =
   55|  26.2k|            (void **)PORT_ArenaGrow(arena, array, (count + 1) * sizeof(void *),
  ------------------
  |  |   54|  26.2k|#define PORT_ArenaGrow PORT_ArenaGrow_Util
  ------------------
   56|  26.2k|                                    (count + 2) * sizeof(void *));
   57|  26.2k|    } else {
   58|  6.50k|        array = (void **)PORT_ArenaAlloc(arena, (count + 2) * sizeof(void *));
  ------------------
  |  |   53|  6.50k|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
   59|  6.50k|    }
   60|  32.8k|    if (array) {
  ------------------
  |  Branch (60:9): [True: 32.8k, False: 0]
  ------------------
   61|  32.8k|        array[count] = element;
   62|  32.8k|        array[count + 1] = 0;
   63|  32.8k|    }
   64|  32.8k|    return array;
   65|  32.8k|}

CERT_GetCertTrust:
   95|  47.0k|{
   96|  47.0k|    SECStatus rv;
   97|  47.0k|    CERT_LockCertTrust(cert);
   98|  47.0k|    if (!cert || cert->trust == NULL) {
  ------------------
  |  Branch (98:9): [True: 0, False: 47.0k]
  |  Branch (98:18): [True: 47.0k, False: 0]
  ------------------
   99|  47.0k|        rv = SECFailure;
  100|  47.0k|    } else {
  101|      0|        *trust = *cert->trust;
  102|      0|        rv = SECSuccess;
  103|      0|    }
  104|  47.0k|    CERT_UnlockCertTrust(cert);
  105|  47.0k|    return (rv);
  106|  47.0k|}
CERT_MapStanError:
  159|    411|{
  160|    411|    PRInt32 *errorStack;
  161|    411|    NSSError error, prevError;
  162|    411|    int secError;
  163|    411|    int i;
  164|       |
  165|    411|    errorStack = NSS_GetErrorStack();
  166|    411|    if (errorStack == 0) {
  ------------------
  |  Branch (166:9): [True: 0, False: 411]
  ------------------
  167|      0|        PORT_SetError(0);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  168|      0|        return;
  169|      0|    }
  170|    411|    error = prevError = CKR_GENERAL_ERROR;
  ------------------
  |  | 1396|    411|#define CKR_GENERAL_ERROR 0x00000005UL
  ------------------
  171|       |    /* get the 'top 2' error codes from the stack */
  172|  1.92k|    for (i = 0; errorStack[i]; i++) {
  ------------------
  |  Branch (172:17): [True: 1.51k, False: 411]
  ------------------
  173|  1.51k|        prevError = error;
  174|  1.51k|        error = errorStack[i];
  175|  1.51k|    }
  176|    411|    if (error == NSS_ERROR_PKCS11) {
  ------------------
  |  Branch (176:9): [True: 0, False: 411]
  ------------------
  177|       |        /* map it */
  178|      0|        secError = PK11_MapError(prevError);
  179|      0|    }
  180|    411|    STAN_MAP_ERROR(NSS_ERROR_NO_ERROR, 0)
  ------------------
  |  |  150|    411|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  181|    411|    STAN_MAP_ERROR(NSS_ERROR_NO_MEMORY, SEC_ERROR_NO_MEMORY)
  ------------------
  |  |  150|    411|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  182|    411|    STAN_MAP_ERROR(NSS_ERROR_INVALID_BASE64, SEC_ERROR_BAD_DATA)
  ------------------
  |  |  150|    411|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  183|    411|    STAN_MAP_ERROR(NSS_ERROR_INVALID_BER, SEC_ERROR_BAD_DER)
  ------------------
  |  |  150|    411|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  184|    411|    STAN_MAP_ERROR(NSS_ERROR_INVALID_ATAV, SEC_ERROR_INVALID_AVA)
  ------------------
  |  |  150|    411|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  185|    411|    STAN_MAP_ERROR(NSS_ERROR_INVALID_PASSWORD, SEC_ERROR_BAD_PASSWORD)
  ------------------
  |  |  150|    411|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  186|    411|    STAN_MAP_ERROR(NSS_ERROR_BUSY, SEC_ERROR_BUSY)
  ------------------
  |  |  150|    411|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  187|    411|    STAN_MAP_ERROR(NSS_ERROR_DEVICE_ERROR, SEC_ERROR_IO)
  ------------------
  |  |  150|    411|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  188|    411|    STAN_MAP_ERROR(NSS_ERROR_CERTIFICATE_ISSUER_NOT_FOUND,
  ------------------
  |  |  150|    411|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  189|    411|                   SEC_ERROR_UNKNOWN_ISSUER)
  190|    411|    STAN_MAP_ERROR(NSS_ERROR_INVALID_CERTIFICATE, SEC_ERROR_CERT_NOT_VALID)
  ------------------
  |  |  150|    411|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  191|    411|    STAN_MAP_ERROR(NSS_ERROR_INVALID_UTF8, SEC_ERROR_BAD_DATA)
  ------------------
  |  |  150|    411|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  192|    411|    STAN_MAP_ERROR(NSS_ERROR_INVALID_NSSOID, SEC_ERROR_BAD_DATA)
  ------------------
  |  |  150|    411|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 411]
  |  |  ------------------
  ------------------
  193|       |
  194|       |    /* these are library failure for lack of a better error code */
  195|    411|    STAN_MAP_ERROR(NSS_ERROR_NOT_FOUND, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |  150|    411|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 125, False: 286]
  |  |  ------------------
  ------------------
  196|    411|    STAN_MAP_ERROR(NSS_ERROR_CERTIFICATE_IN_CACHE, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |  150|    411|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 286]
  |  |  ------------------
  ------------------
  197|    286|    STAN_MAP_ERROR(NSS_ERROR_MAXIMUM_FOUND, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |  150|    286|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 286]
  |  |  ------------------
  ------------------
  198|    286|    STAN_MAP_ERROR(NSS_ERROR_USER_CANCELED, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |  150|    286|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 286]
  |  |  ------------------
  ------------------
  199|    286|    STAN_MAP_ERROR(NSS_ERROR_TRACKER_NOT_INITIALIZED, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |  150|    286|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 286]
  |  |  ------------------
  ------------------
  200|    286|    STAN_MAP_ERROR(NSS_ERROR_ALREADY_INITIALIZED, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |  150|    286|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 286]
  |  |  ------------------
  ------------------
  201|    286|    STAN_MAP_ERROR(NSS_ERROR_ARENA_MARKED_BY_ANOTHER_THREAD,
  ------------------
  |  |  150|    286|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 286]
  |  |  ------------------
  ------------------
  202|    286|                   SEC_ERROR_LIBRARY_FAILURE)
  203|    286|    STAN_MAP_ERROR(NSS_ERROR_HASH_COLLISION, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |  150|    286|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 286]
  |  |  ------------------
  ------------------
  204|       |
  205|    286|    STAN_MAP_ERROR(NSS_ERROR_INTERNAL_ERROR, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |  150|    286|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 286]
  |  |  ------------------
  ------------------
  206|       |
  207|       |    /* these are all invalid arguments */
  208|    286|    STAN_MAP_ERROR(NSS_ERROR_INVALID_ARGUMENT, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|    286|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 286]
  |  |  ------------------
  ------------------
  209|    286|    STAN_MAP_ERROR(NSS_ERROR_INVALID_POINTER, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|    286|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 286]
  |  |  ------------------
  ------------------
  210|    286|    STAN_MAP_ERROR(NSS_ERROR_INVALID_ARENA, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|    286|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 286]
  |  |  ------------------
  ------------------
  211|    286|    STAN_MAP_ERROR(NSS_ERROR_INVALID_ARENA_MARK, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|    286|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 286, False: 0]
  |  |  ------------------
  ------------------
  212|    286|    STAN_MAP_ERROR(NSS_ERROR_DUPLICATE_POINTER, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|    286|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  213|      0|    STAN_MAP_ERROR(NSS_ERROR_POINTER_NOT_REGISTERED, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|      0|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  214|      0|    STAN_MAP_ERROR(NSS_ERROR_TRACKER_NOT_EMPTY, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|      0|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  215|      0|    STAN_MAP_ERROR(NSS_ERROR_VALUE_TOO_LARGE, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|      0|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  216|      0|    STAN_MAP_ERROR(NSS_ERROR_UNSUPPORTED_TYPE, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|      0|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  217|      0|    STAN_MAP_ERROR(NSS_ERROR_BUFFER_TOO_SHORT, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|      0|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  218|      0|    STAN_MAP_ERROR(NSS_ERROR_INVALID_ATOB_CONTEXT, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|      0|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  219|      0|    STAN_MAP_ERROR(NSS_ERROR_INVALID_BTOA_CONTEXT, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|      0|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  220|      0|    STAN_MAP_ERROR(NSS_ERROR_INVALID_ITEM, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|      0|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  221|      0|    STAN_MAP_ERROR(NSS_ERROR_INVALID_STRING, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|      0|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  222|      0|    STAN_MAP_ERROR(NSS_ERROR_INVALID_ASN1ENCODER, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|      0|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  223|      0|    STAN_MAP_ERROR(NSS_ERROR_INVALID_ASN1DECODER, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|      0|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  224|      0|    STAN_MAP_ERROR(NSS_ERROR_UNKNOWN_ATTRIBUTE, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |  150|      0|    else if (error == (x)) { secError = y; }
  |  |  ------------------
  |  |  |  Branch (150:14): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  225|      0|    else { secError = SEC_ERROR_LIBRARY_FAILURE; }
  226|    411|    PORT_SetError(secError);
  ------------------
  |  |   65|    411|#define PORT_SetError PORT_SetError_Util
  ------------------
  227|    411|}
CERT_NewTempCertificate:
  357|  6.16k|{
  358|  6.16k|    NSSCertificate *c;
  359|  6.16k|    CERTCertificate *cc;
  360|  6.16k|    NSSCertificate *tempCert = NULL;
  361|  6.16k|    nssPKIObject *pkio;
  362|  6.16k|    NSSCryptoContext *gCC = STAN_GetDefaultCryptoContext();
  363|  6.16k|    NSSTrustDomain *gTD = STAN_GetDefaultTrustDomain();
  364|  6.16k|    if (!isperm) {
  ------------------
  |  Branch (364:9): [True: 6.16k, False: 0]
  ------------------
  365|  6.16k|        NSSDER encoding;
  366|  6.16k|        NSSITEM_FROM_SECITEM(&encoding, derCert);
  ------------------
  |  |   27|  6.16k|    (nssit)->data = (void *)(secit)->data; \
  |  |   28|  6.16k|    (nssit)->size = (PRUint32)(secit)->len;
  ------------------
  367|       |        /* First, see if it is already a temp cert */
  368|  6.16k|        c = NSSCryptoContext_FindCertificateByEncodedCertificate(gCC,
  369|  6.16k|                                                                 &encoding);
  370|  6.16k|        if (!c && handle) {
  ------------------
  |  Branch (370:13): [True: 6.16k, False: 0]
  |  Branch (370:19): [True: 6.16k, False: 0]
  ------------------
  371|       |            /* Then, see if it is already a perm cert */
  372|  6.16k|            c = NSSTrustDomain_FindCertificateByEncodedCertificate(handle,
  373|  6.16k|                                                                   &encoding);
  374|  6.16k|        }
  375|  6.16k|        if (c) {
  ------------------
  |  Branch (375:13): [True: 0, False: 6.16k]
  ------------------
  376|       |            /* actually, that search ends up going by issuer/serial,
  377|       |             * so it is still possible to return a cert with the same
  378|       |             * issuer/serial but a different encoding, and we're
  379|       |             * going to reject that
  380|       |             */
  381|      0|            if (!nssItem_Equal(&c->encoding, &encoding, NULL)) {
  ------------------
  |  Branch (381:17): [True: 0, False: 0]
  ------------------
  382|      0|                nssCertificate_Destroy(c);
  383|      0|                PORT_SetError(SEC_ERROR_REUSED_ISSUER_AND_SERIAL);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  384|      0|                cc = NULL;
  385|      0|            } else {
  386|      0|                cc = STAN_GetCERTCertificateOrRelease(c);
  387|      0|                if (cc == NULL) {
  ------------------
  |  Branch (387:21): [True: 0, False: 0]
  ------------------
  388|      0|                    CERT_MapStanError();
  389|      0|                }
  390|      0|            }
  391|      0|            return cc;
  392|      0|        }
  393|  6.16k|    }
  394|  6.16k|    pkio = nssPKIObject_Create(NULL, NULL, gTD, gCC, nssPKIMonitor);
  395|  6.16k|    if (!pkio) {
  ------------------
  |  Branch (395:9): [True: 0, False: 6.16k]
  ------------------
  396|      0|        CERT_MapStanError();
  397|      0|        return NULL;
  398|      0|    }
  399|  6.16k|    c = nss_ZNEW(pkio->arena, NSSCertificate);
  ------------------
  |  |  348|  6.16k|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
  400|  6.16k|    if (!c) {
  ------------------
  |  Branch (400:9): [True: 0, False: 6.16k]
  ------------------
  401|      0|        CERT_MapStanError();
  402|      0|        nssPKIObject_Destroy(pkio);
  403|      0|        return NULL;
  404|      0|    }
  405|  6.16k|    c->object = *pkio;
  406|  6.16k|    if (copyDER) {
  ------------------
  |  Branch (406:9): [True: 6.16k, False: 0]
  ------------------
  407|  6.16k|        nssItem_Create(c->object.arena, &c->encoding, derCert->len,
  408|  6.16k|                       derCert->data);
  409|  6.16k|    } else {
  410|      0|        NSSITEM_FROM_SECITEM(&c->encoding, derCert);
  ------------------
  |  |   27|      0|    (nssit)->data = (void *)(secit)->data; \
  |  |   28|      0|    (nssit)->size = (PRUint32)(secit)->len;
  ------------------
  411|      0|    }
  412|       |    /* Forces a decoding of the cert in order to obtain the parts used
  413|       |     * below
  414|       |     */
  415|       |    /* 'c' is not adopted here, if we fail loser frees what has been
  416|       |     * allocated so far for 'c' */
  417|  6.16k|    cc = STAN_GetCERTCertificate(c);
  418|  6.16k|    if (!cc) {
  ------------------
  |  Branch (418:9): [True: 411, False: 5.75k]
  ------------------
  419|    411|        CERT_MapStanError();
  420|    411|        goto loser;
  421|    411|    }
  422|  5.75k|    nssItem_Create(c->object.arena, &c->issuer, cc->derIssuer.len,
  423|  5.75k|                   cc->derIssuer.data);
  424|  5.75k|    nssItem_Create(c->object.arena, &c->subject, cc->derSubject.len,
  425|  5.75k|                   cc->derSubject.data);
  426|       |    /* CERTCertificate stores serial numbers decoded.  I need the DER
  427|       |     * here.  sigh.
  428|       |     */
  429|  5.75k|    SECItem derSerial = { 0 };
  430|  5.75k|    CERT_SerialNumberFromDERCert(&cc->derCert, &derSerial);
  431|  5.75k|    if (!derSerial.data)
  ------------------
  |  Branch (431:9): [True: 0, False: 5.75k]
  ------------------
  432|      0|        goto loser;
  433|  5.75k|    nssItem_Create(c->object.arena, &c->serial, derSerial.len,
  434|  5.75k|                   derSerial.data);
  435|  5.75k|    PORT_Free(derSerial.data);
  ------------------
  |  |   60|  5.75k|#define PORT_Free PORT_Free_Util
  ------------------
  436|       |
  437|  5.75k|    if (nickname) {
  ------------------
  |  Branch (437:9): [True: 0, False: 5.75k]
  ------------------
  438|      0|        c->object.tempName =
  439|      0|            nssUTF8_Create(c->object.arena, nssStringType_UTF8String,
  440|      0|                           (NSSUTF8 *)nickname, PORT_Strlen(nickname));
  ------------------
  |  |  190|      0|#define PORT_Strlen(s) strlen(s)
  ------------------
  441|      0|    }
  442|  5.75k|    if (cc->emailAddr && cc->emailAddr[0]) {
  ------------------
  |  Branch (442:9): [True: 121, False: 5.63k]
  |  Branch (442:26): [True: 121, False: 0]
  ------------------
  443|    121|        c->email = nssUTF8_Create(
  444|    121|            c->object.arena, nssStringType_PrintableString,
  445|    121|            (NSSUTF8 *)cc->emailAddr, PORT_Strlen(cc->emailAddr));
  ------------------
  |  |  190|    121|#define PORT_Strlen(s) strlen(s)
  ------------------
  446|    121|    }
  447|       |
  448|  5.75k|    tempCert = NSSCryptoContext_FindOrImportCertificate(gCC, c);
  449|  5.75k|    if (!tempCert) {
  ------------------
  |  Branch (449:9): [True: 0, False: 5.75k]
  ------------------
  450|      0|        CERT_MapStanError();
  451|      0|        goto loser;
  452|      0|    }
  453|       |    /* destroy our copy */
  454|  5.75k|    NSSCertificate_Destroy(c);
  455|       |    /* and use the stored entry */
  456|  5.75k|    c = tempCert;
  457|  5.75k|    cc = STAN_GetCERTCertificateOrRelease(c);
  458|  5.75k|    if (!cc) {
  ------------------
  |  Branch (458:9): [True: 0, False: 5.75k]
  ------------------
  459|       |        /* STAN_GetCERTCertificateOrRelease destroys c on failure. */
  460|      0|        CERT_MapStanError();
  461|      0|        return NULL;
  462|      0|    }
  463|       |
  464|  5.75k|    CERT_LockCertTempPerm(cc);
  465|  5.75k|    cc->istemp = PR_TRUE;
  ------------------
  |  |  437|  5.75k|#define PR_TRUE 1
  ------------------
  466|  5.75k|    cc->isperm = PR_FALSE;
  ------------------
  |  |  438|  5.75k|#define PR_FALSE 0
  ------------------
  467|  5.75k|    CERT_UnlockCertTempPerm(cc);
  468|  5.75k|    return cc;
  469|    411|loser:
  470|       |    /* Perhaps this should be nssCertificate_Destroy(c) */
  471|    411|    nssPKIObject_Destroy(&c->object);
  472|    411|    return NULL;
  473|  5.75k|}
CERT_DestroyCertificate:
  817|  22.4k|{
  818|  22.4k|    if (cert) {
  ------------------
  |  Branch (818:9): [True: 22.4k, False: 0]
  ------------------
  819|       |        /* don't use STAN_GetNSSCertificate because we don't want to
  820|       |         * go to the trouble of translating the CERTCertificate into
  821|       |         * an NSSCertificate just to destroy it.  If it hasn't been done
  822|       |         * yet, don't do it at all
  823|       |         *
  824|       |         * cert->nssCertificate contains its own locks and refcount, but as it
  825|       |         * may be NULL, the pointer itself must be guarded by some other lock.
  826|       |         * Rather than creating a new global lock for only this purpose, share
  827|       |         * an existing global lock that happens to be taken near the write in
  828|       |         * fill_CERTCertificateFields(). The longer-term goal is to refactor
  829|       |         * all these global locks to be certificate-scoped. */
  830|  22.4k|        CERT_MaybeLockCertTempPerm(cert);
  831|  22.4k|        NSSCertificate *tmp = cert->nssCertificate;
  832|  22.4k|        CERT_MaybeUnlockCertTempPerm(cert);
  833|  22.4k|        if (tmp) {
  ------------------
  |  Branch (833:13): [True: 22.4k, False: 0]
  ------------------
  834|       |            /* delete the NSSCertificate */
  835|  22.4k|            NSSCertificate_Destroy(tmp);
  836|  22.4k|        } else if (cert->arena) {
  ------------------
  |  Branch (836:20): [True: 0, False: 0]
  ------------------
  837|      0|            PORT_FreeArena(cert->arena, PR_FALSE);
  ------------------
  |  |   61|      0|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                          PORT_FreeArena(cert->arena, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  838|      0|        }
  839|  22.4k|    }
  840|  22.4k|    return;
  841|  22.4k|}

CERT_DecodeAuthKeyID:
   81|    659|{
   82|    659|    CERTAuthKeyID *value = NULL;
   83|    659|    SECStatus rv = SECFailure;
   84|    659|    void *mark;
   85|    659|    SECItem newEncodedValue;
   86|       |
   87|    659|    PORT_Assert(arena);
  ------------------
  |  |  120|    659|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    659|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 659, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   88|       |
   89|    659|    do {
   90|    659|        mark = PORT_ArenaMark(arena);
  ------------------
  |  |   55|    659|#define PORT_ArenaMark PORT_ArenaMark_Util
  ------------------
   91|    659|        value = (CERTAuthKeyID *)PORT_ArenaZAlloc(arena, sizeof(*value));
  ------------------
  |  |   59|    659|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
   92|    659|        if (value == NULL)
  ------------------
  |  Branch (92:13): [True: 0, False: 659]
  ------------------
   93|      0|            break;
   94|    659|        value->DERAuthCertIssuer = NULL;
   95|       |        /* copy the DER into the arena, since Quick DER returns data that points
   96|       |           into the DER input, which may get freed by the caller */
   97|    659|        rv = SECITEM_CopyItem(arena, &newEncodedValue, encodedValue);
  ------------------
  |  |  106|    659|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
   98|    659|        if (rv != SECSuccess) {
  ------------------
  |  Branch (98:13): [True: 0, False: 659]
  ------------------
   99|      0|            break;
  100|      0|        }
  101|       |
  102|    659|        rv = SEC_QuickDERDecodeItem(arena, value, CERTAuthKeyIDTemplate,
  ------------------
  |  |  102|    659|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  103|    659|                                    &newEncodedValue);
  104|    659|        if (rv != SECSuccess)
  ------------------
  |  Branch (104:13): [True: 203, False: 456]
  ------------------
  105|    203|            break;
  106|       |
  107|    456|        value->authCertIssuer =
  108|    456|            cert_DecodeGeneralNames(arena, value->DERAuthCertIssuer);
  109|    456|        if (value->authCertIssuer == NULL)
  ------------------
  |  Branch (109:13): [True: 430, False: 26]
  ------------------
  110|    430|            break;
  111|       |
  112|       |        /* what if the general name contains other format but not URI ?
  113|       |           hl
  114|       |         */
  115|     26|        if ((value->authCertSerialNumber.data && !value->authCertIssuer) ||
  ------------------
  |  Branch (115:14): [True: 15, False: 11]
  |  Branch (115:50): [True: 0, False: 15]
  ------------------
  116|     26|            (!value->authCertSerialNumber.data && value->authCertIssuer)) {
  ------------------
  |  Branch (116:14): [True: 11, False: 15]
  |  Branch (116:51): [True: 11, False: 0]
  ------------------
  117|     11|            PORT_SetError(SEC_ERROR_EXTENSION_VALUE_INVALID);
  ------------------
  |  |   65|     11|#define PORT_SetError PORT_SetError_Util
  ------------------
  118|     11|            break;
  119|     11|        }
  120|     26|    } while (0);
  ------------------
  |  Branch (120:14): [Folded - Ignored]
  ------------------
  121|       |
  122|    659|    if (rv != SECSuccess) {
  ------------------
  |  Branch (122:9): [True: 203, False: 456]
  ------------------
  123|    203|        PORT_ArenaRelease(arena, mark);
  ------------------
  |  |   56|    203|#define PORT_ArenaRelease PORT_ArenaRelease_Util
  ------------------
  124|    203|        return ((CERTAuthKeyID *)NULL);
  125|    203|    }
  126|    456|    PORT_ArenaUnmark(arena, mark);
  ------------------
  |  |   58|    456|#define PORT_ArenaUnmark PORT_ArenaUnmark_Util
  ------------------
  127|    456|    return (value);
  128|    659|}

CERT_DecodeBasicConstraintValue:
   94|  5.43k|{
   95|  5.43k|    EncodedContext decodeContext;
   96|  5.43k|    PORTCheapArenaPool tmpArena;
   97|  5.43k|    SECStatus rv = SECSuccess;
   98|       |
   99|  5.43k|    do {
  100|  5.43k|        PORT_Memset(&decodeContext, 0, sizeof(decodeContext));
  ------------------
  |  |  182|  5.43k|#define PORT_Memset memset
  ------------------
  101|       |        /* initialize the value just in case we got "0x30 00", or when the
  102|       |           pathLenConstraint is omitted.
  103|       |         */
  104|  5.43k|        decodeContext.isCA.data = &hexFalse;
  105|  5.43k|        decodeContext.isCA.len = 1;
  106|       |
  107|  5.43k|        PORT_InitCheapArena(&tmpArena, SEC_ASN1_DEFAULT_ARENA_SIZE);
  ------------------
  |  |   60|  5.43k|#define SEC_ASN1_DEFAULT_ARENA_SIZE (2048)
  ------------------
  108|       |
  109|  5.43k|        rv = SEC_QuickDERDecodeItem(&tmpArena.arena, &decodeContext,
  ------------------
  |  |  102|  5.43k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  110|  5.43k|                                    CERTBasicConstraintsTemplate, encodedValue);
  111|  5.43k|        if (rv == SECFailure)
  ------------------
  |  Branch (111:13): [True: 3.23k, False: 2.19k]
  ------------------
  112|  3.23k|            break;
  113|       |
  114|  2.19k|        value->isCA = decodeContext.isCA.data
  ------------------
  |  Branch (114:23): [True: 2.19k, False: 0]
  ------------------
  115|  2.19k|                          ? (PRBool)(decodeContext.isCA.data[0] != 0)
  116|  2.19k|                          : PR_FALSE;
  ------------------
  |  |  438|  2.19k|#define PR_FALSE 0
  ------------------
  117|  2.19k|        if (decodeContext.pathLenConstraint.data == NULL) {
  ------------------
  |  Branch (117:13): [True: 2.09k, False: 104]
  ------------------
  118|       |            /* if the pathLenConstraint is not encoded, and the current setting
  119|       |              is CA, then the pathLenConstraint should be set to a negative
  120|       |              number
  121|       |              for unlimited certificate path.
  122|       |             */
  123|  2.09k|            if (value->isCA) {
  ------------------
  |  Branch (123:17): [True: 235, False: 1.86k]
  ------------------
  124|    235|                value->pathLenConstraint = CERT_UNLIMITED_PATH_CONSTRAINT;
  ------------------
  |  |  599|    235|#define CERT_UNLIMITED_PATH_CONSTRAINT -2
  ------------------
  125|  1.86k|            } else {
  126|  1.86k|                value->pathLenConstraint = 0;
  127|  1.86k|            }
  128|  2.09k|        } else if (value->isCA) {
  ------------------
  |  Branch (128:20): [True: 70, False: 34]
  ------------------
  129|     70|            long len = DER_GetInteger(&decodeContext.pathLenConstraint);
  ------------------
  |  |   27|     70|#define DER_GetInteger DER_GetInteger_Util
  ------------------
  130|     70|            if (len < 0 || len == LONG_MAX) {
  ------------------
  |  Branch (130:17): [True: 28, False: 42]
  |  Branch (130:28): [True: 0, False: 42]
  ------------------
  131|     28|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|     28|#define PORT_SetError PORT_SetError_Util
  ------------------
  132|     28|                GEN_BREAK(SECFailure);
  ------------------
  |  |   41|     28|    rv = status;          \
  |  |   42|     28|    break;
  ------------------
  133|      0|            }
  134|     42|            value->pathLenConstraint = len;
  135|     42|        } else {
  136|       |            /* here we get an error where the subject is not a CA, but
  137|       |               the pathLenConstraint is set */
  138|     34|            PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|     34|#define PORT_SetError PORT_SetError_Util
  ------------------
  139|     34|            GEN_BREAK(SECFailure);
  ------------------
  |  |   41|     34|    rv = status;          \
  |  |   42|     34|    break;
  ------------------
  140|      0|            break;
  141|     34|        }
  142|  2.19k|    } while (0);
  ------------------
  |  Branch (142:14): [Folded - Ignored]
  ------------------
  143|       |
  144|      0|    PORT_DestroyCheapArena(&tmpArena);
  145|  5.43k|    return (rv);
  146|  5.43k|}

CERT_DecodeAltNameExtension:
  164|  2.35k|{
  165|  2.35k|    SECStatus rv = SECSuccess;
  166|  2.35k|    CERTAltNameEncodedContext encodedContext;
  167|  2.35k|    SECItem *newEncodedAltName;
  168|       |
  169|  2.35k|    if (!reqArena) {
  ------------------
  |  Branch (169:9): [True: 0, False: 2.35k]
  ------------------
  170|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  171|      0|        return NULL;
  172|      0|    }
  173|       |
  174|  2.35k|    newEncodedAltName = SECITEM_ArenaDupItem(reqArena, EncodedAltName);
  ------------------
  |  |  104|  2.35k|#define SECITEM_ArenaDupItem SECITEM_ArenaDupItem_Util
  ------------------
  175|  2.35k|    if (!newEncodedAltName) {
  ------------------
  |  Branch (175:9): [True: 0, False: 2.35k]
  ------------------
  176|      0|        return NULL;
  177|      0|    }
  178|       |
  179|  2.35k|    encodedContext.encodedGenName = NULL;
  180|  2.35k|    PORT_Memset(&encodedContext, 0, sizeof(CERTAltNameEncodedContext));
  ------------------
  |  |  182|  2.35k|#define PORT_Memset memset
  ------------------
  181|  2.35k|    rv = SEC_QuickDERDecodeItem(reqArena, &encodedContext,
  ------------------
  |  |  102|  2.35k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  182|  2.35k|                                CERT_GeneralNamesTemplate, newEncodedAltName);
  183|  2.35k|    if (rv == SECFailure) {
  ------------------
  |  Branch (183:9): [True: 1.29k, False: 1.05k]
  ------------------
  184|  1.29k|        goto loser;
  185|  1.29k|    }
  186|  1.05k|    if (encodedContext.encodedGenName && encodedContext.encodedGenName[0])
  ------------------
  |  Branch (186:9): [True: 1.05k, False: 0]
  |  Branch (186:42): [True: 837, False: 220]
  ------------------
  187|    837|        return cert_DecodeGeneralNames(reqArena, encodedContext.encodedGenName);
  188|       |    /* Extension contained an empty GeneralNames sequence */
  189|       |    /* Treat as extension not found */
  190|    220|    PORT_SetError(SEC_ERROR_EXTENSION_NOT_FOUND);
  ------------------
  |  |   65|    220|#define PORT_SetError PORT_SetError_Util
  ------------------
  191|  1.51k|loser:
  192|  1.51k|    return NULL;
  193|    220|}

CERT_VerifySignedDataWithPublicKey:
  172|  4.48k|{
  173|  4.48k|    SECStatus rv;
  174|  4.48k|    SECItem sig;
  175|  4.48k|    SECOidTag sigAlg;
  176|  4.48k|    SECOidTag encAlg;
  177|  4.48k|    SECOidTag hashAlg;
  178|  4.48k|    CK_MECHANISM_TYPE mech;
  179|  4.48k|    PRUint32 policyFlags;
  180|       |
  181|  4.48k|    if (!pubKey || !sd) {
  ------------------
  |  Branch (181:9): [True: 0, False: 4.48k]
  |  Branch (181:20): [True: 0, False: 4.48k]
  ------------------
  182|      0|        PORT_SetError(PR_INVALID_ARGUMENT_ERROR);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
                      PORT_SetError(PR_INVALID_ARGUMENT_ERROR);
  ------------------
  |  |   55|      0|#define PR_INVALID_ARGUMENT_ERROR                (-5987L)
  ------------------
  183|      0|        return SECFailure;
  184|      0|    }
  185|       |
  186|       |    /* Can we use this algorithm for signature verification?  */
  187|  4.48k|    sigAlg = SECOID_GetAlgorithmTag(&sd->signatureAlgorithm);
  ------------------
  |  |  119|  4.48k|#define SECOID_GetAlgorithmTag SECOID_GetAlgorithmTag_Util
  ------------------
  188|  4.48k|    rv = sec_DecodeSigAlg(pubKey, sigAlg,
  189|  4.48k|                          &sd->signatureAlgorithm.parameters,
  190|  4.48k|                          &encAlg, &hashAlg, &mech, NULL);
  191|  4.48k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (191:9): [True: 13, False: 4.46k]
  ------------------
  192|     13|        return SECFailure; /* error is set */
  193|     13|    }
  194|  4.46k|    rv = NSS_GetAlgorithmPolicy(encAlg, &policyFlags);
  195|  4.46k|    if (rv == SECSuccess &&
  ------------------
  |  Branch (195:9): [True: 4.46k, False: 0]
  ------------------
  196|  4.46k|        !(policyFlags & NSS_USE_ALG_IN_CERT_SIGNATURE)) {
  ------------------
  |  |  570|  4.46k|#define NSS_USE_ALG_IN_CERT_SIGNATURE 0x00000001   /* CRLs and OCSP, too */
  ------------------
  |  Branch (196:9): [True: 0, False: 4.46k]
  ------------------
  197|      0|        PORT_SetError(SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  198|      0|        return SECFailure;
  199|      0|    }
  200|  4.46k|    rv = NSS_GetAlgorithmPolicy(hashAlg, &policyFlags);
  201|  4.46k|    if (rv == SECSuccess &&
  ------------------
  |  Branch (201:9): [True: 4.46k, False: 0]
  ------------------
  202|  4.46k|        !(policyFlags & NSS_USE_ALG_IN_CERT_SIGNATURE)) {
  ------------------
  |  |  570|  4.46k|#define NSS_USE_ALG_IN_CERT_SIGNATURE 0x00000001   /* CRLs and OCSP, too */
  ------------------
  |  Branch (202:9): [True: 9, False: 4.46k]
  ------------------
  203|      9|        PORT_SetError(SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED);
  ------------------
  |  |   65|      9|#define PORT_SetError PORT_SetError_Util
  ------------------
  204|      9|        return SECFailure;
  205|      9|    }
  206|  4.46k|    rv = checkKeyParams(&sd->signatureAlgorithm, pubKey);
  207|  4.46k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (207:9): [True: 11, False: 4.44k]
  ------------------
  208|     11|        PORT_SetError(SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED);
  ------------------
  |  |   65|     11|#define PORT_SetError PORT_SetError_Util
  ------------------
  209|     11|        return SECFailure;
  210|     11|    }
  211|       |
  212|       |    /* check the signature */
  213|  4.44k|    sig = sd->signature;
  214|       |    /* convert sig->len from bit counts to byte count. */
  215|  4.44k|    DER_ConvertBitString(&sig);
  ------------------
  |  |  125|  4.44k|    {                                         \
  |  |  126|  4.44k|        (item)->len = ((item)->len + 7) >> 3; \
  |  |  127|  4.44k|    }
  ------------------
  216|       |
  217|  4.44k|    rv = VFY_VerifyDataWithAlgorithmID(sd->data.data, sd->data.len, pubKey,
  218|  4.44k|                                       &sig, &sd->signatureAlgorithm,
  219|  4.44k|                                       &hashAlg, wincx);
  220|  4.44k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (220:9): [True: 4.27k, False: 171]
  ------------------
  221|  4.27k|        return SECFailure; /* error is set */
  222|  4.27k|    }
  223|       |
  224|       |    /* for some algorithms, hash algorithm is only known after verification */
  225|    171|    rv = NSS_GetAlgorithmPolicy(hashAlg, &policyFlags);
  226|    171|    if (rv == SECSuccess &&
  ------------------
  |  Branch (226:9): [True: 171, False: 0]
  ------------------
  227|    171|        !(policyFlags & NSS_USE_ALG_IN_CERT_SIGNATURE)) {
  ------------------
  |  |  570|    171|#define NSS_USE_ALG_IN_CERT_SIGNATURE 0x00000001   /* CRLs and OCSP, too */
  ------------------
  |  Branch (227:9): [True: 0, False: 171]
  ------------------
  228|      0|        PORT_SetError(SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  229|      0|        return SECFailure;
  230|      0|    }
  231|    171|    return SECSuccess;
  232|    171|}
CERT_VerifySignedData:
  260|  4.53k|{
  261|  4.53k|    SECKEYPublicKey *pubKey = 0;
  262|  4.53k|    SECStatus rv = SECFailure;
  263|  4.53k|    SECCertTimeValidity validity;
  264|       |
  265|       |    /* check the certificate's validity */
  266|  4.53k|    validity = CERT_CheckCertValidTimes(cert, t, PR_FALSE);
  ------------------
  |  |  438|  4.53k|#define PR_FALSE 0
  ------------------
  267|  4.53k|    if (validity != secCertTimeValid) {
  ------------------
  |  Branch (267:9): [True: 0, False: 4.53k]
  ------------------
  268|      0|        return rv;
  269|      0|    }
  270|       |
  271|       |    /* get cert's public key */
  272|  4.53k|    pubKey = CERT_ExtractPublicKey(cert);
  273|  4.53k|    if (pubKey) {
  ------------------
  |  Branch (273:9): [True: 4.48k, False: 57]
  ------------------
  274|  4.48k|        rv = CERT_VerifySignedDataWithPublicKey(sd, pubKey, wincx);
  275|  4.48k|        SECKEY_DestroyPublicKey(pubKey);
  276|  4.48k|    }
  277|  4.53k|    return rv;
  278|  4.53k|}
SEC_CheckCRL:
  283|     81|{
  284|     81|    return CERT_CheckCRL(cert, caCert, NULL, t, wincx);
  285|     81|}
CERT_FindCertIssuer:
  292|  5.65k|{
  293|  5.65k|    NSSCertificate *me;
  294|  5.65k|    NSSTime *nssTime;
  295|  5.65k|    NSSTrustDomain *td;
  296|  5.65k|    NSSCryptoContext *cc;
  297|  5.65k|    NSSCertificate *chain[3];
  298|  5.65k|    NSSUsage nssUsage;
  299|  5.65k|    PRStatus status;
  300|       |
  301|  5.65k|    me = STAN_GetNSSCertificate(cert);
  302|  5.65k|    if (!me) {
  ------------------
  |  Branch (302:9): [True: 0, False: 5.65k]
  ------------------
  303|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  304|      0|        return NULL;
  305|      0|    }
  306|  5.65k|    nssTime = NSSTime_SetPRTime(NULL, validTime);
  307|  5.65k|    nssUsage.anyUsage = PR_FALSE;
  ------------------
  |  |  438|  5.65k|#define PR_FALSE 0
  ------------------
  308|  5.65k|    nssUsage.nss3usage = usage;
  309|  5.65k|    nssUsage.nss3lookingForCA = PR_TRUE;
  ------------------
  |  |  437|  5.65k|#define PR_TRUE 1
  ------------------
  310|  5.65k|    memset(chain, 0, 3 * sizeof(NSSCertificate *));
  311|  5.65k|    td = STAN_GetDefaultTrustDomain();
  312|  5.65k|    cc = STAN_GetDefaultCryptoContext();
  313|  5.65k|    (void)NSSCertificate_BuildChain(me, nssTime, &nssUsage, NULL,
  314|  5.65k|                                    chain, 2, NULL, &status, td, cc);
  315|  5.65k|    nss_ZFreeIf(nssTime);
  316|  5.65k|    if (status == PR_SUCCESS) {
  ------------------
  |  Branch (316:9): [True: 4.53k, False: 1.11k]
  ------------------
  317|  4.53k|        PORT_Assert(me == chain[0]);
  ------------------
  |  |  120|  4.53k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  4.53k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 4.53k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  318|       |        /* if it's a root, the chain will only have one cert */
  319|  4.53k|        if (!chain[1]) {
  ------------------
  |  Branch (319:13): [True: 4.52k, False: 16]
  ------------------
  320|       |            /* already has a reference from the call to BuildChain */
  321|  4.52k|            return cert;
  322|  4.52k|        }
  323|     16|        NSSCertificate_Destroy(chain[0]);         /* the first cert in the chain */
  324|     16|        return STAN_GetCERTCertificate(chain[1]); /* return the 2nd */
  325|  4.53k|    }
  326|  1.11k|    if (chain[0]) {
  ------------------
  |  Branch (326:9): [True: 1.11k, False: 0]
  ------------------
  327|  1.11k|        PORT_Assert(me == chain[0]);
  ------------------
  |  |  120|  1.11k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  1.11k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1.11k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  328|  1.11k|        NSSCertificate_Destroy(chain[0]); /* the first cert in the chain */
  329|  1.11k|    }
  330|  1.11k|    PORT_SetError(SEC_ERROR_UNKNOWN_ISSUER);
  ------------------
  |  |   65|  1.11k|#define PORT_SetError PORT_SetError_Util
  ------------------
  331|  1.11k|    return NULL;
  332|  5.65k|}
CERT_TrustFlagsForCACertUsage:
  341|  6.50k|{
  342|  6.50k|    unsigned int requiredFlags;
  343|  6.50k|    SECTrustType trustType;
  344|       |
  345|  6.50k|    switch (usage) {
  346|  4.76k|        case certUsageSSLClient:
  ------------------
  |  Branch (346:9): [True: 4.76k, False: 1.74k]
  ------------------
  347|  4.76k|            requiredFlags = CERTDB_TRUSTED_CLIENT_CA;
  ------------------
  |  |   16|  4.76k|#define CERTDB_TRUSTED_CLIENT_CA (1u << 7) /* trusted for issuing client certs */
  ------------------
  348|  4.76k|            trustType = trustSSL;
  349|  4.76k|            break;
  350|    277|        case certUsageSSLServer:
  ------------------
  |  Branch (350:9): [True: 277, False: 6.23k]
  ------------------
  351|    411|        case certUsageSSLCA:
  ------------------
  |  Branch (351:9): [True: 134, False: 6.37k]
  ------------------
  352|    411|            requiredFlags = CERTDB_TRUSTED_CA;
  ------------------
  |  |   13|    411|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  353|    411|            trustType = trustSSL;
  354|    411|            break;
  355|    479|        case certUsageIPsec:
  ------------------
  |  Branch (355:9): [True: 479, False: 6.02k]
  ------------------
  356|    479|            requiredFlags = CERTDB_TRUSTED_CA;
  ------------------
  |  |   13|    479|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  357|    479|            trustType = trustSSL;
  358|    479|            break;
  359|     17|        case certUsageSSLServerWithStepUp:
  ------------------
  |  Branch (359:9): [True: 17, False: 6.49k]
  ------------------
  360|     17|            requiredFlags = CERTDB_TRUSTED_CA | CERTDB_GOVT_APPROVED_CA;
  ------------------
  |  |   13|     17|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
                          requiredFlags = CERTDB_TRUSTED_CA | CERTDB_GOVT_APPROVED_CA;
  ------------------
  |  |   18|     17|#define CERTDB_GOVT_APPROVED_CA (1u << 9)  /* can do strong crypto in export ver */
  ------------------
  361|     17|            trustType = trustSSL;
  362|     17|            break;
  363|    464|        case certUsageEmailSigner:
  ------------------
  |  Branch (363:9): [True: 464, False: 6.04k]
  ------------------
  364|    717|        case certUsageEmailRecipient:
  ------------------
  |  Branch (364:9): [True: 253, False: 6.25k]
  ------------------
  365|    717|            requiredFlags = CERTDB_TRUSTED_CA;
  ------------------
  |  |   13|    717|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  366|    717|            trustType = trustEmail;
  367|    717|            break;
  368|     36|        case certUsageObjectSigner:
  ------------------
  |  Branch (368:9): [True: 36, False: 6.47k]
  ------------------
  369|     36|            requiredFlags = CERTDB_TRUSTED_CA;
  ------------------
  |  |   13|     36|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  370|     36|            trustType = trustObjectSigning;
  371|     36|            break;
  372|      0|        case certUsageVerifyCA:
  ------------------
  |  Branch (372:9): [True: 0, False: 6.50k]
  ------------------
  373|      0|        case certUsageAnyCA:
  ------------------
  |  Branch (373:9): [True: 0, False: 6.50k]
  ------------------
  374|     84|        case certUsageStatusResponder:
  ------------------
  |  Branch (374:9): [True: 84, False: 6.42k]
  ------------------
  375|     84|            requiredFlags = CERTDB_TRUSTED_CA;
  ------------------
  |  |   13|     84|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  376|     84|            trustType = trustTypeNone;
  377|     84|            break;
  378|      0|        default:
  ------------------
  |  Branch (378:9): [True: 0, False: 6.50k]
  ------------------
  379|      0|            PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  380|      0|            goto loser;
  381|  6.50k|    }
  382|  6.50k|    if (retFlags != NULL) {
  ------------------
  |  Branch (382:9): [True: 6.50k, False: 0]
  ------------------
  383|  6.50k|        *retFlags = requiredFlags;
  384|  6.50k|    }
  385|  6.50k|    if (retTrustType != NULL) {
  ------------------
  |  Branch (385:9): [True: 6.50k, False: 0]
  ------------------
  386|  6.50k|        *retTrustType = trustType;
  387|  6.50k|    }
  388|       |
  389|  6.50k|    return (SECSuccess);
  390|      0|loser:
  391|      0|    return (SECFailure);
  392|  6.50k|}
isIssuerCertAllowedAtCertIssuanceTime:
  577|     81|{
  578|     81|    if (!issuerCert || !referenceCert) {
  ------------------
  |  Branch (578:9): [True: 0, False: 81]
  |  Branch (578:24): [True: 0, False: 81]
  ------------------
  579|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  580|      0|        return SECFailure;
  581|      0|    }
  582|       |
  583|     81|    if (CertIsStartComOrWoSign(issuerCert)) {
  ------------------
  |  Branch (583:9): [True: 0, False: 81]
  ------------------
  584|       |        /* PRTime is microseconds since the epoch, whereas JS time is milliseconds.
  585|       |         * (new Date("2016-10-21T00:00:00Z")).getTime() * 1000
  586|       |         */
  587|      0|        static const PRTime OCTOBER_21_2016 = 1477008000000000;
  588|       |
  589|      0|        PRTime notBefore, notAfter;
  590|      0|        SECStatus rv;
  591|       |
  592|      0|        rv = CERT_GetCertTimes(referenceCert, &notBefore, &notAfter);
  593|      0|        if (rv != SECSuccess)
  ------------------
  |  Branch (593:13): [True: 0, False: 0]
  ------------------
  594|      0|            return rv;
  595|       |
  596|      0|        if (notBefore > OCTOBER_21_2016) {
  ------------------
  |  Branch (596:13): [True: 0, False: 0]
  ------------------
  597|      0|            return SECFailure;
  598|      0|        }
  599|      0|    }
  600|       |
  601|     81|    return SECSuccess;
  602|     81|}
cert_VerifyCertChain:
 1017|  6.50k|{
 1018|  6.50k|    if (CERT_GetUsePKIXForValidation()) {
  ------------------
  |  Branch (1018:9): [True: 0, False: 6.50k]
  ------------------
 1019|      0|        return cert_VerifyCertChainPkix(cert, checkSig, certUsage, t,
 1020|      0|                                        wincx, log, sigerror, revoked);
 1021|      0|    }
 1022|  6.50k|    return cert_VerifyCertChainOld(handle, cert, checkSig, sigerror,
 1023|  6.50k|                                   certUsage, t, wincx, log, revoked);
 1024|  6.50k|}
cert_CheckLeafTrust:
 1242|  24.1k|{
 1243|  24.1k|    unsigned int flags;
 1244|  24.1k|    CERTCertTrust trust;
 1245|       |
 1246|  24.1k|    *failedFlags = 0;
 1247|  24.1k|    *trusted = PR_FALSE;
  ------------------
  |  |  438|  24.1k|#define PR_FALSE 0
  ------------------
 1248|       |
 1249|       |    /* check trust flags to see if this cert is directly trusted */
 1250|  24.1k|    if (CERT_GetCertTrust(cert, &trust) == SECSuccess) {
  ------------------
  |  Branch (1250:9): [True: 0, False: 24.1k]
  ------------------
 1251|      0|        switch (certUsage) {
  ------------------
  |  Branch (1251:17): [True: 0, False: 0]
  ------------------
 1252|      0|            case certUsageSSLClient:
  ------------------
  |  Branch (1252:13): [True: 0, False: 0]
  ------------------
 1253|      0|            case certUsageSSLServer:
  ------------------
  |  Branch (1253:13): [True: 0, False: 0]
  ------------------
 1254|      0|            case certUsageIPsec:
  ------------------
  |  Branch (1254:13): [True: 0, False: 0]
  ------------------
 1255|      0|                flags = trust.sslFlags;
 1256|       |
 1257|       |                /* is the cert directly trusted or not trusted ? */
 1258|      0|                if (flags & CERTDB_TERMINAL_RECORD) { /* the trust record is
  ------------------
  |  |    9|      0|#define CERTDB_TERMINAL_RECORD (1u << 0)
  ------------------
  |  Branch (1258:21): [True: 0, False: 0]
  ------------------
 1259|       |                                                       * authoritative */
 1260|      0|                    if (flags & CERTDB_TRUSTED) {     /* trust this cert */
  ------------------
  |  |   10|      0|#define CERTDB_TRUSTED (1u << 1)
  ------------------
  |  Branch (1260:25): [True: 0, False: 0]
  ------------------
 1261|      0|                        *trusted = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1262|      0|                        return SECSuccess;
 1263|      0|                    } else { /* don't trust this cert */
 1264|      0|                        *failedFlags = flags;
 1265|      0|                        return SECFailure;
 1266|      0|                    }
 1267|      0|                }
 1268|      0|                break;
 1269|      0|            case certUsageSSLServerWithStepUp:
  ------------------
  |  Branch (1269:13): [True: 0, False: 0]
  ------------------
 1270|       |                /* XXX - step up certs can't be directly trusted, only distrust */
 1271|      0|                flags = trust.sslFlags;
 1272|      0|                if (flags & CERTDB_TERMINAL_RECORD) { /* the trust record is
  ------------------
  |  |    9|      0|#define CERTDB_TERMINAL_RECORD (1u << 0)
  ------------------
  |  Branch (1272:21): [True: 0, False: 0]
  ------------------
 1273|       |                                                       * authoritative */
 1274|      0|                    if ((flags & CERTDB_TRUSTED) == 0) {
  ------------------
  |  |   10|      0|#define CERTDB_TRUSTED (1u << 1)
  ------------------
  |  Branch (1274:25): [True: 0, False: 0]
  ------------------
 1275|       |                        /* don't trust this cert */
 1276|      0|                        *failedFlags = flags;
 1277|      0|                        return SECFailure;
 1278|      0|                    }
 1279|      0|                }
 1280|      0|                break;
 1281|      0|            case certUsageSSLCA:
  ------------------
  |  Branch (1281:13): [True: 0, False: 0]
  ------------------
 1282|      0|                flags = trust.sslFlags;
 1283|      0|                if (flags & CERTDB_TERMINAL_RECORD) { /* the trust record is
  ------------------
  |  |    9|      0|#define CERTDB_TERMINAL_RECORD (1u << 0)
  ------------------
  |  Branch (1283:21): [True: 0, False: 0]
  ------------------
 1284|       |                                                       * authoritative */
 1285|      0|                    if ((flags & (CERTDB_TRUSTED | CERTDB_TRUSTED_CA)) == 0) {
  ------------------
  |  |   10|      0|#define CERTDB_TRUSTED (1u << 1)
  ------------------
                                  if ((flags & (CERTDB_TRUSTED | CERTDB_TRUSTED_CA)) == 0) {
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  |  Branch (1285:25): [True: 0, False: 0]
  ------------------
 1286|       |                        /* don't trust this cert */
 1287|      0|                        *failedFlags = flags;
 1288|      0|                        return SECFailure;
 1289|      0|                    }
 1290|      0|                }
 1291|      0|                break;
 1292|      0|            case certUsageEmailSigner:
  ------------------
  |  Branch (1292:13): [True: 0, False: 0]
  ------------------
 1293|      0|            case certUsageEmailRecipient:
  ------------------
  |  Branch (1293:13): [True: 0, False: 0]
  ------------------
 1294|      0|                flags = trust.emailFlags;
 1295|      0|                if (flags & CERTDB_TERMINAL_RECORD) { /* the trust record is
  ------------------
  |  |    9|      0|#define CERTDB_TERMINAL_RECORD (1u << 0)
  ------------------
  |  Branch (1295:21): [True: 0, False: 0]
  ------------------
 1296|       |                                                       * authoritative */
 1297|      0|                    if (flags & CERTDB_TRUSTED) {     /* trust this cert */
  ------------------
  |  |   10|      0|#define CERTDB_TRUSTED (1u << 1)
  ------------------
  |  Branch (1297:25): [True: 0, False: 0]
  ------------------
 1298|      0|                        *trusted = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1299|      0|                        return SECSuccess;
 1300|      0|                    } else { /* don't trust this cert */
 1301|      0|                        *failedFlags = flags;
 1302|      0|                        return SECFailure;
 1303|      0|                    }
 1304|      0|                }
 1305|       |
 1306|      0|                break;
 1307|      0|            case certUsageObjectSigner:
  ------------------
  |  Branch (1307:13): [True: 0, False: 0]
  ------------------
 1308|      0|                flags = trust.objectSigningFlags;
 1309|       |
 1310|      0|                if (flags & CERTDB_TERMINAL_RECORD) { /* the trust record is
  ------------------
  |  |    9|      0|#define CERTDB_TERMINAL_RECORD (1u << 0)
  ------------------
  |  Branch (1310:21): [True: 0, False: 0]
  ------------------
 1311|       |                                                       * authoritative */
 1312|      0|                    if (flags & CERTDB_TRUSTED) {     /* trust this cert */
  ------------------
  |  |   10|      0|#define CERTDB_TRUSTED (1u << 1)
  ------------------
  |  Branch (1312:25): [True: 0, False: 0]
  ------------------
 1313|      0|                        *trusted = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1314|      0|                        return SECSuccess;
 1315|      0|                    } else { /* don't trust this cert */
 1316|      0|                        *failedFlags = flags;
 1317|      0|                        return SECFailure;
 1318|      0|                    }
 1319|      0|                }
 1320|      0|                break;
 1321|      0|            case certUsageVerifyCA:
  ------------------
  |  Branch (1321:13): [True: 0, False: 0]
  ------------------
 1322|      0|            case certUsageStatusResponder:
  ------------------
  |  Branch (1322:13): [True: 0, False: 0]
  ------------------
 1323|      0|                flags = trust.sslFlags;
 1324|       |                /* is the cert directly trusted or not trusted ? */
 1325|      0|                if ((flags & (CERTDB_VALID_CA | CERTDB_TRUSTED_CA)) ==
  ------------------
  |  |   12|      0|#define CERTDB_VALID_CA (1u << 3)
  ------------------
                              if ((flags & (CERTDB_VALID_CA | CERTDB_TRUSTED_CA)) ==
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  |  Branch (1325:21): [True: 0, False: 0]
  ------------------
 1326|      0|                    (CERTDB_VALID_CA | CERTDB_TRUSTED_CA)) {
  ------------------
  |  |   12|      0|#define CERTDB_VALID_CA (1u << 3)
  ------------------
                                  (CERTDB_VALID_CA | CERTDB_TRUSTED_CA)) {
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
 1327|      0|                    *trusted = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1328|      0|                    return SECSuccess;
 1329|      0|                }
 1330|      0|                flags = trust.emailFlags;
 1331|       |                /* is the cert directly trusted or not trusted ? */
 1332|      0|                if ((flags & (CERTDB_VALID_CA | CERTDB_TRUSTED_CA)) ==
  ------------------
  |  |   12|      0|#define CERTDB_VALID_CA (1u << 3)
  ------------------
                              if ((flags & (CERTDB_VALID_CA | CERTDB_TRUSTED_CA)) ==
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  |  Branch (1332:21): [True: 0, False: 0]
  ------------------
 1333|      0|                    (CERTDB_VALID_CA | CERTDB_TRUSTED_CA)) {
  ------------------
  |  |   12|      0|#define CERTDB_VALID_CA (1u << 3)
  ------------------
                                  (CERTDB_VALID_CA | CERTDB_TRUSTED_CA)) {
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
 1334|      0|                    *trusted = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1335|      0|                    return SECSuccess;
 1336|      0|                }
 1337|      0|                flags = trust.objectSigningFlags;
 1338|       |                /* is the cert directly trusted or not trusted ? */
 1339|      0|                if ((flags & (CERTDB_VALID_CA | CERTDB_TRUSTED_CA)) ==
  ------------------
  |  |   12|      0|#define CERTDB_VALID_CA (1u << 3)
  ------------------
                              if ((flags & (CERTDB_VALID_CA | CERTDB_TRUSTED_CA)) ==
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  |  Branch (1339:21): [True: 0, False: 0]
  ------------------
 1340|      0|                    (CERTDB_VALID_CA | CERTDB_TRUSTED_CA)) {
  ------------------
  |  |   12|      0|#define CERTDB_VALID_CA (1u << 3)
  ------------------
                                  (CERTDB_VALID_CA | CERTDB_TRUSTED_CA)) {
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
 1341|      0|                    *trusted = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1342|      0|                    return SECSuccess;
 1343|      0|                }
 1344|       |            /* fall through to test distrust */
 1345|      0|            case certUsageAnyCA:
  ------------------
  |  Branch (1345:13): [True: 0, False: 0]
  ------------------
 1346|      0|            case certUsageUserCertImport:
  ------------------
  |  Branch (1346:13): [True: 0, False: 0]
  ------------------
 1347|       |                /* do we distrust these certs explicitly */
 1348|      0|                flags = trust.sslFlags;
 1349|      0|                if (flags & CERTDB_TERMINAL_RECORD) { /* the trust record is
  ------------------
  |  |    9|      0|#define CERTDB_TERMINAL_RECORD (1u << 0)
  ------------------
  |  Branch (1349:21): [True: 0, False: 0]
  ------------------
 1350|       |                                                       * authoritative */
 1351|      0|                    if ((flags & (CERTDB_TRUSTED | CERTDB_TRUSTED_CA)) == 0) {
  ------------------
  |  |   10|      0|#define CERTDB_TRUSTED (1u << 1)
  ------------------
                                  if ((flags & (CERTDB_TRUSTED | CERTDB_TRUSTED_CA)) == 0) {
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  |  Branch (1351:25): [True: 0, False: 0]
  ------------------
 1352|      0|                        *failedFlags = flags;
 1353|      0|                        return SECFailure;
 1354|      0|                    }
 1355|      0|                }
 1356|      0|                flags = trust.emailFlags;
 1357|      0|                if (flags & CERTDB_TERMINAL_RECORD) { /* the trust record is
  ------------------
  |  |    9|      0|#define CERTDB_TERMINAL_RECORD (1u << 0)
  ------------------
  |  Branch (1357:21): [True: 0, False: 0]
  ------------------
 1358|       |                                                       * authoritative */
 1359|      0|                    if ((flags & (CERTDB_TRUSTED | CERTDB_TRUSTED_CA)) == 0) {
  ------------------
  |  |   10|      0|#define CERTDB_TRUSTED (1u << 1)
  ------------------
                                  if ((flags & (CERTDB_TRUSTED | CERTDB_TRUSTED_CA)) == 0) {
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  |  Branch (1359:25): [True: 0, False: 0]
  ------------------
 1360|      0|                        *failedFlags = flags;
 1361|      0|                        return SECFailure;
 1362|      0|                    }
 1363|      0|                }
 1364|       |            /* fall through */
 1365|      0|            case certUsageProtectedObjectSigner:
  ------------------
  |  Branch (1365:13): [True: 0, False: 0]
  ------------------
 1366|      0|                flags = trust.objectSigningFlags;
 1367|      0|                if (flags & CERTDB_TERMINAL_RECORD) { /* the trust record is
  ------------------
  |  |    9|      0|#define CERTDB_TERMINAL_RECORD (1u << 0)
  ------------------
  |  Branch (1367:21): [True: 0, False: 0]
  ------------------
 1368|       |                                                       * authoritative */
 1369|      0|                    if ((flags & (CERTDB_TRUSTED | CERTDB_TRUSTED_CA)) == 0) {
  ------------------
  |  |   10|      0|#define CERTDB_TRUSTED (1u << 1)
  ------------------
                                  if ((flags & (CERTDB_TRUSTED | CERTDB_TRUSTED_CA)) == 0) {
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  |  Branch (1369:25): [True: 0, False: 0]
  ------------------
 1370|      0|                        *failedFlags = flags;
 1371|      0|                        return SECFailure;
 1372|      0|                    }
 1373|      0|                }
 1374|      0|                break;
 1375|      0|        }
 1376|      0|    }
 1377|  24.1k|    return SECSuccess;
 1378|  24.1k|}
CERT_VerifyCertificate:
 1396|  5.75k|{
 1397|  5.75k|    SECStatus rv;
 1398|  5.75k|    SECStatus valid;
 1399|  5.75k|    unsigned int requiredKeyUsage;
 1400|  5.75k|    unsigned int requiredCertType;
 1401|  5.75k|    unsigned int flags;
 1402|  5.75k|    unsigned int certType;
 1403|  5.75k|    PRBool allowOverride;
 1404|  5.75k|    SECCertTimeValidity validity;
 1405|  5.75k|    CERTStatusConfig *statusConfig;
 1406|  5.75k|    PRInt32 i;
 1407|  5.75k|    SECCertUsage certUsage = 0;
 1408|  5.75k|    PRBool checkedOCSP = PR_FALSE;
  ------------------
  |  |  438|  5.75k|#define PR_FALSE 0
  ------------------
 1409|  5.75k|    PRBool checkAllUsages = PR_FALSE;
  ------------------
  |  |  438|  5.75k|#define PR_FALSE 0
  ------------------
 1410|  5.75k|    PRBool revoked = PR_FALSE;
  ------------------
  |  |  438|  5.75k|#define PR_FALSE 0
  ------------------
 1411|  5.75k|    PRBool sigerror = PR_FALSE;
  ------------------
  |  |  438|  5.75k|#define PR_FALSE 0
  ------------------
 1412|  5.75k|    PRBool trusted = PR_FALSE;
  ------------------
  |  |  438|  5.75k|#define PR_FALSE 0
  ------------------
 1413|       |
 1414|  5.75k|    if (!requiredUsages) {
  ------------------
  |  Branch (1414:9): [True: 5.75k, False: 0]
  ------------------
 1415|       |        /* there are no required usages, so the user probably wants to
 1416|       |           get status for all usages */
 1417|  5.75k|        checkAllUsages = PR_TRUE;
  ------------------
  |  |  437|  5.75k|#define PR_TRUE 1
  ------------------
 1418|  5.75k|    }
 1419|       |
 1420|  5.75k|    if (returnedUsages) {
  ------------------
  |  Branch (1420:9): [True: 5.75k, False: 0]
  ------------------
 1421|  5.75k|        *returnedUsages = 0;
 1422|  5.75k|    } else {
 1423|       |        /* we don't have a place to return status for all usages,
 1424|       |           so we can skip checks for usages that aren't required */
 1425|      0|        checkAllUsages = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1426|      0|    }
 1427|  5.75k|    valid = SECSuccess; /* start off assuming cert is valid */
 1428|       |
 1429|       |    /* make sure that the cert is valid at time t */
 1430|  5.75k|    allowOverride = (PRBool)((requiredUsages & certificateUsageSSLServer) ||
  ------------------
  |  |  487|  5.75k|#define certificateUsageSSLServer (0x0002)
  ------------------
  |  Branch (1430:30): [True: 0, False: 5.75k]
  ------------------
 1431|  5.75k|                             (requiredUsages & certificateUsageSSLServerWithStepUp) ||
  ------------------
  |  |  488|  5.75k|#define certificateUsageSSLServerWithStepUp (0x0004)
  ------------------
  |  Branch (1431:30): [True: 0, False: 5.75k]
  ------------------
 1432|  5.75k|                             (requiredUsages & certificateUsageIPsec));
  ------------------
  |  |  498|  5.75k|#define certificateUsageIPsec (0x1000)
  ------------------
  |  Branch (1432:30): [True: 0, False: 5.75k]
  ------------------
 1433|  5.75k|    validity = CERT_CheckCertValidTimes(cert, t, allowOverride);
 1434|  5.75k|    if (validity != secCertTimeValid) {
  ------------------
  |  Branch (1434:9): [True: 843, False: 4.91k]
  ------------------
 1435|    843|        valid = SECFailure;
 1436|    843|        LOG_ERROR_OR_EXIT(log, cert, 0, validity);
  ------------------
  |  |  455|    843|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (455:9): [True: 0, False: 843]
  |  |  ------------------
  |  |  456|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  457|      0|                            (void *)(PRWord)arg);              \
  |  |  458|    843|    } else {                                                   \
  |  |  459|    843|        goto loser;                                            \
  |  |  460|    843|    }
  ------------------
 1437|      0|    }
 1438|       |
 1439|       |    /* check key usage and netscape cert type */
 1440|  4.91k|    cert_GetCertType(cert);
 1441|  4.91k|    certType = cert->nsCertType;
 1442|       |
 1443|  68.7k|    for (i = 1; i <= certificateUsageHighest &&
  ------------------
  |  |  500|  68.7k|#define certificateUsageHighest certificateUsageIPsec
  |  |  ------------------
  |  |  |  |  498|   137k|#define certificateUsageIPsec (0x1000)
  |  |  ------------------
  ------------------
  |  Branch (1443:17): [True: 63.8k, False: 4.91k]
  ------------------
 1444|  68.7k|                (SECSuccess == valid || returnedUsages || log);) {
  ------------------
  |  Branch (1444:18): [True: 63.8k, False: 0]
  |  Branch (1444:41): [True: 0, False: 0]
  |  Branch (1444:59): [True: 0, False: 0]
  ------------------
 1445|  63.8k|        PRBool requiredUsage = (i & requiredUsages) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
                      PRBool requiredUsage = (i & requiredUsages) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|  63.8k|#define PR_FALSE 0
  ------------------
  |  Branch (1445:32): [True: 0, False: 63.8k]
  ------------------
 1446|  63.8k|        if (PR_FALSE == requiredUsage && PR_FALSE == checkAllUsages) {
  ------------------
  |  |  438|  63.8k|#define PR_FALSE 0
  ------------------
                      if (PR_FALSE == requiredUsage && PR_FALSE == checkAllUsages) {
  ------------------
  |  |  438|  63.8k|#define PR_FALSE 0
  ------------------
  |  Branch (1446:13): [True: 63.8k, False: 0]
  |  Branch (1446:42): [True: 0, False: 63.8k]
  ------------------
 1447|      0|            NEXT_USAGE();
  ------------------
  |  | 1210|      0|    {                \
  |  | 1211|      0|        i *= 2;      \
  |  | 1212|      0|        certUsage++; \
  |  | 1213|      0|        continue;    \
  |  | 1214|      0|    }
  ------------------
 1448|      0|        }
 1449|  63.8k|        if (returnedUsages) {
  ------------------
  |  Branch (1449:13): [True: 63.8k, False: 0]
  ------------------
 1450|  63.8k|            *returnedUsages |= i; /* start off assuming this usage is valid */
 1451|  63.8k|        }
 1452|  63.8k|        switch (certUsage) {
 1453|  4.91k|            case certUsageSSLClient:
  ------------------
  |  Branch (1453:13): [True: 4.91k, False: 58.9k]
  ------------------
 1454|  9.82k|            case certUsageSSLServer:
  ------------------
  |  Branch (1454:13): [True: 4.91k, False: 58.9k]
  ------------------
 1455|  14.7k|            case certUsageSSLServerWithStepUp:
  ------------------
  |  Branch (1455:13): [True: 4.91k, False: 58.9k]
  ------------------
 1456|  19.6k|            case certUsageSSLCA:
  ------------------
  |  Branch (1456:13): [True: 4.91k, False: 58.9k]
  ------------------
 1457|  24.5k|            case certUsageEmailSigner:
  ------------------
  |  Branch (1457:13): [True: 4.91k, False: 58.9k]
  ------------------
 1458|  29.4k|            case certUsageEmailRecipient:
  ------------------
  |  Branch (1458:13): [True: 4.91k, False: 58.9k]
  ------------------
 1459|  34.3k|            case certUsageObjectSigner:
  ------------------
  |  Branch (1459:13): [True: 4.91k, False: 58.9k]
  ------------------
 1460|  39.2k|            case certUsageStatusResponder:
  ------------------
  |  Branch (1460:13): [True: 4.91k, False: 58.9k]
  ------------------
 1461|  44.2k|            case certUsageIPsec:
  ------------------
  |  Branch (1461:13): [True: 4.91k, False: 58.9k]
  ------------------
 1462|  44.2k|                rv = CERT_KeyUsageAndTypeForCertUsage(certUsage, PR_FALSE,
  ------------------
  |  |  438|  44.2k|#define PR_FALSE 0
  ------------------
 1463|  44.2k|                                                      &requiredKeyUsage,
 1464|  44.2k|                                                      &requiredCertType);
 1465|  44.2k|                if (rv != SECSuccess) {
  ------------------
  |  Branch (1465:21): [True: 0, False: 44.2k]
  ------------------
 1466|      0|                    PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1467|       |                    /* EXIT_IF_NOT_LOGGING(log); XXX ??? */
 1468|      0|                    requiredKeyUsage = 0;
 1469|      0|                    requiredCertType = 0;
 1470|      0|                    INVALID_USAGE();
  ------------------
  |  | 1222|      0|    {                                   \
  |  | 1223|      0|        if (returnedUsages) {           \
  |  |  ------------------
  |  |  |  Branch (1223:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1224|      0|            *returnedUsages &= (~i);    \
  |  | 1225|      0|        }                               \
  |  | 1226|      0|        if (PR_TRUE == requiredUsage) { \
  |  |  ------------------
  |  |  |  |  437|      0|#define PR_TRUE 1
  |  |  ------------------
  |  |  |  Branch (1226:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1227|      0|            valid = SECFailure;         \
  |  | 1228|      0|        }                               \
  |  | 1229|      0|        NEXT_USAGE();                   \
  |  |  ------------------
  |  |  |  | 1210|      0|    {                \
  |  |  |  | 1211|      0|        i *= 2;      \
  |  |  |  | 1212|      0|        certUsage++; \
  |  |  |  | 1213|      0|        continue;    \
  |  |  |  | 1214|      0|    }
  |  |  ------------------
  |  | 1230|      0|    }
  ------------------
 1471|      0|                }
 1472|  44.2k|                break;
 1473|       |
 1474|  44.2k|            case certUsageAnyCA:
  ------------------
  |  Branch (1474:13): [True: 4.91k, False: 58.9k]
  ------------------
 1475|  9.82k|            case certUsageProtectedObjectSigner:
  ------------------
  |  Branch (1475:13): [True: 4.91k, False: 58.9k]
  ------------------
 1476|  14.7k|            case certUsageUserCertImport:
  ------------------
  |  Branch (1476:13): [True: 4.91k, False: 58.9k]
  ------------------
 1477|  19.6k|            case certUsageVerifyCA:
  ------------------
  |  Branch (1477:13): [True: 4.91k, False: 58.9k]
  ------------------
 1478|       |                /* these usages cannot be verified */
 1479|  19.6k|                NEXT_USAGE();
  ------------------
  |  | 1210|  19.6k|    {                \
  |  | 1211|  19.6k|        i *= 2;      \
  |  | 1212|  19.6k|        certUsage++; \
  |  | 1213|  19.6k|        continue;    \
  |  | 1214|  19.6k|    }
  ------------------
 1480|       |
 1481|      0|            default:
  ------------------
  |  Branch (1481:13): [True: 0, False: 63.8k]
  ------------------
 1482|      0|                PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1483|      0|                requiredKeyUsage = 0;
 1484|      0|                requiredCertType = 0;
 1485|      0|                INVALID_USAGE();
  ------------------
  |  | 1222|      0|    {                                   \
  |  | 1223|      0|        if (returnedUsages) {           \
  |  |  ------------------
  |  |  |  Branch (1223:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1224|      0|            *returnedUsages &= (~i);    \
  |  | 1225|      0|        }                               \
  |  | 1226|      0|        if (PR_TRUE == requiredUsage) { \
  |  |  ------------------
  |  |  |  |  437|      0|#define PR_TRUE 1
  |  |  ------------------
  |  |  |  Branch (1226:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1227|      0|            valid = SECFailure;         \
  |  | 1228|      0|        }                               \
  |  | 1229|      0|        NEXT_USAGE();                   \
  |  |  ------------------
  |  |  |  | 1210|      0|    {                \
  |  |  |  | 1211|      0|        i *= 2;      \
  |  |  |  | 1212|      0|        certUsage++; \
  |  |  |  | 1213|      0|        continue;    \
  |  |  |  | 1214|      0|    }
  |  |  ------------------
  |  | 1230|      0|    }
  ------------------
 1486|  63.8k|        }
 1487|  44.2k|        if (CERT_CheckKeyUsage(cert, requiredKeyUsage) != SECSuccess) {
  ------------------
  |  Branch (1487:13): [True: 6.63k, False: 37.5k]
  ------------------
 1488|  6.63k|            if (PR_TRUE == requiredUsage) {
  ------------------
  |  |  437|  6.63k|#define PR_TRUE 1
  ------------------
  |  Branch (1488:17): [True: 0, False: 6.63k]
  ------------------
 1489|      0|                PORT_SetError(SEC_ERROR_INADEQUATE_KEY_USAGE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1490|      0|            }
 1491|  6.63k|            LOG_ERROR(log, cert, 0, requiredKeyUsage);
  ------------------
  |  |  463|  6.63k|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (463:9): [True: 0, False: 6.63k]
  |  |  ------------------
  |  |  464|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  465|      0|                            (void *)(PRWord)arg);              \
  |  |  466|      0|    }
  ------------------
 1492|  6.63k|            INVALID_USAGE();
  ------------------
  |  | 1222|  6.63k|    {                                   \
  |  | 1223|  6.63k|        if (returnedUsages) {           \
  |  |  ------------------
  |  |  |  Branch (1223:13): [True: 6.63k, False: 0]
  |  |  ------------------
  |  | 1224|  6.63k|            *returnedUsages &= (~i);    \
  |  | 1225|  6.63k|        }                               \
  |  | 1226|  6.63k|        if (PR_TRUE == requiredUsage) { \
  |  |  ------------------
  |  |  |  |  437|  6.63k|#define PR_TRUE 1
  |  |  ------------------
  |  |  |  Branch (1226:13): [True: 0, False: 6.63k]
  |  |  ------------------
  |  | 1227|      0|            valid = SECFailure;         \
  |  | 1228|      0|        }                               \
  |  | 1229|  6.63k|        NEXT_USAGE();                   \
  |  |  ------------------
  |  |  |  | 1210|  6.63k|    {                \
  |  |  |  | 1211|  6.63k|        i *= 2;      \
  |  |  |  | 1212|  6.63k|        certUsage++; \
  |  |  |  | 1213|  6.63k|        continue;    \
  |  |  |  | 1214|  6.63k|    }
  |  |  ------------------
  |  | 1230|      0|    }
  ------------------
 1493|      0|        }
 1494|  37.5k|        if (!(certType & requiredCertType)) {
  ------------------
  |  Branch (1494:13): [True: 13.4k, False: 24.1k]
  ------------------
 1495|  13.4k|            if (PR_TRUE == requiredUsage) {
  ------------------
  |  |  437|  13.4k|#define PR_TRUE 1
  ------------------
  |  Branch (1495:17): [True: 0, False: 13.4k]
  ------------------
 1496|      0|                PORT_SetError(SEC_ERROR_INADEQUATE_CERT_TYPE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1497|      0|            }
 1498|  13.4k|            LOG_ERROR(log, cert, 0, requiredCertType);
  ------------------
  |  |  463|  13.4k|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (463:9): [True: 0, False: 13.4k]
  |  |  ------------------
  |  |  464|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  465|      0|                            (void *)(PRWord)arg);              \
  |  |  466|      0|    }
  ------------------
 1499|  13.4k|            INVALID_USAGE();
  ------------------
  |  | 1222|  13.4k|    {                                   \
  |  | 1223|  13.4k|        if (returnedUsages) {           \
  |  |  ------------------
  |  |  |  Branch (1223:13): [True: 13.4k, False: 0]
  |  |  ------------------
  |  | 1224|  13.4k|            *returnedUsages &= (~i);    \
  |  | 1225|  13.4k|        }                               \
  |  | 1226|  13.4k|        if (PR_TRUE == requiredUsage) { \
  |  |  ------------------
  |  |  |  |  437|  13.4k|#define PR_TRUE 1
  |  |  ------------------
  |  |  |  Branch (1226:13): [True: 0, False: 13.4k]
  |  |  ------------------
  |  | 1227|      0|            valid = SECFailure;         \
  |  | 1228|      0|        }                               \
  |  | 1229|  13.4k|        NEXT_USAGE();                   \
  |  |  ------------------
  |  |  |  | 1210|  13.4k|    {                \
  |  |  |  | 1211|  13.4k|        i *= 2;      \
  |  |  |  | 1212|  13.4k|        certUsage++; \
  |  |  |  | 1213|  13.4k|        continue;    \
  |  |  |  | 1214|  13.4k|    }
  |  |  ------------------
  |  | 1230|      0|    }
  ------------------
 1500|      0|        }
 1501|       |
 1502|  24.1k|        rv = cert_CheckLeafTrust(cert, certUsage, &flags, &trusted);
 1503|  24.1k|        if (rv == SECFailure) {
  ------------------
  |  Branch (1503:13): [True: 0, False: 24.1k]
  ------------------
 1504|      0|            if (PR_TRUE == requiredUsage) {
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  |  Branch (1504:17): [True: 0, False: 0]
  ------------------
 1505|      0|                PORT_SetError(SEC_ERROR_UNTRUSTED_CERT);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1506|      0|            }
 1507|      0|            LOG_ERROR(log, cert, 0, flags);
  ------------------
  |  |  463|      0|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (463:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  464|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  465|      0|                            (void *)(PRWord)arg);              \
  |  |  466|      0|    }
  ------------------
 1508|      0|            INVALID_USAGE();
  ------------------
  |  | 1222|      0|    {                                   \
  |  | 1223|      0|        if (returnedUsages) {           \
  |  |  ------------------
  |  |  |  Branch (1223:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1224|      0|            *returnedUsages &= (~i);    \
  |  | 1225|      0|        }                               \
  |  | 1226|      0|        if (PR_TRUE == requiredUsage) { \
  |  |  ------------------
  |  |  |  |  437|      0|#define PR_TRUE 1
  |  |  ------------------
  |  |  |  Branch (1226:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1227|      0|            valid = SECFailure;         \
  |  | 1228|      0|        }                               \
  |  | 1229|      0|        NEXT_USAGE();                   \
  |  |  ------------------
  |  |  |  | 1210|      0|    {                \
  |  |  |  | 1211|      0|        i *= 2;      \
  |  |  |  | 1212|      0|        certUsage++; \
  |  |  |  | 1213|      0|        continue;    \
  |  |  |  | 1214|      0|    }
  |  |  ------------------
  |  | 1230|      0|    }
  ------------------
 1509|  24.1k|        } else if (trusted) {
  ------------------
  |  Branch (1509:20): [True: 0, False: 24.1k]
  ------------------
 1510|      0|            VALID_USAGE();
  ------------------
  |  | 1217|      0|    {                 \
  |  | 1218|      0|        NEXT_USAGE(); \
  |  |  ------------------
  |  |  |  | 1210|      0|    {                \
  |  |  |  | 1211|      0|        i *= 2;      \
  |  |  |  | 1212|      0|        certUsage++; \
  |  |  |  | 1213|      0|        continue;    \
  |  |  |  | 1214|      0|    }
  |  |  ------------------
  |  | 1219|      0|    }
  ------------------
 1511|      0|        }
 1512|       |
 1513|  24.1k|        if (PR_TRUE == revoked || PR_TRUE == sigerror) {
  ------------------
  |  |  437|  24.1k|#define PR_TRUE 1
  ------------------
                      if (PR_TRUE == revoked || PR_TRUE == sigerror) {
  ------------------
  |  |  437|  24.1k|#define PR_TRUE 1
  ------------------
  |  Branch (1513:13): [True: 0, False: 24.1k]
  |  Branch (1513:35): [True: 17.6k, False: 6.50k]
  ------------------
 1514|  17.6k|            INVALID_USAGE();
  ------------------
  |  | 1222|  17.6k|    {                                   \
  |  | 1223|  17.6k|        if (returnedUsages) {           \
  |  |  ------------------
  |  |  |  Branch (1223:13): [True: 17.6k, False: 0]
  |  |  ------------------
  |  | 1224|  17.6k|            *returnedUsages &= (~i);    \
  |  | 1225|  17.6k|        }                               \
  |  | 1226|  17.6k|        if (PR_TRUE == requiredUsage) { \
  |  |  ------------------
  |  |  |  |  437|  17.6k|#define PR_TRUE 1
  |  |  ------------------
  |  |  |  Branch (1226:13): [True: 0, False: 17.6k]
  |  |  ------------------
  |  | 1227|      0|            valid = SECFailure;         \
  |  | 1228|      0|        }                               \
  |  | 1229|  17.6k|        NEXT_USAGE();                   \
  |  |  ------------------
  |  |  |  | 1210|  17.6k|    {                \
  |  |  |  | 1211|  17.6k|        i *= 2;      \
  |  |  |  | 1212|  17.6k|        certUsage++; \
  |  |  |  | 1213|  17.6k|        continue;    \
  |  |  |  | 1214|  17.6k|    }
  |  |  ------------------
  |  | 1230|      0|    }
  ------------------
 1515|      0|        }
 1516|       |
 1517|  6.50k|        rv = cert_VerifyCertChain(handle, cert,
 1518|  6.50k|                                  checkSig, &sigerror,
 1519|  6.50k|                                  certUsage, t, wincx, log,
 1520|  6.50k|                                  &revoked);
 1521|       |
 1522|  6.50k|        if (rv != SECSuccess) {
  ------------------
  |  Branch (1522:13): [True: 6.50k, False: 0]
  ------------------
 1523|       |            /* EXIT_IF_NOT_LOGGING(log); XXX ???? */
 1524|  6.50k|            INVALID_USAGE();
  ------------------
  |  | 1222|  6.50k|    {                                   \
  |  | 1223|  6.50k|        if (returnedUsages) {           \
  |  |  ------------------
  |  |  |  Branch (1223:13): [True: 6.50k, False: 0]
  |  |  ------------------
  |  | 1224|  6.50k|            *returnedUsages &= (~i);    \
  |  | 1225|  6.50k|        }                               \
  |  | 1226|  6.50k|        if (PR_TRUE == requiredUsage) { \
  |  |  ------------------
  |  |  |  |  437|  6.50k|#define PR_TRUE 1
  |  |  ------------------
  |  |  |  Branch (1226:13): [True: 0, False: 6.50k]
  |  |  ------------------
  |  | 1227|      0|            valid = SECFailure;         \
  |  | 1228|      0|        }                               \
  |  | 1229|  6.50k|        NEXT_USAGE();                   \
  |  |  ------------------
  |  |  |  | 1210|  6.50k|    {                \
  |  |  |  | 1211|  6.50k|        i *= 2;      \
  |  |  |  | 1212|  6.50k|        certUsage++; \
  |  |  |  | 1213|  6.50k|        continue;    \
  |  |  |  | 1214|  6.50k|    }
  |  |  ------------------
  |  | 1230|      0|    }
  ------------------
 1525|      0|        }
 1526|       |
 1527|       |        /*
 1528|       |         * Check OCSP revocation status, but only if the cert we are checking
 1529|       |         * is not a status responder itself. We only do this in the case
 1530|       |         * where we checked the cert chain (above); explicit trust "wins"
 1531|       |         * (avoids status checking, just as it avoids CRL checking) by
 1532|       |         * bypassing this code.
 1533|       |         */
 1534|       |
 1535|      0|        if (PR_FALSE == checkedOCSP) {
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  |  Branch (1535:13): [True: 0, False: 0]
  ------------------
 1536|      0|            checkedOCSP = PR_TRUE; /* only check OCSP once */
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1537|      0|            statusConfig = CERT_GetStatusConfig(handle);
 1538|      0|            if (requiredUsages != certificateUsageStatusResponder &&
  ------------------
  |  |  496|      0|#define certificateUsageStatusResponder (0x0400)
  ------------------
  |  Branch (1538:17): [True: 0, False: 0]
  ------------------
 1539|      0|                statusConfig != NULL) {
  ------------------
  |  Branch (1539:17): [True: 0, False: 0]
  ------------------
 1540|      0|                if (statusConfig->statusChecker != NULL) {
  ------------------
  |  Branch (1540:21): [True: 0, False: 0]
  ------------------
 1541|      0|                    rv = (*statusConfig->statusChecker)(handle, cert,
 1542|      0|                                                        t, wincx);
 1543|      0|                    if (rv != SECSuccess) {
  ------------------
  |  Branch (1543:25): [True: 0, False: 0]
  ------------------
 1544|      0|                        LOG_ERROR(log, cert, 0, 0);
  ------------------
  |  |  463|      0|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (463:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  464|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  465|      0|                            (void *)(PRWord)arg);              \
  |  |  466|      0|    }
  ------------------
 1545|      0|                        revoked = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1546|      0|                        INVALID_USAGE();
  ------------------
  |  | 1222|      0|    {                                   \
  |  | 1223|      0|        if (returnedUsages) {           \
  |  |  ------------------
  |  |  |  Branch (1223:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1224|      0|            *returnedUsages &= (~i);    \
  |  | 1225|      0|        }                               \
  |  | 1226|      0|        if (PR_TRUE == requiredUsage) { \
  |  |  ------------------
  |  |  |  |  437|      0|#define PR_TRUE 1
  |  |  ------------------
  |  |  |  Branch (1226:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 1227|      0|            valid = SECFailure;         \
  |  | 1228|      0|        }                               \
  |  | 1229|      0|        NEXT_USAGE();                   \
  |  |  ------------------
  |  |  |  | 1210|      0|    {                \
  |  |  |  | 1211|      0|        i *= 2;      \
  |  |  |  | 1212|      0|        certUsage++; \
  |  |  |  | 1213|      0|        continue;    \
  |  |  |  | 1214|      0|    }
  |  |  ------------------
  |  | 1230|      0|    }
  ------------------
 1547|      0|                    }
 1548|      0|                }
 1549|      0|            }
 1550|      0|        }
 1551|       |
 1552|      0|        NEXT_USAGE();
  ------------------
  |  | 1210|      0|    {                \
  |  | 1211|      0|        i *= 2;      \
  |  | 1212|      0|        certUsage++; \
  |  | 1213|      0|        continue;    \
  |  | 1214|      0|    }
  ------------------
 1553|      0|    }
 1554|       |
 1555|  5.75k|loser:
 1556|  5.75k|    return (valid);
 1557|  4.91k|}
CERT_VerifyCertificateNow:
 1701|  5.75k|{
 1702|  5.75k|    return (CERT_VerifyCertificate(handle, cert, checkSig,
 1703|  5.75k|                                   requiredUsages, PR_Now(), wincx, NULL, returnedUsages));
 1704|  5.75k|}
certvfy.c:checkKeyParams:
   42|  4.46k|{
   43|  4.46k|    SECStatus rv;
   44|  4.46k|    SECOidTag sigAlg;
   45|  4.46k|    SECOidTag curve;
   46|  4.46k|    PRUint32 policyFlags = 0;
   47|  4.46k|    PRInt32 minLen, len, optFlags;
   48|       |
   49|  4.46k|    sigAlg = SECOID_GetAlgorithmTag(sigAlgorithm);
  ------------------
  |  |  119|  4.46k|#define SECOID_GetAlgorithmTag SECOID_GetAlgorithmTag_Util
  ------------------
   50|       |
   51|  4.46k|    switch (sigAlg) {
   52|      0|        case SEC_OID_ANSIX962_ECDSA_SHA1_SIGNATURE:
  ------------------
  |  Branch (52:9): [True: 0, False: 4.46k]
  ------------------
   53|      3|        case SEC_OID_ANSIX962_ECDSA_SHA224_SIGNATURE:
  ------------------
  |  Branch (53:9): [True: 3, False: 4.45k]
  ------------------
   54|    332|        case SEC_OID_ANSIX962_ECDSA_SHA256_SIGNATURE:
  ------------------
  |  Branch (54:9): [True: 329, False: 4.13k]
  ------------------
   55|    337|        case SEC_OID_ANSIX962_ECDSA_SHA384_SIGNATURE:
  ------------------
  |  Branch (55:9): [True: 5, False: 4.45k]
  ------------------
   56|    341|        case SEC_OID_ANSIX962_ECDSA_SHA512_SIGNATURE:
  ------------------
  |  Branch (56:9): [True: 4, False: 4.45k]
  ------------------
   57|    341|            if (key->keyType != ecKey) {
  ------------------
  |  Branch (57:17): [True: 0, False: 341]
  ------------------
   58|      0|                PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   59|      0|                return SECFailure;
   60|      0|            }
   61|       |
   62|    341|            curve = SECKEY_GetECCOid(&key->u.ec.DEREncodedParams);
   63|    341|            if (curve != 0) {
  ------------------
  |  Branch (63:17): [True: 335, False: 6]
  ------------------
   64|    335|                if (NSS_GetAlgorithmPolicy(curve, &policyFlags) == SECFailure ||
  ------------------
  |  Branch (64:21): [True: 0, False: 335]
  ------------------
   65|    335|                    !(policyFlags & NSS_USE_ALG_IN_CERT_SIGNATURE)) {
  ------------------
  |  |  570|    335|#define NSS_USE_ALG_IN_CERT_SIGNATURE 0x00000001   /* CRLs and OCSP, too */
  ------------------
  |  Branch (65:21): [True: 1, False: 334]
  ------------------
   66|      1|                    PORT_SetError(SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED);
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
   67|      1|                    return SECFailure;
   68|      1|                }
   69|    334|                return SECSuccess;
   70|    335|            }
   71|      6|            PORT_SetError(SEC_ERROR_UNSUPPORTED_ELLIPTIC_CURVE);
  ------------------
  |  |   65|      6|#define PORT_SetError PORT_SetError_Util
  ------------------
   72|      6|            return SECFailure;
   73|       |
   74|     79|        case SEC_OID_PKCS1_RSA_PSS_SIGNATURE: {
  ------------------
  |  Branch (74:9): [True: 79, False: 4.38k]
  ------------------
   75|     79|            PORTCheapArenaPool tmpArena;
   76|     79|            SECOidTag hashAlg;
   77|     79|            SECOidTag maskHashAlg;
   78|       |
   79|     79|            PORT_InitCheapArena(&tmpArena, DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|     79|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
   80|     79|            rv = sec_DecodeRSAPSSParams(&tmpArena.arena,
   81|     79|                                        &sigAlgorithm->parameters,
   82|     79|                                        &hashAlg, &maskHashAlg, NULL);
   83|     79|            PORT_DestroyCheapArena(&tmpArena);
   84|     79|            if (rv != SECSuccess) {
  ------------------
  |  Branch (84:17): [True: 0, False: 79]
  ------------------
   85|      0|                return SECFailure;
   86|      0|            }
   87|       |
   88|     79|            if (NSS_GetAlgorithmPolicy(hashAlg, &policyFlags) == SECSuccess &&
  ------------------
  |  Branch (88:17): [True: 79, False: 0]
  ------------------
   89|     79|                !(policyFlags & NSS_USE_ALG_IN_CERT_SIGNATURE)) {
  ------------------
  |  |  570|     79|#define NSS_USE_ALG_IN_CERT_SIGNATURE 0x00000001   /* CRLs and OCSP, too */
  ------------------
  |  Branch (89:17): [True: 0, False: 79]
  ------------------
   90|      0|                PORT_SetError(SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   91|      0|                return SECFailure;
   92|      0|            }
   93|     79|            if (NSS_GetAlgorithmPolicy(maskHashAlg, &policyFlags) == SECSuccess &&
  ------------------
  |  Branch (93:17): [True: 79, False: 0]
  ------------------
   94|     79|                !(policyFlags & NSS_USE_ALG_IN_CERT_SIGNATURE)) {
  ------------------
  |  |  570|     79|#define NSS_USE_ALG_IN_CERT_SIGNATURE 0x00000001   /* CRLs and OCSP, too */
  ------------------
  |  Branch (94:17): [True: 0, False: 79]
  ------------------
   95|      0|                PORT_SetError(SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   96|      0|                return SECFailure;
   97|      0|            }
   98|     79|        }
   99|       |        /* fall through to RSA key checking */
  100|     79|        case SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (100:9): [True: 0, False: 4.46k]
  ------------------
  101|     81|        case SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (101:9): [True: 2, False: 4.45k]
  ------------------
  102|  2.77k|        case SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (102:9): [True: 2.68k, False: 1.77k]
  ------------------
  103|  2.77k|        case SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (103:9): [True: 1, False: 4.45k]
  ------------------
  104|  2.77k|        case SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (104:9): [True: 2, False: 4.45k]
  ------------------
  105|  2.77k|        case SEC_OID_ISO_SHA_WITH_RSA_SIGNATURE:
  ------------------
  |  Branch (105:9): [True: 0, False: 4.46k]
  ------------------
  106|  2.77k|        case SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE:
  ------------------
  |  Branch (106:9): [True: 0, False: 4.46k]
  ------------------
  107|  2.77k|            if (key->keyType != rsaKey && key->keyType != rsaPssKey) {
  ------------------
  |  Branch (107:17): [True: 1, False: 2.77k]
  |  Branch (107:43): [True: 1, False: 0]
  ------------------
  108|      1|                PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
  109|      1|                return SECFailure;
  110|      1|            }
  111|       |
  112|  2.77k|            if (NSS_OptionGet(NSS_KEY_SIZE_POLICY_FLAGS, &optFlags) == SECFailure) {
  ------------------
  |  |  317|  2.77k|#define NSS_KEY_SIZE_POLICY_FLAGS 0x00e
  ------------------
  |  Branch (112:17): [True: 0, False: 2.77k]
  ------------------
  113|      0|                return SECSuccess;
  114|      0|            }
  115|  2.77k|            if ((optFlags & NSS_KEY_SIZE_POLICY_VERIFY_FLAG) == 0) {
  ------------------
  |  |  322|  2.77k|#define NSS_KEY_SIZE_POLICY_VERIFY_FLAG 2
  ------------------
  |  Branch (115:17): [True: 0, False: 2.77k]
  ------------------
  116|      0|                return SECSuccess;
  117|      0|            }
  118|       |
  119|  2.77k|            len = 8 * key->u.rsa.modulus.len;
  120|       |
  121|  2.77k|            rv = NSS_OptionGet(NSS_RSA_MIN_KEY_SIZE, &minLen);
  ------------------
  |  |  286|  2.77k|#define NSS_RSA_MIN_KEY_SIZE 0x001
  ------------------
  122|  2.77k|            if (rv != SECSuccess) {
  ------------------
  |  Branch (122:17): [True: 0, False: 2.77k]
  ------------------
  123|      0|                return SECFailure;
  124|      0|            }
  125|       |
  126|  2.77k|            if (len < minLen) {
  ------------------
  |  Branch (126:17): [True: 2, False: 2.77k]
  ------------------
  127|      2|                return SECFailure;
  128|      2|            }
  129|       |
  130|  2.77k|            return SECSuccess;
  131|      0|        case SEC_OID_ANSIX9_DSA_SIGNATURE:
  ------------------
  |  Branch (131:9): [True: 0, False: 4.46k]
  ------------------
  132|      0|        case SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST:
  ------------------
  |  Branch (132:9): [True: 0, False: 4.46k]
  ------------------
  133|      0|        case SEC_OID_BOGUS_DSA_SIGNATURE_WITH_SHA1_DIGEST:
  ------------------
  |  Branch (133:9): [True: 0, False: 4.46k]
  ------------------
  134|      0|        case SEC_OID_SDN702_DSA_SIGNATURE:
  ------------------
  |  Branch (134:9): [True: 0, False: 4.46k]
  ------------------
  135|      1|        case SEC_OID_NIST_DSA_SIGNATURE_WITH_SHA224_DIGEST:
  ------------------
  |  Branch (135:9): [True: 1, False: 4.45k]
  ------------------
  136|  1.34k|        case SEC_OID_NIST_DSA_SIGNATURE_WITH_SHA256_DIGEST:
  ------------------
  |  Branch (136:9): [True: 1.34k, False: 3.11k]
  ------------------
  137|  1.34k|            if (key->keyType != dsaKey) {
  ------------------
  |  Branch (137:17): [True: 1, False: 1.34k]
  ------------------
  138|      1|                PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
  139|      1|                return SECFailure;
  140|      1|            }
  141|  1.34k|            if (NSS_OptionGet(NSS_KEY_SIZE_POLICY_FLAGS, &optFlags) == SECFailure) {
  ------------------
  |  |  317|  1.34k|#define NSS_KEY_SIZE_POLICY_FLAGS 0x00e
  ------------------
  |  Branch (141:17): [True: 0, False: 1.34k]
  ------------------
  142|      0|                return SECSuccess;
  143|      0|            }
  144|  1.34k|            if ((optFlags & NSS_KEY_SIZE_POLICY_VERIFY_FLAG) == 0) {
  ------------------
  |  |  322|  1.34k|#define NSS_KEY_SIZE_POLICY_VERIFY_FLAG 2
  ------------------
  |  Branch (144:17): [True: 0, False: 1.34k]
  ------------------
  145|      0|                return SECSuccess;
  146|      0|            }
  147|       |
  148|  1.34k|            len = 8 * key->u.dsa.params.prime.len;
  149|       |
  150|  1.34k|            rv = NSS_OptionGet(NSS_DSA_MIN_KEY_SIZE, &minLen);
  ------------------
  |  |  288|  1.34k|#define NSS_DSA_MIN_KEY_SIZE 0x004
  ------------------
  151|  1.34k|            if (rv != SECSuccess) {
  ------------------
  |  Branch (151:17): [True: 0, False: 1.34k]
  ------------------
  152|      0|                return SECFailure;
  153|      0|            }
  154|       |
  155|  1.34k|            if (len < minLen) {
  ------------------
  |  Branch (155:17): [True: 0, False: 1.34k]
  ------------------
  156|      0|                return SECFailure;
  157|      0|            }
  158|       |
  159|  1.34k|            return SECSuccess;
  160|      4|        default:
  ------------------
  |  Branch (160:9): [True: 4, False: 4.45k]
  ------------------
  161|      4|            return SECSuccess;
  162|  4.46k|    }
  163|  4.46k|}
certvfy.c:CertIsStartComOrWoSign:
  561|     81|{
  562|     81|    int i;
  563|     81|    const struct DataAndLength *dn = StartComAndWoSignDNs;
  564|       |
  565|    567|    for (i = 0; i < sizeof(StartComAndWoSignDNs) / sizeof(struct DataAndLength); ++i, dn++) {
  ------------------
  |  Branch (565:17): [True: 486, False: 81]
  ------------------
  566|    486|        if (cert->derSubject.len == dn->len &&
  ------------------
  |  Branch (566:13): [True: 0, False: 486]
  ------------------
  567|    486|            memcmp(cert->derSubject.data, dn->data, dn->len) == 0) {
  ------------------
  |  Branch (567:13): [True: 0, False: 0]
  ------------------
  568|      0|            return PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  569|      0|        }
  570|    486|    }
  571|     81|    return PR_FALSE;
  ------------------
  |  |  438|     81|#define PR_FALSE 0
  ------------------
  572|     81|}
certvfy.c:cert_VerifyCertChainOld:
  609|  6.50k|{
  610|  6.50k|    SECTrustType trustType;
  611|  6.50k|    CERTBasicConstraints basicConstraint;
  612|  6.50k|    CERTCertificate *issuerCert = NULL;
  613|  6.50k|    CERTCertificate *subjectCert = NULL;
  614|  6.50k|    CERTCertificate *badCert = NULL;
  615|  6.50k|    PRBool isca;
  616|  6.50k|    SECStatus rv;
  617|  6.50k|    SECStatus rvFinal = SECSuccess;
  618|  6.50k|    int count;
  619|  6.50k|    int currentPathLen = 0;
  620|  6.50k|    int pathLengthLimit = CERT_UNLIMITED_PATH_CONSTRAINT;
  ------------------
  |  |  599|  6.50k|#define CERT_UNLIMITED_PATH_CONSTRAINT -2
  ------------------
  621|  6.50k|    unsigned int caCertType;
  622|  6.50k|    unsigned int requiredCAKeyUsage;
  623|  6.50k|    unsigned int requiredFlags;
  624|  6.50k|    PLArenaPool *arena = NULL;
  625|  6.50k|    CERTGeneralName *namesList = NULL;
  626|  6.50k|    CERTCertificate **certsList = NULL;
  627|  6.50k|    int certsListLen = 16;
  628|  6.50k|    int namesCount = 0;
  629|  6.50k|    PRBool subjectCertIsSelfIssued;
  630|  6.50k|    CERTCertTrust issuerTrust;
  631|       |
  632|  6.50k|    if (revoked) {
  ------------------
  |  Branch (632:9): [True: 6.50k, False: 0]
  ------------------
  633|  6.50k|        *revoked = PR_FALSE;
  ------------------
  |  |  438|  6.50k|#define PR_FALSE 0
  ------------------
  634|  6.50k|    }
  635|       |
  636|  6.50k|    if (CERT_KeyUsageAndTypeForCertUsage(certUsage, PR_TRUE,
  ------------------
  |  |  437|  6.50k|#define PR_TRUE 1
  ------------------
  |  Branch (636:9): [True: 0, False: 6.50k]
  ------------------
  637|  6.50k|                                         &requiredCAKeyUsage,
  638|  6.50k|                                         &caCertType) !=
  639|  6.50k|        SECSuccess) {
  640|      0|        PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  641|      0|        EXIT_IF_NOT_LOGGING(log);
  ------------------
  |  |  450|      0|    if (log == NULL) {           \
  |  |  ------------------
  |  |  |  Branch (450:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  451|      0|        goto loser;              \
  |  |  452|      0|    }
  ------------------
  642|      0|        requiredCAKeyUsage = 0;
  643|      0|        caCertType = 0;
  644|      0|    }
  645|       |
  646|  6.50k|    switch (certUsage) {
  647|  4.76k|        case certUsageSSLClient:
  ------------------
  |  Branch (647:9): [True: 4.76k, False: 1.74k]
  ------------------
  648|  5.04k|        case certUsageSSLServer:
  ------------------
  |  Branch (648:9): [True: 277, False: 6.23k]
  ------------------
  649|  5.52k|        case certUsageIPsec:
  ------------------
  |  Branch (649:9): [True: 479, False: 6.02k]
  ------------------
  650|  5.65k|        case certUsageSSLCA:
  ------------------
  |  Branch (650:9): [True: 134, False: 6.37k]
  ------------------
  651|  5.67k|        case certUsageSSLServerWithStepUp:
  ------------------
  |  Branch (651:9): [True: 17, False: 6.49k]
  ------------------
  652|  6.13k|        case certUsageEmailSigner:
  ------------------
  |  Branch (652:9): [True: 464, False: 6.04k]
  ------------------
  653|  6.38k|        case certUsageEmailRecipient:
  ------------------
  |  Branch (653:9): [True: 253, False: 6.25k]
  ------------------
  654|  6.42k|        case certUsageObjectSigner:
  ------------------
  |  Branch (654:9): [True: 36, False: 6.47k]
  ------------------
  655|  6.42k|        case certUsageVerifyCA:
  ------------------
  |  Branch (655:9): [True: 0, False: 6.50k]
  ------------------
  656|  6.42k|        case certUsageAnyCA:
  ------------------
  |  Branch (656:9): [True: 0, False: 6.50k]
  ------------------
  657|  6.50k|        case certUsageStatusResponder:
  ------------------
  |  Branch (657:9): [True: 84, False: 6.42k]
  ------------------
  658|  6.50k|            if (CERT_TrustFlagsForCACertUsage(certUsage, &requiredFlags,
  ------------------
  |  Branch (658:17): [True: 0, False: 6.50k]
  ------------------
  659|  6.50k|                                              &trustType) != SECSuccess) {
  660|      0|                PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  661|      0|                EXIT_IF_NOT_LOGGING(log);
  ------------------
  |  |  450|      0|    if (log == NULL) {           \
  |  |  ------------------
  |  |  |  Branch (450:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  451|      0|        goto loser;              \
  |  |  452|      0|    }
  ------------------
  662|       |                /* XXX continuing with requiredFlags = 0 seems wrong.  It'll
  663|       |                 * cause the following test to be true incorrectly:
  664|       |                 *   flags = SEC_GET_TRUST_FLAGS(issuerCert->trust, trustType);
  665|       |                 *   if (( flags & requiredFlags ) == requiredFlags) {
  666|       |                 *       rv = rvFinal;
  667|       |                 *       goto done;
  668|       |                 *   }
  669|       |                 * There are three other instances of this problem.
  670|       |                 */
  671|      0|                requiredFlags = 0;
  672|      0|                trustType = trustSSL;
  673|      0|            }
  674|  6.50k|            break;
  675|  6.50k|        default:
  ------------------
  |  Branch (675:9): [True: 0, False: 6.50k]
  ------------------
  676|      0|            PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  677|      0|            EXIT_IF_NOT_LOGGING(log);
  ------------------
  |  |  450|      0|    if (log == NULL) {           \
  |  |  ------------------
  |  |  |  Branch (450:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  451|      0|        goto loser;              \
  |  |  452|      0|    }
  ------------------
  678|      0|            requiredFlags = 0;
  679|      0|            trustType = trustSSL; /* This used to be 0, but we need something
  680|       |                                   * that matches the enumeration type.
  681|       |                                   */
  682|      0|            caCertType = 0;
  683|  6.50k|    }
  684|       |
  685|  6.50k|    subjectCert = CERT_DupCertificate(cert);
  686|  6.50k|    if (subjectCert == NULL) {
  ------------------
  |  Branch (686:9): [True: 0, False: 6.50k]
  ------------------
  687|      0|        goto loser;
  688|      0|    }
  689|       |
  690|  6.50k|    arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   63|  6.50k|#define PORT_NewArena PORT_NewArena_Util
  ------------------
                  arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|  6.50k|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  691|  6.50k|    if (arena == NULL) {
  ------------------
  |  Branch (691:9): [True: 0, False: 6.50k]
  ------------------
  692|      0|        goto loser;
  693|      0|    }
  694|       |
  695|  6.50k|    certsList = PORT_ZNewArray(CERTCertificate *, certsListLen);
  ------------------
  |  |  159|  6.50k|    (type *)PORT_ZAlloc(sizeof(type) * (num))
  |  |  ------------------
  |  |  |  |   72|  6.50k|#define PORT_ZAlloc PORT_ZAlloc_Util
  |  |  ------------------
  ------------------
  696|  6.50k|    if (certsList == NULL)
  ------------------
  |  Branch (696:9): [True: 0, False: 6.50k]
  ------------------
  697|      0|        goto loser;
  698|       |
  699|       |    /* RFC 3280 says that the name constraints will apply to the names
  700|       |    ** in the leaf (EE) cert, whether it is self issued or not, so
  701|       |    ** we pretend that it is not.
  702|       |    */
  703|  6.50k|    subjectCertIsSelfIssued = PR_FALSE;
  ------------------
  |  |  438|  6.50k|#define PR_FALSE 0
  ------------------
  704|  6.50k|    for (count = 0; count < CERT_MAX_CERT_CHAIN; count++) {
  ------------------
  |  |  610|  6.50k|#define CERT_MAX_CERT_CHAIN 20
  ------------------
  |  Branch (704:21): [True: 6.50k, False: 0]
  ------------------
  705|  6.50k|        PRBool validCAOverride = PR_FALSE;
  ------------------
  |  |  438|  6.50k|#define PR_FALSE 0
  ------------------
  706|       |
  707|       |        /* Construct a list of names for the current and all previous
  708|       |         * certifcates (except leaf (EE) certs, root CAs, and self-issued
  709|       |         * intermediate CAs) to be verified against the name constraints
  710|       |         * extension of the issuer certificate.
  711|       |         */
  712|  6.50k|        if (subjectCertIsSelfIssued == PR_FALSE) {
  ------------------
  |  |  438|  6.50k|#define PR_FALSE 0
  ------------------
  |  Branch (712:13): [True: 6.50k, False: 0]
  ------------------
  713|  6.50k|            CERTGeneralName *subjectNameList;
  714|  6.50k|            int subjectNameListLen;
  715|  6.50k|            int i;
  716|  6.50k|            PRBool getSubjectCN = (!count &&
  ------------------
  |  Branch (716:36): [True: 6.50k, False: 0]
  ------------------
  717|  6.50k|                                   (certUsage == certUsageSSLServer || certUsage == certUsageIPsec));
  ------------------
  |  Branch (717:37): [True: 277, False: 6.23k]
  |  Branch (717:72): [True: 479, False: 5.75k]
  ------------------
  718|  6.50k|            subjectNameList =
  719|  6.50k|                CERT_GetConstrainedCertificateNames(subjectCert, arena,
  720|  6.50k|                                                    getSubjectCN);
  721|  6.50k|            if (!subjectNameList)
  ------------------
  |  Branch (721:17): [True: 78, False: 6.43k]
  ------------------
  722|     78|                goto loser;
  723|  6.43k|            subjectNameListLen = CERT_GetNamesLength(subjectNameList);
  724|  6.43k|            if (!subjectNameListLen)
  ------------------
  |  Branch (724:17): [True: 0, False: 6.43k]
  ------------------
  725|      0|                goto loser;
  726|  6.43k|            if (certsListLen <= namesCount + subjectNameListLen) {
  ------------------
  |  Branch (726:17): [True: 46, False: 6.38k]
  ------------------
  727|     46|                CERTCertificate **tmpCertsList;
  728|     46|                certsListLen = (namesCount + subjectNameListLen) * 2;
  729|     46|                tmpCertsList =
  730|     46|                    (CERTCertificate **)PORT_Realloc(certsList,
  ------------------
  |  |   64|     46|#define PORT_Realloc PORT_Realloc_Util
  ------------------
  731|     46|                                                     certsListLen *
  732|     46|                                                         sizeof(CERTCertificate *));
  733|     46|                if (tmpCertsList == NULL) {
  ------------------
  |  Branch (733:21): [True: 0, False: 46]
  ------------------
  734|      0|                    goto loser;
  735|      0|                }
  736|     46|                certsList = tmpCertsList;
  737|     46|            }
  738|  17.7k|            for (i = 0; i < subjectNameListLen; i++) {
  ------------------
  |  Branch (738:25): [True: 11.2k, False: 6.43k]
  ------------------
  739|  11.2k|                certsList[namesCount + i] = subjectCert;
  740|  11.2k|            }
  741|  6.43k|            namesCount += subjectNameListLen;
  742|  6.43k|            namesList = cert_CombineNamesLists(namesList, subjectNameList);
  743|  6.43k|        }
  744|       |
  745|       |        /* check if the cert has an unsupported critical extension */
  746|  6.43k|        if (subjectCert->options.bits.hasUnsupportedCriticalExt) {
  ------------------
  |  Branch (746:13): [True: 93, False: 6.33k]
  ------------------
  747|     93|            PORT_SetError(SEC_ERROR_UNKNOWN_CRITICAL_EXTENSION);
  ------------------
  |  |   65|     93|#define PORT_SetError PORT_SetError_Util
  ------------------
  748|     93|            LOG_ERROR_OR_EXIT(log, subjectCert, count, 0);
  ------------------
  |  |  455|     93|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (455:9): [True: 0, False: 93]
  |  |  ------------------
  |  |  456|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  457|      0|                            (void *)(PRWord)arg);              \
  |  |  458|     93|    } else {                                                   \
  |  |  459|     93|        goto loser;                                            \
  |  |  460|     93|    }
  ------------------
  749|      0|        }
  750|       |
  751|       |        /* check that the signatureAlgorithm field of the certificate
  752|       |         * matches the signature field of the tbsCertificate */
  753|  6.33k|        if (SECOID_CompareAlgorithmID(
  ------------------
  |  |  112|  6.33k|#define SECOID_CompareAlgorithmID SECOID_CompareAlgorithmID_Util
  ------------------
  |  Branch (753:13): [True: 682, False: 5.65k]
  ------------------
  754|  6.33k|                &subjectCert->signatureWrap.signatureAlgorithm,
  755|  6.33k|                &subjectCert->signature)) {
  756|    682|            PORT_SetError(SEC_ERROR_ALGORITHM_MISMATCH);
  ------------------
  |  |   65|    682|#define PORT_SetError PORT_SetError_Util
  ------------------
  757|    682|            LOG_ERROR(log, subjectCert, count, 0);
  ------------------
  |  |  463|    682|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (463:9): [True: 0, False: 682]
  |  |  ------------------
  |  |  464|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  465|      0|                            (void *)(PRWord)arg);              \
  |  |  466|      0|    }
  ------------------
  758|    682|            goto loser;
  759|    682|        }
  760|       |
  761|       |        /* find the certificate of the issuer */
  762|  5.65k|        issuerCert = CERT_FindCertIssuer(subjectCert, t, certUsage);
  763|  5.65k|        if (!issuerCert) {
  ------------------
  |  Branch (763:13): [True: 1.11k, False: 4.53k]
  ------------------
  764|  1.11k|            PORT_SetError(SEC_ERROR_UNKNOWN_ISSUER);
  ------------------
  |  |   65|  1.11k|#define PORT_SetError PORT_SetError_Util
  ------------------
  765|  1.11k|            LOG_ERROR(log, subjectCert, count, 0);
  ------------------
  |  |  463|  1.11k|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (463:9): [True: 0, False: 1.11k]
  |  |  ------------------
  |  |  464|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  465|      0|                            (void *)(PRWord)arg);              \
  |  |  466|      0|    }
  ------------------
  766|  1.11k|            goto loser;
  767|  1.11k|        }
  768|       |
  769|       |        /* verify the signature on the cert */
  770|  4.53k|        if (checkSig) {
  ------------------
  |  Branch (770:13): [True: 4.53k, False: 0]
  ------------------
  771|  4.53k|            rv = CERT_VerifySignedData(&subjectCert->signatureWrap,
  772|  4.53k|                                       issuerCert, t, wincx);
  773|       |
  774|  4.53k|            if (rv != SECSuccess) {
  ------------------
  |  Branch (774:17): [True: 4.36k, False: 171]
  ------------------
  775|  4.36k|                if (sigerror) {
  ------------------
  |  Branch (775:21): [True: 4.36k, False: 0]
  ------------------
  776|  4.36k|                    *sigerror = PR_TRUE;
  ------------------
  |  |  437|  4.36k|#define PR_TRUE 1
  ------------------
  777|  4.36k|                }
  778|  4.36k|                if (PORT_GetError() == SEC_ERROR_EXPIRED_CERTIFICATE) {
  ------------------
  |  |   62|  4.36k|#define PORT_GetError PORT_GetError_Util
  ------------------
  |  Branch (778:21): [True: 0, False: 4.36k]
  ------------------
  779|      0|                    PORT_SetError(SEC_ERROR_EXPIRED_ISSUER_CERTIFICATE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  780|      0|                    LOG_ERROR_OR_EXIT(log, issuerCert, count + 1, 0);
  ------------------
  |  |  455|      0|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (455:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  456|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  457|      0|                            (void *)(PRWord)arg);              \
  |  |  458|      0|    } else {                                                   \
  |  |  459|      0|        goto loser;                                            \
  |  |  460|      0|    }
  ------------------
  781|  4.36k|                } else {
  782|  4.36k|                    if (PORT_GetError() !=
  ------------------
  |  |   62|  4.36k|#define PORT_GetError PORT_GetError_Util
  ------------------
  |  Branch (782:25): [True: 4.34k, False: 20]
  ------------------
  783|  4.36k|                        SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED) {
  784|  4.34k|                        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|  4.34k|#define PORT_SetError PORT_SetError_Util
  ------------------
  785|  4.34k|                    }
  786|  4.36k|                    LOG_ERROR_OR_EXIT(log, subjectCert, count, 0);
  ------------------
  |  |  455|  4.36k|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (455:9): [True: 0, False: 4.36k]
  |  |  ------------------
  |  |  456|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  457|      0|                            (void *)(PRWord)arg);              \
  |  |  458|  4.36k|    } else {                                                   \
  |  |  459|  4.36k|        goto loser;                                            \
  |  |  460|  4.36k|    }
  ------------------
  787|      0|                }
  788|  4.36k|            }
  789|  4.53k|        }
  790|       |
  791|       |        /* If the basicConstraint extension is included in an immediate CA
  792|       |         * certificate, make sure that the isCA flag is on.  If the
  793|       |         * pathLenConstraint component exists, it must be greater than the
  794|       |         * number of CA certificates we have seen so far.  If the extension
  795|       |         * is omitted, we will assume that this is a CA certificate with
  796|       |         * an unlimited pathLenConstraint (since it already passes the
  797|       |         * netscape-cert-type extension checking).
  798|       |         */
  799|       |
  800|    171|        rv = CERT_FindBasicConstraintExten(issuerCert, &basicConstraint);
  801|    171|        if (rv != SECSuccess) {
  ------------------
  |  Branch (801:13): [True: 50, False: 121]
  ------------------
  802|     50|            if (PORT_GetError() != SEC_ERROR_EXTENSION_NOT_FOUND) {
  ------------------
  |  |   62|     50|#define PORT_GetError PORT_GetError_Util
  ------------------
  |  Branch (802:17): [True: 0, False: 50]
  ------------------
  803|      0|                LOG_ERROR_OR_EXIT(log, issuerCert, count + 1, 0);
  ------------------
  |  |  455|      0|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (455:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  456|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  457|      0|                            (void *)(PRWord)arg);              \
  |  |  458|      0|    } else {                                                   \
  |  |  459|      0|        goto loser;                                            \
  |  |  460|      0|    }
  ------------------
  804|      0|            }
  805|     50|            pathLengthLimit = CERT_UNLIMITED_PATH_CONSTRAINT;
  ------------------
  |  |  599|     50|#define CERT_UNLIMITED_PATH_CONSTRAINT -2
  ------------------
  806|       |            /* no basic constraints found, we aren't (yet) a CA. */
  807|     50|            isca = PR_FALSE;
  ------------------
  |  |  438|     50|#define PR_FALSE 0
  ------------------
  808|    121|        } else {
  809|    121|            if (basicConstraint.isCA == PR_FALSE) {
  ------------------
  |  |  438|    121|#define PR_FALSE 0
  ------------------
  |  Branch (809:17): [True: 90, False: 31]
  ------------------
  810|     90|                PORT_SetError(SEC_ERROR_CA_CERT_INVALID);
  ------------------
  |  |   65|     90|#define PORT_SetError PORT_SetError_Util
  ------------------
  811|     90|                LOG_ERROR_OR_EXIT(log, issuerCert, count + 1, 0);
  ------------------
  |  |  455|     90|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (455:9): [True: 0, False: 90]
  |  |  ------------------
  |  |  456|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  457|      0|                            (void *)(PRWord)arg);              \
  |  |  458|     90|    } else {                                                   \
  |  |  459|     90|        goto loser;                                            \
  |  |  460|     90|    }
  ------------------
  812|      0|            }
  813|     31|            pathLengthLimit = basicConstraint.pathLenConstraint;
  814|     31|            isca = PR_TRUE;
  ------------------
  |  |  437|     31|#define PR_TRUE 1
  ------------------
  815|     31|        }
  816|       |        /* make sure that the path len constraint is properly set.*/
  817|     81|        if (pathLengthLimit >= 0 && currentPathLen > pathLengthLimit) {
  ------------------
  |  Branch (817:13): [True: 0, False: 81]
  |  Branch (817:37): [True: 0, False: 0]
  ------------------
  818|      0|            PORT_SetError(SEC_ERROR_PATH_LEN_CONSTRAINT_INVALID);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  819|      0|            LOG_ERROR_OR_EXIT(log, issuerCert, count + 1, pathLengthLimit);
  ------------------
  |  |  455|      0|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (455:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  456|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  457|      0|                            (void *)(PRWord)arg);              \
  |  |  458|      0|    } else {                                                   \
  |  |  459|      0|        goto loser;                                            \
  |  |  460|      0|    }
  ------------------
  820|      0|        }
  821|       |
  822|       |        /* make sure that the entire chain is within the name space of the
  823|       |         * current issuer certificate.
  824|       |         */
  825|     81|        rv = CERT_CompareNameSpace(issuerCert, namesList, certsList,
  826|     81|                                   arena, &badCert);
  827|     81|        if (rv != SECSuccess || badCert != NULL) {
  ------------------
  |  Branch (827:13): [True: 0, False: 81]
  |  Branch (827:33): [True: 0, False: 81]
  ------------------
  828|      0|            PORT_SetError(SEC_ERROR_CERT_NOT_IN_NAME_SPACE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  829|      0|            LOG_ERROR_OR_EXIT(log, badCert, count + 1, 0);
  ------------------
  |  |  455|      0|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (455:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  456|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  457|      0|                            (void *)(PRWord)arg);              \
  |  |  458|      0|    } else {                                                   \
  |  |  459|      0|        goto loser;                                            \
  |  |  460|      0|    }
  ------------------
  830|      0|            goto loser;
  831|      0|        }
  832|       |
  833|     81|        rv = isIssuerCertAllowedAtCertIssuanceTime(issuerCert, cert);
  834|     81|        if (rv != SECSuccess) {
  ------------------
  |  Branch (834:13): [True: 0, False: 81]
  ------------------
  835|      0|            PORT_SetError(SEC_ERROR_UNTRUSTED_ISSUER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  836|      0|            LOG_ERROR(log, issuerCert, count + 1, 0);
  ------------------
  |  |  463|      0|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (463:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  464|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  465|      0|                            (void *)(PRWord)arg);              \
  |  |  466|      0|    }
  ------------------
  837|      0|            goto loser;
  838|      0|        }
  839|       |
  840|       |        /* XXX - the error logging may need to go down into CRL stuff at some
  841|       |         * point
  842|       |         */
  843|       |        /* check revoked list (issuer) */
  844|     81|        rv = SEC_CheckCRL(handle, subjectCert, issuerCert, t, wincx);
  845|     81|        if (rv == SECFailure) {
  ------------------
  |  Branch (845:13): [True: 0, False: 81]
  ------------------
  846|      0|            if (revoked) {
  ------------------
  |  Branch (846:17): [True: 0, False: 0]
  ------------------
  847|      0|                *revoked = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  848|      0|            }
  849|      0|            LOG_ERROR_OR_EXIT(log, subjectCert, count, 0);
  ------------------
  |  |  455|      0|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (455:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  456|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  457|      0|                            (void *)(PRWord)arg);              \
  |  |  458|      0|    } else {                                                   \
  |  |  459|      0|        goto loser;                                            \
  |  |  460|      0|    }
  ------------------
  850|     81|        } else if (rv == SECWouldBlock) {
  ------------------
  |  Branch (850:20): [True: 0, False: 81]
  ------------------
  851|       |            /* We found something fishy, so we intend to issue an
  852|       |             * error to the user, but the user may wish to continue
  853|       |             * processing, in which case we better make sure nothing
  854|       |             * worse has happened... so keep cranking the loop */
  855|      0|            rvFinal = SECFailure;
  856|      0|            if (revoked) {
  ------------------
  |  Branch (856:17): [True: 0, False: 0]
  ------------------
  857|      0|                *revoked = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  858|      0|            }
  859|      0|            LOG_ERROR(log, subjectCert, count, 0);
  ------------------
  |  |  463|      0|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (463:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  464|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  465|      0|                            (void *)(PRWord)arg);              \
  |  |  466|      0|    }
  ------------------
  860|      0|        }
  861|       |
  862|     81|        if (CERT_GetCertTrust(issuerCert, &issuerTrust) == SECSuccess) {
  ------------------
  |  Branch (862:13): [True: 0, False: 81]
  ------------------
  863|       |            /* we have some trust info, but this does NOT imply that this
  864|       |             * cert is actually trusted for any purpose.  The cert may be
  865|       |             * explicitly UNtrusted.  We won't know until we examine the
  866|       |             * trust bits.
  867|       |             */
  868|      0|            unsigned int flags;
  869|       |
  870|      0|            if (certUsage != certUsageAnyCA &&
  ------------------
  |  Branch (870:17): [True: 0, False: 0]
  ------------------
  871|      0|                certUsage != certUsageStatusResponder) {
  ------------------
  |  Branch (871:17): [True: 0, False: 0]
  ------------------
  872|       |
  873|       |                /*
  874|       |                 * XXX This choice of trustType seems arbitrary.
  875|       |                 */
  876|      0|                if (certUsage == certUsageVerifyCA) {
  ------------------
  |  Branch (876:21): [True: 0, False: 0]
  ------------------
  877|      0|                    if (subjectCert->nsCertType & NS_CERT_TYPE_EMAIL_CA) {
  ------------------
  |  |  453|      0|#define NS_CERT_TYPE_EMAIL_CA (0x02)          /* bit 6 */
  ------------------
  |  Branch (877:25): [True: 0, False: 0]
  ------------------
  878|      0|                        trustType = trustEmail;
  879|      0|                    } else if (subjectCert->nsCertType & NS_CERT_TYPE_SSL_CA) {
  ------------------
  |  |  452|      0|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  ------------------
  |  Branch (879:32): [True: 0, False: 0]
  ------------------
  880|      0|                        trustType = trustSSL;
  881|      0|                    } else {
  882|      0|                        trustType = trustObjectSigning;
  883|      0|                    }
  884|      0|                }
  885|       |
  886|      0|                flags = SEC_GET_TRUST_FLAGS(&issuerTrust, trustType);
  ------------------
  |  |  167|      0|    (((type) == trustSSL)                                                 \
  |  |  ------------------
  |  |  |  Branch (167:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  168|      0|         ? ((trust)->sslFlags)                                            \
  |  |  169|      0|         : (((type) == trustEmail) ? ((trust)->emailFlags)                \
  |  |  ------------------
  |  |  |  Branch (169:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  170|      0|                                   : (((type) == trustObjectSigning)      \
  |  |  ------------------
  |  |  |  Branch (170:39): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|                                          ? ((trust)->objectSigningFlags) \
  |  |  172|      0|                                          : 0)))
  ------------------
  887|      0|                if ((flags & requiredFlags) == requiredFlags) {
  ------------------
  |  Branch (887:21): [True: 0, False: 0]
  ------------------
  888|       |                    /* we found a trusted one, so return */
  889|      0|                    rv = rvFinal;
  890|      0|                    goto done;
  891|      0|                }
  892|      0|                if (flags & CERTDB_VALID_CA) {
  ------------------
  |  |   12|      0|#define CERTDB_VALID_CA (1u << 3)
  ------------------
  |  Branch (892:21): [True: 0, False: 0]
  ------------------
  893|      0|                    validCAOverride = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  894|      0|                }
  895|       |                /* is it explicitly distrusted? */
  896|      0|                if ((flags & CERTDB_TERMINAL_RECORD) &&
  ------------------
  |  |    9|      0|#define CERTDB_TERMINAL_RECORD (1u << 0)
  ------------------
  |  Branch (896:21): [True: 0, False: 0]
  ------------------
  897|      0|                    ((flags & (CERTDB_TRUSTED | CERTDB_TRUSTED_CA)) == 0)) {
  ------------------
  |  |   10|      0|#define CERTDB_TRUSTED (1u << 1)
  ------------------
                                  ((flags & (CERTDB_TRUSTED | CERTDB_TRUSTED_CA)) == 0)) {
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  |  Branch (897:21): [True: 0, False: 0]
  ------------------
  898|       |                    /* untrusted -- the cert is explicitly untrusted, not
  899|       |                     * just that it doesn't chain to a trusted cert */
  900|      0|                    PORT_SetError(SEC_ERROR_UNTRUSTED_ISSUER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  901|      0|                    LOG_ERROR_OR_EXIT(log, issuerCert, count + 1, flags);
  ------------------
  |  |  455|      0|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (455:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  456|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  457|      0|                            (void *)(PRWord)arg);              \
  |  |  458|      0|    } else {                                                   \
  |  |  459|      0|        goto loser;                                            \
  |  |  460|      0|    }
  ------------------
  902|      0|                }
  903|      0|            } else {
  904|       |                /* Check if we have any valid trust when cheching for
  905|       |                 * certUsageAnyCA or certUsageStatusResponder. */
  906|      0|                for (trustType = trustSSL; trustType < trustTypeNone;
  ------------------
  |  Branch (906:44): [True: 0, False: 0]
  ------------------
  907|      0|                     trustType++) {
  908|      0|                    flags = SEC_GET_TRUST_FLAGS(&issuerTrust, trustType);
  ------------------
  |  |  167|      0|    (((type) == trustSSL)                                                 \
  |  |  ------------------
  |  |  |  Branch (167:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  168|      0|         ? ((trust)->sslFlags)                                            \
  |  |  169|      0|         : (((type) == trustEmail) ? ((trust)->emailFlags)                \
  |  |  ------------------
  |  |  |  Branch (169:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  170|      0|                                   : (((type) == trustObjectSigning)      \
  |  |  ------------------
  |  |  |  Branch (170:39): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|                                          ? ((trust)->objectSigningFlags) \
  |  |  172|      0|                                          : 0)))
  ------------------
  909|      0|                    if ((flags & requiredFlags) == requiredFlags) {
  ------------------
  |  Branch (909:25): [True: 0, False: 0]
  ------------------
  910|      0|                        rv = rvFinal;
  911|      0|                        goto done;
  912|      0|                    }
  913|      0|                    if (flags & CERTDB_VALID_CA)
  ------------------
  |  |   12|      0|#define CERTDB_VALID_CA (1u << 3)
  ------------------
  |  Branch (913:25): [True: 0, False: 0]
  ------------------
  914|      0|                        validCAOverride = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  915|      0|                }
  916|       |                /* We have 2 separate loops because we want any single trust
  917|       |                 * bit to allow this usage to return trusted. Only if none of
  918|       |                 * the trust bits are on do we check to see if the cert is
  919|       |                 * untrusted */
  920|      0|                for (trustType = trustSSL; trustType < trustTypeNone;
  ------------------
  |  Branch (920:44): [True: 0, False: 0]
  ------------------
  921|      0|                     trustType++) {
  922|      0|                    flags = SEC_GET_TRUST_FLAGS(&issuerTrust, trustType);
  ------------------
  |  |  167|      0|    (((type) == trustSSL)                                                 \
  |  |  ------------------
  |  |  |  Branch (167:6): [True: 0, False: 0]
  |  |  ------------------
  |  |  168|      0|         ? ((trust)->sslFlags)                                            \
  |  |  169|      0|         : (((type) == trustEmail) ? ((trust)->emailFlags)                \
  |  |  ------------------
  |  |  |  Branch (169:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  170|      0|                                   : (((type) == trustObjectSigning)      \
  |  |  ------------------
  |  |  |  Branch (170:39): [True: 0, False: 0]
  |  |  ------------------
  |  |  171|      0|                                          ? ((trust)->objectSigningFlags) \
  |  |  172|      0|                                          : 0)))
  ------------------
  923|       |                    /* is it explicitly distrusted? */
  924|      0|                    if ((flags & CERTDB_TERMINAL_RECORD) &&
  ------------------
  |  |    9|      0|#define CERTDB_TERMINAL_RECORD (1u << 0)
  ------------------
  |  Branch (924:25): [True: 0, False: 0]
  ------------------
  925|      0|                        ((flags & (CERTDB_TRUSTED | CERTDB_TRUSTED_CA)) == 0)) {
  ------------------
  |  |   10|      0|#define CERTDB_TRUSTED (1u << 1)
  ------------------
                                      ((flags & (CERTDB_TRUSTED | CERTDB_TRUSTED_CA)) == 0)) {
  ------------------
  |  |   13|      0|#define CERTDB_TRUSTED_CA (1u << 4) /* trusted for issuing server certs */
  ------------------
  |  Branch (925:25): [True: 0, False: 0]
  ------------------
  926|       |                        /* untrusted -- the cert is explicitly untrusted, not
  927|       |                         * just that it doesn't chain to a trusted cert */
  928|      0|                        PORT_SetError(SEC_ERROR_UNTRUSTED_ISSUER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  929|      0|                        LOG_ERROR_OR_EXIT(log, issuerCert, count + 1, flags);
  ------------------
  |  |  455|      0|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (455:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  456|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  457|      0|                            (void *)(PRWord)arg);              \
  |  |  458|      0|    } else {                                                   \
  |  |  459|      0|        goto loser;                                            \
  |  |  460|      0|    }
  ------------------
  930|      0|                    }
  931|      0|                }
  932|      0|            }
  933|      0|        }
  934|       |
  935|     81|        if (!validCAOverride) {
  ------------------
  |  Branch (935:13): [True: 81, False: 0]
  ------------------
  936|       |            /*
  937|       |             * Make sure that if this is an intermediate CA in the chain that
  938|       |             * it was given permission by its signer to be a CA.
  939|       |             */
  940|       |            /*
  941|       |             * if basicConstraints says it is a ca, then we check the
  942|       |             * nsCertType.  If the nsCertType has any CA bits set, then
  943|       |             * it must have the right one.
  944|       |             */
  945|     81|            if (!isca || (issuerCert->nsCertType & NS_CERT_TYPE_CA)) {
  ------------------
  |  |  464|     31|    (NS_CERT_TYPE_SSL_CA | NS_CERT_TYPE_EMAIL_CA |                     \
  |  |  ------------------
  |  |  |  |  452|     31|#define NS_CERT_TYPE_SSL_CA (0x04)            /* bit 5 */
  |  |  ------------------
  |  |                   (NS_CERT_TYPE_SSL_CA | NS_CERT_TYPE_EMAIL_CA |                     \
  |  |  ------------------
  |  |  |  |  453|     31|#define NS_CERT_TYPE_EMAIL_CA (0x02)          /* bit 6 */
  |  |  ------------------
  |  |  465|     31|     NS_CERT_TYPE_OBJECT_SIGNING_CA | EXT_KEY_USAGE_STATUS_RESPONDER | \
  |  |  ------------------
  |  |  |  |  454|     31|#define NS_CERT_TYPE_OBJECT_SIGNING_CA (0x01) /* bit 7 */
  |  |  ------------------
  |  |                    NS_CERT_TYPE_OBJECT_SIGNING_CA | EXT_KEY_USAGE_STATUS_RESPONDER | \
  |  |  ------------------
  |  |  |  |  457|     31|#define EXT_KEY_USAGE_STATUS_RESPONDER (0x4000)
  |  |  ------------------
  |  |  466|     31|     NS_CERT_TYPE_IPSEC_CA)
  |  |  ------------------
  |  |  |  |  445|     31|#define NS_CERT_TYPE_IPSEC_CA (0x200)         /* outside the NS Cert Type Extenstion */
  |  |  ------------------
  ------------------
  |  Branch (945:17): [True: 50, False: 31]
  |  Branch (945:26): [True: 31, False: 0]
  ------------------
  946|     81|                isca = (issuerCert->nsCertType & caCertType) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|     31|#define PR_TRUE 1
  ------------------
                              isca = (issuerCert->nsCertType & caCertType) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|    131|#define PR_FALSE 0
  ------------------
  |  Branch (946:24): [True: 31, False: 50]
  ------------------
  947|     81|            }
  948|       |
  949|     81|            if (!isca) {
  ------------------
  |  Branch (949:17): [True: 50, False: 31]
  ------------------
  950|     50|                PORT_SetError(SEC_ERROR_CA_CERT_INVALID);
  ------------------
  |  |   65|     50|#define PORT_SetError PORT_SetError_Util
  ------------------
  951|     50|                LOG_ERROR_OR_EXIT(log, issuerCert, count + 1, 0);
  ------------------
  |  |  455|     50|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (455:9): [True: 0, False: 50]
  |  |  ------------------
  |  |  456|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  457|      0|                            (void *)(PRWord)arg);              \
  |  |  458|     50|    } else {                                                   \
  |  |  459|     50|        goto loser;                                            \
  |  |  460|     50|    }
  ------------------
  952|      0|            }
  953|       |
  954|       |            /* make sure key usage allows cert signing */
  955|     31|            if (CERT_CheckKeyUsage(issuerCert, requiredCAKeyUsage) != SECSuccess) {
  ------------------
  |  Branch (955:17): [True: 0, False: 31]
  ------------------
  956|      0|                PORT_SetError(SEC_ERROR_INADEQUATE_KEY_USAGE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  957|      0|                LOG_ERROR_OR_EXIT(log, issuerCert, count + 1, requiredCAKeyUsage);
  ------------------
  |  |  455|      0|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (455:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  456|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  457|      0|                            (void *)(PRWord)arg);              \
  |  |  458|      0|    } else {                                                   \
  |  |  459|      0|        goto loser;                                            \
  |  |  460|      0|    }
  ------------------
  958|      0|            }
  959|     31|        }
  960|       |
  961|       |        /* make sure that the issuer is not self signed.  If it is, then
  962|       |         * stop here to prevent looping.
  963|       |         */
  964|     31|        if (issuerCert->isRoot) {
  ------------------
  |  Branch (964:13): [True: 31, False: 0]
  ------------------
  965|     31|            PORT_SetError(SEC_ERROR_UNTRUSTED_ISSUER);
  ------------------
  |  |   65|     31|#define PORT_SetError PORT_SetError_Util
  ------------------
  966|     31|            LOG_ERROR(log, issuerCert, count + 1, 0);
  ------------------
  |  |  463|     31|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (463:9): [True: 0, False: 31]
  |  |  ------------------
  |  |  464|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  465|      0|                            (void *)(PRWord)arg);              \
  |  |  466|      0|    }
  ------------------
  967|     31|            goto loser;
  968|     31|        }
  969|       |        /* The issuer cert will be the subject cert in the next loop.
  970|       |         * A cert is self-issued if its subject and issuer are equal and
  971|       |         * both are of non-zero length.
  972|       |         */
  973|      0|        subjectCertIsSelfIssued = (PRBool)
  ------------------
  |  Branch (973:35): [True: 0, False: 0]
  ------------------
  974|      0|                                      SECITEM_ItemsAreEqual(&issuerCert->derIssuer,
  ------------------
  |  |  109|      0|#define SECITEM_ItemsAreEqual SECITEM_ItemsAreEqual_Util
  ------------------
  975|      0|                                                            &issuerCert->derSubject) &&
  976|      0|                                  issuerCert->derSubject.len >
  ------------------
  |  Branch (976:35): [True: 0, False: 0]
  ------------------
  977|      0|                                      0;
  978|      0|        if (subjectCertIsSelfIssued == PR_FALSE) {
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  |  Branch (978:13): [True: 0, False: 0]
  ------------------
  979|       |            /* RFC 3280 says only non-self-issued intermediate CA certs
  980|       |             * count in path length.
  981|       |             */
  982|      0|            ++currentPathLen;
  983|      0|        }
  984|       |
  985|      0|        CERT_DestroyCertificate(subjectCert);
  986|      0|        subjectCert = issuerCert;
  987|      0|        issuerCert = NULL;
  988|      0|    }
  989|       |
  990|      0|    PORT_SetError(SEC_ERROR_UNKNOWN_ISSUER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  991|      0|    LOG_ERROR(log, subjectCert, count, 0);
  ------------------
  |  |  463|      0|    if (log != NULL) {                                         \
  |  |  ------------------
  |  |  |  Branch (463:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  464|      0|        cert_AddToVerifyLog(log, cert, PORT_GetError(), depth, \
  |  |  ------------------
  |  |  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  |  |  ------------------
  |  |  465|      0|                            (void *)(PRWord)arg);              \
  |  |  466|      0|    }
  ------------------
  992|  6.50k|loser:
  993|  6.50k|    rv = SECFailure;
  994|  6.50k|done:
  995|  6.50k|    if (certsList != NULL) {
  ------------------
  |  Branch (995:9): [True: 6.50k, False: 0]
  ------------------
  996|  6.50k|        PORT_Free(certsList);
  ------------------
  |  |   60|  6.50k|#define PORT_Free PORT_Free_Util
  ------------------
  997|  6.50k|    }
  998|  6.50k|    if (issuerCert) {
  ------------------
  |  Branch (998:9): [True: 4.53k, False: 1.96k]
  ------------------
  999|  4.53k|        CERT_DestroyCertificate(issuerCert);
 1000|  4.53k|    }
 1001|       |
 1002|  6.50k|    if (subjectCert) {
  ------------------
  |  Branch (1002:9): [True: 6.50k, False: 0]
  ------------------
 1003|  6.50k|        CERT_DestroyCertificate(subjectCert);
 1004|  6.50k|    }
 1005|       |
 1006|  6.50k|    if (arena != NULL) {
  ------------------
  |  Branch (1006:9): [True: 6.50k, False: 0]
  ------------------
 1007|  6.50k|        PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |   61|  6.50k|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |  438|  6.50k|#define PR_FALSE 0
  ------------------
 1008|  6.50k|    }
 1009|  6.50k|    return rv;
 1010|  6.50k|}

CERT_GetUsePKIXForValidation:
   88|  6.50k|{
   89|  6.50k|#ifdef NSS_DISABLE_LIBPKIX
   90|  6.50k|    return PR_FALSE;
  ------------------
  |  |  438|  6.50k|#define PR_FALSE 0
  ------------------
   91|       |#else
   92|       |    return usePKIXValidationEngine;
   93|       |#endif /* NSS_DISABLE_LIBPKIX */
   94|  6.50k|}

CERT_ClearOCSPCache:
  595|      1|{
  596|      1|    OCSP_TRACE(("OCSP CERT_ClearOCSPCache\n"));
  ------------------
  |  |  144|      1|#define OCSP_TRACE(msg) ocsp_Trace msg
  ------------------
  597|      1|    PR_EnterMonitor(OCSP_Global.monitor);
  598|      1|    while (OCSP_Global.cache.numberOfEntries > 0) {
  ------------------
  |  Branch (598:12): [True: 0, False: 1]
  ------------------
  599|      0|        ocsp_RemoveCacheItem(&OCSP_Global.cache,
  600|      0|                             OCSP_Global.cache.LRUitem);
  601|      0|    }
  602|      1|    PR_ExitMonitor(OCSP_Global.monitor);
  603|      1|    return SECSuccess;
  604|      1|}
OCSP_InitGlobal:
  933|      1|{
  934|      1|    SECStatus rv = SECFailure;
  935|       |
  936|      1|    if (OCSP_Global.monitor == NULL) {
  ------------------
  |  Branch (936:9): [True: 1, False: 0]
  ------------------
  937|      1|        OCSP_Global.monitor = PR_NewMonitor();
  938|      1|    }
  939|      1|    if (!OCSP_Global.monitor)
  ------------------
  |  Branch (939:9): [True: 0, False: 1]
  ------------------
  940|      0|        return SECFailure;
  941|       |
  942|      1|    PR_EnterMonitor(OCSP_Global.monitor);
  943|      1|    if (!OCSP_Global.cache.entries) {
  ------------------
  |  Branch (943:9): [True: 1, False: 0]
  ------------------
  944|      1|        OCSP_Global.cache.entries =
  945|      1|            PL_NewHashTable(0,
  946|      1|                            ocsp_CacheKeyHashFunction,
  947|      1|                            ocsp_CacheKeyCompareFunction,
  948|      1|                            PL_CompareValues,
  949|      1|                            NULL,
  950|      1|                            NULL);
  951|      1|        OCSP_Global.ocspFailureMode = ocspMode_FailureIsVerificationFailure;
  952|      1|        OCSP_Global.cache.numberOfEntries = 0;
  953|      1|        OCSP_Global.cache.MRUitem = NULL;
  954|      1|        OCSP_Global.cache.LRUitem = NULL;
  955|      1|    } else {
  956|       |        /*
  957|       |         * NSS might call this function twice while attempting to init.
  958|       |         * But it's not allowed to call this again after any activity.
  959|       |         */
  960|      0|        PORT_Assert(OCSP_Global.cache.numberOfEntries == 0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  961|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  962|      0|    }
  963|      1|    if (OCSP_Global.cache.entries)
  ------------------
  |  Branch (963:9): [True: 1, False: 0]
  ------------------
  964|      1|        rv = SECSuccess;
  965|      1|    PR_ExitMonitor(OCSP_Global.monitor);
  966|      1|    return rv;
  967|      1|}
OCSP_ShutdownGlobal:
  971|      1|{
  972|      1|    if (!OCSP_Global.monitor)
  ------------------
  |  Branch (972:9): [True: 0, False: 1]
  ------------------
  973|      0|        return SECSuccess;
  974|       |
  975|      1|    PR_EnterMonitor(OCSP_Global.monitor);
  976|      1|    if (OCSP_Global.cache.entries) {
  ------------------
  |  Branch (976:9): [True: 1, False: 0]
  ------------------
  977|      1|        CERT_ClearOCSPCache();
  978|      1|        PL_HashTableDestroy(OCSP_Global.cache.entries);
  979|      1|        OCSP_Global.cache.entries = NULL;
  980|      1|    }
  981|      1|    PORT_Assert(OCSP_Global.cache.numberOfEntries == 0);
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  982|      1|    OCSP_Global.cache.MRUitem = NULL;
  983|      1|    OCSP_Global.cache.LRUitem = NULL;
  984|       |
  985|      1|    OCSP_Global.defaultHttpClientFcn = NULL;
  986|      1|    OCSP_Global.maxCacheEntries = DEFAULT_OCSP_CACHE_SIZE;
  ------------------
  |  |   40|      1|#define DEFAULT_OCSP_CACHE_SIZE 1000
  ------------------
  987|      1|    OCSP_Global.minimumSecondsToNextFetchAttempt =
  988|      1|        DEFAULT_MINIMUM_SECONDS_TO_NEXT_OCSP_FETCH_ATTEMPT;
  ------------------
  |  |   41|      1|#define DEFAULT_MINIMUM_SECONDS_TO_NEXT_OCSP_FETCH_ATTEMPT 1 * 60 * 60L
  ------------------
  989|      1|    OCSP_Global.maximumSecondsToNextFetchAttempt =
  990|      1|        DEFAULT_MAXIMUM_SECONDS_TO_NEXT_OCSP_FETCH_ATTEMPT;
  ------------------
  |  |   42|      1|#define DEFAULT_MAXIMUM_SECONDS_TO_NEXT_OCSP_FETCH_ATTEMPT 24 * 60 * 60L
  ------------------
  991|      1|    OCSP_Global.ocspFailureMode =
  992|      1|        ocspMode_FailureIsVerificationFailure;
  993|      1|    PR_ExitMonitor(OCSP_Global.monitor);
  994|       |
  995|      1|    PR_DestroyMonitor(OCSP_Global.monitor);
  996|      1|    OCSP_Global.monitor = NULL;
  997|      1|    return SECSuccess;
  998|      1|}
ocsp.c:ocsp_Trace:
  173|      1|{
  174|      1|    char buf[2000];
  175|      1|    va_list args;
  176|       |
  177|      1|    if (!wantOcspTrace())
  ------------------
  |  Branch (177:9): [True: 1, False: 0]
  ------------------
  178|      1|        return;
  179|      0|    va_start(args, format);
  180|      0|    PR_vsnprintf(buf, sizeof(buf), format, args);
  181|      0|    va_end(args);
  182|      0|    PR_LogPrint("%s", buf);
  183|      0|}
ocsp.c:wantOcspTrace:
  155|      1|{
  156|      1|    static PRBool firstTime = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  157|      1|    static PRBool wantTrace = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  158|       |
  159|      1|#ifdef NSS_HAVE_GETENV
  160|      1|    if (firstTime) {
  ------------------
  |  Branch (160:9): [True: 1, False: 0]
  ------------------
  161|      1|        char *ev = PR_GetEnvSecure("NSS_TRACE_OCSP");
  162|      1|        if (ev && ev[0]) {
  ------------------
  |  Branch (162:13): [True: 0, False: 1]
  |  Branch (162:19): [True: 0, False: 0]
  ------------------
  163|      0|            wantTrace = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  164|      0|        }
  165|      1|        firstTime = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  166|      1|    }
  167|      1|#endif
  168|      1|    return wantTrace;
  169|      1|}

DSAU_ConvertSignedToFixedUnsigned:
   70|  3.18k|{
   71|  3.18k|    unsigned char *pSrc = src->data;
   72|  3.18k|    unsigned char *pDst = dest->data;
   73|  3.18k|    unsigned int cntSrc = src->len;
   74|  3.18k|    unsigned int cntDst = dest->len;
   75|  3.18k|    int zCount = cntDst - cntSrc;
   76|       |
   77|  3.18k|    if (zCount > 0) {
  ------------------
  |  Branch (77:9): [True: 2.68k, False: 505]
  ------------------
   78|  2.68k|        PORT_Memset(pDst, 0, zCount);
  ------------------
  |  |  182|  2.68k|#define PORT_Memset memset
  ------------------
   79|  2.68k|        PORT_Memcpy(pDst + zCount, pSrc, cntSrc);
  ------------------
  |  |  180|  2.68k|#define PORT_Memcpy memcpy
  ------------------
   80|  2.68k|        return SECSuccess;
   81|  2.68k|    }
   82|    505|    if (zCount <= 0) {
  ------------------
  |  Branch (82:9): [True: 505, False: 0]
  ------------------
   83|       |        /* Source is longer than destination.  Check for leading zeros. */
   84|    505|        while (zCount++ < 0) {
  ------------------
  |  Branch (84:16): [True: 10, False: 495]
  ------------------
   85|     10|            if (*pSrc++ != 0)
  ------------------
  |  Branch (85:17): [True: 10, False: 0]
  ------------------
   86|     10|                goto loser;
   87|     10|        }
   88|    505|    }
   89|    495|    PORT_Memcpy(pDst, pSrc, cntDst);
  ------------------
  |  |  180|    495|#define PORT_Memcpy memcpy
  ------------------
   90|    495|    return SECSuccess;
   91|       |
   92|     10|loser:
   93|     10|    PORT_SetError(PR_INVALID_ARGUMENT_ERROR);
  ------------------
  |  |   65|     10|#define PORT_SetError PORT_SetError_Util
  ------------------
                  PORT_SetError(PR_INVALID_ARGUMENT_ERROR);
  ------------------
  |  |   55|     10|#define PR_INVALID_ARGUMENT_ERROR                (-5987L)
  ------------------
   94|     10|    return SECFailure;
   95|    505|}
DSAU_DecodeDerSigToLen:
  269|  1.62k|{
  270|  1.62k|    return common_DecodeDerSig(item, len / 2);
  271|  1.62k|}
dsautil.c:common_DecodeDerSig:
  166|  1.62k|{
  167|  1.62k|    SECItem *result = NULL;
  168|  1.62k|    PORTCheapArenaPool arena;
  169|  1.62k|    SECStatus status;
  170|  1.62k|    DSA_ASN1Signature sig;
  171|  1.62k|    SECItem dst;
  172|       |
  173|  1.62k|    PORT_Memset(&sig, 0, sizeof(sig));
  ------------------
  |  |  182|  1.62k|#define PORT_Memset memset
  ------------------
  174|       |
  175|       |    /* Make enough room for r + s. */
  176|  1.62k|    PORT_InitCheapArena(&arena, PR_MAX(2 * MAX_ECKEY_LEN, DSA_MAX_SIGNATURE_LEN));
  ------------------
  |  |  159|  1.62k|#define PR_MAX(x,y)     ((x)>(y)?(x):(y))
  |  |  ------------------
  |  |  |  Branch (159:26): [Folded - Ignored]
  |  |  ------------------
  ------------------
  177|       |
  178|  1.62k|    result = PORT_ZNew(SECItem);
  ------------------
  |  |  148|  1.62k|#define PORT_ZNew(type) (type *)PORT_ZAlloc(sizeof(type))
  |  |  ------------------
  |  |  |  |   72|  1.62k|#define PORT_ZAlloc PORT_ZAlloc_Util
  |  |  ------------------
  ------------------
  179|  1.62k|    if (result == NULL)
  ------------------
  |  Branch (179:9): [True: 0, False: 1.62k]
  ------------------
  180|      0|        goto loser;
  181|       |
  182|  1.62k|    result->len = 2 * len;
  183|  1.62k|    result->data = (unsigned char *)PORT_Alloc(2 * len);
  ------------------
  |  |   52|  1.62k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  184|  1.62k|    if (result->data == NULL)
  ------------------
  |  Branch (184:9): [True: 0, False: 1.62k]
  ------------------
  185|      0|        goto loser;
  186|       |
  187|  1.62k|    sig.r.type = siUnsignedInteger;
  188|  1.62k|    sig.s.type = siUnsignedInteger;
  189|  1.62k|    status = SEC_QuickDERDecodeItem(&arena.arena, &sig, DSA_SignatureTemplate, item);
  ------------------
  |  |  102|  1.62k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  190|  1.62k|    if (status != SECSuccess)
  ------------------
  |  Branch (190:9): [True: 29, False: 1.59k]
  ------------------
  191|     29|        goto loser;
  192|       |
  193|       |    /* Convert sig.r and sig.s from variable  length signed integers to
  194|       |    ** fixed length unsigned integers.
  195|       |    */
  196|  1.59k|    dst.data = result->data;
  197|  1.59k|    dst.len = len;
  198|  1.59k|    status = DSAU_ConvertSignedToFixedUnsigned(&dst, &sig.r);
  199|  1.59k|    if (status != SECSuccess)
  ------------------
  |  Branch (199:9): [True: 8, False: 1.59k]
  ------------------
  200|      8|        goto loser;
  201|       |
  202|  1.59k|    dst.data += len;
  203|  1.59k|    status = DSAU_ConvertSignedToFixedUnsigned(&dst, &sig.s);
  204|  1.59k|    if (status != SECSuccess)
  ------------------
  |  Branch (204:9): [True: 2, False: 1.58k]
  ------------------
  205|      2|        goto loser;
  206|       |
  207|  1.62k|done:
  208|  1.62k|    PORT_DestroyCheapArena(&arena);
  209|       |
  210|  1.62k|    return result;
  211|       |
  212|     39|loser:
  213|     39|    if (result != NULL) {
  ------------------
  |  Branch (213:9): [True: 39, False: 0]
  ------------------
  214|     39|        SECITEM_FreeItem(result, PR_TRUE);
  ------------------
  |  |  108|     39|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(result, PR_TRUE);
  ------------------
  |  |  437|     39|#define PR_TRUE 1
  ------------------
  215|     39|        result = NULL;
  216|     39|    }
  217|     39|    goto done;
  218|  1.59k|}

SECHash_PK11_DigestBegin:
  128|     40|{
  129|     40|    PK11Context *pctx = ctx;
  130|     40|    SECStatus rv = PK11_DigestBegin(pctx);
  131|     40|    PORT_Assert(rv == SECSuccess);
  ------------------
  |  |  120|     40|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     40|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 40, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|     40|    (void)rv;
  133|     40|}
SECHash_PK11_DigestOp:
  137|     40|{
  138|     40|    PK11Context *pctx = ctx;
  139|     40|    SECStatus rv = PK11_DigestOp(pctx, in, inLen);
  140|     40|    PORT_Assert(rv == SECSuccess);
  ------------------
  |  |  120|     40|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     40|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 40, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  141|     40|    (void)rv;
  142|     40|}
SECHash_PK11_DigestFinal:
  147|     40|{
  148|     40|    PK11Context *pctx = ctx;
  149|     40|    SECStatus rv = PK11_DigestFinal(pctx, data, outLen, length);
  150|     40|    PORT_Assert(rv == SECSuccess);
  ------------------
  |  |  120|     40|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     40|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 40, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  151|     40|    (void)rv;
  152|     40|}
HASH_GetHashObjectByOidTag:
  273|  5.65k|{
  274|  5.65k|    HASH_HashType ht = HASH_GetHashTypeByOidTag(hashOid);
  ------------------
  |  |  125|  5.65k|#define HASH_GetHashTypeByOidTag HASH_GetHashTypeByOidTag_Util
  ------------------
  275|       |
  276|  5.65k|    return (ht == HASH_AlgNULL) ? NULL : &SECHashObjects[ht];
  ------------------
  |  Branch (276:12): [True: 0, False: 5.65k]
  ------------------
  277|  5.65k|}
HASH_ResultLenByOidTag:
  282|  5.61k|{
  283|  5.61k|    const SECHashObject *hashObject = HASH_GetHashObjectByOidTag(hashOid);
  284|  5.61k|    unsigned int resultLen = 0;
  285|       |
  286|  5.61k|    if (hashObject)
  ------------------
  |  Branch (286:9): [True: 5.61k, False: 0]
  ------------------
  287|  5.61k|        resultLen = hashObject->length;
  288|  5.61k|    return resultLen;
  289|  5.61k|}
sechash.c:SECHash_PK11_DestroyContext:
  121|     40|{
  122|     40|    PK11Context *pctx = ctx;
  123|     40|    PK11_DestroyContext(pctx, freeit);
  124|     40|}
sechash.c:sha256_NewContext:
   72|     35|{
   73|     35|    return (void *)PK11_CreateDigestContext(SEC_OID_SHA256);
   74|     35|}
sechash.c:sha384_NewContext:
   78|      3|{
   79|      3|    return (void *)PK11_CreateDigestContext(SEC_OID_SHA384);
   80|      3|}
sechash.c:sha512_NewContext:
   84|      1|{
   85|      1|    return (void *)PK11_CreateDigestContext(SEC_OID_SHA512);
   86|      1|}
sechash.c:sha224_NewContext:
   66|      1|{
   67|      1|    return (void *)PK11_CreateDigestContext(SEC_OID_SHA224);
   68|      1|}

SECKEY_DestroyPublicKey:
  283|  8.94k|{
  284|  8.94k|    if (pubk) {
  ------------------
  |  Branch (284:9): [True: 8.94k, False: 0]
  ------------------
  285|  8.94k|        if (pubk->pkcs11Slot) {
  ------------------
  |  Branch (285:13): [True: 4.32k, False: 4.61k]
  ------------------
  286|  4.32k|            if (!PK11_IsPermObject(pubk->pkcs11Slot, pubk->pkcs11ID)) {
  ------------------
  |  Branch (286:17): [True: 4.32k, False: 0]
  ------------------
  287|  4.32k|                PK11_DestroyObject(pubk->pkcs11Slot, pubk->pkcs11ID);
  288|  4.32k|            }
  289|  4.32k|            PK11_FreeSlot(pubk->pkcs11Slot);
  290|  4.32k|        }
  291|  8.94k|        if (pubk->arena) {
  ------------------
  |  Branch (291:13): [True: 8.94k, False: 0]
  ------------------
  292|  8.94k|            PORT_FreeArena(pubk->arena, PR_FALSE);
  ------------------
  |  |   61|  8.94k|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                          PORT_FreeArena(pubk->arena, PR_FALSE);
  ------------------
  |  |  438|  8.94k|#define PR_FALSE 0
  ------------------
  293|  8.94k|        }
  294|  8.94k|    }
  295|  8.94k|}
seckey_GetKeyType:
  520|  19.1k|{
  521|  19.1k|    KeyType keyType;
  522|       |
  523|  19.1k|    switch (tag) {
  524|      0|        case SEC_OID_X500_RSA_ENCRYPTION:
  ------------------
  |  Branch (524:9): [True: 0, False: 19.1k]
  ------------------
  525|  10.9k|        case SEC_OID_PKCS1_RSA_ENCRYPTION:
  ------------------
  |  Branch (525:9): [True: 10.9k, False: 8.22k]
  ------------------
  526|  10.9k|            keyType = rsaKey;
  527|  10.9k|            break;
  528|    309|        case SEC_OID_PKCS1_RSA_PSS_SIGNATURE:
  ------------------
  |  Branch (528:9): [True: 309, False: 18.8k]
  ------------------
  529|    309|            keyType = rsaPssKey;
  530|    309|            break;
  531|      3|        case SEC_OID_PKCS1_RSA_OAEP_ENCRYPTION:
  ------------------
  |  Branch (531:9): [True: 3, False: 19.1k]
  ------------------
  532|      3|            keyType = rsaOaepKey;
  533|      3|            break;
  534|  5.36k|        case SEC_OID_ANSIX9_DSA_SIGNATURE:
  ------------------
  |  Branch (534:9): [True: 5.36k, False: 13.8k]
  ------------------
  535|  5.36k|            keyType = dsaKey;
  536|  5.36k|            break;
  537|      0|        case SEC_OID_MISSI_KEA_DSS_OLD:
  ------------------
  |  Branch (537:9): [True: 0, False: 19.1k]
  ------------------
  538|      0|        case SEC_OID_MISSI_KEA_DSS:
  ------------------
  |  Branch (538:9): [True: 0, False: 19.1k]
  ------------------
  539|      0|        case SEC_OID_MISSI_DSS_OLD:
  ------------------
  |  Branch (539:9): [True: 0, False: 19.1k]
  ------------------
  540|      0|        case SEC_OID_MISSI_DSS:
  ------------------
  |  Branch (540:9): [True: 0, False: 19.1k]
  ------------------
  541|      0|            keyType = fortezzaKey;
  542|      0|            break;
  543|      0|        case SEC_OID_MISSI_KEA:
  ------------------
  |  Branch (543:9): [True: 0, False: 19.1k]
  ------------------
  544|      0|        case SEC_OID_MISSI_ALT_KEA:
  ------------------
  |  Branch (544:9): [True: 0, False: 19.1k]
  ------------------
  545|      0|            keyType = keaKey;
  546|      0|            break;
  547|     21|        case SEC_OID_X942_DIFFIE_HELMAN_KEY:
  ------------------
  |  Branch (547:9): [True: 21, False: 19.1k]
  ------------------
  548|     21|            keyType = dhKey;
  549|     21|            break;
  550|  1.67k|        case SEC_OID_ANSIX962_EC_PUBLIC_KEY:
  ------------------
  |  Branch (550:9): [True: 1.67k, False: 17.5k]
  ------------------
  551|  1.67k|            keyType = ecKey;
  552|  1.67k|            break;
  553|      6|        case SEC_OID_ED25519_PUBLIC_KEY:
  ------------------
  |  Branch (553:9): [True: 6, False: 19.1k]
  ------------------
  554|      6|            keyType = edKey;
  555|      6|            break;
  556|       |        /* accommodate applications that hand us a signature type when they
  557|       |         * should be handing us a cipher type */
  558|      6|        case SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (558:9): [True: 6, False: 19.1k]
  ------------------
  559|     30|        case SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (559:9): [True: 24, False: 19.1k]
  ------------------
  560|     33|        case SEC_OID_PKCS1_SHA224_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (560:9): [True: 3, False: 19.1k]
  ------------------
  561|     36|        case SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (561:9): [True: 3, False: 19.1k]
  ------------------
  562|     39|        case SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (562:9): [True: 3, False: 19.1k]
  ------------------
  563|     42|        case SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (563:9): [True: 3, False: 19.1k]
  ------------------
  564|     42|            keyType = rsaKey;
  565|     42|            break;
  566|    801|        default:
  ------------------
  |  Branch (566:9): [True: 801, False: 18.3k]
  ------------------
  567|    801|            keyType = nullKey;
  568|  19.1k|    }
  569|  19.1k|    return keyType;
  570|  19.1k|}
CERT_GetCertKeyType:
  575|  14.7k|{
  576|  14.7k|    return seckey_GetKeyType(SECOID_GetAlgorithmTag(&spki->algorithm));
  ------------------
  |  |  119|  14.7k|#define SECOID_GetAlgorithmTag SECOID_GetAlgorithmTag_Util
  ------------------
  577|  14.7k|}
CERT_ExtractPublicKey:
  761|  4.53k|{
  762|  4.53k|    return seckey_ExtractPublicKey(&cert->subjectPublicKeyInfo);
  763|  4.53k|}
SECKEY_ECParamsToKeySize:
  767|    334|{
  768|    334|    SECOidTag tag;
  769|    334|    SECItem oid = { siBuffer, NULL, 0 };
  770|       |
  771|       |    /* The encodedParams data contains 0x06 (SEC_ASN1_OBJECT_ID),
  772|       |     * followed by the length of the curve oid and the curve oid.
  773|       |     */
  774|    334|    oid.len = encodedParams->data[1];
  775|    334|    oid.data = encodedParams->data + 2;
  776|    334|    if ((tag = SECOID_FindOIDTag(&oid)) == SEC_OID_UNKNOWN)
  ------------------
  |  |  117|    334|#define SECOID_FindOIDTag SECOID_FindOIDTag_Util
  ------------------
  |  Branch (776:9): [True: 0, False: 334]
  ------------------
  777|      0|        return 0;
  778|       |
  779|    334|    switch (tag) {
  780|      1|        case SEC_OID_SECG_EC_SECP112R1:
  ------------------
  |  Branch (780:9): [True: 1, False: 333]
  ------------------
  781|      2|        case SEC_OID_SECG_EC_SECP112R2:
  ------------------
  |  Branch (781:9): [True: 1, False: 333]
  ------------------
  782|      2|            return 112;
  783|       |
  784|      1|        case SEC_OID_SECG_EC_SECT113R1:
  ------------------
  |  Branch (784:9): [True: 1, False: 333]
  ------------------
  785|      2|        case SEC_OID_SECG_EC_SECT113R2:
  ------------------
  |  Branch (785:9): [True: 1, False: 333]
  ------------------
  786|      2|            return 113;
  787|       |
  788|      1|        case SEC_OID_SECG_EC_SECP128R1:
  ------------------
  |  Branch (788:9): [True: 1, False: 333]
  ------------------
  789|      2|        case SEC_OID_SECG_EC_SECP128R2:
  ------------------
  |  Branch (789:9): [True: 1, False: 333]
  ------------------
  790|      2|            return 128;
  791|       |
  792|      1|        case SEC_OID_SECG_EC_SECT131R1:
  ------------------
  |  Branch (792:9): [True: 1, False: 333]
  ------------------
  793|      2|        case SEC_OID_SECG_EC_SECT131R2:
  ------------------
  |  Branch (793:9): [True: 1, False: 333]
  ------------------
  794|      2|            return 131;
  795|       |
  796|      1|        case SEC_OID_SECG_EC_SECP160K1:
  ------------------
  |  Branch (796:9): [True: 1, False: 333]
  ------------------
  797|      2|        case SEC_OID_SECG_EC_SECP160R1:
  ------------------
  |  Branch (797:9): [True: 1, False: 333]
  ------------------
  798|      3|        case SEC_OID_SECG_EC_SECP160R2:
  ------------------
  |  Branch (798:9): [True: 1, False: 333]
  ------------------
  799|      3|            return 160;
  800|       |
  801|      1|        case SEC_OID_SECG_EC_SECT163K1:
  ------------------
  |  Branch (801:9): [True: 1, False: 333]
  ------------------
  802|      2|        case SEC_OID_SECG_EC_SECT163R1:
  ------------------
  |  Branch (802:9): [True: 1, False: 333]
  ------------------
  803|      3|        case SEC_OID_SECG_EC_SECT163R2:
  ------------------
  |  Branch (803:9): [True: 1, False: 333]
  ------------------
  804|      4|        case SEC_OID_ANSIX962_EC_C2PNB163V1:
  ------------------
  |  Branch (804:9): [True: 1, False: 333]
  ------------------
  805|      6|        case SEC_OID_ANSIX962_EC_C2PNB163V2:
  ------------------
  |  Branch (805:9): [True: 2, False: 332]
  ------------------
  806|      7|        case SEC_OID_ANSIX962_EC_C2PNB163V3:
  ------------------
  |  Branch (806:9): [True: 1, False: 333]
  ------------------
  807|      7|            return 163;
  808|       |
  809|      1|        case SEC_OID_ANSIX962_EC_C2PNB176V1:
  ------------------
  |  Branch (809:9): [True: 1, False: 333]
  ------------------
  810|      1|            return 176;
  811|       |
  812|      1|        case SEC_OID_ANSIX962_EC_C2TNB191V1:
  ------------------
  |  Branch (812:9): [True: 1, False: 333]
  ------------------
  813|      2|        case SEC_OID_ANSIX962_EC_C2TNB191V2:
  ------------------
  |  Branch (813:9): [True: 1, False: 333]
  ------------------
  814|      3|        case SEC_OID_ANSIX962_EC_C2TNB191V3:
  ------------------
  |  Branch (814:9): [True: 1, False: 333]
  ------------------
  815|      4|        case SEC_OID_ANSIX962_EC_C2ONB191V4:
  ------------------
  |  Branch (815:9): [True: 1, False: 333]
  ------------------
  816|      5|        case SEC_OID_ANSIX962_EC_C2ONB191V5:
  ------------------
  |  Branch (816:9): [True: 1, False: 333]
  ------------------
  817|      5|            return 191;
  818|       |
  819|      1|        case SEC_OID_SECG_EC_SECP192K1:
  ------------------
  |  Branch (819:9): [True: 1, False: 333]
  ------------------
  820|      2|        case SEC_OID_ANSIX962_EC_PRIME192V1:
  ------------------
  |  Branch (820:9): [True: 1, False: 333]
  ------------------
  821|      3|        case SEC_OID_ANSIX962_EC_PRIME192V2:
  ------------------
  |  Branch (821:9): [True: 1, False: 333]
  ------------------
  822|      4|        case SEC_OID_ANSIX962_EC_PRIME192V3:
  ------------------
  |  Branch (822:9): [True: 1, False: 333]
  ------------------
  823|      4|            return 192;
  824|       |
  825|      1|        case SEC_OID_SECG_EC_SECT193R1:
  ------------------
  |  Branch (825:9): [True: 1, False: 333]
  ------------------
  826|      2|        case SEC_OID_SECG_EC_SECT193R2:
  ------------------
  |  Branch (826:9): [True: 1, False: 333]
  ------------------
  827|      2|            return 193;
  828|       |
  829|      1|        case SEC_OID_ANSIX962_EC_C2PNB208W1:
  ------------------
  |  Branch (829:9): [True: 1, False: 333]
  ------------------
  830|      1|            return 208;
  831|       |
  832|      1|        case SEC_OID_SECG_EC_SECP224K1:
  ------------------
  |  Branch (832:9): [True: 1, False: 333]
  ------------------
  833|      2|        case SEC_OID_SECG_EC_SECP224R1:
  ------------------
  |  Branch (833:9): [True: 1, False: 333]
  ------------------
  834|      2|            return 224;
  835|       |
  836|      1|        case SEC_OID_SECG_EC_SECT233K1:
  ------------------
  |  Branch (836:9): [True: 1, False: 333]
  ------------------
  837|      2|        case SEC_OID_SECG_EC_SECT233R1:
  ------------------
  |  Branch (837:9): [True: 1, False: 333]
  ------------------
  838|      2|            return 233;
  839|       |
  840|      1|        case SEC_OID_SECG_EC_SECT239K1:
  ------------------
  |  Branch (840:9): [True: 1, False: 333]
  ------------------
  841|      2|        case SEC_OID_ANSIX962_EC_C2TNB239V1:
  ------------------
  |  Branch (841:9): [True: 1, False: 333]
  ------------------
  842|      3|        case SEC_OID_ANSIX962_EC_C2TNB239V2:
  ------------------
  |  Branch (842:9): [True: 1, False: 333]
  ------------------
  843|      4|        case SEC_OID_ANSIX962_EC_C2TNB239V3:
  ------------------
  |  Branch (843:9): [True: 1, False: 333]
  ------------------
  844|      5|        case SEC_OID_ANSIX962_EC_C2ONB239V4:
  ------------------
  |  Branch (844:9): [True: 1, False: 333]
  ------------------
  845|      6|        case SEC_OID_ANSIX962_EC_C2ONB239V5:
  ------------------
  |  Branch (845:9): [True: 1, False: 333]
  ------------------
  846|      7|        case SEC_OID_ANSIX962_EC_PRIME239V1:
  ------------------
  |  Branch (846:9): [True: 1, False: 333]
  ------------------
  847|      8|        case SEC_OID_ANSIX962_EC_PRIME239V2:
  ------------------
  |  Branch (847:9): [True: 1, False: 333]
  ------------------
  848|      9|        case SEC_OID_ANSIX962_EC_PRIME239V3:
  ------------------
  |  Branch (848:9): [True: 1, False: 333]
  ------------------
  849|      9|            return 239;
  850|       |
  851|      3|        case SEC_OID_SECG_EC_SECP256K1:
  ------------------
  |  Branch (851:9): [True: 3, False: 331]
  ------------------
  852|    162|        case SEC_OID_ANSIX962_EC_PRIME256V1:
  ------------------
  |  Branch (852:9): [True: 159, False: 175]
  ------------------
  853|    162|            return 256;
  854|       |
  855|      1|        case SEC_OID_ANSIX962_EC_C2PNB272W1:
  ------------------
  |  Branch (855:9): [True: 1, False: 333]
  ------------------
  856|      1|            return 272;
  857|       |
  858|      1|        case SEC_OID_SECG_EC_SECT283K1:
  ------------------
  |  Branch (858:9): [True: 1, False: 333]
  ------------------
  859|      2|        case SEC_OID_SECG_EC_SECT283R1:
  ------------------
  |  Branch (859:9): [True: 1, False: 333]
  ------------------
  860|      2|            return 283;
  861|       |
  862|      2|        case SEC_OID_ANSIX962_EC_C2PNB304W1:
  ------------------
  |  Branch (862:9): [True: 2, False: 332]
  ------------------
  863|      2|            return 304;
  864|       |
  865|      1|        case SEC_OID_ANSIX962_EC_C2TNB359V1:
  ------------------
  |  Branch (865:9): [True: 1, False: 333]
  ------------------
  866|      1|            return 359;
  867|       |
  868|      1|        case SEC_OID_ANSIX962_EC_C2PNB368W1:
  ------------------
  |  Branch (868:9): [True: 1, False: 333]
  ------------------
  869|      1|            return 368;
  870|       |
  871|     56|        case SEC_OID_SECG_EC_SECP384R1:
  ------------------
  |  Branch (871:9): [True: 56, False: 278]
  ------------------
  872|     56|            return 384;
  873|       |
  874|      1|        case SEC_OID_SECG_EC_SECT409K1:
  ------------------
  |  Branch (874:9): [True: 1, False: 333]
  ------------------
  875|      4|        case SEC_OID_SECG_EC_SECT409R1:
  ------------------
  |  Branch (875:9): [True: 3, False: 331]
  ------------------
  876|      4|            return 409;
  877|       |
  878|      1|        case SEC_OID_ANSIX962_EC_C2TNB431R1:
  ------------------
  |  Branch (878:9): [True: 1, False: 333]
  ------------------
  879|      1|            return 431;
  880|       |
  881|     55|        case SEC_OID_SECG_EC_SECP521R1:
  ------------------
  |  Branch (881:9): [True: 55, False: 279]
  ------------------
  882|     55|            return 521;
  883|       |
  884|      1|        case SEC_OID_SECG_EC_SECT571K1:
  ------------------
  |  Branch (884:9): [True: 1, False: 333]
  ------------------
  885|      3|        case SEC_OID_SECG_EC_SECT571R1:
  ------------------
  |  Branch (885:9): [True: 2, False: 332]
  ------------------
  886|      3|            return 571;
  887|       |
  888|      0|        case SEC_OID_X25519:
  ------------------
  |  Branch (888:9): [True: 0, False: 334]
  ------------------
  889|      0|        case SEC_OID_CURVE25519:
  ------------------
  |  Branch (889:9): [True: 0, False: 334]
  ------------------
  890|      0|        case SEC_OID_ED25519_PUBLIC_KEY:
  ------------------
  |  Branch (890:9): [True: 0, False: 334]
  ------------------
  891|      0|            return 255;
  892|       |
  893|      2|        default:
  ------------------
  |  Branch (893:9): [True: 2, False: 332]
  ------------------
  894|      2|            PORT_SetError(SEC_ERROR_UNSUPPORTED_ELLIPTIC_CURVE);
  ------------------
  |  |   65|      2|#define PORT_SetError PORT_SetError_Util
  ------------------
  895|      2|            return 0;
  896|    334|    }
  897|    334|}
SECKEY_ECParamsToBasePointOrderLen:
  901|    288|{
  902|    288|    SECOidTag tag;
  903|    288|    SECItem oid = { siBuffer, NULL, 0 };
  904|       |
  905|       |    /* The encodedParams data contains 0x06 (SEC_ASN1_OBJECT_ID),
  906|       |     * followed by the length of the curve oid and the curve oid.
  907|       |     */
  908|    288|    oid.len = encodedParams->data[1];
  909|    288|    oid.data = encodedParams->data + 2;
  910|    288|    if ((tag = SECOID_FindOIDTag(&oid)) == SEC_OID_UNKNOWN)
  ------------------
  |  |  117|    288|#define SECOID_FindOIDTag SECOID_FindOIDTag_Util
  ------------------
  |  Branch (910:9): [True: 0, False: 288]
  ------------------
  911|      0|        return 0;
  912|       |
  913|    288|    switch (tag) {
  914|      0|        case SEC_OID_SECG_EC_SECP112R1:
  ------------------
  |  Branch (914:9): [True: 0, False: 288]
  ------------------
  915|      0|            return 112;
  916|      0|        case SEC_OID_SECG_EC_SECP112R2:
  ------------------
  |  Branch (916:9): [True: 0, False: 288]
  ------------------
  917|      0|            return 110;
  918|       |
  919|      0|        case SEC_OID_SECG_EC_SECT113R1:
  ------------------
  |  Branch (919:9): [True: 0, False: 288]
  ------------------
  920|      0|        case SEC_OID_SECG_EC_SECT113R2:
  ------------------
  |  Branch (920:9): [True: 0, False: 288]
  ------------------
  921|      0|            return 113;
  922|       |
  923|      0|        case SEC_OID_SECG_EC_SECP128R1:
  ------------------
  |  Branch (923:9): [True: 0, False: 288]
  ------------------
  924|      0|            return 128;
  925|      0|        case SEC_OID_SECG_EC_SECP128R2:
  ------------------
  |  Branch (925:9): [True: 0, False: 288]
  ------------------
  926|      0|            return 126;
  927|       |
  928|      0|        case SEC_OID_SECG_EC_SECT131R1:
  ------------------
  |  Branch (928:9): [True: 0, False: 288]
  ------------------
  929|      0|        case SEC_OID_SECG_EC_SECT131R2:
  ------------------
  |  Branch (929:9): [True: 0, False: 288]
  ------------------
  930|      0|            return 131;
  931|       |
  932|      0|        case SEC_OID_SECG_EC_SECP160K1:
  ------------------
  |  Branch (932:9): [True: 0, False: 288]
  ------------------
  933|      0|        case SEC_OID_SECG_EC_SECP160R1:
  ------------------
  |  Branch (933:9): [True: 0, False: 288]
  ------------------
  934|      0|        case SEC_OID_SECG_EC_SECP160R2:
  ------------------
  |  Branch (934:9): [True: 0, False: 288]
  ------------------
  935|      0|            return 161;
  936|       |
  937|      0|        case SEC_OID_SECG_EC_SECT163K1:
  ------------------
  |  Branch (937:9): [True: 0, False: 288]
  ------------------
  938|      0|            return 163;
  939|      0|        case SEC_OID_SECG_EC_SECT163R1:
  ------------------
  |  Branch (939:9): [True: 0, False: 288]
  ------------------
  940|      0|            return 162;
  941|      0|        case SEC_OID_SECG_EC_SECT163R2:
  ------------------
  |  Branch (941:9): [True: 0, False: 288]
  ------------------
  942|      0|        case SEC_OID_ANSIX962_EC_C2PNB163V1:
  ------------------
  |  Branch (942:9): [True: 0, False: 288]
  ------------------
  943|      0|            return 163;
  944|      0|        case SEC_OID_ANSIX962_EC_C2PNB163V2:
  ------------------
  |  Branch (944:9): [True: 0, False: 288]
  ------------------
  945|      0|        case SEC_OID_ANSIX962_EC_C2PNB163V3:
  ------------------
  |  Branch (945:9): [True: 0, False: 288]
  ------------------
  946|      0|            return 162;
  947|       |
  948|      0|        case SEC_OID_ANSIX962_EC_C2PNB176V1:
  ------------------
  |  Branch (948:9): [True: 0, False: 288]
  ------------------
  949|      0|            return 161;
  950|       |
  951|      0|        case SEC_OID_ANSIX962_EC_C2TNB191V1:
  ------------------
  |  Branch (951:9): [True: 0, False: 288]
  ------------------
  952|      0|            return 191;
  953|      0|        case SEC_OID_ANSIX962_EC_C2TNB191V2:
  ------------------
  |  Branch (953:9): [True: 0, False: 288]
  ------------------
  954|      0|            return 190;
  955|      0|        case SEC_OID_ANSIX962_EC_C2TNB191V3:
  ------------------
  |  Branch (955:9): [True: 0, False: 288]
  ------------------
  956|      0|            return 189;
  957|      0|        case SEC_OID_ANSIX962_EC_C2ONB191V4:
  ------------------
  |  Branch (957:9): [True: 0, False: 288]
  ------------------
  958|      0|            return 191;
  959|      0|        case SEC_OID_ANSIX962_EC_C2ONB191V5:
  ------------------
  |  Branch (959:9): [True: 0, False: 288]
  ------------------
  960|      0|            return 188;
  961|       |
  962|      0|        case SEC_OID_SECG_EC_SECP192K1:
  ------------------
  |  Branch (962:9): [True: 0, False: 288]
  ------------------
  963|      0|        case SEC_OID_ANSIX962_EC_PRIME192V1:
  ------------------
  |  Branch (963:9): [True: 0, False: 288]
  ------------------
  964|      0|        case SEC_OID_ANSIX962_EC_PRIME192V2:
  ------------------
  |  Branch (964:9): [True: 0, False: 288]
  ------------------
  965|      0|        case SEC_OID_ANSIX962_EC_PRIME192V3:
  ------------------
  |  Branch (965:9): [True: 0, False: 288]
  ------------------
  966|      0|            return 192;
  967|       |
  968|      0|        case SEC_OID_SECG_EC_SECT193R1:
  ------------------
  |  Branch (968:9): [True: 0, False: 288]
  ------------------
  969|      0|        case SEC_OID_SECG_EC_SECT193R2:
  ------------------
  |  Branch (969:9): [True: 0, False: 288]
  ------------------
  970|      0|            return 193;
  971|       |
  972|      0|        case SEC_OID_ANSIX962_EC_C2PNB208W1:
  ------------------
  |  Branch (972:9): [True: 0, False: 288]
  ------------------
  973|      0|            return 193;
  974|       |
  975|      0|        case SEC_OID_SECG_EC_SECP224K1:
  ------------------
  |  Branch (975:9): [True: 0, False: 288]
  ------------------
  976|      0|            return 225;
  977|      0|        case SEC_OID_SECG_EC_SECP224R1:
  ------------------
  |  Branch (977:9): [True: 0, False: 288]
  ------------------
  978|      0|            return 224;
  979|       |
  980|      0|        case SEC_OID_SECG_EC_SECT233K1:
  ------------------
  |  Branch (980:9): [True: 0, False: 288]
  ------------------
  981|      0|            return 232;
  982|      0|        case SEC_OID_SECG_EC_SECT233R1:
  ------------------
  |  Branch (982:9): [True: 0, False: 288]
  ------------------
  983|      0|            return 233;
  984|       |
  985|      0|        case SEC_OID_SECG_EC_SECT239K1:
  ------------------
  |  Branch (985:9): [True: 0, False: 288]
  ------------------
  986|      0|        case SEC_OID_ANSIX962_EC_C2TNB239V1:
  ------------------
  |  Branch (986:9): [True: 0, False: 288]
  ------------------
  987|      0|            return 238;
  988|      0|        case SEC_OID_ANSIX962_EC_C2TNB239V2:
  ------------------
  |  Branch (988:9): [True: 0, False: 288]
  ------------------
  989|      0|            return 237;
  990|      0|        case SEC_OID_ANSIX962_EC_C2TNB239V3:
  ------------------
  |  Branch (990:9): [True: 0, False: 288]
  ------------------
  991|      0|            return 236;
  992|      0|        case SEC_OID_ANSIX962_EC_C2ONB239V4:
  ------------------
  |  Branch (992:9): [True: 0, False: 288]
  ------------------
  993|      0|            return 238;
  994|      0|        case SEC_OID_ANSIX962_EC_C2ONB239V5:
  ------------------
  |  Branch (994:9): [True: 0, False: 288]
  ------------------
  995|      0|            return 237;
  996|      0|        case SEC_OID_ANSIX962_EC_PRIME239V1:
  ------------------
  |  Branch (996:9): [True: 0, False: 288]
  ------------------
  997|      0|        case SEC_OID_ANSIX962_EC_PRIME239V2:
  ------------------
  |  Branch (997:9): [True: 0, False: 288]
  ------------------
  998|      0|        case SEC_OID_ANSIX962_EC_PRIME239V3:
  ------------------
  |  Branch (998:9): [True: 0, False: 288]
  ------------------
  999|      0|            return 239;
 1000|       |
 1001|      3|        case SEC_OID_SECG_EC_SECP256K1:
  ------------------
  |  Branch (1001:9): [True: 3, False: 285]
  ------------------
 1002|    162|        case SEC_OID_ANSIX962_EC_PRIME256V1:
  ------------------
  |  Branch (1002:9): [True: 159, False: 129]
  ------------------
 1003|    162|            return 256;
 1004|       |
 1005|      1|        case SEC_OID_ANSIX962_EC_C2PNB272W1:
  ------------------
  |  Branch (1005:9): [True: 1, False: 287]
  ------------------
 1006|      1|            return 257;
 1007|       |
 1008|      1|        case SEC_OID_SECG_EC_SECT283K1:
  ------------------
  |  Branch (1008:9): [True: 1, False: 287]
  ------------------
 1009|      1|            return 281;
 1010|      1|        case SEC_OID_SECG_EC_SECT283R1:
  ------------------
  |  Branch (1010:9): [True: 1, False: 287]
  ------------------
 1011|      1|            return 282;
 1012|       |
 1013|      2|        case SEC_OID_ANSIX962_EC_C2PNB304W1:
  ------------------
  |  Branch (1013:9): [True: 2, False: 286]
  ------------------
 1014|      2|            return 289;
 1015|       |
 1016|      1|        case SEC_OID_ANSIX962_EC_C2TNB359V1:
  ------------------
  |  Branch (1016:9): [True: 1, False: 287]
  ------------------
 1017|      1|            return 353;
 1018|       |
 1019|      1|        case SEC_OID_ANSIX962_EC_C2PNB368W1:
  ------------------
  |  Branch (1019:9): [True: 1, False: 287]
  ------------------
 1020|      1|            return 353;
 1021|       |
 1022|     56|        case SEC_OID_SECG_EC_SECP384R1:
  ------------------
  |  Branch (1022:9): [True: 56, False: 232]
  ------------------
 1023|     56|            return 384;
 1024|       |
 1025|      1|        case SEC_OID_SECG_EC_SECT409K1:
  ------------------
  |  Branch (1025:9): [True: 1, False: 287]
  ------------------
 1026|      1|            return 407;
 1027|      3|        case SEC_OID_SECG_EC_SECT409R1:
  ------------------
  |  Branch (1027:9): [True: 3, False: 285]
  ------------------
 1028|      3|            return 409;
 1029|       |
 1030|      1|        case SEC_OID_ANSIX962_EC_C2TNB431R1:
  ------------------
  |  Branch (1030:9): [True: 1, False: 287]
  ------------------
 1031|      1|            return 418;
 1032|       |
 1033|     55|        case SEC_OID_SECG_EC_SECP521R1:
  ------------------
  |  Branch (1033:9): [True: 55, False: 233]
  ------------------
 1034|     55|            return 521;
 1035|       |
 1036|      1|        case SEC_OID_SECG_EC_SECT571K1:
  ------------------
  |  Branch (1036:9): [True: 1, False: 287]
  ------------------
 1037|      3|        case SEC_OID_SECG_EC_SECT571R1:
  ------------------
  |  Branch (1037:9): [True: 2, False: 286]
  ------------------
 1038|      3|            return 570;
 1039|       |
 1040|      0|        case SEC_OID_X25519:
  ------------------
  |  Branch (1040:9): [True: 0, False: 288]
  ------------------
 1041|      0|        case SEC_OID_CURVE25519:
  ------------------
  |  Branch (1041:9): [True: 0, False: 288]
  ------------------
 1042|      0|        case SEC_OID_ED25519_PUBLIC_KEY:
  ------------------
  |  Branch (1042:9): [True: 0, False: 288]
  ------------------
 1043|      0|            return 255;
 1044|       |
 1045|      0|        default:
  ------------------
  |  Branch (1045:9): [True: 0, False: 288]
  ------------------
 1046|      0|            PORT_SetError(SEC_ERROR_UNSUPPORTED_ELLIPTIC_CURVE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1047|      0|            return 0;
 1048|    288|    }
 1049|    288|}
SECKEY_BigIntegerBitLength:
 1054|  4.12k|{
 1055|  4.12k|    const unsigned char *p;
 1056|  4.12k|    unsigned octets;
 1057|  4.12k|    unsigned bits;
 1058|       |
 1059|  4.12k|    if (!number || !number->data) {
  ------------------
  |  Branch (1059:9): [True: 0, False: 4.12k]
  |  Branch (1059:20): [True: 0, False: 4.12k]
  ------------------
 1060|      0|        PORT_SetError(SEC_ERROR_INVALID_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1061|      0|        return 0;
 1062|      0|    }
 1063|       |
 1064|  4.12k|    p = number->data;
 1065|  4.12k|    octets = number->len;
 1066|  4.12k|    while (octets > 0 && !*p) {
  ------------------
  |  Branch (1066:12): [True: 4.12k, False: 0]
  |  Branch (1066:26): [True: 0, False: 4.12k]
  ------------------
 1067|      0|        ++p;
 1068|      0|        --octets;
 1069|      0|    }
 1070|  4.12k|    if (octets == 0) {
  ------------------
  |  Branch (1070:9): [True: 0, False: 4.12k]
  ------------------
 1071|      0|        return 0;
 1072|      0|    }
 1073|       |    /* bits = 7..1 because we know at least one bit is set already */
 1074|       |    /* Note: This could do a binary search, but this is faster for keys if we
 1075|       |     * assume that good keys will have the MSB set. */
 1076|  4.21k|    for (bits = 7; bits > 0; --bits) {
  ------------------
  |  Branch (1076:20): [True: 4.20k, False: 6]
  ------------------
 1077|  4.20k|        if (*p & (1 << bits)) {
  ------------------
  |  Branch (1077:13): [True: 4.11k, False: 91]
  ------------------
 1078|  4.11k|            break;
 1079|  4.11k|        }
 1080|  4.20k|    }
 1081|  4.12k|    return octets * 8 + bits - 7;
 1082|  4.12k|}
SECKEY_PublicKeyStrength:
 1087|      5|{
 1088|      5|    return (SECKEY_PublicKeyStrengthInBits(pubk) + 7) / 8;
 1089|      5|}
SECKEY_PublicKeyStrengthInBits:
 1094|  4.45k|{
 1095|  4.45k|    unsigned bitSize = 0;
 1096|       |
 1097|  4.45k|    if (!pubk) {
  ------------------
  |  Branch (1097:9): [True: 0, False: 4.45k]
  ------------------
 1098|      0|        PORT_SetError(SEC_ERROR_INVALID_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1099|      0|        return 0;
 1100|      0|    }
 1101|       |
 1102|       |    /* interpret modulus length as key strength */
 1103|  4.45k|    switch (pubk->keyType) {
 1104|  2.77k|        case rsaKey:
  ------------------
  |  Branch (1104:9): [True: 2.77k, False: 1.67k]
  ------------------
 1105|  2.77k|            bitSize = SECKEY_BigIntegerBitLength(&pubk->u.rsa.modulus);
 1106|  2.77k|            break;
 1107|  1.34k|        case dsaKey:
  ------------------
  |  Branch (1107:9): [True: 1.34k, False: 3.11k]
  ------------------
 1108|  1.34k|            bitSize = SECKEY_BigIntegerBitLength(&pubk->u.dsa.params.prime);
 1109|  1.34k|            break;
 1110|      0|        case dhKey:
  ------------------
  |  Branch (1110:9): [True: 0, False: 4.45k]
  ------------------
 1111|      0|            bitSize = SECKEY_BigIntegerBitLength(&pubk->u.dh.prime);
 1112|      0|            break;
 1113|    334|        case ecKey:
  ------------------
  |  Branch (1113:9): [True: 334, False: 4.12k]
  ------------------
 1114|    334|        case edKey:
  ------------------
  |  Branch (1114:9): [True: 0, False: 4.45k]
  ------------------
 1115|    334|        case ecMontKey:
  ------------------
  |  Branch (1115:9): [True: 0, False: 4.45k]
  ------------------
 1116|    334|            bitSize = SECKEY_ECParamsToKeySize(&pubk->u.ec.DEREncodedParams);
 1117|    334|            break;
 1118|      0|        default:
  ------------------
  |  Branch (1118:9): [True: 0, False: 4.45k]
  ------------------
 1119|      0|            PORT_SetError(SEC_ERROR_INVALID_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1120|      0|            break;
 1121|  4.45k|    }
 1122|  4.45k|    return bitSize;
 1123|  4.45k|}
SECKEY_SignatureLen:
 1190|  4.39k|{
 1191|  4.39k|    unsigned size;
 1192|       |
 1193|  4.39k|    switch (pubk->keyType) {
 1194|  2.76k|        case rsaKey:
  ------------------
  |  Branch (1194:9): [True: 2.76k, False: 1.62k]
  ------------------
 1195|  2.76k|        case rsaPssKey:
  ------------------
  |  Branch (1195:9): [True: 0, False: 4.39k]
  ------------------
 1196|  2.76k|            if (pubk->u.rsa.modulus.len == 0) {
  ------------------
  |  Branch (1196:17): [True: 0, False: 2.76k]
  ------------------
 1197|      0|                return 0;
 1198|      0|            }
 1199|  2.76k|            if (pubk->u.rsa.modulus.data[0] == 0) {
  ------------------
  |  Branch (1199:17): [True: 0, False: 2.76k]
  ------------------
 1200|      0|                return pubk->u.rsa.modulus.len - 1;
 1201|      0|            }
 1202|  2.76k|            return pubk->u.rsa.modulus.len;
 1203|  1.34k|        case dsaKey:
  ------------------
  |  Branch (1203:9): [True: 1.34k, False: 3.05k]
  ------------------
 1204|  1.34k|            return pubk->u.dsa.params.subPrime.len * 2;
 1205|    288|        case ecKey:
  ------------------
  |  Branch (1205:9): [True: 288, False: 4.11k]
  ------------------
 1206|    288|        case edKey:
  ------------------
  |  Branch (1206:9): [True: 0, False: 4.39k]
  ------------------
 1207|    288|        case ecMontKey:
  ------------------
  |  Branch (1207:9): [True: 0, False: 4.39k]
  ------------------
 1208|       |            /* Get the base point order length in bits and adjust */
 1209|    288|            size = SECKEY_ECParamsToBasePointOrderLen(
 1210|    288|                &pubk->u.ec.DEREncodedParams);
 1211|    288|            return ((size + 7) / 8) * 2;
 1212|      0|        default:
  ------------------
  |  Branch (1212:9): [True: 0, False: 4.39k]
  ------------------
 1213|      0|            break;
 1214|  4.39k|    }
 1215|      0|    PORT_SetError(SEC_ERROR_INVALID_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1216|      0|    return 0;
 1217|  4.39k|}
SECKEY_CopyPublicKey:
 1268|  4.40k|{
 1269|  4.40k|    SECKEYPublicKey *copyk;
 1270|  4.40k|    PLArenaPool *arena;
 1271|  4.40k|    SECStatus rv = SECSuccess;
 1272|       |
 1273|  4.40k|    arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   63|  4.40k|#define PORT_NewArena PORT_NewArena_Util
  ------------------
                  arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|  4.40k|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
 1274|  4.40k|    if (arena == NULL) {
  ------------------
  |  Branch (1274:9): [True: 0, False: 4.40k]
  ------------------
 1275|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1276|      0|        return NULL;
 1277|      0|    }
 1278|       |
 1279|  4.40k|    copyk = (SECKEYPublicKey *)PORT_ArenaZAlloc(arena, sizeof(SECKEYPublicKey));
  ------------------
  |  |   59|  4.40k|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
 1280|  4.40k|    if (!copyk) {
  ------------------
  |  Branch (1280:9): [True: 0, False: 4.40k]
  ------------------
 1281|      0|        PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |   61|      0|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1282|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1283|      0|        return NULL;
 1284|      0|    }
 1285|       |
 1286|  4.40k|    copyk->arena = arena;
 1287|  4.40k|    copyk->keyType = pubk->keyType;
 1288|  4.40k|    if (pubk->pkcs11Slot &&
  ------------------
  |  Branch (1288:9): [True: 0, False: 4.40k]
  ------------------
 1289|  4.40k|        PK11_IsPermObject(pubk->pkcs11Slot, pubk->pkcs11ID)) {
  ------------------
  |  Branch (1289:9): [True: 0, False: 0]
  ------------------
 1290|      0|        copyk->pkcs11Slot = PK11_ReferenceSlot(pubk->pkcs11Slot);
 1291|      0|        copyk->pkcs11ID = pubk->pkcs11ID;
 1292|  4.40k|    } else {
 1293|  4.40k|        copyk->pkcs11Slot = NULL; /* go get own reference */
 1294|  4.40k|        copyk->pkcs11ID = CK_INVALID_HANDLE;
  ------------------
  |  |   78|  4.40k|#define CK_INVALID_HANDLE 0
  ------------------
 1295|  4.40k|    }
 1296|  4.40k|    switch (pubk->keyType) {
 1297|  2.77k|        case rsaKey:
  ------------------
  |  Branch (1297:9): [True: 2.77k, False: 1.62k]
  ------------------
 1298|  2.77k|            rv = SECITEM_CopyItem(arena, &copyk->u.rsa.modulus,
  ------------------
  |  |  106|  2.77k|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1299|  2.77k|                                  &pubk->u.rsa.modulus);
 1300|  2.77k|            if (rv == SECSuccess) {
  ------------------
  |  Branch (1300:17): [True: 2.77k, False: 0]
  ------------------
 1301|  2.77k|                rv = SECITEM_CopyItem(arena, &copyk->u.rsa.publicExponent,
  ------------------
  |  |  106|  2.77k|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1302|  2.77k|                                      &pubk->u.rsa.publicExponent);
 1303|  2.77k|                if (rv == SECSuccess)
  ------------------
  |  Branch (1303:21): [True: 2.77k, False: 0]
  ------------------
 1304|  2.77k|                    return copyk;
 1305|  2.77k|            }
 1306|      0|            break;
 1307|  1.34k|        case dsaKey:
  ------------------
  |  Branch (1307:9): [True: 1.34k, False: 3.06k]
  ------------------
 1308|  1.34k|            rv = SECITEM_CopyItem(arena, &copyk->u.dsa.publicValue,
  ------------------
  |  |  106|  1.34k|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1309|  1.34k|                                  &pubk->u.dsa.publicValue);
 1310|  1.34k|            if (rv != SECSuccess)
  ------------------
  |  Branch (1310:17): [True: 0, False: 1.34k]
  ------------------
 1311|      0|                break;
 1312|  1.34k|            rv = SECITEM_CopyItem(arena, &copyk->u.dsa.params.prime,
  ------------------
  |  |  106|  1.34k|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1313|  1.34k|                                  &pubk->u.dsa.params.prime);
 1314|  1.34k|            if (rv != SECSuccess)
  ------------------
  |  Branch (1314:17): [True: 0, False: 1.34k]
  ------------------
 1315|      0|                break;
 1316|  1.34k|            rv = SECITEM_CopyItem(arena, &copyk->u.dsa.params.subPrime,
  ------------------
  |  |  106|  1.34k|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1317|  1.34k|                                  &pubk->u.dsa.params.subPrime);
 1318|  1.34k|            if (rv != SECSuccess)
  ------------------
  |  Branch (1318:17): [True: 0, False: 1.34k]
  ------------------
 1319|      0|                break;
 1320|  1.34k|            rv = SECITEM_CopyItem(arena, &copyk->u.dsa.params.base,
  ------------------
  |  |  106|  1.34k|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1321|  1.34k|                                  &pubk->u.dsa.params.base);
 1322|  1.34k|            break;
 1323|      0|        case dhKey:
  ------------------
  |  Branch (1323:9): [True: 0, False: 4.40k]
  ------------------
 1324|      0|            rv = SECITEM_CopyItem(arena, &copyk->u.dh.prime, &pubk->u.dh.prime);
  ------------------
  |  |  106|      0|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1325|      0|            if (rv != SECSuccess)
  ------------------
  |  Branch (1325:17): [True: 0, False: 0]
  ------------------
 1326|      0|                break;
 1327|      0|            rv = SECITEM_CopyItem(arena, &copyk->u.dh.base, &pubk->u.dh.base);
  ------------------
  |  |  106|      0|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1328|      0|            if (rv != SECSuccess)
  ------------------
  |  Branch (1328:17): [True: 0, False: 0]
  ------------------
 1329|      0|                break;
 1330|      0|            rv = SECITEM_CopyItem(arena, &copyk->u.dh.publicValue,
  ------------------
  |  |  106|      0|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1331|      0|                                  &pubk->u.dh.publicValue);
 1332|      0|            break;
 1333|    288|        case ecKey:
  ------------------
  |  Branch (1333:9): [True: 288, False: 4.11k]
  ------------------
 1334|    288|        case edKey:
  ------------------
  |  Branch (1334:9): [True: 0, False: 4.40k]
  ------------------
 1335|    288|        case ecMontKey:
  ------------------
  |  Branch (1335:9): [True: 0, False: 4.40k]
  ------------------
 1336|    288|            copyk->u.ec.size = pubk->u.ec.size;
 1337|    288|            rv = seckey_HasCurveOID(pubk);
 1338|    288|            if (rv != SECSuccess) {
  ------------------
  |  Branch (1338:17): [True: 0, False: 288]
  ------------------
 1339|      0|                break;
 1340|      0|            }
 1341|    288|            rv = SECITEM_CopyItem(arena, &copyk->u.ec.DEREncodedParams,
  ------------------
  |  |  106|    288|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1342|    288|                                  &pubk->u.ec.DEREncodedParams);
 1343|    288|            if (rv != SECSuccess) {
  ------------------
  |  Branch (1343:17): [True: 0, False: 288]
  ------------------
 1344|      0|                break;
 1345|      0|            }
 1346|    288|            copyk->u.ec.encoding = ECPoint_Undefined;
 1347|    288|            rv = SECITEM_CopyItem(arena, &copyk->u.ec.publicValue,
  ------------------
  |  |  106|    288|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1348|    288|                                  &pubk->u.ec.publicValue);
 1349|    288|            break;
 1350|      0|        case nullKey:
  ------------------
  |  Branch (1350:9): [True: 0, False: 4.40k]
  ------------------
 1351|      0|            return copyk;
 1352|      0|        case kyberKey:
  ------------------
  |  Branch (1352:9): [True: 0, False: 4.40k]
  ------------------
 1353|      0|            copyk->u.kyber.params = pubk->u.kyber.params;
 1354|      0|            rv = SECITEM_CopyItem(arena, &copyk->u.kyber.publicValue,
  ------------------
  |  |  106|      0|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
 1355|      0|                                  &pubk->u.kyber.publicValue);
 1356|      0|            break;
 1357|      0|        default:
  ------------------
  |  Branch (1357:9): [True: 0, False: 4.40k]
  ------------------
 1358|      0|            PORT_SetError(SEC_ERROR_INVALID_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1359|      0|            rv = SECFailure;
 1360|      0|            break;
 1361|  4.40k|    }
 1362|  1.62k|    if (rv == SECSuccess)
  ------------------
  |  Branch (1362:9): [True: 1.62k, False: 0]
  ------------------
 1363|  1.62k|        return copyk;
 1364|       |
 1365|      0|    SECKEY_DestroyPublicKey(copyk);
 1366|      0|    return NULL;
 1367|  1.62k|}
SECKEY_EnforceKeySize:
 1375|  4.44k|{
 1376|  4.44k|    PRInt32 opt = -1;
 1377|  4.44k|    PRInt32 optVal;
 1378|  4.44k|    SECStatus rv;
 1379|       |
 1380|  4.44k|    switch (keyType) {
 1381|  2.77k|        case rsaKey:
  ------------------
  |  Branch (1381:9): [True: 2.77k, False: 1.67k]
  ------------------
 1382|  2.77k|        case rsaPssKey:
  ------------------
  |  Branch (1382:9): [True: 0, False: 4.44k]
  ------------------
 1383|  2.77k|        case rsaOaepKey:
  ------------------
  |  Branch (1383:9): [True: 0, False: 4.44k]
  ------------------
 1384|  2.77k|            opt = NSS_RSA_MIN_KEY_SIZE;
  ------------------
  |  |  286|  2.77k|#define NSS_RSA_MIN_KEY_SIZE 0x001
  ------------------
 1385|  2.77k|            break;
 1386|  1.34k|        case dsaKey:
  ------------------
  |  Branch (1386:9): [True: 1.34k, False: 3.10k]
  ------------------
 1387|  1.34k|        case fortezzaKey:
  ------------------
  |  Branch (1387:9): [True: 0, False: 4.44k]
  ------------------
 1388|  1.34k|            opt = NSS_DSA_MIN_KEY_SIZE;
  ------------------
  |  |  288|  1.34k|#define NSS_DSA_MIN_KEY_SIZE 0x004
  ------------------
 1389|  1.34k|            break;
 1390|      0|        case dhKey:
  ------------------
  |  Branch (1390:9): [True: 0, False: 4.44k]
  ------------------
 1391|      0|        case keaKey:
  ------------------
  |  Branch (1391:9): [True: 0, False: 4.44k]
  ------------------
 1392|      0|            opt = NSS_DH_MIN_KEY_SIZE;
  ------------------
  |  |  287|      0|#define NSS_DH_MIN_KEY_SIZE 0x002
  ------------------
 1393|      0|            break;
 1394|    334|        case ecKey:
  ------------------
  |  Branch (1394:9): [True: 334, False: 4.11k]
  ------------------
 1395|    334|            opt = NSS_ECC_MIN_KEY_SIZE;
  ------------------
  |  |  327|    334|#define NSS_ECC_MIN_KEY_SIZE 0x011
  ------------------
 1396|    334|            break;
 1397|      0|        case nullKey:
  ------------------
  |  Branch (1397:9): [True: 0, False: 4.44k]
  ------------------
 1398|      0|        default:
  ------------------
  |  Branch (1398:9): [True: 0, False: 4.44k]
  ------------------
 1399|      0|            PORT_SetError(SEC_ERROR_INVALID_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1400|      0|            return SECFailure;
 1401|  4.44k|    }
 1402|  4.44k|    PORT_Assert(opt != -1);
  ------------------
  |  |  120|  4.44k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  4.44k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 4.44k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1403|  4.44k|    rv = NSS_OptionGet(opt, &optVal);
 1404|  4.44k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1404:9): [True: 0, False: 4.44k]
  ------------------
 1405|      0|        return rv;
 1406|      0|    }
 1407|  4.44k|    if (optVal > keyLength) {
  ------------------
  |  Branch (1407:9): [True: 46, False: 4.40k]
  ------------------
 1408|     46|        PORT_SetError(error);
  ------------------
  |  |   65|     46|#define PORT_SetError PORT_SetError_Util
  ------------------
 1409|     46|        return SECFailure;
 1410|     46|    }
 1411|  4.40k|    return SECSuccess;
 1412|  4.44k|}
SECKEY_GetECCOid:
 2302|    341|{
 2303|    341|    SECItem oid = { siBuffer, NULL, 0 };
 2304|    341|    SECOidData *oidData = NULL;
 2305|       |
 2306|       |    /*
 2307|       |     * params->data needs to contain the ASN encoding of an object ID (OID)
 2308|       |     * representing a named curve. Here, we strip away everything
 2309|       |     * before the actual OID and use the OID to look up a named curve.
 2310|       |     */
 2311|    341|    if (params->data[0] != SEC_ASN1_OBJECT_ID)
  ------------------
  |  |   82|    341|#define SEC_ASN1_OBJECT_ID 0x06
  ------------------
  |  Branch (2311:9): [True: 0, False: 341]
  ------------------
 2312|      0|        return 0;
 2313|    341|    oid.len = params->len - 2;
 2314|    341|    oid.data = params->data + 2;
 2315|    341|    if ((oidData = SECOID_FindOID(&oid)) == NULL)
  ------------------
  |  |  115|    341|#define SECOID_FindOID SECOID_FindOID_Util
  ------------------
  |  Branch (2315:9): [True: 6, False: 335]
  ------------------
 2316|      6|        return 0;
 2317|       |
 2318|    335|    return oidData->offset;
 2319|    341|}
SEC_GetMgfTypeByOidTag:
 2343|    159|{
 2344|    159|    switch (tag) {
 2345|      0|        case SEC_OID_SHA3_512:
  ------------------
  |  Branch (2345:9): [True: 0, False: 159]
  ------------------
 2346|      0|            return CKG_MGF1_SHA3_512;
  ------------------
  |  | 1660|      0|#define CKG_MGF1_SHA3_512 0x00000009UL
  ------------------
 2347|      0|        case SEC_OID_SHA3_384:
  ------------------
  |  Branch (2347:9): [True: 0, False: 159]
  ------------------
 2348|      0|            return CKG_MGF1_SHA3_384;
  ------------------
  |  | 1659|      0|#define CKG_MGF1_SHA3_384 0x00000008UL
  ------------------
 2349|      0|        case SEC_OID_SHA3_256:
  ------------------
  |  Branch (2349:9): [True: 0, False: 159]
  ------------------
 2350|      0|            return CKG_MGF1_SHA3_256;
  ------------------
  |  | 1658|      0|#define CKG_MGF1_SHA3_256 0x00000007UL
  ------------------
 2351|      2|        case SEC_OID_SHA3_224:
  ------------------
  |  Branch (2351:9): [True: 2, False: 157]
  ------------------
 2352|      2|            return CKG_MGF1_SHA3_224;
  ------------------
  |  | 1657|      2|#define CKG_MGF1_SHA3_224 0x00000006UL
  ------------------
 2353|     31|        case SEC_OID_SHA512:
  ------------------
  |  Branch (2353:9): [True: 31, False: 128]
  ------------------
 2354|     31|            return CKG_MGF1_SHA512;
  ------------------
  |  | 1651|     31|#define CKG_MGF1_SHA512 0x00000004UL
  ------------------
 2355|     16|        case SEC_OID_SHA384:
  ------------------
  |  Branch (2355:9): [True: 16, False: 143]
  ------------------
 2356|     16|            return CKG_MGF1_SHA384;
  ------------------
  |  | 1650|     16|#define CKG_MGF1_SHA384 0x00000003UL
  ------------------
 2357|     96|        case SEC_OID_SHA256:
  ------------------
  |  Branch (2357:9): [True: 96, False: 63]
  ------------------
 2358|     96|            return CKG_MGF1_SHA256;
  ------------------
  |  | 1649|     96|#define CKG_MGF1_SHA256 0x00000002UL
  ------------------
 2359|      4|        case SEC_OID_SHA224:
  ------------------
  |  Branch (2359:9): [True: 4, False: 155]
  ------------------
 2360|      4|            return CKG_MGF1_SHA224;
  ------------------
  |  | 1654|      4|#define CKG_MGF1_SHA224 0x00000005UL
  ------------------
 2361|      8|        case SEC_OID_SHA1:
  ------------------
  |  Branch (2361:9): [True: 8, False: 151]
  ------------------
 2362|      8|            return CKG_MGF1_SHA1;
  ------------------
  |  | 1648|      8|#define CKG_MGF1_SHA1 0x00000001UL
  ------------------
 2363|      2|        default:
  ------------------
  |  Branch (2363:9): [True: 2, False: 157]
  ------------------
 2364|      2|            PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
  ------------------
  |  |   65|      2|#define PORT_SetError PORT_SetError_Util
  ------------------
 2365|      2|            return 0;
 2366|    159|    }
 2367|    159|}
sec_DecodeRSAPSSParams:
 2374|    246|{
 2375|    246|    SECKEYRSAPSSParams pssParams;
 2376|    246|    SECOidTag hashAlg;
 2377|    246|    SECOidTag maskHashAlg;
 2378|    246|    unsigned long saltLength;
 2379|    246|    unsigned long trailerField;
 2380|    246|    SECStatus rv;
 2381|       |
 2382|    246|    PORT_Memset(&pssParams, 0, sizeof(pssParams));
  ------------------
  |  |  182|    246|#define PORT_Memset memset
  ------------------
 2383|    246|    rv = SEC_QuickDERDecodeItem(arena, &pssParams,
  ------------------
  |  |  102|    246|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
 2384|    246|                                SECKEY_RSAPSSParamsTemplate,
 2385|    246|                                params);
 2386|    246|    if (rv != SECSuccess) {
  ------------------
  |  Branch (2386:9): [True: 2, False: 244]
  ------------------
 2387|      2|        return rv;
 2388|      2|    }
 2389|       |
 2390|    244|    if (pssParams.hashAlg) {
  ------------------
  |  Branch (2390:9): [True: 232, False: 12]
  ------------------
 2391|    232|        hashAlg = SECOID_GetAlgorithmTag(pssParams.hashAlg);
  ------------------
  |  |  119|    232|#define SECOID_GetAlgorithmTag SECOID_GetAlgorithmTag_Util
  ------------------
 2392|    232|    } else {
 2393|     12|        hashAlg = SEC_OID_SHA1; /* default, SHA-1 */
 2394|     12|    }
 2395|       |
 2396|    244|    if (pssParams.maskAlg) {
  ------------------
  |  Branch (2396:9): [True: 232, False: 12]
  ------------------
 2397|    232|        SECAlgorithmID algId;
 2398|       |
 2399|    232|        if (SECOID_GetAlgorithmTag(pssParams.maskAlg) != SEC_OID_PKCS1_MGF1) {
  ------------------
  |  |  119|    232|#define SECOID_GetAlgorithmTag SECOID_GetAlgorithmTag_Util
  ------------------
  |  Branch (2399:13): [True: 1, False: 231]
  ------------------
 2400|       |            /* only MGF1 is known to PKCS#11 */
 2401|      1|            PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
 2402|      1|            return SECFailure;
 2403|      1|        }
 2404|       |
 2405|    231|        rv = SEC_QuickDERDecodeItem(arena, &algId,
  ------------------
  |  |  102|    231|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
 2406|    231|                                    SEC_ASN1_GET(SECOID_AlgorithmIDTemplate),
  ------------------
  |  |  188|    231|#define SEC_ASN1_GET(x) x
  ------------------
 2407|    231|                                    &pssParams.maskAlg->parameters);
 2408|    231|        if (rv != SECSuccess) {
  ------------------
  |  Branch (2408:13): [True: 1, False: 230]
  ------------------
 2409|      1|            return rv;
 2410|      1|        }
 2411|    230|        maskHashAlg = SECOID_GetAlgorithmTag(&algId);
  ------------------
  |  |  119|    230|#define SECOID_GetAlgorithmTag SECOID_GetAlgorithmTag_Util
  ------------------
 2412|    230|    } else {
 2413|     12|        maskHashAlg = SEC_OID_SHA1; /* default, MGF1 with SHA-1 */
 2414|     12|    }
 2415|       |
 2416|    242|    if (pssParams.saltLength.data) {
  ------------------
  |  Branch (2416:9): [True: 229, False: 13]
  ------------------
 2417|    229|        rv = SEC_ASN1DecodeInteger((SECItem *)&pssParams.saltLength, &saltLength);
  ------------------
  |  |   77|    229|#define SEC_ASN1DecodeInteger SEC_ASN1DecodeInteger_Util
  ------------------
 2418|    229|        if (rv != SECSuccess) {
  ------------------
  |  Branch (2418:13): [True: 0, False: 229]
  ------------------
 2419|      0|            return rv;
 2420|      0|        }
 2421|    229|    } else {
 2422|     13|        saltLength = 20; /* default, 20 */
 2423|     13|    }
 2424|       |
 2425|    242|    if (pssParams.trailerField.data) {
  ------------------
  |  Branch (2425:9): [True: 2, False: 240]
  ------------------
 2426|      2|        rv = SEC_ASN1DecodeInteger((SECItem *)&pssParams.trailerField, &trailerField);
  ------------------
  |  |   77|      2|#define SEC_ASN1DecodeInteger SEC_ASN1DecodeInteger_Util
  ------------------
 2427|      2|        if (rv != SECSuccess) {
  ------------------
  |  Branch (2427:13): [True: 0, False: 2]
  ------------------
 2428|      0|            return rv;
 2429|      0|        }
 2430|      2|        if (trailerField != 1) {
  ------------------
  |  Branch (2430:13): [True: 2, False: 0]
  ------------------
 2431|       |            /* the value must be 1, which represents the trailer field
 2432|       |             * with hexadecimal value 0xBC */
 2433|      2|            PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      2|#define PORT_SetError PORT_SetError_Util
  ------------------
 2434|      2|            return SECFailure;
 2435|      2|        }
 2436|      2|    }
 2437|       |
 2438|    240|    if (retHashAlg) {
  ------------------
  |  Branch (2438:9): [True: 240, False: 0]
  ------------------
 2439|    240|        *retHashAlg = hashAlg;
 2440|    240|    }
 2441|    240|    if (retMaskHashAlg) {
  ------------------
  |  Branch (2441:9): [True: 240, False: 0]
  ------------------
 2442|    240|        *retMaskHashAlg = maskHashAlg;
 2443|    240|    }
 2444|    240|    if (retSaltLength) {
  ------------------
  |  Branch (2444:9): [True: 161, False: 79]
  ------------------
 2445|    161|        *retSaltLength = saltLength;
 2446|    161|    }
 2447|       |
 2448|    240|    return SECSuccess;
 2449|    242|}
sec_DecodeRSAPSSParamsToMechanism:
 2456|    167|{
 2457|    167|    SECOidTag hashAlg;
 2458|    167|    SECOidTag maskHashAlg;
 2459|    167|    unsigned long saltLength;
 2460|    167|    SECStatus rv;
 2461|       |
 2462|    167|    rv = sec_DecodeRSAPSSParams(arena, params,
 2463|    167|                                &hashAlg, &maskHashAlg, &saltLength);
 2464|    167|    if (rv != SECSuccess) {
  ------------------
  |  Branch (2464:9): [True: 6, False: 161]
  ------------------
 2465|      6|        return SECFailure;
 2466|      6|    }
 2467|    161|    *hashAlgp = hashAlg;
 2468|       |
 2469|    161|    mech->hashAlg = sec_GetHashMechanismByOidTag(hashAlg);
 2470|    161|    if (mech->hashAlg == CKM_INVALID_MECHANISM) {
  ------------------
  |  |  155|    161|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  |  Branch (2470:9): [True: 2, False: 159]
  ------------------
 2471|      2|        return SECFailure;
 2472|      2|    }
 2473|       |
 2474|    159|    mech->mgf = SEC_GetMgfTypeByOidTag(maskHashAlg);
 2475|    159|    if (mech->mgf == 0) {
  ------------------
  |  Branch (2475:9): [True: 2, False: 157]
  ------------------
 2476|      2|        return SECFailure;
 2477|      2|    }
 2478|       |
 2479|    157|    mech->sLen = saltLength;
 2480|       |
 2481|    157|    return SECSuccess;
 2482|    159|}
seckey.c:seckey_ExtractPublicKey:
  598|  4.53k|{
  599|  4.53k|    SECKEYPublicKey *pubk;
  600|  4.53k|    SECItem os, newOs, newParms;
  601|  4.53k|    SECStatus rv;
  602|  4.53k|    PLArenaPool *arena;
  603|  4.53k|    SECOidTag tag;
  604|       |
  605|  4.53k|    arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   63|  4.53k|#define PORT_NewArena PORT_NewArena_Util
  ------------------
                  arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|  4.53k|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  606|  4.53k|    if (arena == NULL)
  ------------------
  |  Branch (606:9): [True: 0, False: 4.53k]
  ------------------
  607|      0|        return NULL;
  608|       |
  609|  4.53k|    pubk = (SECKEYPublicKey *)PORT_ArenaZAlloc(arena, sizeof(SECKEYPublicKey));
  ------------------
  |  |   59|  4.53k|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
  610|  4.53k|    if (pubk == NULL) {
  ------------------
  |  Branch (610:9): [True: 0, False: 4.53k]
  ------------------
  611|      0|        PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |   61|      0|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  612|      0|        return NULL;
  613|      0|    }
  614|       |
  615|  4.53k|    pubk->arena = arena;
  616|  4.53k|    pubk->pkcs11Slot = 0;
  617|  4.53k|    pubk->pkcs11ID = CK_INVALID_HANDLE;
  ------------------
  |  |   78|  4.53k|#define CK_INVALID_HANDLE 0
  ------------------
  618|       |
  619|       |    /* Convert bit string length from bits to bytes */
  620|  4.53k|    os = spki->subjectPublicKey;
  621|  4.53k|    DER_ConvertBitString(&os);
  ------------------
  |  |  125|  4.53k|    {                                         \
  |  |  126|  4.53k|        (item)->len = ((item)->len + 7) >> 3; \
  |  |  127|  4.53k|    }
  ------------------
  622|       |
  623|  4.53k|    tag = SECOID_GetAlgorithmTag(&spki->algorithm);
  ------------------
  |  |  119|  4.53k|#define SECOID_GetAlgorithmTag SECOID_GetAlgorithmTag_Util
  ------------------
  624|       |
  625|       |    /* copy the DER into the arena, since Quick DER returns data that points
  626|       |       into the DER input, which may get freed by the caller */
  627|  4.53k|    rv = SECITEM_CopyItem(arena, &newOs, &os);
  ------------------
  |  |  106|  4.53k|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
  628|  4.53k|    if (rv == SECSuccess)
  ------------------
  |  Branch (628:9): [True: 4.53k, False: 0]
  ------------------
  629|  4.53k|        switch (tag) {
  630|      0|            case SEC_OID_X500_RSA_ENCRYPTION:
  ------------------
  |  Branch (630:13): [True: 0, False: 4.53k]
  ------------------
  631|  2.71k|            case SEC_OID_PKCS1_RSA_ENCRYPTION:
  ------------------
  |  Branch (631:13): [True: 2.71k, False: 1.82k]
  ------------------
  632|  2.80k|            case SEC_OID_PKCS1_RSA_PSS_SIGNATURE:
  ------------------
  |  Branch (632:13): [True: 94, False: 4.44k]
  ------------------
  633|  2.80k|                pubk->keyType = rsaKey;
  634|  2.80k|                prepare_rsa_pub_key_for_asn1(pubk);
  635|  2.80k|                rv = SEC_QuickDERDecodeItem(arena, pubk, SECKEY_RSAPublicKeyTemplate, &newOs);
  ------------------
  |  |  102|  2.80k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  636|  2.80k|                if (rv == SECSuccess)
  ------------------
  |  Branch (636:21): [True: 2.79k, False: 9]
  ------------------
  637|  2.79k|                    return pubk;
  638|      9|                break;
  639|  1.35k|            case SEC_OID_ANSIX9_DSA_SIGNATURE:
  ------------------
  |  Branch (639:13): [True: 1.35k, False: 3.18k]
  ------------------
  640|  1.35k|            case SEC_OID_SDN702_DSA_SIGNATURE:
  ------------------
  |  Branch (640:13): [True: 0, False: 4.53k]
  ------------------
  641|  1.35k|                pubk->keyType = dsaKey;
  642|  1.35k|                prepare_dsa_pub_key_for_asn1(pubk);
  643|  1.35k|                rv = SEC_QuickDERDecodeItem(arena, pubk, SECKEY_DSAPublicKeyTemplate, &newOs);
  ------------------
  |  |  102|  1.35k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  644|  1.35k|                if (rv != SECSuccess)
  ------------------
  |  Branch (644:21): [True: 1, False: 1.35k]
  ------------------
  645|      1|                    break;
  646|       |
  647|  1.35k|                rv = seckey_DSADecodePQG(arena, pubk,
  648|  1.35k|                                         &spki->algorithm.parameters);
  649|       |
  650|  1.35k|                if (rv == SECSuccess)
  ------------------
  |  Branch (650:21): [True: 1.34k, False: 11]
  ------------------
  651|  1.34k|                    return pubk;
  652|     11|                break;
  653|     11|            case SEC_OID_X942_DIFFIE_HELMAN_KEY:
  ------------------
  |  Branch (653:13): [True: 5, False: 4.53k]
  ------------------
  654|      5|                pubk->keyType = dhKey;
  655|      5|                prepare_dh_pub_key_for_asn1(pubk);
  656|      5|                rv = SEC_QuickDERDecodeItem(arena, pubk, SECKEY_DHPublicKeyTemplate, &newOs);
  ------------------
  |  |  102|      5|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  657|      5|                if (rv != SECSuccess)
  ------------------
  |  Branch (657:21): [True: 3, False: 2]
  ------------------
  658|      3|                    break;
  659|       |
  660|       |                /* copy the DER into the arena, since Quick DER returns data that points
  661|       |                   into the DER input, which may get freed by the caller */
  662|      2|                rv = SECITEM_CopyItem(arena, &newParms, &spki->algorithm.parameters);
  ------------------
  |  |  106|      2|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
  663|      2|                if (rv != SECSuccess)
  ------------------
  |  Branch (663:21): [True: 0, False: 2]
  ------------------
  664|      0|                    break;
  665|       |
  666|      2|                rv = SEC_QuickDERDecodeItem(arena, pubk, SECKEY_DHParamKeyTemplate,
  ------------------
  |  |  102|      2|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  667|      2|                                            &newParms);
  668|       |
  669|      2|                if (rv == SECSuccess)
  ------------------
  |  Branch (669:21): [True: 1, False: 1]
  ------------------
  670|      1|                    return pubk;
  671|      1|                break;
  672|      1|            case SEC_OID_X25519:
  ------------------
  |  Branch (672:13): [True: 0, False: 4.53k]
  ------------------
  673|      0|            case SEC_OID_ED25519_PUBLIC_KEY:
  ------------------
  |  Branch (673:13): [True: 0, False: 4.53k]
  ------------------
  674|       |                /* A basic consistency check on inputs. */
  675|      0|                if (newOs.len == 0) {
  ------------------
  |  Branch (675:21): [True: 0, False: 0]
  ------------------
  676|      0|                    PORT_SetError(SEC_ERROR_INPUT_LEN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  677|      0|                    break;
  678|      0|                }
  679|       |
  680|       |                /* Currently supporting only (Pure)Ed25519 .*/
  681|      0|                if (spki->algorithm.parameters.len != 0) {
  ------------------
  |  Branch (681:21): [True: 0, False: 0]
  ------------------
  682|      0|                    PORT_SetError(SEC_ERROR_UNSUPPORTED_KEYALG);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  683|      0|                    break;
  684|      0|                }
  685|       |
  686|       |                /* edKey corresponds to Ed25519 mechanism.
  687|       |                 * ecMontKey corresponds to X25519 mechanism.
  688|       |                 * The other options are not supported. */
  689|      0|                if (tag == SEC_OID_X25519) {
  ------------------
  |  Branch (689:21): [True: 0, False: 0]
  ------------------
  690|      0|                    pubk->keyType = ecMontKey;
  691|      0|                } else {
  692|       |                    /* tag == SEC_OID_ED25519_PUBLIC_KEY */
  693|      0|                    pubk->keyType = edKey;
  694|      0|                }
  695|       |
  696|      0|                pubk->u.ec.size = 0;
  697|       |
  698|      0|                SECOidData *oid25519 = SECOID_FindOIDByTag(tag);
  ------------------
  |  |  116|      0|#define SECOID_FindOIDByTag SECOID_FindOIDByTag_Util
  ------------------
  699|      0|                if (!oid25519) {
  ------------------
  |  Branch (699:21): [True: 0, False: 0]
  ------------------
  700|      0|                    break;
  701|      0|                }
  702|       |
  703|      0|                if (!SECITEM_AllocItem(arena, &pubk->u.ec.DEREncodedParams, oid25519->oid.len + 2)) {
  ------------------
  |  |  103|      0|#define SECITEM_AllocItem SECITEM_AllocItem_Util
  ------------------
  |  Branch (703:21): [True: 0, False: 0]
  ------------------
  704|      0|                    break;
  705|      0|                }
  706|      0|                pubk->u.ec.DEREncodedParams.data[0] = SEC_ASN1_OBJECT_ID;
  ------------------
  |  |   82|      0|#define SEC_ASN1_OBJECT_ID 0x06
  ------------------
  707|      0|                pubk->u.ec.DEREncodedParams.data[1] = oid25519->oid.len;
  708|      0|                PORT_Memcpy(pubk->u.ec.DEREncodedParams.data + 2, oid25519->oid.data, oid25519->oid.len);
  ------------------
  |  |  180|      0|#define PORT_Memcpy memcpy
  ------------------
  709|       |
  710|      0|                rv = SECITEM_CopyItem(arena, &pubk->u.ec.publicValue, &newOs);
  ------------------
  |  |  106|      0|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
  711|      0|                if (rv != SECSuccess) {
  ------------------
  |  Branch (711:21): [True: 0, False: 0]
  ------------------
  712|      0|                    break;
  713|      0|                }
  714|      0|                return pubk;
  715|    346|            case SEC_OID_ANSIX962_EC_PUBLIC_KEY:
  ------------------
  |  Branch (715:13): [True: 346, False: 4.19k]
  ------------------
  716|       |                /* A basic sanity check on inputs. */
  717|    346|                if (spki->algorithm.parameters.len == 0 || newOs.len == 0) {
  ------------------
  |  Branch (717:21): [True: 0, False: 346]
  |  Branch (717:60): [True: 0, False: 346]
  ------------------
  718|      0|                    PORT_SetError(SEC_ERROR_INPUT_LEN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  719|      0|                    break;
  720|      0|                }
  721|    346|                pubk->keyType = ecKey;
  722|    346|                pubk->u.ec.size = 0;
  723|       |
  724|       |                /* Since PKCS#11 directly takes the DER encoding of EC params
  725|       |                 * and public value, we don't need any decoding here.
  726|       |                 */
  727|    346|                rv = SECITEM_CopyItem(arena, &pubk->u.ec.DEREncodedParams,
  ------------------
  |  |  106|    346|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
  728|    346|                                      &spki->algorithm.parameters);
  729|    346|                if (rv != SECSuccess) {
  ------------------
  |  Branch (729:21): [True: 0, False: 346]
  ------------------
  730|      0|                    break;
  731|      0|                }
  732|    346|                rv = SECITEM_CopyItem(arena, &pubk->u.ec.publicValue, &newOs);
  ------------------
  |  |  106|    346|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
  733|    346|                if (rv != SECSuccess) {
  ------------------
  |  Branch (733:21): [True: 0, False: 346]
  ------------------
  734|      0|                    break;
  735|      0|                }
  736|    346|                pubk->u.ec.encoding = ECPoint_Undefined;
  737|    346|                rv = seckey_HasCurveOID(pubk);
  738|    346|                if (rv == SECSuccess) {
  ------------------
  |  Branch (738:21): [True: 343, False: 3]
  ------------------
  739|    343|                    return pubk;
  740|    343|                }
  741|      3|                break;
  742|       |
  743|     29|            default:
  ------------------
  |  Branch (743:13): [True: 29, False: 4.51k]
  ------------------
  744|     29|                PORT_SetError(SEC_ERROR_UNSUPPORTED_KEYALG);
  ------------------
  |  |   65|     29|#define PORT_SetError PORT_SetError_Util
  ------------------
  745|     29|                break;
  746|  4.53k|        }
  747|       |
  748|     57|    SECKEY_DestroyPublicKey(pubk);
  749|     57|    return NULL;
  750|  4.53k|}
seckey.c:seckey_DSADecodePQG:
  475|  1.35k|{
  476|  1.35k|    SECStatus rv;
  477|  1.35k|    SECItem newparams;
  478|       |
  479|  1.35k|    if (params == NULL)
  ------------------
  |  Branch (479:9): [True: 0, False: 1.35k]
  ------------------
  480|      0|        return SECFailure;
  481|       |
  482|  1.35k|    if (params->data == NULL)
  ------------------
  |  Branch (482:9): [True: 0, False: 1.35k]
  ------------------
  483|      0|        return SECFailure;
  484|       |
  485|  1.35k|    PORT_Assert(arena);
  ------------------
  |  |  120|  1.35k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  1.35k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1.35k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  486|       |
  487|       |    /* make a copy of the data into the arena so QuickDER output is valid */
  488|  1.35k|    rv = SECITEM_CopyItem(arena, &newparams, params);
  ------------------
  |  |  106|  1.35k|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
  489|       |
  490|       |    /* Check if params use the standard format.
  491|       |     * The value 0xa1 will appear in the first byte of the parameter data
  492|       |     * if the PQG parameters are not using the standard format.  This
  493|       |     * code should be changed to use a better method to detect non-standard
  494|       |     * parameters.    */
  495|       |
  496|  1.35k|    if ((newparams.data[0] != 0xa1) &&
  ------------------
  |  Branch (496:9): [True: 1.35k, False: 1]
  ------------------
  497|  1.35k|        (newparams.data[0] != 0xa0)) {
  ------------------
  |  Branch (497:9): [True: 1.35k, False: 1]
  ------------------
  498|       |
  499|  1.35k|        if (SECSuccess == rv) {
  ------------------
  |  Branch (499:13): [True: 1.35k, False: 0]
  ------------------
  500|       |            /* PQG params are in the standard format */
  501|  1.35k|            prepare_pqg_params_for_asn1(&pubk->u.dsa.params);
  502|  1.35k|            rv = SEC_QuickDERDecodeItem(arena, &pubk->u.dsa.params,
  ------------------
  |  |  102|  1.35k|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  503|  1.35k|                                        SECKEY_PQGParamsTemplate,
  504|  1.35k|                                        &newparams);
  505|  1.35k|        }
  506|  1.35k|    } else {
  507|       |
  508|      2|        if (SECSuccess == rv) {
  ------------------
  |  Branch (508:13): [True: 2, False: 0]
  ------------------
  509|       |            /* else the old fortezza-only wrapped format is used. */
  510|      2|            PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      2|#define PORT_SetError PORT_SetError_Util
  ------------------
  511|      2|            rv = SECFailure;
  512|      2|        }
  513|      2|    }
  514|  1.35k|    return rv;
  515|  1.35k|}
seckey.c:prepare_pqg_params_for_asn1:
  129|  1.35k|{
  130|  1.35k|    params->prime.type = siUnsignedInteger;
  131|  1.35k|    params->subPrime.type = siUnsignedInteger;
  132|  1.35k|    params->base.type = siUnsignedInteger;
  133|  1.35k|}
seckey.c:seckey_HasCurveOID:
  582|    634|{
  583|    634|    SECItem oid;
  584|    634|    SECStatus rv;
  585|    634|    PORTCheapArenaPool tmpArena;
  586|       |
  587|    634|    PORT_InitCheapArena(&tmpArena, DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|    634|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  588|       |    /* If we can decode it, an OID is available. */
  589|    634|    rv = SEC_QuickDERDecodeItem(&tmpArena.arena, &oid,
  ------------------
  |  |  102|    634|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  590|    634|                                SEC_ASN1_GET(SEC_ObjectIDTemplate),
  ------------------
  |  |  188|    634|#define SEC_ASN1_GET(x) x
  ------------------
  591|    634|                                &pubKey->u.ec.DEREncodedParams);
  592|    634|    PORT_DestroyCheapArena(&tmpArena);
  593|    634|    return rv;
  594|    634|}
seckey.c:prepare_rsa_pub_key_for_asn1:
  116|  2.80k|{
  117|  2.80k|    pubk->u.rsa.modulus.type = siUnsignedInteger;
  118|  2.80k|    pubk->u.rsa.publicExponent.type = siUnsignedInteger;
  119|  2.80k|}
seckey.c:prepare_dsa_pub_key_for_asn1:
  123|  1.35k|{
  124|  1.35k|    pubk->u.dsa.publicValue.type = siUnsignedInteger;
  125|  1.35k|}
seckey.c:prepare_dh_pub_key_for_asn1:
  137|      5|{
  138|      5|    pubk->u.dh.prime.type = siUnsignedInteger;
  139|      5|    pubk->u.dh.base.type = siUnsignedInteger;
  140|      5|    pubk->u.dh.publicValue.type = siUnsignedInteger;
  141|      5|}
seckey.c:sec_GetHashMechanismByOidTag:
 2323|    161|{
 2324|    161|    switch (tag) {
 2325|     31|        case SEC_OID_SHA512:
  ------------------
  |  Branch (2325:9): [True: 31, False: 130]
  ------------------
 2326|     31|            return CKM_SHA512;
  ------------------
  |  |  882|     31|#define CKM_SHA512 0x00000270UL
  ------------------
 2327|     19|        case SEC_OID_SHA384:
  ------------------
  |  Branch (2327:9): [True: 19, False: 142]
  ------------------
 2328|     19|            return CKM_SHA384;
  ------------------
  |  |  879|     19|#define CKM_SHA384 0x00000260UL
  ------------------
 2329|    101|        case SEC_OID_SHA256:
  ------------------
  |  Branch (2329:9): [True: 101, False: 60]
  ------------------
 2330|    101|            return CKM_SHA256;
  ------------------
  |  |  876|    101|#define CKM_SHA256 0x00000250UL
  ------------------
 2331|      0|        case SEC_OID_SHA224:
  ------------------
  |  Branch (2331:9): [True: 0, False: 161]
  ------------------
 2332|      0|            return CKM_SHA224;
  ------------------
  |  |  887|      0|#define CKM_SHA224 0x00000255UL
  ------------------
 2333|      8|        case SEC_OID_SHA1:
  ------------------
  |  Branch (2333:9): [True: 8, False: 153]
  ------------------
 2334|      8|            return CKM_SHA_1;
  ------------------
  |  |  859|      8|#define CKM_SHA_1 0x00000220UL
  ------------------
 2335|      2|        default:
  ------------------
  |  Branch (2335:9): [True: 2, False: 159]
  ------------------
 2336|      2|            PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
  ------------------
  |  |   65|      2|#define PORT_SetError PORT_SetError_Util
  ------------------
 2337|      2|            return CKM_INVALID_MECHANISM;
  ------------------
  |  |  155|      2|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
 2338|    161|    }
 2339|    161|}

sec_GetEncAlgFromSigAlg:
  261|  8.91k|{
  262|       |    /* get the "encryption" algorithm */
  263|  8.91k|    switch (sigAlg) {
  264|      6|        case SEC_OID_PKCS1_RSA_ENCRYPTION:
  ------------------
  |  Branch (264:9): [True: 6, False: 8.91k]
  ------------------
  265|      7|        case SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (265:9): [True: 1, False: 8.91k]
  ------------------
  266|     15|        case SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (266:9): [True: 8, False: 8.91k]
  ------------------
  267|     18|        case SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (267:9): [True: 3, False: 8.91k]
  ------------------
  268|     18|        case SEC_OID_ISO_SHA_WITH_RSA_SIGNATURE:
  ------------------
  |  Branch (268:9): [True: 0, False: 8.91k]
  ------------------
  269|     18|        case SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE:
  ------------------
  |  Branch (269:9): [True: 0, False: 8.91k]
  ------------------
  270|     20|        case SEC_OID_PKCS1_SHA224_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (270:9): [True: 2, False: 8.91k]
  ------------------
  271|  5.39k|        case SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (271:9): [True: 5.37k, False: 3.54k]
  ------------------
  272|  5.39k|        case SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (272:9): [True: 2, False: 8.91k]
  ------------------
  273|  5.40k|        case SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (273:9): [True: 4, False: 8.91k]
  ------------------
  274|  5.40k|            return SEC_OID_PKCS1_RSA_ENCRYPTION;
  275|    157|        case SEC_OID_PKCS1_RSA_PSS_SIGNATURE:
  ------------------
  |  Branch (275:9): [True: 157, False: 8.76k]
  ------------------
  276|    157|            return SEC_OID_PKCS1_RSA_PSS_SIGNATURE;
  277|       |
  278|       |        /* what about normal DSA? */
  279|      0|        case SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST:
  ------------------
  |  Branch (279:9): [True: 0, False: 8.91k]
  ------------------
  280|      0|        case SEC_OID_BOGUS_DSA_SIGNATURE_WITH_SHA1_DIGEST:
  ------------------
  |  Branch (280:9): [True: 0, False: 8.91k]
  ------------------
  281|      2|        case SEC_OID_NIST_DSA_SIGNATURE_WITH_SHA224_DIGEST:
  ------------------
  |  Branch (281:9): [True: 2, False: 8.91k]
  ------------------
  282|  2.68k|        case SEC_OID_NIST_DSA_SIGNATURE_WITH_SHA256_DIGEST:
  ------------------
  |  Branch (282:9): [True: 2.68k, False: 6.23k]
  ------------------
  283|  2.68k|            return SEC_OID_ANSIX9_DSA_SIGNATURE;
  284|      0|        case SEC_OID_MISSI_DSS:
  ------------------
  |  Branch (284:9): [True: 0, False: 8.91k]
  ------------------
  285|      0|        case SEC_OID_MISSI_KEA_DSS:
  ------------------
  |  Branch (285:9): [True: 0, False: 8.91k]
  ------------------
  286|      0|        case SEC_OID_MISSI_KEA_DSS_OLD:
  ------------------
  |  Branch (286:9): [True: 0, False: 8.91k]
  ------------------
  287|      0|        case SEC_OID_MISSI_DSS_OLD:
  ------------------
  |  Branch (287:9): [True: 0, False: 8.91k]
  ------------------
  288|      0|            return SEC_OID_MISSI_DSS;
  289|      0|        case SEC_OID_ANSIX962_ECDSA_SHA1_SIGNATURE:
  ------------------
  |  Branch (289:9): [True: 0, False: 8.91k]
  ------------------
  290|      5|        case SEC_OID_ANSIX962_ECDSA_SHA224_SIGNATURE:
  ------------------
  |  Branch (290:9): [True: 5, False: 8.91k]
  ------------------
  291|    659|        case SEC_OID_ANSIX962_ECDSA_SHA256_SIGNATURE:
  ------------------
  |  Branch (291:9): [True: 654, False: 8.26k]
  ------------------
  292|    668|        case SEC_OID_ANSIX962_ECDSA_SHA384_SIGNATURE:
  ------------------
  |  Branch (292:9): [True: 9, False: 8.90k]
  ------------------
  293|    675|        case SEC_OID_ANSIX962_ECDSA_SHA512_SIGNATURE:
  ------------------
  |  Branch (293:9): [True: 7, False: 8.91k]
  ------------------
  294|    675|        case SEC_OID_ANSIX962_ECDSA_SIGNATURE_RECOMMENDED_DIGEST:
  ------------------
  |  Branch (294:9): [True: 0, False: 8.91k]
  ------------------
  295|    675|        case SEC_OID_ANSIX962_ECDSA_SIGNATURE_SPECIFIED_DIGEST:
  ------------------
  |  Branch (295:9): [True: 0, False: 8.91k]
  ------------------
  296|    675|            return SEC_OID_ANSIX962_EC_PUBLIC_KEY;
  297|       |        /* we don't implement MD4 hashes */
  298|      0|        case SEC_OID_PKCS1_MD4_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (298:9): [True: 0, False: 8.91k]
  ------------------
  299|      0|        default:
  ------------------
  |  Branch (299:9): [True: 0, False: 8.91k]
  ------------------
  300|      0|            PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  301|      0|            break;
  302|  8.91k|    }
  303|      0|    return SEC_OID_UNKNOWN;
  304|  8.91k|}
sec_DecodeSigAlg:
  427|  8.93k|{
  428|  8.93k|    unsigned int len;
  429|  8.93k|    PLArenaPool *arena;
  430|  8.93k|    SECStatus rv;
  431|  8.93k|    SECItem oid;
  432|  8.93k|    SECOidTag encalg;
  433|  8.93k|    char *evp;
  434|       |
  435|  8.93k|    PR_ASSERT(hashalg != NULL);
  ------------------
  |  |  208|  8.93k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 8.93k, False: 0]
  |  |  ------------------
  ------------------
  436|  8.93k|    PR_ASSERT(encalgp != NULL);
  ------------------
  |  |  208|  8.93k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 8.93k, False: 0]
  |  |  ------------------
  ------------------
  437|  8.93k|    PR_ASSERT(mechp != NULL);
  ------------------
  |  |  208|  8.93k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 8.93k, False: 0]
  |  |  ------------------
  ------------------
  438|       |    /* Get the expected combined mechanism from the signature OID
  439|       |     * We'll override it in the table below if necessary */
  440|  8.93k|    *mechp = PK11_AlgtagToMechanism(sigAlg);
  441|  8.93k|    if (mechparamsp) {
  ------------------
  |  Branch (441:9): [True: 4.44k, False: 4.48k]
  ------------------
  442|  4.44k|        mechparamsp->data = NULL;
  443|  4.44k|        mechparamsp->len = 0;
  444|  4.44k|    }
  445|       |
  446|  8.93k|    switch (sigAlg) {
  447|       |        /* We probably shouldn't be generating MD2 signatures either */
  448|      1|        case SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (448:9): [True: 1, False: 8.93k]
  ------------------
  449|      1|            *hashalg = SEC_OID_MD2;
  450|      1|            break;
  451|      8|        case SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (451:9): [True: 8, False: 8.92k]
  ------------------
  452|      8|            *hashalg = SEC_OID_MD5;
  453|      8|            break;
  454|      3|        case SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (454:9): [True: 3, False: 8.92k]
  ------------------
  455|      3|        case SEC_OID_ISO_SHA_WITH_RSA_SIGNATURE:
  ------------------
  |  Branch (455:9): [True: 0, False: 8.93k]
  ------------------
  456|      3|        case SEC_OID_ISO_SHA1_WITH_RSA_SIGNATURE:
  ------------------
  |  Branch (456:9): [True: 0, False: 8.93k]
  ------------------
  457|      3|            *hashalg = SEC_OID_SHA1;
  458|      3|            break;
  459|      6|        case SEC_OID_PKCS1_RSA_ENCRYPTION:
  ------------------
  |  Branch (459:9): [True: 6, False: 8.92k]
  ------------------
  460|       |            /* SEC_OID_PKCS1_RSA_ENCRYPTION returns the generic
  461|       |             * CKM_RSA_PKCS mechanism, which isn't a combined mechanism.
  462|       |             * We don't have a hash, so we need to fall back to the old
  463|       |             * code which gets the hashalg by decoding the signature */
  464|      6|            *mechp = CKM_INVALID_MECHANISM;
  ------------------
  |  |  155|      6|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  465|      6|            *hashalg = SEC_OID_UNKNOWN; /* get it from the RSA signature */
  466|      6|            break;
  467|    167|        case SEC_OID_PKCS1_RSA_PSS_SIGNATURE:
  ------------------
  |  Branch (467:9): [True: 167, False: 8.76k]
  ------------------
  468|       |            /* SEC_OID_PKCS1_RSA_PSS_SIGNATURE returns the generic
  469|       |             * CKM_RSA_PSS_PKCS mechanism, which isn't a combined mechanism.
  470|       |             * If successful, we'll select the mechanism below, set it to
  471|       |             * invalid here incase we aren't successful */
  472|    167|            *mechp = CKM_INVALID_MECHANISM;
  ------------------
  |  |  155|    167|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  473|    167|            CK_RSA_PKCS_PSS_PARAMS *rsapssmechparams = NULL;
  474|    167|            CK_RSA_PKCS_PSS_PARAMS space;
  475|       |
  476|       |            /* if we don't have a mechanism parameter to put the data in
  477|       |             * we don't need to return it, just use a stack buffer */
  478|    167|            if (mechparamsp == NULL) {
  ------------------
  |  Branch (478:17): [True: 89, False: 78]
  ------------------
  479|     89|                rsapssmechparams = &space;
  480|     89|            } else {
  481|     78|                rsapssmechparams = PORT_ZNew(CK_RSA_PKCS_PSS_PARAMS);
  ------------------
  |  |  148|     78|#define PORT_ZNew(type) (type *)PORT_ZAlloc(sizeof(type))
  |  |  ------------------
  |  |  |  |   72|     78|#define PORT_ZAlloc PORT_ZAlloc_Util
  |  |  ------------------
  ------------------
  482|     78|            }
  483|    167|            if (rsapssmechparams == NULL) {
  ------------------
  |  Branch (483:17): [True: 0, False: 167]
  ------------------
  484|      0|                return SECFailure;
  485|      0|            }
  486|    167|            if (param && param->data) {
  ------------------
  |  Branch (486:17): [True: 167, False: 0]
  |  Branch (486:26): [True: 167, False: 0]
  ------------------
  487|    167|                PORTCheapArenaPool tmpArena;
  488|       |
  489|    167|                PORT_InitCheapArena(&tmpArena, DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|    167|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  490|    167|                rv = sec_DecodeRSAPSSParamsToMechanism(&tmpArena.arena, param,
  491|    167|                                                       rsapssmechparams, hashalg);
  492|    167|                PORT_DestroyCheapArena(&tmpArena);
  493|       |
  494|       |                /* only accept hash algorithms */
  495|    167|                if (rv != SECSuccess || HASH_GetHashTypeByOidTag(*hashalg) == HASH_AlgNULL) {
  ------------------
  |  |  125|    157|#define HASH_GetHashTypeByOidTag HASH_GetHashTypeByOidTag_Util
  ------------------
  |  Branch (495:21): [True: 10, False: 157]
  |  Branch (495:41): [True: 0, False: 157]
  ------------------
  496|       |                    /* error set by sec_DecodeRSAPSSParams or HASH_GetHashTypeByOidTag */
  497|     10|                    if (mechparamsp)
  ------------------
  |  Branch (497:25): [True: 0, False: 10]
  ------------------
  498|      0|                        PORT_Free(rsapssmechparams);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  499|     10|                    return SECFailure;
  500|     10|                }
  501|    167|            } else {
  502|      0|                *hashalg = SEC_OID_SHA1; /* default, SHA-1 */
  503|      0|                rsapssmechparams->hashAlg = CKM_SHA_1;
  ------------------
  |  |  859|      0|#define CKM_SHA_1 0x00000220UL
  ------------------
  504|      0|                rsapssmechparams->mgf = CKG_MGF1_SHA1;
  ------------------
  |  | 1648|      0|#define CKG_MGF1_SHA1 0x00000001UL
  ------------------
  505|      0|                rsapssmechparams->sLen = SHA1_LENGTH;
  ------------------
  |  |   39|      0|#define SHA1_LENGTH 20
  ------------------
  506|      0|            }
  507|    157|            *mechp = sec_RSAPSSGetCombinedMech(*hashalg);
  508|    157|            if (mechparamsp) {
  ------------------
  |  Branch (508:17): [True: 78, False: 79]
  ------------------
  509|     78|                mechparamsp->data = (unsigned char *)rsapssmechparams;
  510|     78|                mechparamsp->len = sizeof(*rsapssmechparams);
  511|     78|            }
  512|    157|            break;
  513|       |
  514|      5|        case SEC_OID_ANSIX962_ECDSA_SHA224_SIGNATURE:
  ------------------
  |  Branch (514:9): [True: 5, False: 8.92k]
  ------------------
  515|      7|        case SEC_OID_PKCS1_SHA224_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (515:9): [True: 2, False: 8.92k]
  ------------------
  516|      9|        case SEC_OID_NIST_DSA_SIGNATURE_WITH_SHA224_DIGEST:
  ------------------
  |  Branch (516:9): [True: 2, False: 8.92k]
  ------------------
  517|      9|            *hashalg = SEC_OID_SHA224;
  518|      9|            break;
  519|    654|        case SEC_OID_ANSIX962_ECDSA_SHA256_SIGNATURE:
  ------------------
  |  Branch (519:9): [True: 654, False: 8.27k]
  ------------------
  520|  6.03k|        case SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (520:9): [True: 5.37k, False: 3.55k]
  ------------------
  521|  8.71k|        case SEC_OID_NIST_DSA_SIGNATURE_WITH_SHA256_DIGEST:
  ------------------
  |  Branch (521:9): [True: 2.68k, False: 6.25k]
  ------------------
  522|  8.71k|            *hashalg = SEC_OID_SHA256;
  523|  8.71k|            break;
  524|      9|        case SEC_OID_ANSIX962_ECDSA_SHA384_SIGNATURE:
  ------------------
  |  Branch (524:9): [True: 9, False: 8.92k]
  ------------------
  525|     11|        case SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (525:9): [True: 2, False: 8.92k]
  ------------------
  526|     11|            *hashalg = SEC_OID_SHA384;
  527|     11|            break;
  528|      7|        case SEC_OID_ANSIX962_ECDSA_SHA512_SIGNATURE:
  ------------------
  |  Branch (528:9): [True: 7, False: 8.92k]
  ------------------
  529|     11|        case SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (529:9): [True: 4, False: 8.92k]
  ------------------
  530|     11|            *hashalg = SEC_OID_SHA512;
  531|     11|            break;
  532|       |
  533|       |        /* what about normal DSA? */
  534|      0|        case SEC_OID_ANSIX9_DSA_SIGNATURE_WITH_SHA1_DIGEST:
  ------------------
  |  Branch (534:9): [True: 0, False: 8.93k]
  ------------------
  535|      0|        case SEC_OID_BOGUS_DSA_SIGNATURE_WITH_SHA1_DIGEST:
  ------------------
  |  Branch (535:9): [True: 0, False: 8.93k]
  ------------------
  536|      0|        case SEC_OID_ANSIX962_ECDSA_SHA1_SIGNATURE:
  ------------------
  |  Branch (536:9): [True: 0, False: 8.93k]
  ------------------
  537|      0|            *hashalg = SEC_OID_SHA1;
  538|      0|            break;
  539|      0|        case SEC_OID_MISSI_DSS:
  ------------------
  |  Branch (539:9): [True: 0, False: 8.93k]
  ------------------
  540|      0|        case SEC_OID_MISSI_KEA_DSS:
  ------------------
  |  Branch (540:9): [True: 0, False: 8.93k]
  ------------------
  541|      0|        case SEC_OID_MISSI_KEA_DSS_OLD:
  ------------------
  |  Branch (541:9): [True: 0, False: 8.93k]
  ------------------
  542|      0|        case SEC_OID_MISSI_DSS_OLD:
  ------------------
  |  Branch (542:9): [True: 0, False: 8.93k]
  ------------------
  543|      0|            *mechp = CKM_DSA_SHA1;
  ------------------
  |  |  746|      0|#define CKM_DSA_SHA1 0x00000012UL
  ------------------
  544|      0|            *hashalg = SEC_OID_SHA1;
  545|      0|            break;
  546|      0|        case SEC_OID_ANSIX962_ECDSA_SIGNATURE_RECOMMENDED_DIGEST:
  ------------------
  |  Branch (546:9): [True: 0, False: 8.93k]
  ------------------
  547|       |            /* This is an EC algorithm. Recommended means the largest
  548|       |             * hash algorithm that is not reduced by the keysize of
  549|       |             * the EC algorithm. Note that key strength is in bytes and
  550|       |             * algorithms are specified in bits. Never use an algorithm
  551|       |             * weaker than sha1. */
  552|      0|            len = SECKEY_PublicKeyStrength(key);
  553|      0|            if (len < 28) { /* 28 bytes == 224 bits */
  ------------------
  |  Branch (553:17): [True: 0, False: 0]
  ------------------
  554|      0|                *hashalg = SEC_OID_SHA1;
  555|      0|            } else if (len < 32) { /* 32 bytes == 256 bits */
  ------------------
  |  Branch (555:24): [True: 0, False: 0]
  ------------------
  556|      0|                *hashalg = SEC_OID_SHA224;
  557|      0|            } else if (len < 48) { /* 48 bytes == 384 bits */
  ------------------
  |  Branch (557:24): [True: 0, False: 0]
  ------------------
  558|      0|                *hashalg = SEC_OID_SHA256;
  559|      0|            } else if (len < 64) { /* 48 bytes == 512 bits */
  ------------------
  |  Branch (559:24): [True: 0, False: 0]
  ------------------
  560|      0|                *hashalg = SEC_OID_SHA384;
  561|      0|            } else {
  562|       |                /* use the largest in this case */
  563|      0|                *hashalg = SEC_OID_SHA512;
  564|      0|            }
  565|      0|            *mechp = sec_ECDSAGetCombinedMech(*hashalg);
  566|      0|            break;
  567|      0|        case SEC_OID_ANSIX962_ECDSA_SIGNATURE_SPECIFIED_DIGEST:
  ------------------
  |  Branch (567:9): [True: 0, False: 8.93k]
  ------------------
  568|      0|            if (param == NULL) {
  ------------------
  |  Branch (568:17): [True: 0, False: 0]
  ------------------
  569|      0|                PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  570|      0|                return SECFailure;
  571|      0|            }
  572|      0|            arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   63|      0|#define PORT_NewArena PORT_NewArena_Util
  ------------------
                          arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|      0|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  573|      0|            if (arena == NULL) {
  ------------------
  |  Branch (573:17): [True: 0, False: 0]
  ------------------
  574|      0|                return SECFailure;
  575|      0|            }
  576|      0|            rv = SEC_QuickDERDecodeItem(arena, &oid, hashParameterTemplate, param);
  ------------------
  |  |  102|      0|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  577|      0|            if (rv == SECSuccess) {
  ------------------
  |  Branch (577:17): [True: 0, False: 0]
  ------------------
  578|      0|                *hashalg = SECOID_FindOIDTag(&oid);
  ------------------
  |  |  117|      0|#define SECOID_FindOIDTag SECOID_FindOIDTag_Util
  ------------------
  579|      0|            }
  580|      0|            PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |   61|      0|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                          PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  581|      0|            if (rv != SECSuccess) {
  ------------------
  |  Branch (581:17): [True: 0, False: 0]
  ------------------
  582|      0|                return rv;
  583|      0|            }
  584|       |            /* only accept hash algorithms */
  585|      0|            if (HASH_GetHashTypeByOidTag(*hashalg) == HASH_AlgNULL) {
  ------------------
  |  |  125|      0|#define HASH_GetHashTypeByOidTag HASH_GetHashTypeByOidTag_Util
  ------------------
  |  Branch (585:17): [True: 0, False: 0]
  ------------------
  586|       |                /* error set by HASH_GetHashTypeByOidTag */
  587|      0|                return SECFailure;
  588|      0|            }
  589|      0|            *mechp = sec_ECDSAGetCombinedMech(*hashalg);
  590|      0|            break;
  591|       |        /* we don't implement MD4 hashes */
  592|      0|        case SEC_OID_PKCS1_MD4_WITH_RSA_ENCRYPTION:
  ------------------
  |  Branch (592:9): [True: 0, False: 8.93k]
  ------------------
  593|      3|        default:
  ------------------
  |  Branch (593:9): [True: 3, False: 8.92k]
  ------------------
  594|      3|            *mechp = CKM_INVALID_MECHANISM;
  ------------------
  |  |  155|      3|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  595|      3|            PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
  ------------------
  |  |   65|      3|#define PORT_SetError PORT_SetError_Util
  ------------------
  596|      3|            return SECFailure;
  597|  8.93k|    }
  598|       |
  599|  8.91k|    encalg = sec_GetEncAlgFromSigAlg(sigAlg);
  600|  8.91k|    if (encalg == SEC_OID_UNKNOWN) {
  ------------------
  |  Branch (600:9): [True: 0, False: 8.91k]
  ------------------
  601|      0|        *mechp = CKM_INVALID_MECHANISM;
  ------------------
  |  |  155|      0|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  602|      0|        SECITEM_FreeItem(mechparamsp, PR_FALSE);
  ------------------
  |  |  108|      0|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(mechparamsp, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  603|      0|        return SECFailure;
  604|      0|    }
  605|  8.91k|    *encalgp = encalg;
  606|       |    /* for testing, we want to be able to turn off combo signatures to
  607|       |     * 1) make sure the fallback code is working correctly so we know
  608|       |     * we can handle cases where the fallback doesn't work.
  609|       |     * 2) make sure that the combo code is compatible with the non-combo
  610|       |     * versions.
  611|       |     * We know if we are signing or verifying based on the value of 'key'.
  612|       |     * Since key is a public key, then it's set to NULL for signing */
  613|  8.91k|    evp = PR_GetEnvSecure("NSS_COMBO_SIGNATURES");
  614|  8.91k|    if (evp) {
  ------------------
  |  Branch (614:9): [True: 0, False: 8.91k]
  ------------------
  615|      0|        if (PORT_Strcasecmp(evp, "none") == 0) {
  ------------------
  |  |  184|      0|#define PORT_Strcasecmp PL_strcasecmp
  ------------------
  |  Branch (615:13): [True: 0, False: 0]
  ------------------
  616|      0|            *mechp = CKM_INVALID_MECHANISM;
  ------------------
  |  |  155|      0|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  617|      0|        } else if (key && (PORT_Strcasecmp(evp, "signonly") == 0)) {
  ------------------
  |  |  184|      0|#define PORT_Strcasecmp PL_strcasecmp
  ------------------
  |  Branch (617:20): [True: 0, False: 0]
  |  Branch (617:27): [True: 0, False: 0]
  ------------------
  618|      0|            *mechp = CKM_INVALID_MECHANISM;
  ------------------
  |  |  155|      0|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  619|      0|        } else if (!key && (PORT_Strcasecmp(evp, "vfyonly") == 0)) {
  ------------------
  |  |  184|      0|#define PORT_Strcasecmp PL_strcasecmp
  ------------------
  |  Branch (619:20): [True: 0, False: 0]
  |  Branch (619:28): [True: 0, False: 0]
  ------------------
  620|      0|            *mechp = CKM_INVALID_MECHANISM;
  ------------------
  |  |  155|      0|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  621|      0|        }
  622|       |        /* anything else we take as use combo, which is the default */
  623|      0|    }
  624|       |
  625|  8.91k|    return SECSuccess;
  626|  8.91k|}
vfy_ImportPublicKey:
  630|  4.40k|{
  631|  4.40k|    PK11SlotInfo *slot;
  632|  4.40k|    CK_OBJECT_HANDLE objID;
  633|       |
  634|  4.40k|    if (cx->key->pkcs11Slot &&
  ------------------
  |  Branch (634:9): [True: 0, False: 4.40k]
  ------------------
  635|  4.40k|        PK11_DoesMechanismFlag(cx->key->pkcs11Slot,
  ------------------
  |  Branch (635:9): [True: 0, False: 0]
  ------------------
  636|      0|                               cx->mech, CKF_VERIFY)) {
  ------------------
  |  | 1358|      0|#define CKF_VERIFY 0x00002000
  ------------------
  637|      0|        return SECSuccess;
  638|      0|    }
  639|  4.40k|    slot = PK11_GetBestSlotWithAttributes(cx->mech, CKF_VERIFY, 0, cx->wincx);
  ------------------
  |  | 1358|  4.40k|#define CKF_VERIFY 0x00002000
  ------------------
  640|  4.40k|    if (slot == NULL) {
  ------------------
  |  Branch (640:9): [True: 0, False: 4.40k]
  ------------------
  641|      0|        return SECFailure; /* can't find a slot, fall back to
  642|       |                            * normal processing */
  643|      0|    }
  644|  4.40k|    objID = PK11_ImportPublicKey(slot, cx->key, PR_FALSE);
  ------------------
  |  |  438|  4.40k|#define PR_FALSE 0
  ------------------
  645|  4.40k|    PK11_FreeSlot(slot);
  646|  4.40k|    return objID == CK_INVALID_HANDLE ? SECFailure : SECSuccess;
  ------------------
  |  |   78|  4.40k|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (646:12): [True: 79, False: 4.32k]
  ------------------
  647|  4.40k|}
VFY_DestroyContext:
  885|  4.40k|{
  886|  4.40k|    if (cx) {
  ------------------
  |  Branch (886:9): [True: 4.40k, False: 0]
  ------------------
  887|  4.40k|        if (cx->hashcx != NULL) {
  ------------------
  |  Branch (887:13): [True: 40, False: 4.36k]
  ------------------
  888|     40|            (*cx->hashobj->destroy)(cx->hashcx, PR_TRUE);
  ------------------
  |  |  437|     40|#define PR_TRUE 1
  ------------------
  889|     40|            cx->hashcx = NULL;
  890|     40|        }
  891|  4.40k|        if (cx->vfycx != NULL) {
  ------------------
  |  Branch (891:13): [True: 0, False: 4.40k]
  ------------------
  892|      0|            (void)PK11_DestroyContext(cx->vfycx, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  893|      0|            cx->vfycx = NULL;
  894|      0|        }
  895|  4.40k|        if (cx->key) {
  ------------------
  |  Branch (895:13): [True: 4.40k, False: 0]
  ------------------
  896|  4.40k|            SECKEY_DestroyPublicKey(cx->key);
  897|  4.40k|        }
  898|  4.40k|        if (cx->pkcs1RSADigestInfo) {
  ------------------
  |  Branch (898:13): [True: 0, False: 4.40k]
  ------------------
  899|      0|            PORT_Free(cx->pkcs1RSADigestInfo);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  900|      0|        }
  901|  4.40k|        SECITEM_FreeItem(&cx->mechparams, PR_FALSE);
  ------------------
  |  |  108|  4.40k|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(&cx->mechparams, PR_FALSE);
  ------------------
  |  |  438|  4.40k|#define PR_FALSE 0
  ------------------
  902|  4.40k|        if (freeit) {
  ------------------
  |  Branch (902:13): [True: 4.40k, False: 0]
  ------------------
  903|  4.40k|            PORT_ZFree(cx, sizeof(VFYContext));
  ------------------
  |  |   75|  4.40k|#define PORT_ZFree PORT_ZFree_Util
  ------------------
  904|  4.40k|        }
  905|  4.40k|    }
  906|  4.40k|}
VFY_Begin:
  910|     40|{
  911|     40|    if (cx->hashcx != NULL) {
  ------------------
  |  Branch (911:9): [True: 0, False: 40]
  ------------------
  912|      0|        (*cx->hashobj->destroy)(cx->hashcx, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  913|      0|        cx->hashcx = NULL;
  914|      0|    }
  915|     40|    if (cx->vfycx != NULL) {
  ------------------
  |  Branch (915:9): [True: 0, False: 40]
  ------------------
  916|      0|        (void)PK11_DestroyContext(cx->vfycx, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  917|      0|        cx->vfycx = NULL;
  918|      0|    }
  919|     40|    if (cx->mech != CKM_INVALID_MECHANISM) {
  ------------------
  |  |  155|     40|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  |  Branch (919:9): [True: 0, False: 40]
  ------------------
  920|      0|        cx->vfycx = PK11_CreateContextByPubKey(cx->mech, CKA_VERIFY, cx->key,
  ------------------
  |  |  553|      0|#define CKA_VERIFY 0x0000010AUL
  ------------------
  921|      0|                                               &cx->mechparams, cx->wincx);
  922|      0|        if (!cx->vfycx)
  ------------------
  |  Branch (922:13): [True: 0, False: 0]
  ------------------
  923|      0|            return SECFailure;
  924|      0|        return SECSuccess;
  925|      0|    }
  926|     40|    cx->hashobj = HASH_GetHashObjectByOidTag(cx->hashAlg);
  927|     40|    if (!cx->hashobj)
  ------------------
  |  Branch (927:9): [True: 0, False: 40]
  ------------------
  928|      0|        return SECFailure; /* error code is set */
  929|       |
  930|     40|    cx->hashcx = (*cx->hashobj->create)();
  931|     40|    if (cx->hashcx == NULL)
  ------------------
  |  Branch (931:9): [True: 0, False: 40]
  ------------------
  932|      0|        return SECFailure;
  933|       |
  934|     40|    (*cx->hashobj->begin)(cx->hashcx);
  935|     40|    return SECSuccess;
  936|     40|}
VFY_Update:
  940|     40|{
  941|     40|    if (cx->hashcx == NULL) {
  ------------------
  |  Branch (941:9): [True: 0, False: 40]
  ------------------
  942|      0|        if (cx->vfycx == NULL) {
  ------------------
  |  Branch (942:13): [True: 0, False: 0]
  ------------------
  943|      0|            PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  944|      0|            return SECFailure;
  945|      0|        }
  946|      0|        return PK11_DigestOp(cx->vfycx, input, inputLen);
  947|      0|    }
  948|     40|    (*cx->hashobj->update)(cx->hashcx, input, inputLen);
  949|     40|    return SECSuccess;
  950|     40|}
VFY_EndWithSignature:
  976|     40|{
  977|     40|    unsigned char final[HASH_LENGTH_MAX];
  978|     40|    unsigned part;
  979|     40|    SECStatus rv;
  980|       |
  981|       |    /* make sure our signature is set (either previously nor now) */
  982|     40|    if (sig) {
  ------------------
  |  Branch (982:9): [True: 0, False: 40]
  ------------------
  983|      0|        rv = vfy_SetPKCS11SigFromX509Sig(cx, sig);
  984|      0|        if (rv != SECSuccess) {
  ------------------
  |  Branch (984:13): [True: 0, False: 0]
  ------------------
  985|      0|            return SECFailure;
  986|      0|        }
  987|     40|    } else if (cx->hasSignature == PR_FALSE) {
  ------------------
  |  |  438|     40|#define PR_FALSE 0
  ------------------
  |  Branch (987:16): [True: 0, False: 40]
  ------------------
  988|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  989|      0|        return SECFailure;
  990|      0|    }
  991|       |
  992|     40|    if (cx->hashcx == NULL) {
  ------------------
  |  Branch (992:9): [True: 0, False: 40]
  ------------------
  993|      0|        unsigned int dummy;
  994|      0|        if (cx->vfycx == NULL) {
  ------------------
  |  Branch (994:13): [True: 0, False: 0]
  ------------------
  995|      0|            PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  996|      0|            return SECFailure;
  997|      0|        }
  998|      0|        return PK11_DigestFinal(cx->vfycx, cx->u.gensig, &dummy,
  999|      0|                                cx->signatureLen);
 1000|      0|    }
 1001|     40|    (*cx->hashobj->end)(cx->hashcx, final, &part, sizeof(final));
 1002|     40|    SECItem gensig = { siBuffer, cx->u.gensig, cx->signatureLen };
 1003|     40|    SECItem hash = { siBuffer, final, part };
 1004|     40|    PORT_Assert(part <= sizeof(final));
  ------------------
  |  |  120|     40|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     40|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 40, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1005|       |    /* handle the algorithm specific final call */
 1006|     40|    switch (cx->key->keyType) {
 1007|     35|        case ecKey:
  ------------------
  |  Branch (1007:9): [True: 35, False: 5]
  ------------------
 1008|     40|        case dsaKey:
  ------------------
  |  Branch (1008:9): [True: 5, False: 35]
  ------------------
 1009|     40|            if (PK11_Verify(cx->key, &gensig, &hash, cx->wincx) != SECSuccess) {
  ------------------
  |  Branch (1009:17): [True: 40, False: 0]
  ------------------
 1010|     40|                PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|     40|#define PORT_SetError PORT_SetError_Util
  ------------------
 1011|     40|                return SECFailure;
 1012|     40|            }
 1013|      0|            break;
 1014|      0|        case rsaKey:
  ------------------
  |  Branch (1014:9): [True: 0, False: 40]
  ------------------
 1015|      0|            if (cx->encAlg == SEC_OID_PKCS1_RSA_PSS_SIGNATURE) {
  ------------------
  |  Branch (1015:17): [True: 0, False: 0]
  ------------------
 1016|      0|                if (PK11_VerifyWithMechanism(cx->key, CKM_RSA_PKCS_PSS,
  ------------------
  |  |  741|      0|#define CKM_RSA_PKCS_PSS 0x0000000DUL
  ------------------
  |  Branch (1016:21): [True: 0, False: 0]
  ------------------
 1017|      0|                                             &cx->mechparams, &gensig, &hash,
 1018|      0|                                             cx->wincx) != SECSuccess) {
 1019|      0|                    PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1020|      0|                    return SECFailure;
 1021|      0|                }
 1022|      0|            } else {
 1023|      0|                if (sig) {
  ------------------
  |  Branch (1023:21): [True: 0, False: 0]
  ------------------
 1024|      0|                    SECOidTag hashid;
 1025|      0|                    PORT_Assert(cx->hashAlg != SEC_OID_UNKNOWN);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1026|      0|                    rv = recoverPKCS1DigestInfo(cx->hashAlg, &hashid,
 1027|      0|                                                &cx->pkcs1RSADigestInfo,
 1028|      0|                                                &cx->pkcs1RSADigestInfoLen,
 1029|      0|                                                cx->key,
 1030|      0|                                                sig, cx->wincx);
 1031|      0|                    if (rv != SECSuccess) {
  ------------------
  |  Branch (1031:25): [True: 0, False: 0]
  ------------------
 1032|      0|                        return SECFailure;
 1033|      0|                    }
 1034|      0|                    PORT_Assert(cx->hashAlg == hashid);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1035|      0|                }
 1036|      0|                return verifyPKCS1DigestInfo(cx, &hash);
 1037|      0|            }
 1038|      0|            break;
 1039|      0|        default:
  ------------------
  |  Branch (1039:9): [True: 0, False: 40]
  ------------------
 1040|      0|            PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1041|      0|            return SECFailure; /* shouldn't happen */
 1042|     40|    }
 1043|      0|    return SECSuccess;
 1044|     40|}
VFY_End:
 1048|     40|{
 1049|     40|    return VFY_EndWithSignature(cx, NULL);
 1050|     40|}
VFY_VerifyDataWithAlgorithmID:
 1215|  4.44k|{
 1216|  4.44k|    SECOidTag encAlg, hashAlg;
 1217|  4.44k|    SECOidTag sigAlg = SECOID_GetAlgorithmTag((SECAlgorithmID *)sigAlgorithm);
  ------------------
  |  |  119|  4.44k|#define SECOID_GetAlgorithmTag SECOID_GetAlgorithmTag_Util
  ------------------
 1218|  4.44k|    CK_MECHANISM_TYPE mech;
 1219|  4.44k|    SECItem mechparams;
 1220|  4.44k|    SECStatus rv = sec_DecodeSigAlg(key, sigAlg,
 1221|  4.44k|                                    &sigAlgorithm->parameters, &encAlg, &hashAlg,
 1222|  4.44k|                                    &mech, &mechparams);
 1223|  4.44k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1223:9): [True: 0, False: 4.44k]
  ------------------
 1224|      0|        return rv;
 1225|      0|    }
 1226|  4.44k|    return vfy_VerifyData(buf, len, key, sig, encAlg, hashAlg, mech,
 1227|  4.44k|                          &mechparams, hash, wincx);
 1228|  4.44k|}
secvfy.c:sec_RSAPSSGetCombinedMech:
  331|    157|{
  332|    157|    switch (hashalg) {
  333|      8|        case SEC_OID_SHA1:
  ------------------
  |  Branch (333:9): [True: 8, False: 149]
  ------------------
  334|      8|            return CKM_SHA1_RSA_PKCS_PSS;
  ------------------
  |  |  742|      8|#define CKM_SHA1_RSA_PKCS_PSS 0x0000000EUL
  ------------------
  335|      0|        case SEC_OID_SHA224:
  ------------------
  |  Branch (335:9): [True: 0, False: 157]
  ------------------
  336|      0|            return CKM_SHA224_RSA_PKCS_PSS;
  ------------------
  |  |  779|      0|#define CKM_SHA224_RSA_PKCS_PSS 0x00000047UL
  ------------------
  337|    100|        case SEC_OID_SHA256:
  ------------------
  |  Branch (337:9): [True: 100, False: 57]
  ------------------
  338|    100|            return CKM_SHA256_RSA_PKCS_PSS;
  ------------------
  |  |  773|    100|#define CKM_SHA256_RSA_PKCS_PSS 0x00000043UL
  ------------------
  339|     18|        case SEC_OID_SHA384:
  ------------------
  |  Branch (339:9): [True: 18, False: 139]
  ------------------
  340|     18|            return CKM_SHA384_RSA_PKCS_PSS;
  ------------------
  |  |  774|     18|#define CKM_SHA384_RSA_PKCS_PSS 0x00000044UL
  ------------------
  341|     31|        case SEC_OID_SHA512:
  ------------------
  |  Branch (341:9): [True: 31, False: 126]
  ------------------
  342|     31|            return CKM_SHA512_RSA_PKCS_PSS;
  ------------------
  |  |  775|     31|#define CKM_SHA512_RSA_PKCS_PSS 0x00000045UL
  ------------------
  343|      0|        default:
  ------------------
  |  Branch (343:9): [True: 0, False: 157]
  ------------------
  344|      0|            break;
  345|    157|    }
  346|      0|    return CKM_INVALID_MECHANISM;
  ------------------
  |  |  155|      0|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  347|    157|}
secvfy.c:vfy_CreateContext:
  721|  4.44k|{
  722|  4.44k|    VFYContext *cx;
  723|  4.44k|    SECStatus rv;
  724|  4.44k|    KeyType type;
  725|  4.44k|    PRUint32 policyFlags;
  726|  4.44k|    PRInt32 optFlags;
  727|       |
  728|       |    /* make sure the encryption algorithm matches the key type */
  729|       |    /* RSA-PSS algorithm can be used with both rsaKey and rsaPssKey */
  730|  4.44k|    type = seckey_GetKeyType(encAlg);
  731|  4.44k|    if ((key->keyType != type) &&
  ------------------
  |  Branch (731:9): [True: 78, False: 4.37k]
  ------------------
  732|  4.44k|        ((key->keyType != rsaKey) || (type != rsaPssKey))) {
  ------------------
  |  Branch (732:10): [True: 0, False: 78]
  |  Branch (732:38): [True: 0, False: 78]
  ------------------
  733|      0|        SECITEM_FreeItem(mechparamsp, PR_FALSE);
  ------------------
  |  |  108|      0|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(mechparamsp, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  734|      0|        PORT_SetError(SEC_ERROR_PKCS7_KEYALG_MISMATCH);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  735|      0|        return NULL;
  736|      0|    }
  737|  4.44k|    if (NSS_OptionGet(NSS_KEY_SIZE_POLICY_FLAGS, &optFlags) != SECFailure) {
  ------------------
  |  |  317|  4.44k|#define NSS_KEY_SIZE_POLICY_FLAGS 0x00e
  ------------------
  |  Branch (737:9): [True: 4.44k, False: 0]
  ------------------
  738|  4.44k|        if (optFlags & NSS_KEY_SIZE_POLICY_VERIFY_FLAG) {
  ------------------
  |  |  322|  4.44k|#define NSS_KEY_SIZE_POLICY_VERIFY_FLAG 2
  ------------------
  |  Branch (738:13): [True: 4.44k, False: 0]
  ------------------
  739|  4.44k|            rv = SECKEY_EnforceKeySize(key->keyType,
  740|  4.44k|                                       SECKEY_PublicKeyStrengthInBits(key),
  741|  4.44k|                                       SEC_ERROR_SIGNATURE_ALGORITHM_DISABLED);
  742|  4.44k|            if (rv != SECSuccess) {
  ------------------
  |  Branch (742:17): [True: 46, False: 4.40k]
  ------------------
  743|     46|                SECITEM_FreeItem(mechparamsp, PR_FALSE);
  ------------------
  |  |  108|     46|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                              SECITEM_FreeItem(mechparamsp, PR_FALSE);
  ------------------
  |  |  438|     46|#define PR_FALSE 0
  ------------------
  744|     46|                return NULL;
  745|     46|            }
  746|  4.44k|        }
  747|  4.44k|    }
  748|       |    /* check the policy on the encryption algorithm */
  749|  4.40k|    if ((NSS_GetAlgorithmPolicy(encAlg, &policyFlags) == SECFailure) ||
  ------------------
  |  Branch (749:9): [True: 0, False: 4.40k]
  ------------------
  750|  4.40k|        !(policyFlags & NSS_USE_ALG_IN_ANY_SIGNATURE)) {
  ------------------
  |  |  575|  4.40k|#define NSS_USE_ALG_IN_ANY_SIGNATURE 0x00000020    /* used in any signature */
  ------------------
  |  Branch (750:9): [True: 0, False: 4.40k]
  ------------------
  751|      0|        SECITEM_FreeItem(mechparamsp, PR_FALSE);
  ------------------
  |  |  108|      0|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(mechparamsp, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  752|      0|        PORT_SetError(SEC_ERROR_SIGNATURE_ALGORITHM_DISABLED);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  753|      0|        return NULL;
  754|      0|    }
  755|       |
  756|  4.40k|    cx = (VFYContext *)PORT_ZAlloc(sizeof(VFYContext));
  ------------------
  |  |   72|  4.40k|#define PORT_ZAlloc PORT_ZAlloc_Util
  ------------------
  757|  4.40k|    if (cx == NULL) {
  ------------------
  |  Branch (757:9): [True: 0, False: 4.40k]
  ------------------
  758|       |        /* after this point mechparamsp is 'owned' by the context and will be
  759|       |         * freed by Destroy context for any other failures here */
  760|      0|        SECITEM_FreeItem(mechparamsp, PR_FALSE);
  ------------------
  |  |  108|      0|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(mechparamsp, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  761|      0|        goto loser;
  762|      0|    }
  763|       |
  764|  4.40k|    cx->wincx = wincx;
  765|  4.40k|    cx->hasSignature = (sig != NULL);
  766|  4.40k|    cx->encAlg = encAlg;
  767|  4.40k|    cx->hashAlg = hashAlg;
  768|  4.40k|    cx->mech = mech;
  769|  4.40k|    if (mechparamsp) {
  ------------------
  |  Branch (769:9): [True: 4.40k, False: 0]
  ------------------
  770|  4.40k|        cx->mechparams = *mechparamsp;
  771|  4.40k|    } else {
  772|       |        /* probably needs to have a call to set the default
  773|       |         * paramseters based on hashAlg and encAlg */
  774|      0|        cx->mechparams.data = NULL;
  775|      0|        cx->mechparams.len = 0;
  776|      0|    }
  777|  4.40k|    cx->key = SECKEY_CopyPublicKey(key);
  778|  4.40k|    cx->pkcs1RSADigestInfo = NULL;
  779|  4.40k|    if (mech != CKM_INVALID_MECHANISM) {
  ------------------
  |  |  155|  4.40k|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  |  Branch (779:9): [True: 4.40k, False: 3]
  ------------------
  780|  4.40k|        rv = vfy_ImportPublicKey(cx);
  781|       |        /* if we can't import the key, then we probably can't
  782|       |         * support the requested combined mechanism, fallback
  783|       |         * to the non-combined method */
  784|  4.40k|        if (rv != SECSuccess) {
  ------------------
  |  Branch (784:13): [True: 79, False: 4.32k]
  ------------------
  785|     79|            cx->mech = mech = CKM_INVALID_MECHANISM;
  ------------------
  |  |  155|     79|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  786|     79|        }
  787|  4.40k|    }
  788|  4.40k|    if (sig) {
  ------------------
  |  Branch (788:9): [True: 4.40k, False: 0]
  ------------------
  789|       |        /* sigh, if we are prehashing, we still need to do verifyRecover
  790|       |         * recover for RSA PKCS #1 */
  791|  4.40k|        if ((mech == CKM_INVALID_MECHANISM || prehash) && (type == rsaKey)) {
  ------------------
  |  |  155|  8.80k|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  |  Branch (791:14): [True: 82, False: 4.32k]
  |  Branch (791:47): [True: 0, False: 4.32k]
  |  Branch (791:59): [True: 5, False: 77]
  ------------------
  792|       |            /* in traditional rsa PKCS #1, we use verify recover to get
  793|       |             * the encoded RSADigestInfo. In all other cases we just
  794|       |             * stash the signature encoded in PKCS#11 in our context */
  795|      5|            rv = recoverPKCS1DigestInfo(hashAlg, &cx->hashAlg,
  796|      5|                                        &cx->pkcs1RSADigestInfo,
  797|      5|                                        &cx->pkcs1RSADigestInfoLen,
  798|      5|                                        cx->key,
  799|      5|                                        sig, wincx);
  800|  4.39k|        } else {
  801|       |            /* at this point hashAlg should be known. Only the RSA case
  802|       |             * enters here with hashAlg unknown, and it's found out
  803|       |             * above */
  804|  4.39k|            PORT_Assert(hashAlg != SEC_OID_UNKNOWN);
  ------------------
  |  |  120|  4.39k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  4.39k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 4.39k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  805|  4.39k|            rv = vfy_SetPKCS11SigFromX509Sig(cx, sig);
  806|  4.39k|        }
  807|  4.40k|        if (rv != SECSuccess) {
  ------------------
  |  Branch (807:13): [True: 54, False: 4.34k]
  ------------------
  808|     54|            goto loser;
  809|     54|        }
  810|  4.40k|    }
  811|       |
  812|       |    /* check hash alg again, RSA may have changed it.*/
  813|  4.34k|    if (HASH_GetHashTypeByOidTag(cx->hashAlg) == HASH_AlgNULL) {
  ------------------
  |  |  125|  4.34k|#define HASH_GetHashTypeByOidTag HASH_GetHashTypeByOidTag_Util
  ------------------
  |  Branch (813:9): [True: 0, False: 4.34k]
  ------------------
  814|       |        /* error set by HASH_GetHashTypeByOidTag */
  815|      0|        goto loser;
  816|      0|    }
  817|       |    /* check the policy on the hash algorithm. Do this after
  818|       |     * the rsa decode because some uses of this function get hash implicitly
  819|       |     * from the RSA signature itself. */
  820|  4.34k|    if ((NSS_GetAlgorithmPolicy(cx->hashAlg, &policyFlags) == SECFailure) ||
  ------------------
  |  Branch (820:9): [True: 0, False: 4.34k]
  ------------------
  821|  4.34k|        !(policyFlags & NSS_USE_ALG_IN_ANY_SIGNATURE)) {
  ------------------
  |  |  575|  4.34k|#define NSS_USE_ALG_IN_ANY_SIGNATURE 0x00000020    /* used in any signature */
  ------------------
  |  Branch (821:9): [True: 0, False: 4.34k]
  ------------------
  822|      0|        PORT_SetError(SEC_ERROR_SIGNATURE_ALGORITHM_DISABLED);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  823|      0|        goto loser;
  824|      0|    }
  825|       |
  826|  4.34k|    if (hash) {
  ------------------
  |  Branch (826:9): [True: 4.34k, False: 0]
  ------------------
  827|  4.34k|        *hash = cx->hashAlg;
  828|  4.34k|    }
  829|  4.34k|    return cx;
  830|       |
  831|     54|loser:
  832|     54|    if (cx) {
  ------------------
  |  Branch (832:9): [True: 54, False: 0]
  ------------------
  833|     54|        VFY_DestroyContext(cx, PR_TRUE);
  ------------------
  |  |  437|     54|#define PR_TRUE 1
  ------------------
  834|     54|    }
  835|     54|    return 0;
  836|  4.34k|}
secvfy.c:vfy_SetPKCS11SigFromX509Sig:
  655|  4.39k|{
  656|  4.39k|    unsigned int sigLen;
  657|       |
  658|       |    /* skip the legacy RSA PKCS #11 case, it's always handled separately */
  659|  4.39k|    if ((cx->key->keyType == rsaKey) && (cx->mech == CKM_INVALID_MECHANISM) &&
  ------------------
  |  |  155|  2.76k|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  |  Branch (659:9): [True: 2.76k, False: 1.62k]
  |  Branch (659:41): [True: 0, False: 2.76k]
  ------------------
  660|  4.39k|        (cx->encAlg != SEC_OID_PKCS1_RSA_PSS_SIGNATURE)) {
  ------------------
  |  Branch (660:9): [True: 0, False: 0]
  ------------------
  661|      0|        return SECSuccess;
  662|      0|    }
  663|       |
  664|  4.39k|    sigLen = checkedSignatureLen(cx->key);
  665|       |    /* Check signature length is within limits */
  666|  4.39k|    if (sigLen == 0) {
  ------------------
  |  Branch (666:9): [True: 2, False: 4.39k]
  ------------------
  667|       |        /* error set by checkedSignatureLen */
  668|      2|        return SECFailure;
  669|      2|    }
  670|  4.39k|    if (sigLen > sizeof(cx->u)) {
  ------------------
  |  Branch (670:9): [True: 0, False: 4.39k]
  ------------------
  671|      0|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  672|      0|        return SECFailure;
  673|      0|    }
  674|       |    /* save the authenticated length */
  675|  4.39k|    cx->signatureLen = sigLen;
  676|  4.39k|    switch (cx->encAlg) {
  677|  1.33k|        case SEC_OID_ANSIX9_DSA_SIGNATURE:
  ------------------
  |  Branch (677:9): [True: 1.33k, False: 3.05k]
  ------------------
  678|  1.62k|        case SEC_OID_ANSIX962_EC_PUBLIC_KEY:
  ------------------
  |  Branch (678:9): [True: 288, False: 4.10k]
  ------------------
  679|       |            /* decodeECorDSASignature will check sigLen == sig->len after padding */
  680|  1.62k|            return decodeECorDSASignature(cx->encAlg, sig, cx->u.buffer, sigLen);
  681|  2.76k|        default:
  ------------------
  |  Branch (681:9): [True: 2.76k, False: 1.62k]
  ------------------
  682|  2.76k|            break;
  683|  4.39k|    }
  684|       |    /* all other cases, no transform needed, just copy the signature */
  685|  2.76k|    if (sig->len != sigLen) {
  ------------------
  |  Branch (685:9): [True: 8, False: 2.76k]
  ------------------
  686|      8|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      8|#define PORT_SetError PORT_SetError_Util
  ------------------
  687|      8|        return SECFailure;
  688|      8|    }
  689|  2.76k|    PORT_Memcpy(cx->u.buffer, sig->data, sigLen);
  ------------------
  |  |  180|  2.76k|#define PORT_Memcpy memcpy
  ------------------
  690|  2.76k|    return SECSuccess;
  691|  2.76k|}
secvfy.c:checkedSignatureLen:
  175|  4.39k|{
  176|  4.39k|    unsigned int sigLen = SECKEY_SignatureLen(pubk);
  177|  4.39k|    if (sigLen == 0) {
  ------------------
  |  Branch (177:9): [True: 0, False: 4.39k]
  ------------------
  178|       |        /* Error set by SECKEY_SignatureLen */
  179|      0|        return sigLen;
  180|      0|    }
  181|  4.39k|    unsigned int maxSigLen;
  182|  4.39k|    switch (pubk->keyType) {
  183|  2.76k|        case rsaKey:
  ------------------
  |  Branch (183:9): [True: 2.76k, False: 1.62k]
  ------------------
  184|  2.76k|        case rsaPssKey:
  ------------------
  |  Branch (184:9): [True: 0, False: 4.39k]
  ------------------
  185|  2.76k|            maxSigLen = (RSA_MAX_MODULUS_BITS + 7) / 8;
  ------------------
  |  |  152|  2.76k|#define RSA_MAX_MODULUS_BITS 16384
  ------------------
  186|  2.76k|            break;
  187|  1.34k|        case dsaKey:
  ------------------
  |  Branch (187:9): [True: 1.34k, False: 3.05k]
  ------------------
  188|  1.34k|            maxSigLen = DSA_MAX_SIGNATURE_LEN;
  ------------------
  |  |   52|  1.34k|#define DSA_MAX_SIGNATURE_LEN (DSA_MAX_SUBPRIME_LEN * 2) /* Bytes */
  |  |  ------------------
  |  |  |  |   51|  1.34k|#define DSA_MAX_SUBPRIME_LEN 32                          /* Bytes */
  |  |  ------------------
  ------------------
  189|  1.34k|            break;
  190|    288|        case ecKey:
  ------------------
  |  Branch (190:9): [True: 288, False: 4.11k]
  ------------------
  191|    288|            maxSigLen = 2 * MAX_ECKEY_LEN;
  ------------------
  |  |   81|    288|#define MAX_ECKEY_LEN 72 /* Bytes */
  ------------------
  192|    288|            break;
  193|      0|        default:
  ------------------
  |  Branch (193:9): [True: 0, False: 4.39k]
  ------------------
  194|      0|            PORT_SetError(SEC_ERROR_UNSUPPORTED_KEYALG);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  195|      0|            return 0;
  196|  4.39k|    }
  197|  4.39k|    PORT_Assert(maxSigLen <= MAX_SIGNATURE_LEN);
  ------------------
  |  |  120|  4.39k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  4.39k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 4.39k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|  4.39k|    if (sigLen > maxSigLen) {
  ------------------
  |  Branch (198:9): [True: 2, False: 4.39k]
  ------------------
  199|      2|        PORT_SetError(SEC_ERROR_INVALID_KEY);
  ------------------
  |  |   65|      2|#define PORT_SetError PORT_SetError_Util
  ------------------
  200|      2|        return 0;
  201|      2|    }
  202|  4.39k|    return sigLen;
  203|  4.39k|}
secvfy.c:decodeECorDSASignature:
  213|  1.62k|{
  214|  1.62k|    SECItem *dsasig = NULL; /* also used for ECDSA */
  215|       |
  216|       |    /* Safety: Ensure algId is as expected and that signature size is within maxmimums */
  217|  1.62k|    if (algid == SEC_OID_ANSIX9_DSA_SIGNATURE) {
  ------------------
  |  Branch (217:9): [True: 1.33k, False: 288]
  ------------------
  218|  1.33k|        if (len > DSA_MAX_SIGNATURE_LEN) {
  ------------------
  |  |   52|  1.33k|#define DSA_MAX_SIGNATURE_LEN (DSA_MAX_SUBPRIME_LEN * 2) /* Bytes */
  |  |  ------------------
  |  |  |  |   51|  1.33k|#define DSA_MAX_SUBPRIME_LEN 32                          /* Bytes */
  |  |  ------------------
  ------------------
  |  Branch (218:13): [True: 0, False: 1.33k]
  ------------------
  219|      0|            goto loser;
  220|      0|        }
  221|  1.33k|    } else if (algid == SEC_OID_ANSIX962_EC_PUBLIC_KEY) {
  ------------------
  |  Branch (221:16): [True: 288, False: 0]
  ------------------
  222|    288|        if (len > MAX_ECKEY_LEN * 2) {
  ------------------
  |  |   81|    288|#define MAX_ECKEY_LEN 72 /* Bytes */
  ------------------
  |  Branch (222:13): [True: 0, False: 288]
  ------------------
  223|      0|            goto loser;
  224|      0|        }
  225|    288|    } else {
  226|      0|        goto loser;
  227|      0|    }
  228|       |
  229|       |    /* Decode and pad to length */
  230|  1.62k|    dsasig = DSAU_DecodeDerSigToLen((SECItem *)sig, len);
  231|  1.62k|    if (dsasig == NULL) {
  ------------------
  |  Branch (231:9): [True: 39, False: 1.58k]
  ------------------
  232|     39|        goto loser;
  233|     39|    }
  234|  1.58k|    if (dsasig->len != len) {
  ------------------
  |  Branch (234:9): [True: 0, False: 1.58k]
  ------------------
  235|      0|        SECITEM_FreeItem(dsasig, PR_TRUE);
  ------------------
  |  |  108|      0|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(dsasig, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  236|      0|        goto loser;
  237|      0|    }
  238|       |
  239|  1.58k|    PORT_Memcpy(dsig, dsasig->data, len);
  ------------------
  |  |  180|  1.58k|#define PORT_Memcpy memcpy
  ------------------
  240|  1.58k|    SECITEM_FreeItem(dsasig, PR_TRUE);
  ------------------
  |  |  108|  1.58k|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                  SECITEM_FreeItem(dsasig, PR_TRUE);
  ------------------
  |  |  437|  1.58k|#define PR_TRUE 1
  ------------------
  241|       |
  242|  1.58k|    return SECSuccess;
  243|       |
  244|     39|loser:
  245|     39|    PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|     39|#define PORT_SetError PORT_SetError_Util
  ------------------
  246|     39|    return SECFailure;
  247|  1.58k|}
secvfy.c:recoverPKCS1DigestInfo:
   45|      5|{
   46|      5|    SGNDigestInfo *di = NULL;
   47|      5|    SECItem it;
   48|      5|    PRBool rv = SECSuccess;
   49|       |
   50|      5|    PORT_Assert(digestAlgOut);
  ------------------
  |  |  120|      5|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      5|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   51|      5|    PORT_Assert(digestInfo);
  ------------------
  |  |  120|      5|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      5|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   52|      5|    PORT_Assert(digestInfoLen);
  ------------------
  |  |  120|      5|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      5|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   53|      5|    PORT_Assert(key);
  ------------------
  |  |  120|      5|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      5|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   54|      5|    PORT_Assert(key->keyType == rsaKey);
  ------------------
  |  |  120|      5|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      5|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   55|      5|    PORT_Assert(sig);
  ------------------
  |  |  120|      5|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      5|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   56|       |
   57|      5|    it.data = NULL;
   58|      5|    it.len = SECKEY_PublicKeyStrength(key);
   59|      5|    if (it.len != 0) {
  ------------------
  |  Branch (59:9): [True: 5, False: 0]
  ------------------
   60|      5|        it.data = (unsigned char *)PORT_Alloc(it.len);
  ------------------
  |  |   52|      5|#define PORT_Alloc PORT_Alloc_Util
  ------------------
   61|      5|    }
   62|      5|    if (it.len == 0 || it.data == NULL) {
  ------------------
  |  Branch (62:9): [True: 0, False: 5]
  |  Branch (62:24): [True: 0, False: 5]
  ------------------
   63|      0|        rv = SECFailure;
   64|      0|    }
   65|       |
   66|      5|    if (rv == SECSuccess) {
  ------------------
  |  Branch (66:9): [True: 5, False: 0]
  ------------------
   67|       |        /* decrypt the block */
   68|      5|        rv = PK11_VerifyRecover(key, sig, &it, wincx);
   69|      5|    }
   70|       |
   71|      5|    if (rv == SECSuccess) {
  ------------------
  |  Branch (71:9): [True: 0, False: 5]
  ------------------
   72|      0|        if (givenDigestAlg != SEC_OID_UNKNOWN) {
  ------------------
  |  Branch (72:13): [True: 0, False: 0]
  ------------------
   73|       |            /* We don't need to parse the DigestInfo if the caller gave us the
   74|       |             * digest algorithm to use. Later verifyPKCS1DigestInfo will verify
   75|       |             * that the DigestInfo identifies the given digest algorithm and
   76|       |             * that the DigestInfo is encoded absolutely correctly.
   77|       |             */
   78|      0|            *digestInfoLen = it.len;
   79|      0|            *digestInfo = (unsigned char *)it.data;
   80|      0|            *digestAlgOut = givenDigestAlg;
   81|      0|            return SECSuccess;
   82|      0|        }
   83|      0|    }
   84|       |
   85|      5|    if (rv == SECSuccess) {
  ------------------
  |  Branch (85:9): [True: 0, False: 5]
  ------------------
   86|       |        /* The caller didn't specify a digest algorithm to use, so choose the
   87|       |         * digest algorithm by parsing the AlgorithmIdentifier within the
   88|       |         * DigestInfo.
   89|       |         */
   90|      0|        di = SGN_DecodeDigestInfo(&it);
   91|      0|        if (!di) {
  ------------------
  |  Branch (91:13): [True: 0, False: 0]
  ------------------
   92|      0|            rv = SECFailure;
   93|      0|        }
   94|      0|    }
   95|       |
   96|      5|    if (rv == SECSuccess) {
  ------------------
  |  Branch (96:9): [True: 0, False: 5]
  ------------------
   97|      0|        *digestAlgOut = SECOID_GetAlgorithmTag(&di->digestAlgorithm);
  ------------------
  |  |  119|      0|#define SECOID_GetAlgorithmTag SECOID_GetAlgorithmTag_Util
  ------------------
   98|      0|        if (*digestAlgOut == SEC_OID_UNKNOWN) {
  ------------------
  |  Branch (98:13): [True: 0, False: 0]
  ------------------
   99|      0|            rv = SECFailure;
  100|      0|        }
  101|      0|    }
  102|       |
  103|      5|    if (di) {
  ------------------
  |  Branch (103:9): [True: 0, False: 5]
  ------------------
  104|      0|        SGN_DestroyDigestInfo(di);
  ------------------
  |  |  124|      0|#define SGN_DestroyDigestInfo SGN_DestroyDigestInfo_Util
  ------------------
  105|      0|    }
  106|       |
  107|      5|    if (rv == SECSuccess) {
  ------------------
  |  Branch (107:9): [True: 0, False: 5]
  ------------------
  108|      0|        *digestInfoLen = it.len;
  109|      0|        *digestInfo = (unsigned char *)it.data;
  110|      5|    } else {
  111|      5|        if (it.data) {
  ------------------
  |  Branch (111:13): [True: 5, False: 0]
  ------------------
  112|      5|            PORT_Free(it.data);
  ------------------
  |  |   60|      5|#define PORT_Free PORT_Free_Util
  ------------------
  113|      5|        }
  114|      5|        *digestInfo = NULL;
  115|      5|        *digestInfoLen = 0;
  116|      5|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      5|#define PORT_SetError PORT_SetError_Util
  ------------------
  117|      5|    }
  118|       |
  119|      5|    return rv;
  120|      5|}
secvfy.c:vfy_VerifyData:
 1167|  4.44k|{
 1168|  4.44k|    SECStatus rv;
 1169|  4.44k|    VFYContext *cx;
 1170|       |
 1171|  4.44k|    cx = vfy_CreateContext(key, sig, encAlg, hashAlg, mech, mechparamsp,
 1172|  4.44k|                           hash, PR_FALSE, wincx);
  ------------------
  |  |  438|  4.44k|#define PR_FALSE 0
  ------------------
 1173|  4.44k|    if (cx == NULL)
  ------------------
  |  Branch (1173:9): [True: 100, False: 4.34k]
  ------------------
 1174|    100|        return SECFailure;
 1175|       |
 1176|  4.34k|    rv = vfy_SingleShot(cx, buf, len);
 1177|       |
 1178|  4.34k|    VFY_DestroyContext(cx, PR_TRUE);
  ------------------
  |  |  437|  4.34k|#define PR_TRUE 1
  ------------------
 1179|  4.34k|    return rv;
 1180|  4.44k|}
secvfy.c:vfy_SingleShot:
  954|  4.34k|{
  955|  4.34k|    SECStatus rv;
  956|       |    /* if we have the combo mechanism, do a direct verify */
  957|  4.34k|    if (cx->mech != CKM_INVALID_MECHANISM) {
  ------------------
  |  |  155|  4.34k|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  |  Branch (957:9): [True: 4.30k, False: 40]
  ------------------
  958|  4.30k|        SECItem sig = { siBuffer, cx->u.gensig, cx->signatureLen };
  959|  4.30k|        SECItem data = { siBuffer, (unsigned char *)buf, len };
  960|  4.30k|        return PK11_VerifyWithMechanism(cx->key, cx->mech, &cx->mechparams,
  961|  4.30k|                                        &sig, &data, cx->wincx);
  962|  4.30k|    }
  963|     40|    rv = VFY_Begin(cx);
  964|     40|    if (rv != SECSuccess) {
  ------------------
  |  Branch (964:9): [True: 0, False: 40]
  ------------------
  965|      0|        return rv;
  966|      0|    }
  967|     40|    rv = VFY_Update(cx, (unsigned char *)buf, len);
  968|     40|    if (rv != SECSuccess) {
  ------------------
  |  Branch (968:9): [True: 0, False: 40]
  ------------------
  969|      0|        return rv;
  970|      0|    }
  971|     40|    return VFY_End(cx);
  972|     40|}

nssSlot_Destroy:
   33|  59.5k|{
   34|  59.5k|    if (slot) {
  ------------------
  |  Branch (34:9): [True: 59.5k, False: 0]
  ------------------
   35|  59.5k|        if (PR_ATOMIC_DECREMENT(&slot->base.refCount) == 0) {
  ------------------
  |  |  123|  59.5k|#define PR_ATOMIC_DECREMENT(val) __sync_sub_and_fetch(val, 1)
  ------------------
  |  Branch (35:13): [True: 2, False: 59.5k]
  ------------------
   36|      2|            PK11_FreeSlot(slot->pk11slot);
   37|      2|            PZ_DestroyLock(slot->base.lock);
  ------------------
  |  |  244|      2|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
   38|      2|            PZ_DestroyCondVar(slot->isPresentCondition);
  ------------------
  |  |  249|      2|#define PZ_DestroyCondVar(v) PR_DestroyCondVar((v))
  ------------------
   39|      2|            PZ_DestroyLock(slot->isPresentLock);
  ------------------
  |  |  244|      2|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
   40|      2|            return nssArena_Destroy(slot->base.arena);
   41|      2|        }
   42|  59.5k|    }
   43|  59.5k|    return PR_SUCCESS;
   44|  59.5k|}
nssSlot_AddRef:
   72|  59.5k|{
   73|  59.5k|    PR_ATOMIC_INCREMENT(&slot->base.refCount);
  ------------------
  |  |  122|  59.5k|#define PR_ATOMIC_INCREMENT(val) __sync_add_and_fetch(val, 1)
  ------------------
   74|  59.5k|    return slot;
   75|  59.5k|}
nssSlot_IsTokenPresent:
  118|  59.5k|{
  119|  59.5k|    CK_RV ckrv;
  120|  59.5k|    PRStatus nssrv;
  121|  59.5k|    NSSToken *nssToken = NULL;
  122|       |    /* XXX */
  123|  59.5k|    nssSession *session;
  124|  59.5k|    CK_SLOT_INFO slotInfo;
  125|  59.5k|    void *epv;
  126|  59.5k|    PRBool isPresent = PR_FALSE;
  ------------------
  |  |  438|  59.5k|#define PR_FALSE 0
  ------------------
  127|  59.5k|    PRBool doUpdateCachedCerts = PR_FALSE;
  ------------------
  |  |  438|  59.5k|#define PR_FALSE 0
  ------------------
  128|       |
  129|       |    /* permanent slots are always present unless they're disabled */
  130|  59.5k|    if (nssSlot_IsPermanent(slot)) {
  ------------------
  |  Branch (130:9): [True: 59.5k, False: 0]
  ------------------
  131|  59.5k|        return !PK11_IsDisabled(slot->pk11slot);
  132|  59.5k|    }
  133|       |
  134|       |    /* avoid repeated calls to check token status within set interval */
  135|      0|    PZ_Lock(slot->isPresentLock);
  ------------------
  |  |  245|      0|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  136|      0|    if (token_status_checked(slot)) {
  ------------------
  |  Branch (136:9): [True: 0, False: 0]
  ------------------
  137|      0|        CK_FLAGS ckFlags = slot->ckFlags;
  138|      0|        PZ_Unlock(slot->isPresentLock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  139|      0|        return ((ckFlags & CKF_TOKEN_PRESENT) != 0);
  ------------------
  |  |  131|      0|#define CKF_TOKEN_PRESENT 0x00000001UL    /* a token is there */
  ------------------
  140|      0|    }
  141|      0|    PZ_Unlock(slot->isPresentLock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  142|       |
  143|       |    /* First obtain the slot epv before we set up the condition
  144|       |     * variable, so we can just return if we couldn't get it. */
  145|      0|    epv = slot->epv;
  146|      0|    if (!epv) {
  ------------------
  |  Branch (146:9): [True: 0, False: 0]
  ------------------
  147|      0|        return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  148|      0|    }
  149|       |
  150|       |    /* set up condition so only one thread is active in this part of the code at a time */
  151|      0|    PZ_Lock(slot->isPresentLock);
  ------------------
  |  |  245|      0|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  152|      0|    while (slot->isPresentThread) {
  ------------------
  |  Branch (152:12): [True: 0, False: 0]
  ------------------
  153|      0|        PR_WaitCondVar(slot->isPresentCondition, PR_INTERVAL_NO_TIMEOUT);
  ------------------
  |  |   54|      0|#define PR_INTERVAL_NO_TIMEOUT 0xffffffffUL
  ------------------
  154|      0|    }
  155|       |    /* if we were one of multiple threads here, the first thread will have
  156|       |     * given us the answer, no need to make more queries of the token. */
  157|      0|    if (token_status_checked(slot)) {
  ------------------
  |  Branch (157:9): [True: 0, False: 0]
  ------------------
  158|      0|        CK_FLAGS ckFlags = slot->ckFlags;
  159|      0|        PZ_Unlock(slot->isPresentLock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  160|      0|        return ((ckFlags & CKF_TOKEN_PRESENT) != 0);
  ------------------
  |  |  131|      0|#define CKF_TOKEN_PRESENT 0x00000001UL    /* a token is there */
  ------------------
  161|      0|    }
  162|       |    /* this is the winning thread, block all others until we've determined
  163|       |     * if the token is present and that it needs initialization. */
  164|      0|    slot->lastTokenPingState = nssSlotLastPingState_Update;
  165|      0|    slot->isPresentThread = PR_GetCurrentThread();
  166|       |
  167|      0|    PZ_Unlock(slot->isPresentLock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  168|       |
  169|      0|    nssToken = PK11Slot_GetNSSToken(slot->pk11slot);
  170|      0|    if (!nssToken) {
  ------------------
  |  Branch (170:9): [True: 0, False: 0]
  ------------------
  171|      0|        isPresent = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  172|      0|        goto done;
  173|      0|    }
  174|       |
  175|      0|    if (PK11_GetSlotInfo(slot->pk11slot, &slotInfo) != SECSuccess) {
  ------------------
  |  Branch (175:9): [True: 0, False: 0]
  ------------------
  176|      0|        nssToken->base.name[0] = 0; /* XXX */
  177|      0|        isPresent = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  178|      0|        goto done;
  179|      0|    }
  180|      0|    slot->ckFlags = slotInfo.flags;
  181|       |    /* check for the presence of the token */
  182|      0|    if ((slot->ckFlags & CKF_TOKEN_PRESENT) == 0) {
  ------------------
  |  |  131|      0|#define CKF_TOKEN_PRESENT 0x00000001UL    /* a token is there */
  ------------------
  |  Branch (182:9): [True: 0, False: 0]
  ------------------
  183|      0|        session = nssToken_GetDefaultSession(nssToken);
  184|      0|        if (session) {
  ------------------
  |  Branch (184:13): [True: 0, False: 0]
  ------------------
  185|      0|            nssSession_EnterMonitor(session);
  186|       |            /* token is not present */
  187|      0|            if (session->handle != CK_INVALID_HANDLE) {
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (187:17): [True: 0, False: 0]
  ------------------
  188|       |                /* session is valid, close and invalidate it */
  189|      0|                CKAPI(epv)
  ------------------
  |  |   24|      0|    ((CK_FUNCTION_LIST_PTR)(epv))
  ------------------
  190|      0|                    ->C_CloseSession(session->handle);
  191|      0|                session->handle = CK_INVALID_HANDLE;
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
  192|      0|            }
  193|      0|            nssSession_ExitMonitor(session);
  194|      0|        }
  195|      0|        if (nssToken->base.name[0] != 0) {
  ------------------
  |  Branch (195:13): [True: 0, False: 0]
  ------------------
  196|       |            /* notify the high-level cache that the token is removed */
  197|      0|            nssToken->base.name[0] = 0; /* XXX */
  198|      0|            nssToken_NotifyCertsNotVisible(nssToken);
  199|      0|        }
  200|      0|        nssToken->base.name[0] = 0; /* XXX */
  201|       |        /* clear the token cache */
  202|      0|        nssToken_Remove(nssToken);
  203|      0|        isPresent = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  204|      0|        goto done;
  205|      0|    }
  206|       |    /* token is present, use the session info to determine if the card
  207|       |     * has been removed and reinserted.
  208|       |     */
  209|      0|    session = nssToken_GetDefaultSession(nssToken);
  210|      0|    if (session) {
  ------------------
  |  Branch (210:9): [True: 0, False: 0]
  ------------------
  211|      0|        PRBool tokenRemoved;
  212|      0|        nssSession_EnterMonitor(session);
  213|      0|        if (session->handle != CK_INVALID_HANDLE) {
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (213:13): [True: 0, False: 0]
  ------------------
  214|      0|            CK_SESSION_INFO sessionInfo;
  215|      0|            ckrv = CKAPI(epv)->C_GetSessionInfo(session->handle, &sessionInfo);
  ------------------
  |  |   24|      0|    ((CK_FUNCTION_LIST_PTR)(epv))
  ------------------
  216|      0|            if (ckrv != CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (216:17): [True: 0, False: 0]
  ------------------
  217|       |                /* session is screwy, close and invalidate it */
  218|      0|                CKAPI(epv)
  ------------------
  |  |   24|      0|    ((CK_FUNCTION_LIST_PTR)(epv))
  ------------------
  219|      0|                    ->C_CloseSession(session->handle);
  220|      0|                session->handle = CK_INVALID_HANDLE;
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
  221|      0|            }
  222|      0|        }
  223|      0|        tokenRemoved = (session->handle == CK_INVALID_HANDLE);
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
  224|      0|        nssSession_ExitMonitor(session);
  225|       |        /* token not removed, finished */
  226|      0|        if (!tokenRemoved) {
  ------------------
  |  Branch (226:13): [True: 0, False: 0]
  ------------------
  227|      0|            isPresent = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  228|      0|            goto done;
  229|      0|        }
  230|      0|    }
  231|       |    /* the token has been removed, and reinserted, or the slot contains
  232|       |     * a token it doesn't recognize. invalidate all the old
  233|       |     * information we had on this token, if we can't refresh, clear
  234|       |     * the present flag */
  235|      0|    nssToken_NotifyCertsNotVisible(nssToken);
  236|      0|    nssToken_Remove(nssToken);
  237|      0|    if (nssToken->base.name[0] == 0) {
  ------------------
  |  Branch (237:9): [True: 0, False: 0]
  ------------------
  238|      0|        doUpdateCachedCerts = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  239|      0|    }
  240|      0|    if (PK11_InitToken(slot->pk11slot, PR_FALSE) != SECSuccess) {
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  |  Branch (240:9): [True: 0, False: 0]
  ------------------
  241|      0|        isPresent = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  242|      0|        goto done;
  243|      0|    }
  244|      0|    if (doUpdateCachedCerts) {
  ------------------
  |  Branch (244:9): [True: 0, False: 0]
  ------------------
  245|      0|        nssTrustDomain_UpdateCachedTokenCerts(nssToken->trustDomain,
  246|      0|                                              nssToken);
  247|      0|    }
  248|      0|    nssrv = nssToken_Refresh(nssToken);
  249|      0|    if (nssrv != PR_SUCCESS) {
  ------------------
  |  Branch (249:9): [True: 0, False: 0]
  ------------------
  250|      0|        nssToken->base.name[0] = 0; /* XXX */
  251|      0|        slot->ckFlags &= ~CKF_TOKEN_PRESENT;
  ------------------
  |  |  131|      0|#define CKF_TOKEN_PRESENT 0x00000001UL    /* a token is there */
  ------------------
  252|      0|        isPresent = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  253|      0|        goto done;
  254|      0|    }
  255|      0|    isPresent = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  256|      0|done:
  257|      0|    if (nssToken) {
  ------------------
  |  Branch (257:9): [True: 0, False: 0]
  ------------------
  258|      0|        (void)nssToken_Destroy(nssToken);
  259|      0|    }
  260|       |    /* Once we've set up the condition variable,
  261|       |     * Before returning, it's necessary to:
  262|       |     *  1) Set the lastTokenPingTime so that any other threads waiting on this
  263|       |     *     initialization and any future calls within the initialization window
  264|       |     *     return the just-computed status.
  265|       |     *  2) Indicate we're complete, waking up all other threads that may still
  266|       |     *     be waiting on initialization can progress.
  267|       |     */
  268|      0|    PZ_Lock(slot->isPresentLock);
  ------------------
  |  |  245|      0|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  269|       |    /* don't update the time if we were reset while we were
  270|       |     * getting the token state */
  271|      0|    if (slot->lastTokenPingState == nssSlotLastPingState_Update) {
  ------------------
  |  Branch (271:9): [True: 0, False: 0]
  ------------------
  272|      0|        slot->lastTokenPingTime = PR_IntervalNow();
  273|      0|        slot->lastTokenPingState = nssSlotLastPingState_Valid;
  274|      0|    }
  275|      0|    slot->isPresentThread = NULL;
  276|      0|    PR_NotifyAllCondVar(slot->isPresentCondition);
  277|      0|    PZ_Unlock(slot->isPresentLock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  278|      0|    return isPresent;
  279|      0|}
nssSlot_GetCryptokiEPV:
  284|  59.5k|{
  285|  59.5k|    return slot->epv;
  286|  59.5k|}
nssSlot_GetToken:
  291|  59.5k|{
  292|  59.5k|    NSSToken *rvToken = NULL;
  293|       |
  294|  59.5k|    if (nssSlot_IsTokenPresent(slot)) {
  ------------------
  |  Branch (294:9): [True: 59.5k, False: 0]
  ------------------
  295|  59.5k|        rvToken = PK11Slot_GetNSSToken(slot->pk11slot);
  296|  59.5k|    }
  297|       |
  298|  59.5k|    return rvToken;
  299|  59.5k|}
nssSession_EnterMonitor:
  304|  59.5k|{
  305|  59.5k|    if (s->lock)
  ------------------
  |  Branch (305:9): [True: 59.5k, False: 0]
  ------------------
  306|  59.5k|        PZ_Lock(s->lock);
  ------------------
  |  |  245|  59.5k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  307|  59.5k|    return PR_SUCCESS;
  308|  59.5k|}
nssSession_ExitMonitor:
  313|  59.5k|{
  314|  59.5k|    return (s->lock) ? PZ_Unlock(s->lock) : PR_SUCCESS;
  ------------------
  |  |  246|  59.5k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  |  Branch (314:12): [True: 59.5k, False: 0]
  ------------------
  315|  59.5k|}

nssToken_Destroy:
   29|  59.6k|{
   30|  59.6k|    if (tok) {
  ------------------
  |  Branch (30:9): [True: 59.6k, False: 4]
  ------------------
   31|  59.6k|        if (PR_ATOMIC_DECREMENT(&tok->base.refCount) == 0) {
  ------------------
  |  |  123|  59.6k|#define PR_ATOMIC_DECREMENT(val) __sync_sub_and_fetch(val, 1)
  ------------------
  |  Branch (31:13): [True: 2, False: 59.5k]
  ------------------
   32|      2|            PK11_FreeSlot(tok->pk11slot);
   33|      2|            PZ_DestroyLock(tok->base.lock);
  ------------------
  |  |  244|      2|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
   34|      2|            nssTokenObjectCache_Destroy(tok->cache);
   35|      2|            (void)nssSlot_Destroy(tok->slot);
   36|      2|            return nssArena_Destroy(tok->base.arena);
   37|      2|        }
   38|  59.6k|    }
   39|  59.6k|    return PR_SUCCESS;
   40|  59.6k|}
nssToken_AddRef:
   52|  59.5k|{
   53|  59.5k|    PR_ATOMIC_INCREMENT(&tok->base.refCount);
  ------------------
  |  |  122|  59.5k|#define PR_ATOMIC_INCREMENT(val) __sync_add_and_fetch(val, 1)
  ------------------
   54|  59.5k|    return tok;
   55|  59.5k|}
nssToken_GetSlot:
   60|  59.5k|{
   61|  59.5k|    return nssSlot_AddRef(tok->slot);
   62|  59.5k|}
nssToken_GetCryptokiEPV:
   67|  59.5k|{
   68|  59.5k|    return nssSlot_GetCryptokiEPV(token->slot);
   69|  59.5k|}
nssToken_GetDefaultSession:
   74|  13.8k|{
   75|  13.8k|    return token->defaultSession;
   76|  13.8k|}
nssToken_FindObjectsByTemplate:
  372|  59.5k|{
  373|  59.5k|    CK_OBJECT_CLASS objclass = (CK_OBJECT_CLASS)-1;
  374|  59.5k|    nssCryptokiObject **objects = NULL;
  375|  59.5k|    PRUint32 i;
  376|       |
  377|  59.5k|    if (!token) {
  ------------------
  |  Branch (377:9): [True: 0, False: 59.5k]
  ------------------
  378|      0|        PORT_SetError(SEC_ERROR_NO_TOKEN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  379|      0|        if (statusOpt)
  ------------------
  |  Branch (379:13): [True: 0, False: 0]
  ------------------
  380|      0|            *statusOpt = PR_FAILURE;
  381|      0|        return NULL;
  382|      0|    }
  383|   119k|    for (i = 0; i < otsize; i++) {
  ------------------
  |  Branch (383:17): [True: 119k, False: 0]
  ------------------
  384|   119k|        if (obj_template[i].type == CKA_CLASS) {
  ------------------
  |  |  511|   119k|#define CKA_CLASS 0x00000000UL
  ------------------
  |  Branch (384:13): [True: 59.5k, False: 59.5k]
  ------------------
  385|  59.5k|            objclass = *(CK_OBJECT_CLASS *)obj_template[i].pValue;
  386|  59.5k|            break;
  387|  59.5k|        }
  388|   119k|    }
  389|  59.5k|    PR_ASSERT(i < otsize);
  ------------------
  |  |  208|  59.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 59.5k, False: 0]
  |  |  ------------------
  ------------------
  390|  59.5k|    if (i == otsize) {
  ------------------
  |  Branch (390:9): [True: 0, False: 59.5k]
  ------------------
  391|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  392|      0|        if (statusOpt)
  ------------------
  |  Branch (392:13): [True: 0, False: 0]
  ------------------
  393|      0|            *statusOpt = PR_FAILURE;
  394|      0|        return NULL;
  395|      0|    }
  396|       |    /* If these objects are being cached, try looking there first */
  397|  59.5k|    if (token->cache &&
  ------------------
  |  Branch (397:9): [True: 0, False: 59.5k]
  ------------------
  398|  59.5k|        nssTokenObjectCache_HaveObjectClass(token->cache, objclass)) {
  ------------------
  |  Branch (398:9): [True: 0, False: 0]
  ------------------
  399|      0|        PRStatus status;
  400|      0|        objects = nssTokenObjectCache_FindObjectsByTemplate(token->cache,
  401|      0|                                                            objclass,
  402|      0|                                                            obj_template,
  403|      0|                                                            otsize,
  404|      0|                                                            maximumOpt,
  405|      0|                                                            &status);
  406|      0|        if (status == PR_SUCCESS) {
  ------------------
  |  Branch (406:13): [True: 0, False: 0]
  ------------------
  407|      0|            if (statusOpt)
  ------------------
  |  Branch (407:17): [True: 0, False: 0]
  ------------------
  408|      0|                *statusOpt = status;
  409|      0|            return objects;
  410|      0|        }
  411|      0|    }
  412|       |    /* Either they are not cached, or cache failed; look on token. */
  413|  59.5k|    objects = find_objects(token, sessionOpt,
  414|  59.5k|                           obj_template, otsize,
  415|  59.5k|                           maximumOpt, statusOpt);
  416|  59.5k|    return objects;
  417|  59.5k|}
nssToken_FindCertificatesBySubject:
  594|  2.26k|{
  595|  2.26k|    CK_ATTRIBUTE_PTR attr;
  596|  2.26k|    CK_ATTRIBUTE subj_template[3];
  597|  2.26k|    CK_ULONG stsize;
  598|  2.26k|    nssCryptokiObject **objects;
  599|  2.26k|    NSS_CK_TEMPLATE_START(subj_template, attr, stsize);
  ------------------
  |  |   30|  2.26k|    attr = _template;                                \
  |  |   31|  2.26k|    size = 0;
  ------------------
  600|       |    /* Set the search to token/session only if provided */
  601|  2.26k|    if (searchType == nssTokenSearchType_SessionOnly) {
  ------------------
  |  Branch (601:9): [True: 0, False: 2.26k]
  ------------------
  602|      0|        NSS_CK_SET_ATTRIBUTE_ITEM(attr, CKA_TOKEN, &g_ck_false);
  ------------------
  |  |   34|      0|    (pattr)->type = kind;                            \
  |  |   35|      0|    (pattr)->pValue = (CK_VOID_PTR)(item)->data;     \
  |  |   36|      0|    (pattr)->ulValueLen = (CK_ULONG)(item)->size;    \
  |  |   37|      0|    (pattr)++;
  ------------------
  603|  2.26k|    } else if (searchType == nssTokenSearchType_TokenOnly) {
  ------------------
  |  Branch (603:16): [True: 2.26k, False: 0]
  ------------------
  604|  2.26k|        NSS_CK_SET_ATTRIBUTE_ITEM(attr, CKA_TOKEN, &g_ck_true);
  ------------------
  |  |   34|  2.26k|    (pattr)->type = kind;                            \
  |  |   35|  2.26k|    (pattr)->pValue = (CK_VOID_PTR)(item)->data;     \
  |  |   36|  2.26k|    (pattr)->ulValueLen = (CK_ULONG)(item)->size;    \
  |  |   37|  2.26k|    (pattr)++;
  ------------------
  605|  2.26k|    }
  606|  2.26k|    NSS_CK_SET_ATTRIBUTE_ITEM(attr, CKA_CLASS, &g_ck_class_cert);
  ------------------
  |  |   34|  2.26k|    (pattr)->type = kind;                            \
  |  |   35|  2.26k|    (pattr)->pValue = (CK_VOID_PTR)(item)->data;     \
  |  |   36|  2.26k|    (pattr)->ulValueLen = (CK_ULONG)(item)->size;    \
  |  |   37|  2.26k|    (pattr)++;
  ------------------
  607|  2.26k|    NSS_CK_SET_ATTRIBUTE_ITEM(attr, CKA_SUBJECT, subject);
  ------------------
  |  |   34|  2.26k|    (pattr)->type = kind;                            \
  |  |   35|  2.26k|    (pattr)->pValue = (CK_VOID_PTR)(item)->data;     \
  |  |   36|  2.26k|    (pattr)->ulValueLen = (CK_ULONG)(item)->size;    \
  |  |   37|  2.26k|    (pattr)++;
  ------------------
  608|  2.26k|    NSS_CK_TEMPLATE_FINISH(subj_template, attr, stsize);
  ------------------
  |  |   60|  2.26k|    size = (attr) - (_template);                      \
  |  |   61|  2.26k|    PR_ASSERT(size <= sizeof(_template) / sizeof(_template[0]));
  |  |  ------------------
  |  |  |  |  208|  2.26k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 2.26k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  609|       |    /* now locate the token certs matching this template */
  610|  2.26k|    objects = nssToken_FindObjectsByTemplate(token, sessionOpt,
  611|  2.26k|                                             subj_template, stsize,
  612|  2.26k|                                             maximumOpt, statusOpt);
  613|  2.26k|    return objects;
  614|  2.26k|}
nssToken_FindCertificateByIssuerAndSerialNumber:
  744|  11.5k|{
  745|  11.5k|    CK_ATTRIBUTE_PTR attr;
  746|  11.5k|    CK_ATTRIBUTE cert_template[4];
  747|  11.5k|    CK_ULONG ctsize;
  748|  11.5k|    nssCryptokiObject **objects;
  749|  11.5k|    nssCryptokiObject *rvObject = NULL;
  750|  11.5k|    NSS_CK_TEMPLATE_START(cert_template, attr, ctsize);
  ------------------
  |  |   30|  11.5k|    attr = _template;                                \
  |  |   31|  11.5k|    size = 0;
  ------------------
  751|       |
  752|  11.5k|    if (!token) {
  ------------------
  |  Branch (752:9): [True: 0, False: 11.5k]
  ------------------
  753|      0|        PORT_SetError(SEC_ERROR_NO_TOKEN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  754|      0|        if (statusOpt)
  ------------------
  |  Branch (754:13): [True: 0, False: 0]
  ------------------
  755|      0|            *statusOpt = PR_FAILURE;
  756|      0|        return NULL;
  757|      0|    }
  758|       |    /* Set the search to token/session only if provided */
  759|  11.5k|    if (searchType == nssTokenSearchType_SessionOnly) {
  ------------------
  |  Branch (759:9): [True: 0, False: 11.5k]
  ------------------
  760|      0|        NSS_CK_SET_ATTRIBUTE_ITEM(attr, CKA_TOKEN, &g_ck_false);
  ------------------
  |  |   34|      0|    (pattr)->type = kind;                            \
  |  |   35|      0|    (pattr)->pValue = (CK_VOID_PTR)(item)->data;     \
  |  |   36|      0|    (pattr)->ulValueLen = (CK_ULONG)(item)->size;    \
  |  |   37|      0|    (pattr)++;
  ------------------
  761|  11.5k|    } else if ((searchType == nssTokenSearchType_TokenOnly) ||
  ------------------
  |  Branch (761:16): [True: 11.5k, False: 0]
  ------------------
  762|  11.5k|               (searchType == nssTokenSearchType_TokenForced)) {
  ------------------
  |  Branch (762:16): [True: 0, False: 0]
  ------------------
  763|  11.5k|        NSS_CK_SET_ATTRIBUTE_ITEM(attr, CKA_TOKEN, &g_ck_true);
  ------------------
  |  |   34|  11.5k|    (pattr)->type = kind;                            \
  |  |   35|  11.5k|    (pattr)->pValue = (CK_VOID_PTR)(item)->data;     \
  |  |   36|  11.5k|    (pattr)->ulValueLen = (CK_ULONG)(item)->size;    \
  |  |   37|  11.5k|    (pattr)++;
  ------------------
  764|  11.5k|    }
  765|       |    /* Set the unique id */
  766|  11.5k|    NSS_CK_SET_ATTRIBUTE_ITEM(attr, CKA_CLASS, &g_ck_class_cert);
  ------------------
  |  |   34|  11.5k|    (pattr)->type = kind;                            \
  |  |   35|  11.5k|    (pattr)->pValue = (CK_VOID_PTR)(item)->data;     \
  |  |   36|  11.5k|    (pattr)->ulValueLen = (CK_ULONG)(item)->size;    \
  |  |   37|  11.5k|    (pattr)++;
  ------------------
  767|  11.5k|    NSS_CK_SET_ATTRIBUTE_ITEM(attr, CKA_ISSUER, issuer);
  ------------------
  |  |   34|  11.5k|    (pattr)->type = kind;                            \
  |  |   35|  11.5k|    (pattr)->pValue = (CK_VOID_PTR)(item)->data;     \
  |  |   36|  11.5k|    (pattr)->ulValueLen = (CK_ULONG)(item)->size;    \
  |  |   37|  11.5k|    (pattr)++;
  ------------------
  768|  11.5k|    NSS_CK_SET_ATTRIBUTE_ITEM(attr, CKA_SERIAL_NUMBER, serial);
  ------------------
  |  |   34|  11.5k|    (pattr)->type = kind;                            \
  |  |   35|  11.5k|    (pattr)->pValue = (CK_VOID_PTR)(item)->data;     \
  |  |   36|  11.5k|    (pattr)->ulValueLen = (CK_ULONG)(item)->size;    \
  |  |   37|  11.5k|    (pattr)++;
  ------------------
  769|  11.5k|    NSS_CK_TEMPLATE_FINISH(cert_template, attr, ctsize);
  ------------------
  |  |   60|  11.5k|    size = (attr) - (_template);                      \
  |  |   61|  11.5k|    PR_ASSERT(size <= sizeof(_template) / sizeof(_template[0]));
  |  |  ------------------
  |  |  |  |  208|  11.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 11.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  770|       |    /* get the object handle */
  771|  11.5k|    if (searchType == nssTokenSearchType_TokenForced) {
  ------------------
  |  Branch (771:9): [True: 0, False: 11.5k]
  ------------------
  772|      0|        objects = find_objects(token, sessionOpt,
  773|      0|                               cert_template, ctsize,
  774|      0|                               1, statusOpt);
  775|  11.5k|    } else {
  776|  11.5k|        objects = nssToken_FindObjectsByTemplate(token, sessionOpt,
  777|  11.5k|                                                 cert_template, ctsize,
  778|  11.5k|                                                 1, statusOpt);
  779|  11.5k|    }
  780|  11.5k|    if (objects) {
  ------------------
  |  Branch (780:9): [True: 0, False: 11.5k]
  ------------------
  781|      0|        rvObject = objects[0];
  782|      0|        nss_ZFreeIf(objects);
  783|      0|    }
  784|       |
  785|  11.5k|    return rvObject;
  786|  11.5k|}
nssToken_FindTrustForCertificate:
 1037|  45.7k|{
 1038|  45.7k|    CK_OBJECT_CLASS tobjc = CKO_NSS_TRUST;
  ------------------
  |  |   37|  45.7k|#define CKO_NSS_TRUST (CKO_NSS + 3)
  |  |  ------------------
  |  |  |  |   33|  45.7k|#define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  335|  45.7k|#define CKO_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  45.7k|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1039|  45.7k|    CK_ATTRIBUTE_PTR attr;
 1040|  45.7k|    CK_ATTRIBUTE tobj_template[5];
 1041|  45.7k|    CK_ULONG tobj_size;
 1042|  45.7k|    nssSession *session = sessionOpt ? sessionOpt : token->defaultSession;
  ------------------
  |  Branch (1042:27): [True: 0, False: 45.7k]
  ------------------
 1043|  45.7k|    nssCryptokiObject *object = NULL, **objects;
 1044|       |
 1045|       |    /* Don't ask the module to use an invalid session handle. */
 1046|  45.7k|    if (!session || session->handle == CK_INVALID_HANDLE) {
  ------------------
  |  |   78|  45.7k|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (1046:9): [True: 0, False: 45.7k]
  |  Branch (1046:21): [True: 0, False: 45.7k]
  ------------------
 1047|      0|        PORT_SetError(SEC_ERROR_NO_TOKEN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1048|      0|        return object;
 1049|      0|    }
 1050|       |
 1051|  45.7k|    NSS_CK_TEMPLATE_START(tobj_template, attr, tobj_size);
  ------------------
  |  |   30|  45.7k|    attr = _template;                                \
  |  |   31|  45.7k|    size = 0;
  ------------------
 1052|  45.7k|    if (searchType == nssTokenSearchType_TokenOnly) {
  ------------------
  |  Branch (1052:9): [True: 45.7k, False: 0]
  ------------------
 1053|  45.7k|        NSS_CK_SET_ATTRIBUTE_ITEM(attr, CKA_TOKEN, &g_ck_true);
  ------------------
  |  |   34|  45.7k|    (pattr)->type = kind;                            \
  |  |   35|  45.7k|    (pattr)->pValue = (CK_VOID_PTR)(item)->data;     \
  |  |   36|  45.7k|    (pattr)->ulValueLen = (CK_ULONG)(item)->size;    \
  |  |   37|  45.7k|    (pattr)++;
  ------------------
 1054|  45.7k|    }
 1055|  45.7k|    NSS_CK_SET_ATTRIBUTE_VAR(attr, CKA_CLASS, tobjc);
  ------------------
  |  |   48|  45.7k|    (pattr)->type = kind;                          \
  |  |   49|  45.7k|    (pattr)->pValue = (CK_VOID_PTR)&var;           \
  |  |   50|  45.7k|    (pattr)->ulValueLen = (CK_ULONG)sizeof(var);   \
  |  |   51|  45.7k|    (pattr)++;
  ------------------
 1056|  45.7k|    NSS_CK_SET_ATTRIBUTE_ITEM(attr, CKA_ISSUER, certIssuer);
  ------------------
  |  |   34|  45.7k|    (pattr)->type = kind;                            \
  |  |   35|  45.7k|    (pattr)->pValue = (CK_VOID_PTR)(item)->data;     \
  |  |   36|  45.7k|    (pattr)->ulValueLen = (CK_ULONG)(item)->size;    \
  |  |   37|  45.7k|    (pattr)++;
  ------------------
 1057|  45.7k|    NSS_CK_SET_ATTRIBUTE_ITEM(attr, CKA_SERIAL_NUMBER, certSerial);
  ------------------
  |  |   34|  45.7k|    (pattr)->type = kind;                            \
  |  |   35|  45.7k|    (pattr)->pValue = (CK_VOID_PTR)(item)->data;     \
  |  |   36|  45.7k|    (pattr)->ulValueLen = (CK_ULONG)(item)->size;    \
  |  |   37|  45.7k|    (pattr)++;
  ------------------
 1058|  45.7k|    NSS_CK_TEMPLATE_FINISH(tobj_template, attr, tobj_size);
  ------------------
  |  |   60|  45.7k|    size = (attr) - (_template);                      \
  |  |   61|  45.7k|    PR_ASSERT(size <= sizeof(_template) / sizeof(_template[0]));
  |  |  ------------------
  |  |  |  |  208|  45.7k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 45.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1059|  45.7k|    objects = nssToken_FindObjectsByTemplate(token, session,
 1060|  45.7k|                                             tobj_template, tobj_size,
 1061|  45.7k|                                             1, NULL);
 1062|  45.7k|    if (objects) {
  ------------------
  |  Branch (1062:9): [True: 0, False: 45.7k]
  ------------------
 1063|      0|        object = objects[0];
 1064|      0|        nss_ZFreeIf(objects);
 1065|      0|    }
 1066|  45.7k|    return object;
 1067|  45.7k|}
devtoken.c:find_objects:
  240|  59.5k|{
  241|  59.5k|    CK_RV ckrv = CKR_OK;
  ------------------
  |  | 1388|  59.5k|#define CKR_OK 0x00000000UL
  ------------------
  242|  59.5k|    CK_ULONG count;
  243|  59.5k|    CK_OBJECT_HANDLE *objectHandles = NULL;
  244|  59.5k|    CK_OBJECT_HANDLE staticObjects[OBJECT_STACK_SIZE];
  245|  59.5k|    PRUint32 arraySize, numHandles;
  246|  59.5k|    void *epv = nssToken_GetCryptokiEPV(tok);
  247|  59.5k|    nssCryptokiObject **objects;
  248|  59.5k|    nssSession *session = (sessionOpt) ? sessionOpt : tok->defaultSession;
  ------------------
  |  Branch (248:27): [True: 59.5k, False: 0]
  ------------------
  249|       |
  250|       |    /* Don't ask the module to use an invalid session handle. */
  251|  59.5k|    if (!session || session->handle == CK_INVALID_HANDLE) {
  ------------------
  |  |   78|  59.5k|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (251:9): [True: 0, False: 59.5k]
  |  Branch (251:21): [True: 0, False: 59.5k]
  ------------------
  252|      0|        ckrv = CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
  253|      0|        goto loser;
  254|      0|    }
  255|       |
  256|       |    /* the arena is only for the array of object handles */
  257|  59.5k|    if (maximumOpt > 0) {
  ------------------
  |  Branch (257:9): [True: 57.3k, False: 2.26k]
  ------------------
  258|  57.3k|        arraySize = maximumOpt;
  259|  57.3k|    } else {
  260|  2.26k|        arraySize = OBJECT_STACK_SIZE;
  ------------------
  |  |   24|  2.26k|#define OBJECT_STACK_SIZE 16
  ------------------
  261|  2.26k|    }
  262|  59.5k|    numHandles = 0;
  263|  59.5k|    if (arraySize <= OBJECT_STACK_SIZE) {
  ------------------
  |  |   24|  59.5k|#define OBJECT_STACK_SIZE 16
  ------------------
  |  Branch (263:9): [True: 59.5k, False: 0]
  ------------------
  264|  59.5k|        objectHandles = staticObjects;
  265|  59.5k|    } else {
  266|      0|        objectHandles = nss_ZNEWARRAY(NULL, CK_OBJECT_HANDLE, arraySize);
  ------------------
  |  |  371|      0|    ((type *)nss_ZAlloc((arenaOpt), sizeof(type) * (quantity)))
  ------------------
  267|      0|    }
  268|  59.5k|    if (!objectHandles) {
  ------------------
  |  Branch (268:9): [True: 0, False: 59.5k]
  ------------------
  269|      0|        ckrv = CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
  270|      0|        goto loser;
  271|      0|    }
  272|  59.5k|    nssSession_EnterMonitor(session); /* ==== session lock === */
  273|       |    /* Initialize the find with the template */
  274|  59.5k|    ckrv = CKAPI(epv)->C_FindObjectsInit(session->handle,
  ------------------
  |  |   24|  59.5k|    ((CK_FUNCTION_LIST_PTR)(epv))
  ------------------
  275|  59.5k|                                         obj_template, otsize);
  276|  59.5k|    if (ckrv != CKR_OK) {
  ------------------
  |  | 1388|  59.5k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (276:9): [True: 0, False: 59.5k]
  ------------------
  277|      0|        nssSession_ExitMonitor(session);
  278|      0|        goto loser;
  279|      0|    }
  280|  59.5k|    while (PR_TRUE) {
  ------------------
  |  |  437|  59.5k|#define PR_TRUE 1
  |  |  ------------------
  |  |  |  Branch (437:17): [Folded - Ignored]
  |  |  ------------------
  ------------------
  281|       |        /* Issue the find for up to arraySize - numHandles objects */
  282|  59.5k|        ckrv = CKAPI(epv)->C_FindObjects(session->handle,
  ------------------
  |  |   24|  59.5k|    ((CK_FUNCTION_LIST_PTR)(epv))
  ------------------
  283|  59.5k|                                         objectHandles + numHandles,
  284|  59.5k|                                         arraySize - numHandles,
  285|  59.5k|                                         &count);
  286|  59.5k|        if (ckrv != CKR_OK) {
  ------------------
  |  | 1388|  59.5k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (286:13): [True: 0, False: 59.5k]
  ------------------
  287|      0|            nssSession_ExitMonitor(session);
  288|      0|            goto loser;
  289|      0|        }
  290|       |        /* bump the number of found objects */
  291|  59.5k|        numHandles += count;
  292|  59.5k|        if (maximumOpt > 0 || numHandles < arraySize) {
  ------------------
  |  Branch (292:13): [True: 57.3k, False: 2.26k]
  |  Branch (292:31): [True: 2.26k, False: 0]
  ------------------
  293|       |            /* When a maximum is provided, the search is done all at once,
  294|       |             * so the search is finished.  If the number returned was less
  295|       |             * than the number sought, the search is finished.
  296|       |             */
  297|  59.5k|            break;
  298|  59.5k|        }
  299|       |        /* the array is filled, double it and continue */
  300|      0|        arraySize *= 2;
  301|      0|        if (objectHandles == staticObjects) {
  ------------------
  |  Branch (301:13): [True: 0, False: 0]
  ------------------
  302|      0|            objectHandles = nss_ZNEWARRAY(NULL, CK_OBJECT_HANDLE, arraySize);
  ------------------
  |  |  371|      0|    ((type *)nss_ZAlloc((arenaOpt), sizeof(type) * (quantity)))
  ------------------
  303|      0|            if (objectHandles) {
  ------------------
  |  Branch (303:17): [True: 0, False: 0]
  ------------------
  304|      0|                PORT_Memcpy(objectHandles, staticObjects,
  ------------------
  |  |  180|      0|#define PORT_Memcpy memcpy
  ------------------
  305|      0|                            OBJECT_STACK_SIZE * sizeof(objectHandles[1]));
  ------------------
  |  |   24|      0|#define OBJECT_STACK_SIZE 16
  ------------------
  306|      0|            }
  307|      0|        } else {
  308|      0|            objectHandles = nss_ZREALLOCARRAY(objectHandles,
  ------------------
  |  |  391|      0|    ((type *)nss_ZRealloc((p), sizeof(type) * (quantity)))
  ------------------
  309|      0|                                              CK_OBJECT_HANDLE,
  310|      0|                                              arraySize);
  311|      0|        }
  312|      0|        if (!objectHandles) {
  ------------------
  |  Branch (312:13): [True: 0, False: 0]
  ------------------
  313|      0|            nssSession_ExitMonitor(session);
  314|      0|            ckrv = CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
  315|      0|            goto loser;
  316|      0|        }
  317|      0|    }
  318|  59.5k|    ckrv = CKAPI(epv)->C_FindObjectsFinal(session->handle);
  ------------------
  |  |   24|  59.5k|    ((CK_FUNCTION_LIST_PTR)(epv))
  ------------------
  319|  59.5k|    nssSession_ExitMonitor(session); /* ==== end session lock === */
  320|  59.5k|    if (ckrv != CKR_OK) {
  ------------------
  |  | 1388|  59.5k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (320:9): [True: 0, False: 59.5k]
  ------------------
  321|      0|        goto loser;
  322|      0|    }
  323|  59.5k|    if (numHandles > 0) {
  ------------------
  |  Branch (323:9): [True: 0, False: 59.5k]
  ------------------
  324|      0|        objects = create_objects_from_handles(tok, session,
  325|      0|                                              objectHandles, numHandles);
  326|  59.5k|    } else {
  327|  59.5k|        nss_SetError(NSS_ERROR_NOT_FOUND);
  328|  59.5k|        objects = NULL;
  329|  59.5k|    }
  330|  59.5k|    if (objectHandles && objectHandles != staticObjects) {
  ------------------
  |  Branch (330:9): [True: 59.5k, False: 0]
  |  Branch (330:26): [True: 0, False: 59.5k]
  ------------------
  331|      0|        nss_ZFreeIf(objectHandles);
  332|      0|    }
  333|  59.5k|    if (statusOpt)
  ------------------
  |  Branch (333:9): [True: 13.8k, False: 45.7k]
  ------------------
  334|  13.8k|        *statusOpt = PR_SUCCESS;
  335|  59.5k|    return objects;
  336|      0|loser:
  337|      0|    if (objectHandles && objectHandles != staticObjects) {
  ------------------
  |  Branch (337:9): [True: 0, False: 0]
  |  Branch (337:26): [True: 0, False: 0]
  ------------------
  338|      0|        nss_ZFreeIf(objectHandles);
  339|      0|    }
  340|       |    /*
  341|       |     * These errors should be treated the same as if the objects just weren't
  342|       |     * found..
  343|       |     */
  344|      0|    if ((ckrv == CKR_ATTRIBUTE_TYPE_INVALID) ||
  ------------------
  |  | 1408|      0|#define CKR_ATTRIBUTE_TYPE_INVALID 0x00000012UL
  ------------------
  |  Branch (344:9): [True: 0, False: 0]
  ------------------
  345|      0|        (ckrv == CKR_ATTRIBUTE_VALUE_INVALID) ||
  ------------------
  |  | 1409|      0|#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
  ------------------
  |  Branch (345:9): [True: 0, False: 0]
  ------------------
  346|      0|        (ckrv == CKR_DATA_INVALID) ||
  ------------------
  |  | 1414|      0|#define CKR_DATA_INVALID 0x00000020UL
  ------------------
  |  Branch (346:9): [True: 0, False: 0]
  ------------------
  347|      0|        (ckrv == CKR_DATA_LEN_RANGE) ||
  ------------------
  |  | 1415|      0|#define CKR_DATA_LEN_RANGE 0x00000021UL
  ------------------
  |  Branch (347:9): [True: 0, False: 0]
  ------------------
  348|      0|        (ckrv == CKR_FUNCTION_NOT_SUPPORTED) ||
  ------------------
  |  | 1426|      0|#define CKR_FUNCTION_NOT_SUPPORTED 0x00000054UL
  ------------------
  |  Branch (348:9): [True: 0, False: 0]
  ------------------
  349|      0|        (ckrv == CKR_TEMPLATE_INCOMPLETE) ||
  ------------------
  |  | 1477|      0|#define CKR_TEMPLATE_INCOMPLETE 0x000000D0UL
  ------------------
  |  Branch (349:9): [True: 0, False: 0]
  ------------------
  350|      0|        (ckrv == CKR_TEMPLATE_INCONSISTENT)) {
  ------------------
  |  | 1478|      0|#define CKR_TEMPLATE_INCONSISTENT 0x000000D1UL
  ------------------
  |  Branch (350:9): [True: 0, False: 0]
  ------------------
  351|       |
  352|      0|        nss_SetError(NSS_ERROR_NOT_FOUND);
  353|      0|        if (statusOpt)
  ------------------
  |  Branch (353:13): [True: 0, False: 0]
  ------------------
  354|      0|            *statusOpt = PR_SUCCESS;
  355|      0|    } else {
  356|      0|        nss_SetError(ckrv);
  357|      0|        nss_SetError(NSS_ERROR_PKCS11);
  358|      0|        if (statusOpt)
  ------------------
  |  Branch (358:13): [True: 0, False: 0]
  ------------------
  359|      0|            *statusOpt = PR_FAILURE;
  360|      0|    }
  361|      0|    return (nssCryptokiObject **)NULL;
  362|  59.5k|}

nssSlotArray_Destroy:
  129|  29.7k|{
  130|  29.7k|    if (slots) {
  ------------------
  |  Branch (130:9): [True: 29.7k, False: 0]
  ------------------
  131|  29.7k|        NSSSlot **slotp;
  132|  89.3k|        for (slotp = slots; *slotp; slotp++) {
  ------------------
  |  Branch (132:29): [True: 59.5k, False: 29.7k]
  ------------------
  133|  59.5k|            nssSlot_Destroy(*slotp);
  134|  59.5k|        }
  135|  29.7k|        nss_ZFreeIf(slots);
  136|  29.7k|    }
  137|  29.7k|}
nssTokenObjectCache_Destroy:
  259|      2|{
  260|      2|    if (cache) {
  ------------------
  |  Branch (260:9): [True: 0, False: 2]
  ------------------
  261|      0|        clear_cache(cache);
  262|      0|        if (cache->lock) {
  ------------------
  |  Branch (262:13): [True: 0, False: 0]
  ------------------
  263|      0|            PZ_DestroyLock(cache->lock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  264|      0|        }
  265|      0|        nss_ZFreeIf(cache);
  266|      0|    }
  267|      2|}

CheckX86CPUSupport:
  102|      1|{
  103|      1|    unsigned long eax, ebx, ecx, edx;
  104|      1|    unsigned long eax7, ebx7, ecx7, edx7;
  105|      1|    char *disable_hw_aes = PR_GetEnvSecure("NSS_DISABLE_HW_AES");
  106|      1|    char *disable_pclmul = PR_GetEnvSecure("NSS_DISABLE_PCLMUL");
  107|      1|    char *disable_hw_sha = PR_GetEnvSecure("NSS_DISABLE_HW_SHA");
  108|      1|    char *disable_avx = PR_GetEnvSecure("NSS_DISABLE_AVX");
  109|      1|    char *disable_avx2 = PR_GetEnvSecure("NSS_DISABLE_AVX2");
  110|      1|    char *disable_adx = PR_GetEnvSecure("NSS_DISABLE_ADX");
  111|      1|    char *disable_ssse3 = PR_GetEnvSecure("NSS_DISABLE_SSSE3");
  112|      1|    char *disable_sse4_1 = PR_GetEnvSecure("NSS_DISABLE_SSE4_1");
  113|      1|    char *disable_sse4_2 = PR_GetEnvSecure("NSS_DISABLE_SSE4_2");
  114|      1|    freebl_cpuid(1, &eax, &ebx, &ecx, &edx);
  115|      1|    freebl_cpuid(7, &eax7, &ebx7, &ecx7, &edx7);
  116|      1|    aesni_support_ = (PRBool)((ecx & ECX_AESNI) != 0 && disable_hw_aes == NULL);
  ------------------
  |  |   81|      1|#define ECX_AESNI (1 << 25)
  ------------------
  |  Branch (116:31): [True: 1, False: 0]
  |  Branch (116:57): [True: 1, False: 0]
  ------------------
  117|      1|    clmul_support_ = (PRBool)((ecx & ECX_CLMUL) != 0 && disable_pclmul == NULL);
  ------------------
  |  |   82|      1|#define ECX_CLMUL (1 << 1)
  ------------------
  |  Branch (117:31): [True: 1, False: 0]
  |  Branch (117:57): [True: 1, False: 0]
  ------------------
  118|      1|    sha_support_ = (PRBool)((ebx7 & EBX_SHA) != 0 && disable_hw_sha == NULL);
  ------------------
  |  |   90|      1|#define EBX_SHA (1 << 29)
  ------------------
  |  Branch (118:29): [True: 1, False: 0]
  |  Branch (118:54): [True: 1, False: 0]
  ------------------
  119|       |    /* For AVX we ensure that:
  120|       |     *  - The AVX, OSXSAVE, and XSAVE bits of ECX from CPUID(EAX=1) are set, and
  121|       |     *  - the SSE and AVX state bits of XCR0 are set (check_xcr0_ymm).
  122|       |     */
  123|      1|    avx_support_ = (PRBool)((ecx & AVX_BITS) == AVX_BITS) && check_xcr0_ymm() &&
  ------------------
  |  |   96|      1|#define AVX_BITS (ECX_XSAVE | ECX_OSXSAVE | ECX_AVX)
  |  |  ------------------
  |  |  |  |   83|      1|#define ECX_XSAVE (1 << 26)
  |  |  ------------------
  |  |               #define AVX_BITS (ECX_XSAVE | ECX_OSXSAVE | ECX_AVX)
  |  |  ------------------
  |  |  |  |   84|      1|#define ECX_OSXSAVE (1 << 27)
  |  |  ------------------
  |  |               #define AVX_BITS (ECX_XSAVE | ECX_OSXSAVE | ECX_AVX)
  |  |  ------------------
  |  |  |  |   85|      1|#define ECX_AVX (1 << 28)
  |  |  ------------------
  ------------------
                  avx_support_ = (PRBool)((ecx & AVX_BITS) == AVX_BITS) && check_xcr0_ymm() &&
  ------------------
  |  |   96|      1|#define AVX_BITS (ECX_XSAVE | ECX_OSXSAVE | ECX_AVX)
  |  |  ------------------
  |  |  |  |   83|      1|#define ECX_XSAVE (1 << 26)
  |  |  ------------------
  |  |               #define AVX_BITS (ECX_XSAVE | ECX_OSXSAVE | ECX_AVX)
  |  |  ------------------
  |  |  |  |   84|      1|#define ECX_OSXSAVE (1 << 27)
  |  |  ------------------
  |  |               #define AVX_BITS (ECX_XSAVE | ECX_OSXSAVE | ECX_AVX)
  |  |  ------------------
  |  |  |  |   85|      1|#define ECX_AVX (1 << 28)
  |  |  ------------------
  ------------------
  |  Branch (123:20): [True: 1, False: 0]
  |  Branch (123:62): [True: 1, False: 0]
  ------------------
  124|      1|                   disable_avx == NULL;
  ------------------
  |  Branch (124:20): [True: 1, False: 0]
  ------------------
  125|       |    /* For AVX2 we ensure that:
  126|       |     *  - AVX is supported,
  127|       |     *  - the AVX2, BMI1, and BMI2 bits of EBX from CPUID(EAX=7) are set, and
  128|       |     *  - the FMA, and MOVBE bits of ECX from CPUID(EAX=1) are set.
  129|       |     * We do not check for LZCNT support.
  130|       |     */
  131|      1|    avx2_support_ = (PRBool)(avx_support_ == PR_TRUE &&
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
  |  Branch (131:30): [True: 1, False: 0]
  ------------------
  132|      1|                             (ebx7 & AVX2_EBX_BITS) == AVX2_EBX_BITS &&
  ------------------
  |  |   97|      1|#define AVX2_EBX_BITS (EBX_AVX2 | EBX_BMI1 | EBX_BMI2)
  |  |  ------------------
  |  |  |  |   86|      1|#define EBX_AVX2 (1 << 5)
  |  |  ------------------
  |  |               #define AVX2_EBX_BITS (EBX_AVX2 | EBX_BMI1 | EBX_BMI2)
  |  |  ------------------
  |  |  |  |   88|      1|#define EBX_BMI1 (1 << 3)
  |  |  ------------------
  |  |               #define AVX2_EBX_BITS (EBX_AVX2 | EBX_BMI1 | EBX_BMI2)
  |  |  ------------------
  |  |  |  |   89|      1|#define EBX_BMI2 (1 << 8)
  |  |  ------------------
  ------------------
                                           (ebx7 & AVX2_EBX_BITS) == AVX2_EBX_BITS &&
  ------------------
  |  |   97|      2|#define AVX2_EBX_BITS (EBX_AVX2 | EBX_BMI1 | EBX_BMI2)
  |  |  ------------------
  |  |  |  |   86|      1|#define EBX_AVX2 (1 << 5)
  |  |  ------------------
  |  |               #define AVX2_EBX_BITS (EBX_AVX2 | EBX_BMI1 | EBX_BMI2)
  |  |  ------------------
  |  |  |  |   88|      1|#define EBX_BMI1 (1 << 3)
  |  |  ------------------
  |  |               #define AVX2_EBX_BITS (EBX_AVX2 | EBX_BMI1 | EBX_BMI2)
  |  |  ------------------
  |  |  |  |   89|      1|#define EBX_BMI2 (1 << 8)
  |  |  ------------------
  ------------------
  |  Branch (132:30): [True: 1, False: 0]
  ------------------
  133|      1|                             (ecx & AVX2_ECX_BITS) == AVX2_ECX_BITS &&
  ------------------
  |  |   98|      1|#define AVX2_ECX_BITS (ECX_FMA | ECX_MOVBE)
  |  |  ------------------
  |  |  |  |   91|      1|#define ECX_FMA (1 << 12)
  |  |  ------------------
  |  |               #define AVX2_ECX_BITS (ECX_FMA | ECX_MOVBE)
  |  |  ------------------
  |  |  |  |   92|      1|#define ECX_MOVBE (1 << 22)
  |  |  ------------------
  ------------------
                                           (ecx & AVX2_ECX_BITS) == AVX2_ECX_BITS &&
  ------------------
  |  |   98|      2|#define AVX2_ECX_BITS (ECX_FMA | ECX_MOVBE)
  |  |  ------------------
  |  |  |  |   91|      1|#define ECX_FMA (1 << 12)
  |  |  ------------------
  |  |               #define AVX2_ECX_BITS (ECX_FMA | ECX_MOVBE)
  |  |  ------------------
  |  |  |  |   92|      1|#define ECX_MOVBE (1 << 22)
  |  |  ------------------
  ------------------
  |  Branch (133:30): [True: 1, False: 0]
  ------------------
  134|      1|                             disable_avx2 == NULL);
  ------------------
  |  Branch (134:30): [True: 1, False: 0]
  ------------------
  135|       |    /* CPUID.(EAX=07H, ECX=0H):EBX.ADX[bit 19]=1 indicates
  136|       |    the processor supports ADCX and ADOX instructions.*/
  137|      1|    adx_support_ = (PRBool)((ebx7 & EBX_ADX) != 0 && disable_adx == NULL);
  ------------------
  |  |   87|      1|#define EBX_ADX (1 << 19)
  ------------------
  |  Branch (137:29): [True: 1, False: 0]
  |  Branch (137:54): [True: 1, False: 0]
  ------------------
  138|      1|    ssse3_support_ = (PRBool)((ecx & ECX_SSSE3) != 0 &&
  ------------------
  |  |   93|      1|#define ECX_SSSE3 (1 << 9)
  ------------------
  |  Branch (138:31): [True: 1, False: 0]
  ------------------
  139|      1|                              disable_ssse3 == NULL);
  ------------------
  |  Branch (139:31): [True: 1, False: 0]
  ------------------
  140|      1|    sse4_1_support_ = (PRBool)((ecx & ECX_SSE4_1) != 0 &&
  ------------------
  |  |   94|      1|#define ECX_SSE4_1 (1 << 19)
  ------------------
  |  Branch (140:32): [True: 1, False: 0]
  ------------------
  141|      1|                               disable_sse4_1 == NULL);
  ------------------
  |  Branch (141:32): [True: 1, False: 0]
  ------------------
  142|      1|    sse4_2_support_ = (PRBool)((ecx & ECX_SSE4_2) != 0 &&
  ------------------
  |  |   95|      1|#define ECX_SSE4_2 (1 << 20)
  ------------------
  |  Branch (142:32): [True: 1, False: 0]
  ------------------
  143|      1|                               disable_sse4_2 == NULL);
  ------------------
  |  Branch (143:32): [True: 1, False: 0]
  ------------------
  144|      1|}
sha_support:
  450|  4.51k|{
  451|  4.51k|    return sha_support_;
  452|  4.51k|}
ssse3_support:
  470|  4.51k|{
  471|  4.51k|    return ssse3_support_;
  472|  4.51k|}
sse4_1_support:
  475|  4.51k|{
  476|  4.51k|    return sse4_1_support_;
  477|  4.51k|}
arm_sha2_support:
  505|  4.51k|{
  506|  4.51k|    return arm_sha2_support_;
  507|  4.51k|}
BL_Init:
  576|      1|{
  577|      1|    if (PR_CallOnce(&coFreeblInit, FreeblInit) != PR_SUCCESS) {
  ------------------
  |  Branch (577:9): [True: 0, False: 1]
  ------------------
  578|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  579|      0|        return SECFailure;
  580|      0|    }
  581|      1|    RSA_Init();
  582|       |
  583|      1|    return SECSuccess;
  584|      1|}
blinit.c:check_xcr0_ymm:
   58|      1|{
   59|      1|    PRUint32 xcr0;
   60|       |#if defined(_MSC_VER)
   61|       |#if defined(_M_IX86)
   62|       |    __asm {
   63|       |        mov ecx, 0
   64|       |        xgetbv
   65|       |        mov xcr0, eax
   66|       |    }
   67|       |#else
   68|       |    xcr0 = (PRUint32)_xgetbv(0); /* Requires VS2010 SP1 or later. */
   69|       |#endif /* _M_IX86 */
   70|       |#else  /* _MSC_VER */
   71|       |    /* Old OSX compilers don't support xgetbv. Use byte form. */
   72|      1|    __asm__(".byte 0x0F, 0x01, 0xd0"
   73|      1|            : "=a"(xcr0)
   74|      1|            : "c"(0)
   75|      1|            : "%edx");
   76|      1|#endif /* _MSC_VER */
   77|       |    /* Check if xmm and ymm state are enabled in XCR0. */
   78|      1|    return (xcr0 & 6) == 6;
   79|      1|}
blinit.c:FreeblInit:
  563|      1|{
  564|      1|#ifdef NSS_X86_OR_X64
  565|      1|    CheckX86CPUSupport();
  566|       |#elif (defined(__aarch64__) || defined(__arm__))
  567|       |    CheckARMSupport();
  568|       |#elif (defined(__powerpc__))
  569|       |    CheckPPCSupport();
  570|       |#endif
  571|      1|    return PR_SUCCESS;
  572|      1|}

RNG_RNGInit:
   39|      1|{
   40|       |    /* Allow only one call to initialize the context */
   41|      1|    if (PR_CallOnce(&coRNGInit, rng_init) != PR_SUCCESS) {
  ------------------
  |  Branch (41:9): [True: 0, False: 1]
  ------------------
   42|      0|        return SECFailure;
   43|      0|    }
   44|       |
   45|      1|    return SECSuccess;
   46|      1|}
RNG_RNGShutdown:
  114|      1|{
  115|      1|    if (rng_lock) {
  ------------------
  |  Branch (115:9): [True: 1, False: 0]
  ------------------
  116|      1|        PZ_DestroyLock(rng_lock);
  ------------------
  |  |  244|      1|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  117|      1|        rng_lock = NULL;
  118|      1|    }
  119|      1|    coRNGInit = pristineCallOnce;
  120|      1|}
det_rng.c:rng_init:
   22|      1|{
   23|      1|    rng_lock = PZ_NewLock(nssILockOther);
  ------------------
  |  |  243|      1|#define PZ_NewLock(t) PR_NewLock()
  ------------------
   24|      1|    if (!rng_lock) {
  ------------------
  |  Branch (24:9): [True: 0, False: 1]
  ------------------
   25|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   26|      0|        return PR_FAILURE;
   27|      0|    }
   28|       |    /* --- LOCKED --- */
   29|      1|    PZ_Lock(rng_lock);
  ------------------
  |  |  245|      1|#define PZ_Lock(k) PR_Lock((k))
  ------------------
   30|      1|    memset(globalBytes, 0, GLOBAL_BYTES_SIZE);
  ------------------
  |  |   13|      1|#define GLOBAL_BYTES_SIZE 100
  ------------------
   31|      1|    PZ_Unlock(rng_lock);
  ------------------
  |  |  246|      1|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
   32|       |    /* --- UNLOCKED --- */
   33|       |
   34|      1|    return PR_SUCCESS;
   35|      1|}

DSA_VerifyDigest:
  558|  1.33k|{
  559|       |    /* FIPS-compliance dictates that digest is a SHA hash. */
  560|  1.33k|    mp_int p, q, g;      /* PQG parameters */
  561|  1.33k|    mp_int r_, s_;       /* tuple (r', s') is received signature) */
  562|  1.33k|    mp_int u1, u2, v, w; /* intermediate values used in verification */
  563|  1.33k|    mp_int y;            /* public key */
  564|  1.33k|    mp_err err;
  565|  1.33k|    unsigned int dsa_subprime_len, dsa_signature_len, offset;
  566|  1.33k|    SECItem localDigest;
  567|  1.33k|    unsigned char localDigestData[DSA_MAX_SUBPRIME_LEN];
  568|  1.33k|    SECStatus verified = SECFailure;
  569|       |
  570|       |    /* Check args. */
  571|  1.33k|    if (!key || !signature || !digest) {
  ------------------
  |  Branch (571:9): [True: 0, False: 1.33k]
  |  Branch (571:17): [True: 0, False: 1.33k]
  |  Branch (571:31): [True: 0, False: 1.33k]
  ------------------
  572|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  573|      0|        return SECFailure;
  574|      0|    }
  575|       |
  576|  1.33k|    dsa_subprime_len = PQG_GetLength(&key->params.subPrime);
  577|  1.33k|    dsa_signature_len = dsa_subprime_len * 2;
  578|  1.33k|    if ((signature->len != dsa_signature_len) ||
  ------------------
  |  Branch (578:9): [True: 0, False: 1.33k]
  ------------------
  579|  1.33k|        (digest->len > HASH_LENGTH_MAX) ||
  ------------------
  |  |   48|  1.33k|#define HASH_LENGTH_MAX SHA512_LENGTH
  |  |  ------------------
  |  |  |  |   43|  1.33k|#define SHA512_LENGTH 64
  |  |  ------------------
  ------------------
  |  Branch (579:9): [True: 0, False: 1.33k]
  ------------------
  580|  1.33k|        (digest->len < SHA1_LENGTH)) {
  ------------------
  |  |   39|  1.33k|#define SHA1_LENGTH 20
  ------------------
  |  Branch (580:9): [True: 0, False: 1.33k]
  ------------------
  581|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  582|      0|        return SECFailure;
  583|      0|    }
  584|       |
  585|       |    /* DSA accepts digests not equal to dsa_subprime_len, if the
  586|       |     * digests are greater, than they are truncated to the size of
  587|       |     * dsa_subprime_len, using the left most bits. If they are less
  588|       |     * then they are padded on the left.*/
  589|  1.33k|    PORT_Memset(localDigestData, 0, dsa_subprime_len);
  ------------------
  |  |  182|  1.33k|#define PORT_Memset memset
  ------------------
  590|  1.33k|    offset = (digest->len < dsa_subprime_len) ? (dsa_subprime_len - digest->len) : 0;
  ------------------
  |  Branch (590:14): [True: 1, False: 1.32k]
  ------------------
  591|  1.33k|    PORT_Memcpy(localDigestData + offset, digest->data,
  ------------------
  |  |  180|  1.33k|#define PORT_Memcpy memcpy
  ------------------
  592|  1.33k|                dsa_subprime_len - offset);
  593|  1.33k|    localDigest.data = localDigestData;
  594|  1.33k|    localDigest.len = dsa_subprime_len;
  595|       |
  596|       |    /* Initialize MPI integers. */
  597|  1.33k|    MP_DIGITS(&p) = 0;
  ------------------
  |  |  152|  1.33k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  598|  1.33k|    MP_DIGITS(&q) = 0;
  ------------------
  |  |  152|  1.33k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  599|  1.33k|    MP_DIGITS(&g) = 0;
  ------------------
  |  |  152|  1.33k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  600|  1.33k|    MP_DIGITS(&y) = 0;
  ------------------
  |  |  152|  1.33k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  601|  1.33k|    MP_DIGITS(&r_) = 0;
  ------------------
  |  |  152|  1.33k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  602|  1.33k|    MP_DIGITS(&s_) = 0;
  ------------------
  |  |  152|  1.33k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  603|  1.33k|    MP_DIGITS(&u1) = 0;
  ------------------
  |  |  152|  1.33k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  604|  1.33k|    MP_DIGITS(&u2) = 0;
  ------------------
  |  |  152|  1.33k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  605|  1.33k|    MP_DIGITS(&v) = 0;
  ------------------
  |  |  152|  1.33k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  606|  1.33k|    MP_DIGITS(&w) = 0;
  ------------------
  |  |  152|  1.33k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  607|  1.33k|    CHECK_MPI_OK(mp_init(&p));
  ------------------
  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  ------------------
  |  |   13|  1.33k|    goto cleanup
  ------------------
  608|  1.33k|    CHECK_MPI_OK(mp_init(&q));
  ------------------
  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  ------------------
  |  |   13|  1.33k|    goto cleanup
  ------------------
  609|  1.33k|    CHECK_MPI_OK(mp_init(&g));
  ------------------
  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  ------------------
  |  |   13|  1.33k|    goto cleanup
  ------------------
  610|  1.33k|    CHECK_MPI_OK(mp_init(&y));
  ------------------
  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  ------------------
  |  |   13|  1.33k|    goto cleanup
  ------------------
  611|  1.33k|    CHECK_MPI_OK(mp_init(&r_));
  ------------------
  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  ------------------
  |  |   13|  1.33k|    goto cleanup
  ------------------
  612|  1.33k|    CHECK_MPI_OK(mp_init(&s_));
  ------------------
  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  ------------------
  |  |   13|  1.33k|    goto cleanup
  ------------------
  613|  1.33k|    CHECK_MPI_OK(mp_init(&u1));
  ------------------
  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  ------------------
  |  |   13|  1.33k|    goto cleanup
  ------------------
  614|  1.33k|    CHECK_MPI_OK(mp_init(&u2));
  ------------------
  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  ------------------
  |  |   13|  1.33k|    goto cleanup
  ------------------
  615|  1.33k|    CHECK_MPI_OK(mp_init(&v));
  ------------------
  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  ------------------
  |  |   13|  1.33k|    goto cleanup
  ------------------
  616|  1.33k|    CHECK_MPI_OK(mp_init(&w));
  ------------------
  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  ------------------
  |  |   13|  1.33k|    goto cleanup
  ------------------
  617|       |    /*
  618|       |    ** Convert stored PQG and public key into MPI integers.
  619|       |    */
  620|  1.33k|    SECITEM_TO_MPINT(key->params.prime, &p);
  ------------------
  |  |   19|  1.33k|    CHECK_MPI_OK(mp_read_unsigned_octets((mp), (it).data, (it).len))
  |  |  ------------------
  |  |  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  |  |  ------------------
  |  |  |  |   13|  1.33k|    goto cleanup
  |  |  ------------------
  ------------------
  621|  1.33k|    SECITEM_TO_MPINT(key->params.subPrime, &q);
  ------------------
  |  |   19|  1.33k|    CHECK_MPI_OK(mp_read_unsigned_octets((mp), (it).data, (it).len))
  |  |  ------------------
  |  |  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  |  |  ------------------
  |  |  |  |   13|  1.33k|    goto cleanup
  |  |  ------------------
  ------------------
  622|  1.33k|    SECITEM_TO_MPINT(key->params.base, &g);
  ------------------
  |  |   19|  1.33k|    CHECK_MPI_OK(mp_read_unsigned_octets((mp), (it).data, (it).len))
  |  |  ------------------
  |  |  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  |  |  ------------------
  |  |  |  |   13|  1.33k|    goto cleanup
  |  |  ------------------
  ------------------
  623|  1.33k|    SECITEM_TO_MPINT(key->publicValue, &y);
  ------------------
  |  |   19|  1.33k|    CHECK_MPI_OK(mp_read_unsigned_octets((mp), (it).data, (it).len))
  |  |  ------------------
  |  |  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  |  |  ------------------
  |  |  |  |   13|  1.33k|    goto cleanup
  |  |  ------------------
  ------------------
  624|       |    /*
  625|       |    ** Convert received signature (r', s') into MPI integers.
  626|       |    */
  627|  1.33k|    OCTETS_TO_MPINT(signature->data, &r_, dsa_subprime_len);
  ------------------
  |  |   16|  1.33k|    CHECK_MPI_OK(mp_read_unsigned_octets((mp), oc, len))
  |  |  ------------------
  |  |  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  |  |  ------------------
  |  |  |  |   13|  1.33k|    goto cleanup
  |  |  ------------------
  ------------------
  628|  1.33k|    OCTETS_TO_MPINT(signature->data + dsa_subprime_len, &s_, dsa_subprime_len);
  ------------------
  |  |   16|  1.33k|    CHECK_MPI_OK(mp_read_unsigned_octets((mp), oc, len))
  |  |  ------------------
  |  |  |  |   12|  1.33k|    if (MP_OKAY > (err = func)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  1.33k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (12:9): [True: 0, False: 1.33k]
  |  |  |  |  ------------------
  |  |  |  |   13|  1.33k|    goto cleanup
  |  |  ------------------
  ------------------
  629|       |    /*
  630|       |    ** Verify that 0 < r' < q and 0 < s' < q
  631|       |    */
  632|  1.33k|    if (mp_cmp_z(&r_) <= 0 || mp_cmp_z(&s_) <= 0 ||
  ------------------
  |  Branch (632:9): [True: 0, False: 1.33k]
  |  Branch (632:31): [True: 0, False: 1.33k]
  ------------------
  633|  1.33k|        mp_cmp(&r_, &q) >= 0 || mp_cmp(&s_, &q) >= 0) {
  ------------------
  |  Branch (633:9): [True: 1, False: 1.32k]
  |  Branch (633:33): [True: 1, False: 1.32k]
  ------------------
  634|       |        /* err is zero here. */
  635|      2|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      2|#define PORT_SetError PORT_SetError_Util
  ------------------
  636|      2|        goto cleanup; /* will return verified == SECFailure */
  637|      2|    }
  638|       |    /*
  639|       |    ** FIPS 186-1, Section 6, Step 1
  640|       |    **
  641|       |    ** w = (s')**-1 mod q
  642|       |    */
  643|  1.32k|    CHECK_MPI_OK(mp_invmod(&s_, &q, &w)); /* w = (s')**-1 mod q */
  ------------------
  |  |   12|  1.32k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.32k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 47, False: 1.28k]
  |  |  ------------------
  |  |   13|  1.32k|    goto cleanup
  ------------------
  644|       |    /*
  645|       |    ** FIPS 186-1, Section 6, Step 2
  646|       |    **
  647|       |    ** u1 = ((Hash(M')) * w) mod q
  648|       |    */
  649|  1.28k|    SECITEM_TO_MPINT(localDigest, &u1);        /* u1 = HASH(M')     */
  ------------------
  |  |   19|  1.28k|    CHECK_MPI_OK(mp_read_unsigned_octets((mp), (it).data, (it).len))
  |  |  ------------------
  |  |  |  |   12|  1.28k|    if (MP_OKAY > (err = func)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (12:9): [True: 0, False: 1.28k]
  |  |  |  |  ------------------
  |  |  |  |   13|  1.28k|    goto cleanup
  |  |  ------------------
  ------------------
  650|  1.28k|    CHECK_MPI_OK(mp_mulmod(&u1, &w, &q, &u1)); /* u1 = u1 * w mod q */
  ------------------
  |  |   12|  1.28k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |   13|  1.28k|    goto cleanup
  ------------------
  651|       |    /*
  652|       |    ** FIPS 186-1, Section 6, Step 3
  653|       |    **
  654|       |    ** u2 = ((r') * w) mod q
  655|       |    */
  656|  1.28k|    CHECK_MPI_OK(mp_mulmod(&r_, &w, &q, &u2));
  ------------------
  |  |   12|  1.28k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |   13|  1.28k|    goto cleanup
  ------------------
  657|       |    /*
  658|       |    ** FIPS 186-1, Section 6, Step 4
  659|       |    **
  660|       |    ** v = ((g**u1 * y**u2) mod p) mod q
  661|       |    */
  662|  1.28k|    CHECK_MPI_OK(mp_exptmod(&g, &u1, &p, &g)); /* g = g**u1 mod p */
  ------------------
  |  |   12|  1.28k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |   13|  1.28k|    goto cleanup
  ------------------
  663|  1.28k|    CHECK_MPI_OK(mp_exptmod(&y, &u2, &p, &y)); /* y = y**u2 mod p */
  ------------------
  |  |   12|  1.28k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |   13|  1.28k|    goto cleanup
  ------------------
  664|  1.28k|    CHECK_MPI_OK(mp_mulmod(&g, &y, &p, &v));   /* v = g * y mod p */
  ------------------
  |  |   12|  1.28k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |   13|  1.28k|    goto cleanup
  ------------------
  665|  1.28k|    CHECK_MPI_OK(mp_mod(&v, &q, &v));          /* v = v mod q     */
  ------------------
  |  |   12|  1.28k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |   13|  1.28k|    goto cleanup
  ------------------
  666|       |    /*
  667|       |    ** Verification:  v == r'
  668|       |    */
  669|  1.28k|    if (mp_cmp(&v, &r_)) {
  ------------------
  |  Branch (669:9): [True: 1.26k, False: 16]
  ------------------
  670|  1.26k|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|  1.26k|#define PORT_SetError PORT_SetError_Util
  ------------------
  671|  1.26k|        verified = SECFailure; /* Signature failed to verify. */
  672|  1.26k|    } else {
  673|     16|        verified = SECSuccess; /* Signature verified. */
  674|     16|    }
  675|  1.33k|cleanup:
  676|  1.33k|    PORT_SafeZero(localDigestData, sizeof localDigestData);
  677|  1.33k|    mp_clear(&p);
  678|  1.33k|    mp_clear(&q);
  679|  1.33k|    mp_clear(&g);
  680|  1.33k|    mp_clear(&y);
  681|  1.33k|    mp_clear(&r_);
  682|  1.33k|    mp_clear(&s_);
  683|  1.33k|    mp_clear(&u1);
  684|  1.33k|    mp_clear(&u2);
  685|  1.33k|    mp_clear(&v);
  686|  1.33k|    mp_clear(&w);
  687|  1.33k|    if (err) {
  ------------------
  |  Branch (687:9): [True: 47, False: 1.28k]
  ------------------
  688|     47|        translate_mpi_error(err);
  689|     47|    }
  690|  1.33k|    return verified;
  691|  1.28k|}
dsa.c:translate_mpi_error:
  149|     47|{
  150|     47|    MP_TO_SEC_ERROR(err);
  ------------------
  |  |   41|     47|    switch (err) {                                    \
  |  |   42|      0|        case MP_MEM:                                  \
  |  |  ------------------
  |  |  |  |   42|      0|#define MP_MEM -2    /* out of memory         */
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 47]
  |  |  ------------------
  |  |   43|      0|            PORT_SetError(SEC_ERROR_NO_MEMORY);       \
  |  |  ------------------
  |  |  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  |  |  ------------------
  |  |   44|      0|            break;                                    \
  |  |   45|      0|        case MP_RANGE:                                \
  |  |  ------------------
  |  |  |  |   43|      0|#define MP_RANGE -3  /* argument out of range */
  |  |  ------------------
  |  |  |  Branch (45:9): [True: 0, False: 47]
  |  |  ------------------
  |  |   46|      0|            PORT_SetError(SEC_ERROR_BAD_DATA);        \
  |  |  ------------------
  |  |  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  |  |  ------------------
  |  |   47|      0|            break;                                    \
  |  |   48|      0|        case MP_BADARG:                               \
  |  |  ------------------
  |  |  |  |   44|      0|#define MP_BADARG -4 /* invalid parameter     */
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 0, False: 47]
  |  |  ------------------
  |  |   49|      0|            PORT_SetError(SEC_ERROR_INVALID_ARGS);    \
  |  |  ------------------
  |  |  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  |  |  ------------------
  |  |   50|      0|            break;                                    \
  |  |   51|     47|        default:                                      \
  |  |  ------------------
  |  |  |  Branch (51:9): [True: 47, False: 0]
  |  |  ------------------
  |  |   52|     47|            PORT_SetError(SEC_ERROR_LIBRARY_FAILURE); \
  |  |  ------------------
  |  |  |  |   65|     47|#define PORT_SetError PORT_SetError_Util
  |  |  ------------------
  |  |   53|     47|            break;                                    \
  |  |   54|     47|    }
  ------------------
  151|     47|}

EC_ValidatePublicKey:
  318|    281|{
  319|    281|    if (!ecParams || ecParams->name == ECCurve_noName ||
  ------------------
  |  Branch (319:9): [True: 0, False: 281]
  |  Branch (319:22): [True: 0, False: 281]
  ------------------
  320|    281|        !publicValue || !publicValue->len) {
  ------------------
  |  Branch (320:9): [True: 0, False: 281]
  |  Branch (320:25): [True: 0, False: 281]
  ------------------
  321|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  322|      0|        return SECFailure;
  323|      0|    }
  324|       |
  325|       |    /* Uses curve specific code for point validation. */
  326|    281|    if (ecParams->fieldID.type != ec_field_plain) {
  ------------------
  |  Branch (326:9): [True: 0, False: 281]
  ------------------
  327|      0|        PORT_SetError(SEC_ERROR_UNSUPPORTED_ELLIPTIC_CURVE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  328|      0|        return SECFailure;
  329|      0|    }
  330|       |
  331|    281|    const ECMethod *method = ec_get_method_from_name(ecParams->name);
  332|    281|    if (method == NULL || method->pt_validate == NULL) {
  ------------------
  |  Branch (332:9): [True: 0, False: 281]
  |  Branch (332:27): [True: 0, False: 281]
  ------------------
  333|       |        /* unknown curve */
  334|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  335|      0|        return SECFailure;
  336|      0|    }
  337|       |
  338|    281|    SECStatus rv = method->pt_validate(publicValue);
  339|    281|    if (rv != SECSuccess) {
  ------------------
  |  Branch (339:9): [True: 60, False: 221]
  ------------------
  340|     60|        PORT_SetError(SEC_ERROR_BAD_KEY);
  ------------------
  |  |   65|     60|#define PORT_SetError PORT_SetError_Util
  ------------------
  341|     60|    }
  342|    281|    return rv;
  343|    281|}
ECDSA_VerifyDigest:
  540|    218|{
  541|    218|    SECStatus rv = SECFailure;
  542|    218|    ECParams *ecParams = NULL;
  543|       |
  544|       |    /* Check args */
  545|    218|    if (!key || !signature || !digest) {
  ------------------
  |  Branch (545:9): [True: 0, False: 218]
  |  Branch (545:17): [True: 0, False: 218]
  |  Branch (545:31): [True: 0, False: 218]
  ------------------
  546|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  547|      0|        return SECFailure;
  548|      0|    }
  549|       |
  550|    218|    ecParams = &(key->ecParams);
  551|       |
  552|       |    /* Perform curve specific signature verification using ECMethod */
  553|    218|    if (ecParams->fieldID.type != ec_field_plain) {
  ------------------
  |  Branch (553:9): [True: 0, False: 218]
  ------------------
  554|      0|        PORT_SetError(SEC_ERROR_UNSUPPORTED_ELLIPTIC_CURVE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  555|      0|        return SECFailure;
  556|      0|    }
  557|       |
  558|    218|    const ECMethod *method = ec_get_method_from_name(ecParams->name);
  559|    218|    if (method == NULL || method->verify_digest == NULL) {
  ------------------
  |  Branch (559:9): [True: 0, False: 218]
  |  Branch (559:27): [True: 0, False: 218]
  ------------------
  560|      0|        PORT_SetError(SEC_ERROR_UNSUPPORTED_ELLIPTIC_CURVE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  561|      0|        return SECFailure;
  562|      0|    }
  563|       |
  564|    218|    rv = method->verify_digest(key, signature, digest);
  565|    218|    if (rv != SECSuccess) {
  ------------------
  |  Branch (565:9): [True: 185, False: 33]
  ------------------
  566|    185|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|    185|#define PORT_SetError PORT_SetError_Util
  ------------------
  567|    185|    }
  568|       |
  569|       |#if EC_DEBUG
  570|       |    printf("ECDSA verification %s\n",
  571|       |           (rv == SECSuccess) ? "succeeded" : "failed");
  572|       |#endif
  573|       |
  574|    218|    return rv;
  575|    218|}
ec.c:ec_get_method_from_name:
   87|    499|{
   88|    499|    unsigned long i;
   89|  1.30k|    for (i = 0; i < sizeof(kMethods) / sizeof(kMethods[0]); ++i) {
  ------------------
  |  Branch (89:17): [True: 1.30k, False: 0]
  ------------------
   90|  1.30k|        if (kMethods[i].name == name) {
  ------------------
  |  Branch (90:13): [True: 499, False: 806]
  ------------------
   91|    499|            return &kMethods[i];
   92|    499|        }
   93|  1.30k|    }
   94|      0|    return NULL;
   95|    499|}

EC_FillParams:
  100|    323|{
  101|    323|    SECStatus rv = SECFailure;
  102|    323|    SECOidTag tag;
  103|    323|    SECItem oid = { siBuffer, NULL, 0 };
  104|       |
  105|       |#if EC_DEBUG
  106|       |    int i;
  107|       |
  108|       |    printf("Encoded params in EC_DecodeParams: ");
  109|       |    for (i = 0; i < encodedParams->len; i++) {
  110|       |        printf("%02x:", encodedParams->data[i]);
  111|       |    }
  112|       |    printf("\n");
  113|       |#endif
  114|       |
  115|    323|    if ((encodedParams->len != ANSI_X962_CURVE_OID_TOTAL_LEN) &&
  ------------------
  |  |   10|    323|#define ANSI_X962_CURVE_OID_TOTAL_LEN 10
  ------------------
  |  Branch (115:9): [True: 137, False: 186]
  ------------------
  116|    323|        (encodedParams->len != SECG_CURVE_OID_TOTAL_LEN) &&
  ------------------
  |  |   11|    137|#define SECG_CURVE_OID_TOTAL_LEN 7
  ------------------
  |  Branch (116:9): [True: 0, False: 137]
  ------------------
  117|    323|        (encodedParams->len != PKIX_NEWCURVES_OID_TOTAL_LEN) &&
  ------------------
  |  |   12|      0|#define PKIX_NEWCURVES_OID_TOTAL_LEN 11
  ------------------
  |  Branch (117:9): [True: 0, False: 0]
  ------------------
  118|    323|        (encodedParams->len != ED25519_OID_TOTAL_LEN)) {
  ------------------
  |  |   13|      0|#define ED25519_OID_TOTAL_LEN 5
  ------------------
  |  Branch (118:9): [True: 0, False: 0]
  ------------------
  119|      0|        PORT_SetError(SEC_ERROR_UNSUPPORTED_ELLIPTIC_CURVE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  120|      0|        return SECFailure;
  121|    323|    };
  122|       |
  123|    323|    oid.len = encodedParams->len - 2;
  124|    323|    oid.data = encodedParams->data + 2;
  125|    323|    if ((encodedParams->data[0] != SEC_ASN1_OBJECT_ID) ||
  ------------------
  |  |   82|    323|#define SEC_ASN1_OBJECT_ID 0x06
  ------------------
  |  Branch (125:9): [True: 0, False: 323]
  ------------------
  126|    323|        ((tag = SECOID_FindOIDTag(&oid)) == SEC_OID_UNKNOWN)) {
  ------------------
  |  |  117|    323|#define SECOID_FindOIDTag SECOID_FindOIDTag_Util
  ------------------
  |  Branch (126:9): [True: 0, False: 323]
  ------------------
  127|      0|        PORT_SetError(SEC_ERROR_UNSUPPORTED_ELLIPTIC_CURVE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  128|      0|        return SECFailure;
  129|      0|    }
  130|       |
  131|    323|    params->arena = arena;
  132|    323|    params->cofactor = 0;
  133|    323|    params->type = ec_params_named;
  134|    323|    params->name = ECCurve_noName;
  135|       |
  136|       |    /* Fill out curveOID */
  137|    323|    params->curveOID.len = oid.len;
  138|    323|    params->curveOID.data = (unsigned char *)PORT_ArenaAlloc(arena, oid.len);
  ------------------
  |  |   53|    323|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  139|    323|    if (params->curveOID.data == NULL)
  ------------------
  |  Branch (139:9): [True: 0, False: 323]
  ------------------
  140|      0|        goto cleanup;
  141|    323|    memcpy(params->curveOID.data, oid.data, oid.len);
  142|       |
  143|       |#if EC_DEBUG
  144|       |    printf("Curve: %s\n", SECOID_FindOIDTagDescription(tag));
  145|       |#endif
  146|       |
  147|    323|    switch (tag) {
  148|    176|        case SEC_OID_ANSIX962_EC_PRIME256V1:
  ------------------
  |  Branch (148:9): [True: 176, False: 147]
  ------------------
  149|       |            /* Populate params for prime256v1 aka secp256r1
  150|       |             * (the NIST P-256 curve)
  151|       |             */
  152|    176|            CHECK_SEC_OK(gf_populate_params_bytes(ECCurve_X9_62_PRIME_256V1,
  ------------------
  |  |   20|    176|    if (SECSuccess != (rv = func)) \
  |  |  ------------------
  |  |  |  Branch (20:9): [True: 0, False: 176]
  |  |  ------------------
  |  |   21|    176|    goto cleanup
  ------------------
  153|    176|                                                  ec_field_plain, params));
  154|    176|            break;
  155|       |
  156|    176|        case SEC_OID_SECG_EC_SECP384R1:
  ------------------
  |  Branch (156:9): [True: 58, False: 265]
  ------------------
  157|       |            /* Populate params for secp384r1
  158|       |             * (the NIST P-384 curve)
  159|       |             */
  160|     58|            CHECK_SEC_OK(gf_populate_params_bytes(ECCurve_SECG_PRIME_384R1,
  ------------------
  |  |   20|     58|    if (SECSuccess != (rv = func)) \
  |  |  ------------------
  |  |  |  Branch (20:9): [True: 0, False: 58]
  |  |  ------------------
  |  |   21|     58|    goto cleanup
  ------------------
  161|     58|                                                  ec_field_plain, params));
  162|     58|            break;
  163|       |
  164|     63|        case SEC_OID_SECG_EC_SECP521R1:
  ------------------
  |  Branch (164:9): [True: 63, False: 260]
  ------------------
  165|       |            /* Populate params for secp521r1
  166|       |             * (the NIST P-521 curve)
  167|       |             */
  168|     63|            CHECK_SEC_OK(gf_populate_params_bytes(ECCurve_SECG_PRIME_521R1,
  ------------------
  |  |   20|     63|    if (SECSuccess != (rv = func)) \
  |  |  ------------------
  |  |  |  Branch (20:9): [True: 0, False: 63]
  |  |  ------------------
  |  |   21|     63|    goto cleanup
  ------------------
  169|     63|                                                  ec_field_plain, params));
  170|     63|            break;
  171|       |
  172|     63|        case SEC_OID_ED25519_PUBLIC_KEY:
  ------------------
  |  Branch (172:9): [True: 0, False: 323]
  ------------------
  173|      0|            params->type = ec_params_edwards_named;
  174|      0|            CHECK_SEC_OK(gf_populate_params_bytes(ECCurve_Ed25519,
  ------------------
  |  |   20|      0|    if (SECSuccess != (rv = func)) \
  |  |  ------------------
  |  |  |  Branch (20:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   21|      0|    goto cleanup
  ------------------
  175|      0|                                                  ec_field_plain, params));
  176|       |
  177|      0|            break;
  178|       |
  179|      0|        case SEC_OID_X25519:
  ------------------
  |  Branch (179:9): [True: 0, False: 323]
  ------------------
  180|      0|        case SEC_OID_CURVE25519:
  ------------------
  |  Branch (180:9): [True: 0, False: 323]
  ------------------
  181|       |            /* Populate params for Curve25519 */
  182|      0|            params->type = ec_params_montgomery_named;
  183|      0|            CHECK_SEC_OK(gf_populate_params_bytes(ECCurve25519,
  ------------------
  |  |   20|      0|    if (SECSuccess != (rv = func)) \
  |  |  ------------------
  |  |  |  Branch (20:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   21|      0|    goto cleanup
  ------------------
  184|      0|                                                  ec_field_plain,
  185|      0|                                                  params));
  186|      0|            break;
  187|       |
  188|     26|        default:
  ------------------
  |  Branch (188:9): [True: 26, False: 297]
  ------------------
  189|     26|            break;
  190|    323|    };
  191|       |
  192|    323|cleanup:
  193|    323|    if (!params->cofactor) {
  ------------------
  |  Branch (193:9): [True: 26, False: 297]
  ------------------
  194|     26|        PORT_SetError(SEC_ERROR_UNSUPPORTED_ELLIPTIC_CURVE);
  ------------------
  |  |   65|     26|#define PORT_SetError PORT_SetError_Util
  ------------------
  195|       |#if EC_DEBUG
  196|       |        printf("Unrecognized curve, returning NULL params\n");
  197|       |#endif
  198|     26|    }
  199|       |
  200|    323|    return rv;
  201|    323|}
EC_GetPointSize:
  241|    297|{
  242|    297|    ECCurveName name = params->name;
  243|    297|    const ECCurveBytes *curveParams;
  244|       |
  245|    297|    if ((name < ECCurve_noName) || (name > ECCurve_pastLastCurve) ||
  ------------------
  |  Branch (245:9): [True: 0, False: 297]
  |  Branch (245:36): [True: 0, False: 297]
  ------------------
  246|    297|        ((curveParams = ecCurve_map[name]) == NULL)) {
  ------------------
  |  Branch (246:9): [True: 0, False: 297]
  ------------------
  247|       |        /* unknown curve, calculate point size from params. assume standard curves with 2 points
  248|       |         * and a point compression indicator byte */
  249|      0|        int sizeInBytes = (params->fieldID.size + 7) / 8;
  250|      0|        return sizeInBytes * 2 + 1;
  251|      0|    }
  252|       |
  253|    297|    if (params->type == ec_params_edwards_named || params->type == ec_params_montgomery_named) {
  ------------------
  |  Branch (253:9): [True: 0, False: 297]
  |  Branch (253:52): [True: 0, False: 297]
  ------------------
  254|      0|        return curveParams->scalarSize;
  255|      0|    }
  256|       |
  257|    297|    return curveParams->pointSize - 1;
  258|    297|}
ecdecode.c:gf_populate_params_bytes:
   65|    297|{
   66|    297|    SECStatus rv = SECFailure;
   67|    297|    const ECCurveBytes *curveParams;
   68|       |
   69|    297|    if ((name < ECCurve_noName) || (name > ECCurve_pastLastCurve))
  ------------------
  |  Branch (69:9): [True: 0, False: 297]
  |  Branch (69:36): [True: 0, False: 297]
  ------------------
   70|      0|        goto cleanup;
   71|    297|    params->name = name;
   72|    297|    curveParams = ecCurve_map[params->name];
   73|    297|    CHECK_OK(curveParams);
  ------------------
  |  |   17|    297|    if (func == NULL)  \
  |  |  ------------------
  |  |  |  Branch (17:9): [True: 0, False: 297]
  |  |  ------------------
  |  |   18|    297|    goto cleanup
  ------------------
   74|    297|    params->fieldID.size = curveParams->size;
   75|    297|    params->fieldID.type = field_type;
   76|    297|    if (field_type != ec_field_plain) {
  ------------------
  |  Branch (76:9): [True: 0, False: 297]
  ------------------
   77|      0|        return SECFailure;
   78|      0|    }
   79|    297|    params->fieldID.u.prime.len = curveParams->scalarSize;
   80|    297|    params->fieldID.u.prime.data = (unsigned char *)curveParams->irr;
   81|    297|    params->curve.a.len = curveParams->scalarSize;
   82|    297|    params->curve.a.data = (unsigned char *)curveParams->curvea;
   83|    297|    params->curve.b.len = curveParams->scalarSize;
   84|    297|    params->curve.b.data = (unsigned char *)curveParams->curveb;
   85|    297|    params->base.len = curveParams->pointSize;
   86|    297|    params->base.data = (unsigned char *)curveParams->base;
   87|    297|    params->order.len = curveParams->scalarSize;
   88|    297|    params->order.data = (unsigned char *)curveParams->order;
   89|    297|    params->cofactor = curveParams->cofactor;
   90|       |
   91|    297|    rv = SECSuccess;
   92|       |
   93|    297|cleanup:
   94|    297|    return rv;
   95|    297|}

ec_secp256r1_pt_validate:
   19|    166|{
   20|    166|    SECStatus res = SECSuccess;
   21|    166|    if (!pt || !pt->data) {
  ------------------
  |  Branch (21:9): [True: 0, False: 166]
  |  Branch (21:16): [True: 0, False: 166]
  ------------------
   22|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   23|      0|        res = SECFailure;
   24|      0|        return res;
   25|      0|    }
   26|       |
   27|    166|    if (pt->len != 65) {
  ------------------
  |  Branch (27:9): [True: 0, False: 166]
  ------------------
   28|      0|        PORT_SetError(SEC_ERROR_BAD_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   29|      0|        res = SECFailure;
   30|      0|        return res;
   31|      0|    }
   32|       |
   33|    166|    if (pt->data[0] != EC_POINT_FORM_UNCOMPRESSED) {
  ------------------
  |  |   92|    166|#define EC_POINT_FORM_UNCOMPRESSED 0x04
  ------------------
  |  Branch (33:9): [True: 0, False: 166]
  ------------------
   34|      0|        PORT_SetError(SEC_ERROR_UNSUPPORTED_EC_POINT_FORM);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   35|      0|        res = SECFailure;
   36|      0|        return res;
   37|      0|    }
   38|       |
   39|    166|    bool b = Hacl_P256_validate_public_key(pt->data + 1);
   40|       |
   41|    166|    if (!b) {
  ------------------
  |  Branch (41:9): [True: 38, False: 128]
  ------------------
   42|     38|        PORT_SetError(SEC_ERROR_BAD_KEY);
  ------------------
  |  |   65|     38|#define PORT_SetError PORT_SetError_Util
  ------------------
   43|     38|        res = SECFailure;
   44|     38|    }
   45|    166|    return res;
   46|    166|}
ec_secp256r1_verify_digest:
  228|    126|{
  229|    126|    SECStatus res = SECSuccess;
  230|       |
  231|    126|    unsigned char _padded_sig_data[64] = { 0 };
  232|    126|    unsigned char *sig_r, *sig_s;
  233|       |
  234|    126|    if (!key || !signature || !digest ||
  ------------------
  |  Branch (234:9): [True: 0, False: 126]
  |  Branch (234:17): [True: 0, False: 126]
  |  Branch (234:31): [True: 0, False: 126]
  ------------------
  235|    126|        !key->publicValue.data ||
  ------------------
  |  Branch (235:9): [True: 0, False: 126]
  ------------------
  236|    126|        !signature->data || !digest->data ||
  ------------------
  |  Branch (236:9): [True: 0, False: 126]
  |  Branch (236:29): [True: 0, False: 126]
  ------------------
  237|    126|        key->ecParams.name != ECCurve_NIST_P256) {
  ------------------
  |  Branch (237:9): [True: 0, False: 126]
  ------------------
  238|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  239|      0|        res = SECFailure;
  240|      0|        return res;
  241|      0|    }
  242|       |
  243|    126|    unsigned int olen = key->ecParams.order.len;
  244|    126|    if (signature->len == 0 || signature->len % 2 != 0 ||
  ------------------
  |  Branch (244:9): [True: 0, False: 126]
  |  Branch (244:32): [True: 0, False: 126]
  ------------------
  245|    126|        signature->len > 2 * olen ||
  ------------------
  |  Branch (245:9): [True: 0, False: 126]
  ------------------
  246|    126|        digest->len == 0 || key->publicValue.len != 65) {
  ------------------
  |  Branch (246:9): [True: 0, False: 126]
  |  Branch (246:29): [True: 0, False: 126]
  ------------------
  247|      0|        PORT_SetError(SEC_ERROR_INPUT_LEN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  248|      0|        res = SECFailure;
  249|      0|        return res;
  250|      0|    }
  251|       |
  252|    126|    if (key->publicValue.data[0] != EC_POINT_FORM_UNCOMPRESSED) {
  ------------------
  |  |   92|    126|#define EC_POINT_FORM_UNCOMPRESSED 0x04
  ------------------
  |  Branch (252:9): [True: 0, False: 126]
  ------------------
  253|      0|        PORT_SetError(SEC_ERROR_UNSUPPORTED_EC_POINT_FORM);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  254|      0|        res = SECFailure;
  255|      0|        return res;
  256|      0|    }
  257|       |
  258|       |    /* P-256 signature has to be 64 bytes long, pad it with 0s if it isn't */
  259|    126|    if (signature->len != 64) {
  ------------------
  |  Branch (259:9): [True: 0, False: 126]
  ------------------
  260|      0|        unsigned split = signature->len / 2;
  261|      0|        unsigned pad = 32 - split;
  262|       |
  263|      0|        unsigned char *o_sig = signature->data;
  264|      0|        unsigned char *p_sig = _padded_sig_data;
  265|       |
  266|      0|        memcpy(p_sig + pad, o_sig, split);
  267|      0|        memcpy(p_sig + 32 + pad, o_sig + split, split);
  268|       |
  269|      0|        sig_r = p_sig;
  270|      0|        sig_s = p_sig + 32;
  271|    126|    } else {
  272|    126|        sig_r = signature->data;
  273|    126|        sig_s = signature->data + 32;
  274|    126|    }
  275|       |
  276|    126|    uint8_t hash[32] = { 0 };
  277|    126|    if (digest->len < 32) {
  ------------------
  |  Branch (277:9): [True: 1, False: 125]
  ------------------
  278|      1|        memcpy(hash + 32 - digest->len, digest->data, digest->len);
  279|    125|    } else {
  280|    125|        memcpy(hash, digest->data, 32);
  281|    125|    }
  282|       |
  283|    126|    bool b = Hacl_P256_ecdsa_verif_without_hash(
  284|    126|        32, hash,
  285|    126|        key->publicValue.data + 1,
  286|    126|        sig_r, sig_s);
  287|    126|    if (!b) {
  ------------------
  |  Branch (287:9): [True: 106, False: 20]
  ------------------
  288|    106|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|    106|#define PORT_SetError PORT_SetError_Util
  ------------------
  289|    106|        res = SECFailure;
  290|    106|        return res;
  291|    106|    }
  292|       |
  293|     20|    return res;
  294|    126|}

ec_secp384r1_pt_validate:
   21|     57|{
   22|     57|    SECStatus res = SECSuccess;
   23|     57|    if (!pt || !pt->data) {
  ------------------
  |  Branch (23:9): [True: 0, False: 57]
  |  Branch (23:16): [True: 0, False: 57]
  ------------------
   24|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   25|      0|        res = SECFailure;
   26|      0|        return res;
   27|      0|    }
   28|       |
   29|     57|    if (pt->len != 97) {
  ------------------
  |  Branch (29:9): [True: 0, False: 57]
  ------------------
   30|      0|        PORT_SetError(SEC_ERROR_BAD_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   31|      0|        res = SECFailure;
   32|      0|        return res;
   33|      0|    }
   34|       |
   35|     57|    if (pt->data[0] != EC_POINT_FORM_UNCOMPRESSED) {
  ------------------
  |  |   92|     57|#define EC_POINT_FORM_UNCOMPRESSED 0x04
  ------------------
  |  Branch (35:9): [True: 0, False: 57]
  ------------------
   36|      0|        PORT_SetError(SEC_ERROR_UNSUPPORTED_EC_POINT_FORM);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   37|      0|        res = SECFailure;
   38|      0|        return res;
   39|      0|    }
   40|       |
   41|     57|    bool b = Hacl_P384_validate_public_key(pt->data + 1);
   42|       |
   43|     57|    if (!b) {
  ------------------
  |  Branch (43:9): [True: 6, False: 51]
  ------------------
   44|      6|        PORT_SetError(SEC_ERROR_BAD_KEY);
  ------------------
  |  |   65|      6|#define PORT_SetError PORT_SetError_Util
  ------------------
   45|      6|        res = SECFailure;
   46|      6|    }
   47|     57|    return res;
   48|     57|}
ec_secp384r1_verify_digest:
  230|     50|{
  231|     50|    SECStatus res = SECSuccess;
  232|       |
  233|     50|    if (!key || !signature || !digest ||
  ------------------
  |  Branch (233:9): [True: 0, False: 50]
  |  Branch (233:17): [True: 0, False: 50]
  |  Branch (233:31): [True: 0, False: 50]
  ------------------
  234|     50|        !key->publicValue.data ||
  ------------------
  |  Branch (234:9): [True: 0, False: 50]
  ------------------
  235|     50|        !signature->data || !digest->data ||
  ------------------
  |  Branch (235:9): [True: 0, False: 50]
  |  Branch (235:29): [True: 0, False: 50]
  ------------------
  236|     50|        key->ecParams.name != ECCurve_NIST_P384) {
  ------------------
  |  Branch (236:9): [True: 0, False: 50]
  ------------------
  237|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  238|      0|        res = SECFailure;
  239|      0|        return res;
  240|      0|    }
  241|       |
  242|     50|    if (signature->len == 0 || signature->len % 2 != 0 ||
  ------------------
  |  Branch (242:9): [True: 0, False: 50]
  |  Branch (242:32): [True: 0, False: 50]
  ------------------
  243|     50|        signature->len > 96 || digest->len == 0 ||
  ------------------
  |  Branch (243:9): [True: 0, False: 50]
  |  Branch (243:32): [True: 0, False: 50]
  ------------------
  244|     50|        key->publicValue.len != 97) {
  ------------------
  |  Branch (244:9): [True: 0, False: 50]
  ------------------
  245|      0|        PORT_SetError(SEC_ERROR_INPUT_LEN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  246|      0|        res = SECFailure;
  247|      0|        return res;
  248|      0|    }
  249|       |
  250|     50|    if (key->publicValue.data[0] != EC_POINT_FORM_UNCOMPRESSED) {
  ------------------
  |  |   92|     50|#define EC_POINT_FORM_UNCOMPRESSED 0x04
  ------------------
  |  Branch (250:9): [True: 0, False: 50]
  ------------------
  251|      0|        PORT_SetError(SEC_ERROR_UNSUPPORTED_EC_POINT_FORM);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  252|      0|        res = SECFailure;
  253|      0|        return res;
  254|      0|    }
  255|       |
  256|       |    // Signatures should be 96 bytes, but some software produces short signatures.
  257|       |    // Pad components with zeros if necessary.
  258|     50|    uint8_t paddedSigData[96] = { 0 };
  259|     50|    uint8_t *sig;
  260|     50|    if (signature->len != 96) {
  ------------------
  |  Branch (260:9): [True: 0, False: 50]
  ------------------
  261|      0|        size_t split = signature->len / 2;
  262|       |
  263|      0|        memcpy(paddedSigData + 48 - split, signature->data, split);
  264|      0|        memcpy(paddedSigData + 96 - split, signature->data + split, split);
  265|       |
  266|      0|        sig = paddedSigData;
  267|     50|    } else {
  268|     50|        sig = signature->data;
  269|     50|    }
  270|       |
  271|     50|    uint8_t hash[48] = { 0 };
  272|     50|    if (digest->len < 48) {
  ------------------
  |  Branch (272:9): [True: 50, False: 0]
  ------------------
  273|     50|        memcpy(hash + 48 - digest->len, digest->data, digest->len);
  274|     50|    } else {
  275|      0|        memcpy(hash, digest->data, 48);
  276|      0|    }
  277|       |
  278|     50|    bool b = Hacl_P384_ecdsa_verif_without_hash(
  279|     50|        48, hash, key->publicValue.data + 1, sig, sig + 48);
  280|     50|    if (!b) {
  ------------------
  |  Branch (280:9): [True: 45, False: 5]
  ------------------
  281|     45|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|     45|#define PORT_SetError PORT_SetError_Util
  ------------------
  282|     45|        res = SECFailure;
  283|     45|        return res;
  284|     45|    }
  285|       |
  286|      5|    return res;
  287|     50|}

ec_secp521r1_pt_validate:
   21|     58|{
   22|     58|    SECStatus res = SECSuccess;
   23|     58|    if (!pt || !pt->data) {
  ------------------
  |  Branch (23:9): [True: 0, False: 58]
  |  Branch (23:16): [True: 0, False: 58]
  ------------------
   24|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   25|      0|        res = SECFailure;
   26|      0|        return res;
   27|      0|    }
   28|       |
   29|     58|    if (pt->len != 133) {
  ------------------
  |  Branch (29:9): [True: 0, False: 58]
  ------------------
   30|      0|        PORT_SetError(SEC_ERROR_BAD_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   31|      0|        res = SECFailure;
   32|      0|        return res;
   33|      0|    }
   34|       |
   35|     58|    if (pt->data[0] != EC_POINT_FORM_UNCOMPRESSED) {
  ------------------
  |  |   92|     58|#define EC_POINT_FORM_UNCOMPRESSED 0x04
  ------------------
  |  Branch (35:9): [True: 0, False: 58]
  ------------------
   36|      0|        PORT_SetError(SEC_ERROR_UNSUPPORTED_EC_POINT_FORM);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   37|      0|        res = SECFailure;
   38|      0|        return res;
   39|      0|    }
   40|       |
   41|     58|    bool b = Hacl_P521_validate_public_key(pt->data + 1);
   42|       |
   43|     58|    if (!b) {
  ------------------
  |  Branch (43:9): [True: 16, False: 42]
  ------------------
   44|     16|        PORT_SetError(SEC_ERROR_BAD_KEY);
  ------------------
  |  |   65|     16|#define PORT_SetError PORT_SetError_Util
  ------------------
   45|     16|        res = SECFailure;
   46|     16|    }
   47|     58|    return res;
   48|     58|}
ec_secp521r1_verify_digest:
  232|     42|{
  233|     42|    SECStatus res = SECSuccess;
  234|       |
  235|     42|    if (!key || !signature || !digest ||
  ------------------
  |  Branch (235:9): [True: 0, False: 42]
  |  Branch (235:17): [True: 0, False: 42]
  |  Branch (235:31): [True: 0, False: 42]
  ------------------
  236|     42|        !key->publicValue.data ||
  ------------------
  |  Branch (236:9): [True: 0, False: 42]
  ------------------
  237|     42|        !signature->data || !digest->data ||
  ------------------
  |  Branch (237:9): [True: 0, False: 42]
  |  Branch (237:29): [True: 0, False: 42]
  ------------------
  238|     42|        key->ecParams.name != ECCurve_NIST_P521) {
  ------------------
  |  Branch (238:9): [True: 0, False: 42]
  ------------------
  239|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  240|      0|        res = SECFailure;
  241|      0|        return res;
  242|      0|    }
  243|       |
  244|     42|    if (signature->len == 0 || signature->len % 2 != 0 ||
  ------------------
  |  Branch (244:9): [True: 0, False: 42]
  |  Branch (244:32): [True: 0, False: 42]
  ------------------
  245|     42|        signature->len > 132 || digest->len == 0 ||
  ------------------
  |  Branch (245:9): [True: 0, False: 42]
  |  Branch (245:33): [True: 0, False: 42]
  ------------------
  246|     42|        key->publicValue.len != 133) {
  ------------------
  |  Branch (246:9): [True: 0, False: 42]
  ------------------
  247|      0|        PORT_SetError(SEC_ERROR_INPUT_LEN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  248|      0|        res = SECFailure;
  249|      0|        return res;
  250|      0|    }
  251|       |
  252|     42|    if (key->publicValue.data[0] != EC_POINT_FORM_UNCOMPRESSED) {
  ------------------
  |  |   92|     42|#define EC_POINT_FORM_UNCOMPRESSED 0x04
  ------------------
  |  Branch (252:9): [True: 0, False: 42]
  ------------------
  253|      0|        PORT_SetError(SEC_ERROR_UNSUPPORTED_EC_POINT_FORM);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  254|      0|        res = SECFailure;
  255|      0|        return res;
  256|      0|    }
  257|       |
  258|       |    // Signatures should be 132 bytes, but some software produces short signatures.
  259|       |    // Pad components with zeros if necessary.
  260|     42|    uint8_t paddedSigData[132] = { 0 };
  261|     42|    uint8_t *sig;
  262|     42|    if (signature->len != 132) {
  ------------------
  |  Branch (262:9): [True: 0, False: 42]
  ------------------
  263|      0|        size_t split = signature->len / 2;
  264|       |
  265|      0|        memcpy(paddedSigData + 66 - split, signature->data, split);
  266|      0|        memcpy(paddedSigData + 132 - split, signature->data + split, split);
  267|       |
  268|      0|        sig = paddedSigData;
  269|     42|    } else {
  270|     42|        sig = signature->data;
  271|     42|    }
  272|       |
  273|     42|    uint8_t hash[66] = { 0 };
  274|     42|    if (digest->len < 66) {
  ------------------
  |  Branch (274:9): [True: 42, False: 0]
  ------------------
  275|     42|        memcpy(hash + 66 - digest->len, digest->data, digest->len);
  276|     42|    } else {
  277|       |        // SEC 1 takes the most significant ceil(log(n)) bits of hash output when the hash output is longer than log(n).
  278|      0|        hash[0] = digest->data[0] >> 7;
  279|      0|        for (size_t i = 1; i < 66; i++) {
  ------------------
  |  Branch (279:28): [True: 0, False: 0]
  ------------------
  280|      0|            hash[i] = (digest->data[i - 1] << 1) | (digest->data[i] >> 7);
  281|      0|        }
  282|      0|    }
  283|       |
  284|     42|    bool b = Hacl_P521_ecdsa_verif_without_hash(
  285|     42|        66, hash, key->publicValue.data + 1, sig, sig + 66);
  286|     42|    if (!b) {
  ------------------
  |  Branch (286:9): [True: 34, False: 8]
  ------------------
  287|     34|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|     34|#define PORT_SetError PORT_SetError_Util
  ------------------
  288|     34|        res = SECFailure;
  289|     34|        return res;
  290|     34|    }
  291|       |
  292|      8|    return res;
  293|     42|}

s_mp_mul_comba_4:
  142|  3.34k|{
  143|  3.34k|    mp_digit c0, c1, c2, at[8];
  144|       |
  145|  3.34k|    memcpy(at, A->dp, 4 * sizeof(mp_digit));
  146|  3.34k|    memcpy(at + 4, B->dp, 4 * sizeof(mp_digit));
  147|  3.34k|    COMBA_START;
  148|       |
  149|  3.34k|    COMBA_CLEAR;
  ------------------
  |  |   37|  3.34k|    c0 = c1 = c2 = 0;
  ------------------
  150|       |    /* 0 */
  151|  3.34k|    MULADD(at[0], at[4]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  152|  3.34k|    COMBA_STORE(C->dp[0]);
  ------------------
  |  |   67|  3.34k|    x = c0;
  ------------------
  153|       |    /* 1 */
  154|  3.34k|    COMBA_FORWARD;
  ------------------
  |  |   41|  3.34k|    do {              \
  |  |   42|  3.34k|        c0 = c1;      \
  |  |   43|  3.34k|        c1 = c2;      \
  |  |   44|  3.34k|        c2 = 0;       \
  |  |   45|  3.34k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  155|  3.34k|    MULADD(at[0], at[5]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  156|  3.34k|    MULADD(at[1], at[4]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  157|  3.34k|    COMBA_STORE(C->dp[1]);
  ------------------
  |  |   67|  3.34k|    x = c0;
  ------------------
  158|       |    /* 2 */
  159|  3.34k|    COMBA_FORWARD;
  ------------------
  |  |   41|  3.34k|    do {              \
  |  |   42|  3.34k|        c0 = c1;      \
  |  |   43|  3.34k|        c1 = c2;      \
  |  |   44|  3.34k|        c2 = 0;       \
  |  |   45|  3.34k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  160|  3.34k|    MULADD(at[0], at[6]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  161|  3.34k|    MULADD(at[1], at[5]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  162|  3.34k|    MULADD(at[2], at[4]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  163|  3.34k|    COMBA_STORE(C->dp[2]);
  ------------------
  |  |   67|  3.34k|    x = c0;
  ------------------
  164|       |    /* 3 */
  165|  3.34k|    COMBA_FORWARD;
  ------------------
  |  |   41|  3.34k|    do {              \
  |  |   42|  3.34k|        c0 = c1;      \
  |  |   43|  3.34k|        c1 = c2;      \
  |  |   44|  3.34k|        c2 = 0;       \
  |  |   45|  3.34k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  166|  3.34k|    MULADD(at[0], at[7]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  167|  3.34k|    MULADD(at[1], at[6]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  168|  3.34k|    MULADD(at[2], at[5]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  169|  3.34k|    MULADD(at[3], at[4]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  170|  3.34k|    COMBA_STORE(C->dp[3]);
  ------------------
  |  |   67|  3.34k|    x = c0;
  ------------------
  171|       |    /* 4 */
  172|  3.34k|    COMBA_FORWARD;
  ------------------
  |  |   41|  3.34k|    do {              \
  |  |   42|  3.34k|        c0 = c1;      \
  |  |   43|  3.34k|        c1 = c2;      \
  |  |   44|  3.34k|        c2 = 0;       \
  |  |   45|  3.34k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  173|  3.34k|    MULADD(at[1], at[7]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  174|  3.34k|    MULADD(at[2], at[6]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  175|  3.34k|    MULADD(at[3], at[5]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  176|  3.34k|    COMBA_STORE(C->dp[4]);
  ------------------
  |  |   67|  3.34k|    x = c0;
  ------------------
  177|       |    /* 5 */
  178|  3.34k|    COMBA_FORWARD;
  ------------------
  |  |   41|  3.34k|    do {              \
  |  |   42|  3.34k|        c0 = c1;      \
  |  |   43|  3.34k|        c1 = c2;      \
  |  |   44|  3.34k|        c2 = 0;       \
  |  |   45|  3.34k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  179|  3.34k|    MULADD(at[2], at[7]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  180|  3.34k|    MULADD(at[3], at[6]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  181|  3.34k|    COMBA_STORE(C->dp[5]);
  ------------------
  |  |   67|  3.34k|    x = c0;
  ------------------
  182|       |    /* 6 */
  183|  3.34k|    COMBA_FORWARD;
  ------------------
  |  |   41|  3.34k|    do {              \
  |  |   42|  3.34k|        c0 = c1;      \
  |  |   43|  3.34k|        c1 = c2;      \
  |  |   44|  3.34k|        c2 = 0;       \
  |  |   45|  3.34k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  184|  3.34k|    MULADD(at[3], at[7]);
  ------------------
  |  |   52|  3.34k|    __asm__(                                        \
  |  |   53|  3.34k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  3.34k|        "mulq  %7           \n\t"                   \
  |  |   55|  3.34k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  3.34k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  3.34k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  3.34k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  3.34k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  3.34k|        : "%rax", "%rdx", "cc");
  ------------------
  185|  3.34k|    COMBA_STORE(C->dp[6]);
  ------------------
  |  |   67|  3.34k|    x = c0;
  ------------------
  186|  3.34k|    COMBA_STORE2(C->dp[7]);
  ------------------
  |  |   70|  3.34k|    x = c1;
  ------------------
  187|  3.34k|    C->used = 8;
  188|  3.34k|    C->sign = A->sign ^ B->sign;
  189|  3.34k|    mp_clamp(C);
  ------------------
  |  |   26|  3.34k|    {                                                    \
  |  |   27|  4.51k|        while ((a)->used && (a)->dp[(a)->used - 1] == 0) \
  |  |  ------------------
  |  |  |  Branch (27:16): [True: 4.51k, False: 0]
  |  |  |  Branch (27:29): [True: 1.16k, False: 3.34k]
  |  |  ------------------
  |  |   28|  3.34k|            --((a)->used);                               \
  |  |   29|  3.34k|        (a)->sign = (a)->used ? (a)->sign : ZPOS;        \
  |  |  ------------------
  |  |  |  |  326|      0|#define ZPOS MP_ZPOS
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  3.34k|#define MP_ZPOS 0
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (29:21): [True: 3.34k, False: 0]
  |  |  ------------------
  |  |   30|  3.34k|    }
  ------------------
  190|  3.34k|    COMBA_FINI;
  191|  3.34k|}
s_mp_mul_comba_8:
  195|     78|{
  196|     78|    mp_digit c0, c1, c2, at[16];
  197|       |
  198|     78|    memcpy(at, A->dp, 8 * sizeof(mp_digit));
  199|     78|    memcpy(at + 8, B->dp, 8 * sizeof(mp_digit));
  200|     78|    COMBA_START;
  201|       |
  202|     78|    COMBA_CLEAR;
  ------------------
  |  |   37|     78|    c0 = c1 = c2 = 0;
  ------------------
  203|       |    /* 0 */
  204|     78|    MULADD(at[0], at[8]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  205|     78|    COMBA_STORE(C->dp[0]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  206|       |    /* 1 */
  207|     78|    COMBA_FORWARD;
  ------------------
  |  |   41|     78|    do {              \
  |  |   42|     78|        c0 = c1;      \
  |  |   43|     78|        c1 = c2;      \
  |  |   44|     78|        c2 = 0;       \
  |  |   45|     78|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  208|     78|    MULADD(at[0], at[9]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  209|     78|    MULADD(at[1], at[8]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  210|     78|    COMBA_STORE(C->dp[1]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  211|       |    /* 2 */
  212|     78|    COMBA_FORWARD;
  ------------------
  |  |   41|     78|    do {              \
  |  |   42|     78|        c0 = c1;      \
  |  |   43|     78|        c1 = c2;      \
  |  |   44|     78|        c2 = 0;       \
  |  |   45|     78|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  213|     78|    MULADD(at[0], at[10]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  214|     78|    MULADD(at[1], at[9]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  215|     78|    MULADD(at[2], at[8]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  216|     78|    COMBA_STORE(C->dp[2]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  217|       |    /* 3 */
  218|     78|    COMBA_FORWARD;
  ------------------
  |  |   41|     78|    do {              \
  |  |   42|     78|        c0 = c1;      \
  |  |   43|     78|        c1 = c2;      \
  |  |   44|     78|        c2 = 0;       \
  |  |   45|     78|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  219|     78|    MULADD(at[0], at[11]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  220|     78|    MULADD(at[1], at[10]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  221|     78|    MULADD(at[2], at[9]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  222|     78|    MULADD(at[3], at[8]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  223|     78|    COMBA_STORE(C->dp[3]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  224|       |    /* 4 */
  225|     78|    COMBA_FORWARD;
  ------------------
  |  |   41|     78|    do {              \
  |  |   42|     78|        c0 = c1;      \
  |  |   43|     78|        c1 = c2;      \
  |  |   44|     78|        c2 = 0;       \
  |  |   45|     78|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  226|     78|    MULADD(at[0], at[12]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  227|     78|    MULADD(at[1], at[11]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  228|     78|    MULADD(at[2], at[10]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  229|     78|    MULADD(at[3], at[9]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  230|     78|    MULADD(at[4], at[8]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  231|     78|    COMBA_STORE(C->dp[4]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  232|       |    /* 5 */
  233|     78|    COMBA_FORWARD;
  ------------------
  |  |   41|     78|    do {              \
  |  |   42|     78|        c0 = c1;      \
  |  |   43|     78|        c1 = c2;      \
  |  |   44|     78|        c2 = 0;       \
  |  |   45|     78|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  234|     78|    MULADD(at[0], at[13]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  235|     78|    MULADD(at[1], at[12]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  236|     78|    MULADD(at[2], at[11]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  237|     78|    MULADD(at[3], at[10]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  238|     78|    MULADD(at[4], at[9]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  239|     78|    MULADD(at[5], at[8]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  240|     78|    COMBA_STORE(C->dp[5]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  241|       |    /* 6 */
  242|     78|    COMBA_FORWARD;
  ------------------
  |  |   41|     78|    do {              \
  |  |   42|     78|        c0 = c1;      \
  |  |   43|     78|        c1 = c2;      \
  |  |   44|     78|        c2 = 0;       \
  |  |   45|     78|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  243|     78|    MULADD(at[0], at[14]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  244|     78|    MULADD(at[1], at[13]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  245|     78|    MULADD(at[2], at[12]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  246|     78|    MULADD(at[3], at[11]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  247|     78|    MULADD(at[4], at[10]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  248|     78|    MULADD(at[5], at[9]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  249|     78|    MULADD(at[6], at[8]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  250|     78|    COMBA_STORE(C->dp[6]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  251|       |    /* 7 */
  252|     78|    COMBA_FORWARD;
  ------------------
  |  |   41|     78|    do {              \
  |  |   42|     78|        c0 = c1;      \
  |  |   43|     78|        c1 = c2;      \
  |  |   44|     78|        c2 = 0;       \
  |  |   45|     78|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  253|     78|    MULADD(at[0], at[15]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  254|     78|    MULADD(at[1], at[14]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  255|     78|    MULADD(at[2], at[13]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  256|     78|    MULADD(at[3], at[12]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  257|     78|    MULADD(at[4], at[11]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  258|     78|    MULADD(at[5], at[10]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  259|     78|    MULADD(at[6], at[9]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  260|     78|    MULADD(at[7], at[8]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  261|     78|    COMBA_STORE(C->dp[7]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  262|       |    /* 8 */
  263|     78|    COMBA_FORWARD;
  ------------------
  |  |   41|     78|    do {              \
  |  |   42|     78|        c0 = c1;      \
  |  |   43|     78|        c1 = c2;      \
  |  |   44|     78|        c2 = 0;       \
  |  |   45|     78|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  264|     78|    MULADD(at[1], at[15]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  265|     78|    MULADD(at[2], at[14]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  266|     78|    MULADD(at[3], at[13]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  267|     78|    MULADD(at[4], at[12]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  268|     78|    MULADD(at[5], at[11]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  269|     78|    MULADD(at[6], at[10]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  270|     78|    MULADD(at[7], at[9]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  271|     78|    COMBA_STORE(C->dp[8]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  272|       |    /* 9 */
  273|     78|    COMBA_FORWARD;
  ------------------
  |  |   41|     78|    do {              \
  |  |   42|     78|        c0 = c1;      \
  |  |   43|     78|        c1 = c2;      \
  |  |   44|     78|        c2 = 0;       \
  |  |   45|     78|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  274|     78|    MULADD(at[2], at[15]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  275|     78|    MULADD(at[3], at[14]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  276|     78|    MULADD(at[4], at[13]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  277|     78|    MULADD(at[5], at[12]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  278|     78|    MULADD(at[6], at[11]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  279|     78|    MULADD(at[7], at[10]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  280|     78|    COMBA_STORE(C->dp[9]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  281|       |    /* 10 */
  282|     78|    COMBA_FORWARD;
  ------------------
  |  |   41|     78|    do {              \
  |  |   42|     78|        c0 = c1;      \
  |  |   43|     78|        c1 = c2;      \
  |  |   44|     78|        c2 = 0;       \
  |  |   45|     78|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  283|     78|    MULADD(at[3], at[15]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  284|     78|    MULADD(at[4], at[14]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  285|     78|    MULADD(at[5], at[13]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  286|     78|    MULADD(at[6], at[12]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  287|     78|    MULADD(at[7], at[11]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  288|     78|    COMBA_STORE(C->dp[10]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  289|       |    /* 11 */
  290|     78|    COMBA_FORWARD;
  ------------------
  |  |   41|     78|    do {              \
  |  |   42|     78|        c0 = c1;      \
  |  |   43|     78|        c1 = c2;      \
  |  |   44|     78|        c2 = 0;       \
  |  |   45|     78|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  291|     78|    MULADD(at[4], at[15]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  292|     78|    MULADD(at[5], at[14]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  293|     78|    MULADD(at[6], at[13]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  294|     78|    MULADD(at[7], at[12]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  295|     78|    COMBA_STORE(C->dp[11]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  296|       |    /* 12 */
  297|     78|    COMBA_FORWARD;
  ------------------
  |  |   41|     78|    do {              \
  |  |   42|     78|        c0 = c1;      \
  |  |   43|     78|        c1 = c2;      \
  |  |   44|     78|        c2 = 0;       \
  |  |   45|     78|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  298|     78|    MULADD(at[5], at[15]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  299|     78|    MULADD(at[6], at[14]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  300|     78|    MULADD(at[7], at[13]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  301|     78|    COMBA_STORE(C->dp[12]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  302|       |    /* 13 */
  303|     78|    COMBA_FORWARD;
  ------------------
  |  |   41|     78|    do {              \
  |  |   42|     78|        c0 = c1;      \
  |  |   43|     78|        c1 = c2;      \
  |  |   44|     78|        c2 = 0;       \
  |  |   45|     78|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  304|     78|    MULADD(at[6], at[15]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  305|     78|    MULADD(at[7], at[14]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  306|     78|    COMBA_STORE(C->dp[13]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  307|       |    /* 14 */
  308|     78|    COMBA_FORWARD;
  ------------------
  |  |   41|     78|    do {              \
  |  |   42|     78|        c0 = c1;      \
  |  |   43|     78|        c1 = c2;      \
  |  |   44|     78|        c2 = 0;       \
  |  |   45|     78|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  309|     78|    MULADD(at[7], at[15]);
  ------------------
  |  |   52|     78|    __asm__(                                        \
  |  |   53|     78|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|     78|        "mulq  %7           \n\t"                   \
  |  |   55|     78|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|     78|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|     78|        "adcq  $0,%2        \n\t"                   \
  |  |   58|     78|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|     78|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|     78|        : "%rax", "%rdx", "cc");
  ------------------
  310|     78|    COMBA_STORE(C->dp[14]);
  ------------------
  |  |   67|     78|    x = c0;
  ------------------
  311|     78|    COMBA_STORE2(C->dp[15]);
  ------------------
  |  |   70|     78|    x = c1;
  ------------------
  312|     78|    C->used = 16;
  313|     78|    C->sign = A->sign ^ B->sign;
  314|     78|    mp_clamp(C);
  ------------------
  |  |   26|     78|    {                                                    \
  |  |   27|    118|        while ((a)->used && (a)->dp[(a)->used - 1] == 0) \
  |  |  ------------------
  |  |  |  Branch (27:16): [True: 118, False: 0]
  |  |  |  Branch (27:29): [True: 40, False: 78]
  |  |  ------------------
  |  |   28|     78|            --((a)->used);                               \
  |  |   29|     78|        (a)->sign = (a)->used ? (a)->sign : ZPOS;        \
  |  |  ------------------
  |  |  |  |  326|      0|#define ZPOS MP_ZPOS
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|     78|#define MP_ZPOS 0
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (29:21): [True: 78, False: 0]
  |  |  ------------------
  |  |   30|     78|    }
  ------------------
  315|     78|    COMBA_FINI;
  316|     78|}
s_mp_mul_comba_16:
  320|  43.0k|{
  321|  43.0k|    mp_digit c0, c1, c2, at[32];
  322|       |
  323|  43.0k|    memcpy(at, A->dp, 16 * sizeof(mp_digit));
  324|  43.0k|    memcpy(at + 16, B->dp, 16 * sizeof(mp_digit));
  325|  43.0k|    COMBA_START;
  326|       |
  327|  43.0k|    COMBA_CLEAR;
  ------------------
  |  |   37|  43.0k|    c0 = c1 = c2 = 0;
  ------------------
  328|       |    /* 0 */
  329|  43.0k|    MULADD(at[0], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  330|  43.0k|    COMBA_STORE(C->dp[0]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  331|       |    /* 1 */
  332|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  333|  43.0k|    MULADD(at[0], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  334|  43.0k|    MULADD(at[1], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  335|  43.0k|    COMBA_STORE(C->dp[1]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  336|       |    /* 2 */
  337|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  338|  43.0k|    MULADD(at[0], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  339|  43.0k|    MULADD(at[1], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  340|  43.0k|    MULADD(at[2], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  341|  43.0k|    COMBA_STORE(C->dp[2]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  342|       |    /* 3 */
  343|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  344|  43.0k|    MULADD(at[0], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  345|  43.0k|    MULADD(at[1], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  346|  43.0k|    MULADD(at[2], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  347|  43.0k|    MULADD(at[3], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  348|  43.0k|    COMBA_STORE(C->dp[3]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  349|       |    /* 4 */
  350|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  351|  43.0k|    MULADD(at[0], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  352|  43.0k|    MULADD(at[1], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  353|  43.0k|    MULADD(at[2], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  354|  43.0k|    MULADD(at[3], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  355|  43.0k|    MULADD(at[4], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  356|  43.0k|    COMBA_STORE(C->dp[4]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  357|       |    /* 5 */
  358|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  359|  43.0k|    MULADD(at[0], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  360|  43.0k|    MULADD(at[1], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  361|  43.0k|    MULADD(at[2], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  362|  43.0k|    MULADD(at[3], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  363|  43.0k|    MULADD(at[4], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  364|  43.0k|    MULADD(at[5], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  365|  43.0k|    COMBA_STORE(C->dp[5]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  366|       |    /* 6 */
  367|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  368|  43.0k|    MULADD(at[0], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  369|  43.0k|    MULADD(at[1], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  370|  43.0k|    MULADD(at[2], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  371|  43.0k|    MULADD(at[3], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  372|  43.0k|    MULADD(at[4], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  373|  43.0k|    MULADD(at[5], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  374|  43.0k|    MULADD(at[6], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  375|  43.0k|    COMBA_STORE(C->dp[6]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  376|       |    /* 7 */
  377|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  378|  43.0k|    MULADD(at[0], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  379|  43.0k|    MULADD(at[1], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  380|  43.0k|    MULADD(at[2], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  381|  43.0k|    MULADD(at[3], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  382|  43.0k|    MULADD(at[4], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  383|  43.0k|    MULADD(at[5], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  384|  43.0k|    MULADD(at[6], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  385|  43.0k|    MULADD(at[7], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  386|  43.0k|    COMBA_STORE(C->dp[7]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  387|       |    /* 8 */
  388|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  389|  43.0k|    MULADD(at[0], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  390|  43.0k|    MULADD(at[1], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  391|  43.0k|    MULADD(at[2], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  392|  43.0k|    MULADD(at[3], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  393|  43.0k|    MULADD(at[4], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  394|  43.0k|    MULADD(at[5], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  395|  43.0k|    MULADD(at[6], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  396|  43.0k|    MULADD(at[7], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  397|  43.0k|    MULADD(at[8], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  398|  43.0k|    COMBA_STORE(C->dp[8]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  399|       |    /* 9 */
  400|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  401|  43.0k|    MULADD(at[0], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  402|  43.0k|    MULADD(at[1], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  403|  43.0k|    MULADD(at[2], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  404|  43.0k|    MULADD(at[3], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  405|  43.0k|    MULADD(at[4], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  406|  43.0k|    MULADD(at[5], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  407|  43.0k|    MULADD(at[6], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  408|  43.0k|    MULADD(at[7], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  409|  43.0k|    MULADD(at[8], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  410|  43.0k|    MULADD(at[9], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  411|  43.0k|    COMBA_STORE(C->dp[9]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  412|       |    /* 10 */
  413|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  414|  43.0k|    MULADD(at[0], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  415|  43.0k|    MULADD(at[1], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  416|  43.0k|    MULADD(at[2], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  417|  43.0k|    MULADD(at[3], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  418|  43.0k|    MULADD(at[4], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  419|  43.0k|    MULADD(at[5], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  420|  43.0k|    MULADD(at[6], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  421|  43.0k|    MULADD(at[7], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  422|  43.0k|    MULADD(at[8], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  423|  43.0k|    MULADD(at[9], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  424|  43.0k|    MULADD(at[10], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  425|  43.0k|    COMBA_STORE(C->dp[10]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  426|       |    /* 11 */
  427|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  428|  43.0k|    MULADD(at[0], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  429|  43.0k|    MULADD(at[1], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  430|  43.0k|    MULADD(at[2], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  431|  43.0k|    MULADD(at[3], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  432|  43.0k|    MULADD(at[4], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  433|  43.0k|    MULADD(at[5], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  434|  43.0k|    MULADD(at[6], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  435|  43.0k|    MULADD(at[7], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  436|  43.0k|    MULADD(at[8], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  437|  43.0k|    MULADD(at[9], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  438|  43.0k|    MULADD(at[10], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  439|  43.0k|    MULADD(at[11], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  440|  43.0k|    COMBA_STORE(C->dp[11]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  441|       |    /* 12 */
  442|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  443|  43.0k|    MULADD(at[0], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  444|  43.0k|    MULADD(at[1], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  445|  43.0k|    MULADD(at[2], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  446|  43.0k|    MULADD(at[3], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  447|  43.0k|    MULADD(at[4], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  448|  43.0k|    MULADD(at[5], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  449|  43.0k|    MULADD(at[6], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  450|  43.0k|    MULADD(at[7], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  451|  43.0k|    MULADD(at[8], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  452|  43.0k|    MULADD(at[9], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  453|  43.0k|    MULADD(at[10], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  454|  43.0k|    MULADD(at[11], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  455|  43.0k|    MULADD(at[12], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  456|  43.0k|    COMBA_STORE(C->dp[12]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  457|       |    /* 13 */
  458|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  459|  43.0k|    MULADD(at[0], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  460|  43.0k|    MULADD(at[1], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  461|  43.0k|    MULADD(at[2], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  462|  43.0k|    MULADD(at[3], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  463|  43.0k|    MULADD(at[4], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  464|  43.0k|    MULADD(at[5], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  465|  43.0k|    MULADD(at[6], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  466|  43.0k|    MULADD(at[7], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  467|  43.0k|    MULADD(at[8], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  468|  43.0k|    MULADD(at[9], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  469|  43.0k|    MULADD(at[10], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  470|  43.0k|    MULADD(at[11], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  471|  43.0k|    MULADD(at[12], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  472|  43.0k|    MULADD(at[13], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  473|  43.0k|    COMBA_STORE(C->dp[13]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  474|       |    /* 14 */
  475|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  476|  43.0k|    MULADD(at[0], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  477|  43.0k|    MULADD(at[1], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  478|  43.0k|    MULADD(at[2], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  479|  43.0k|    MULADD(at[3], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  480|  43.0k|    MULADD(at[4], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  481|  43.0k|    MULADD(at[5], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  482|  43.0k|    MULADD(at[6], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  483|  43.0k|    MULADD(at[7], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  484|  43.0k|    MULADD(at[8], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  485|  43.0k|    MULADD(at[9], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  486|  43.0k|    MULADD(at[10], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  487|  43.0k|    MULADD(at[11], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  488|  43.0k|    MULADD(at[12], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  489|  43.0k|    MULADD(at[13], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  490|  43.0k|    MULADD(at[14], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  491|  43.0k|    COMBA_STORE(C->dp[14]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  492|       |    /* 15 */
  493|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  494|  43.0k|    MULADD(at[0], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  495|  43.0k|    MULADD(at[1], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  496|  43.0k|    MULADD(at[2], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  497|  43.0k|    MULADD(at[3], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  498|  43.0k|    MULADD(at[4], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  499|  43.0k|    MULADD(at[5], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  500|  43.0k|    MULADD(at[6], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  501|  43.0k|    MULADD(at[7], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  502|  43.0k|    MULADD(at[8], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  503|  43.0k|    MULADD(at[9], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  504|  43.0k|    MULADD(at[10], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  505|  43.0k|    MULADD(at[11], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  506|  43.0k|    MULADD(at[12], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  507|  43.0k|    MULADD(at[13], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  508|  43.0k|    MULADD(at[14], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  509|  43.0k|    MULADD(at[15], at[16]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  510|  43.0k|    COMBA_STORE(C->dp[15]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  511|       |    /* 16 */
  512|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  513|  43.0k|    MULADD(at[1], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  514|  43.0k|    MULADD(at[2], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  515|  43.0k|    MULADD(at[3], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  516|  43.0k|    MULADD(at[4], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  517|  43.0k|    MULADD(at[5], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  518|  43.0k|    MULADD(at[6], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  519|  43.0k|    MULADD(at[7], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  520|  43.0k|    MULADD(at[8], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  521|  43.0k|    MULADD(at[9], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  522|  43.0k|    MULADD(at[10], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  523|  43.0k|    MULADD(at[11], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  524|  43.0k|    MULADD(at[12], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  525|  43.0k|    MULADD(at[13], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  526|  43.0k|    MULADD(at[14], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  527|  43.0k|    MULADD(at[15], at[17]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  528|  43.0k|    COMBA_STORE(C->dp[16]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  529|       |    /* 17 */
  530|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  531|  43.0k|    MULADD(at[2], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  532|  43.0k|    MULADD(at[3], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  533|  43.0k|    MULADD(at[4], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  534|  43.0k|    MULADD(at[5], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  535|  43.0k|    MULADD(at[6], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  536|  43.0k|    MULADD(at[7], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  537|  43.0k|    MULADD(at[8], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  538|  43.0k|    MULADD(at[9], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  539|  43.0k|    MULADD(at[10], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  540|  43.0k|    MULADD(at[11], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  541|  43.0k|    MULADD(at[12], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  542|  43.0k|    MULADD(at[13], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  543|  43.0k|    MULADD(at[14], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  544|  43.0k|    MULADD(at[15], at[18]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  545|  43.0k|    COMBA_STORE(C->dp[17]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  546|       |    /* 18 */
  547|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  548|  43.0k|    MULADD(at[3], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  549|  43.0k|    MULADD(at[4], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  550|  43.0k|    MULADD(at[5], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  551|  43.0k|    MULADD(at[6], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  552|  43.0k|    MULADD(at[7], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  553|  43.0k|    MULADD(at[8], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  554|  43.0k|    MULADD(at[9], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  555|  43.0k|    MULADD(at[10], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  556|  43.0k|    MULADD(at[11], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  557|  43.0k|    MULADD(at[12], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  558|  43.0k|    MULADD(at[13], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  559|  43.0k|    MULADD(at[14], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  560|  43.0k|    MULADD(at[15], at[19]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  561|  43.0k|    COMBA_STORE(C->dp[18]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  562|       |    /* 19 */
  563|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  564|  43.0k|    MULADD(at[4], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  565|  43.0k|    MULADD(at[5], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  566|  43.0k|    MULADD(at[6], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  567|  43.0k|    MULADD(at[7], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  568|  43.0k|    MULADD(at[8], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  569|  43.0k|    MULADD(at[9], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  570|  43.0k|    MULADD(at[10], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  571|  43.0k|    MULADD(at[11], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  572|  43.0k|    MULADD(at[12], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  573|  43.0k|    MULADD(at[13], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  574|  43.0k|    MULADD(at[14], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  575|  43.0k|    MULADD(at[15], at[20]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  576|  43.0k|    COMBA_STORE(C->dp[19]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  577|       |    /* 20 */
  578|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  579|  43.0k|    MULADD(at[5], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  580|  43.0k|    MULADD(at[6], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  581|  43.0k|    MULADD(at[7], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  582|  43.0k|    MULADD(at[8], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  583|  43.0k|    MULADD(at[9], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  584|  43.0k|    MULADD(at[10], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  585|  43.0k|    MULADD(at[11], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  586|  43.0k|    MULADD(at[12], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  587|  43.0k|    MULADD(at[13], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  588|  43.0k|    MULADD(at[14], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  589|  43.0k|    MULADD(at[15], at[21]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  590|  43.0k|    COMBA_STORE(C->dp[20]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  591|       |    /* 21 */
  592|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  593|  43.0k|    MULADD(at[6], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  594|  43.0k|    MULADD(at[7], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  595|  43.0k|    MULADD(at[8], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  596|  43.0k|    MULADD(at[9], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  597|  43.0k|    MULADD(at[10], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  598|  43.0k|    MULADD(at[11], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  599|  43.0k|    MULADD(at[12], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  600|  43.0k|    MULADD(at[13], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  601|  43.0k|    MULADD(at[14], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  602|  43.0k|    MULADD(at[15], at[22]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  603|  43.0k|    COMBA_STORE(C->dp[21]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  604|       |    /* 22 */
  605|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  606|  43.0k|    MULADD(at[7], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  607|  43.0k|    MULADD(at[8], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  608|  43.0k|    MULADD(at[9], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  609|  43.0k|    MULADD(at[10], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  610|  43.0k|    MULADD(at[11], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  611|  43.0k|    MULADD(at[12], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  612|  43.0k|    MULADD(at[13], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  613|  43.0k|    MULADD(at[14], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  614|  43.0k|    MULADD(at[15], at[23]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  615|  43.0k|    COMBA_STORE(C->dp[22]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  616|       |    /* 23 */
  617|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  618|  43.0k|    MULADD(at[8], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  619|  43.0k|    MULADD(at[9], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  620|  43.0k|    MULADD(at[10], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  621|  43.0k|    MULADD(at[11], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  622|  43.0k|    MULADD(at[12], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  623|  43.0k|    MULADD(at[13], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  624|  43.0k|    MULADD(at[14], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  625|  43.0k|    MULADD(at[15], at[24]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  626|  43.0k|    COMBA_STORE(C->dp[23]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  627|       |    /* 24 */
  628|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  629|  43.0k|    MULADD(at[9], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  630|  43.0k|    MULADD(at[10], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  631|  43.0k|    MULADD(at[11], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  632|  43.0k|    MULADD(at[12], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  633|  43.0k|    MULADD(at[13], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  634|  43.0k|    MULADD(at[14], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  635|  43.0k|    MULADD(at[15], at[25]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  636|  43.0k|    COMBA_STORE(C->dp[24]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  637|       |    /* 25 */
  638|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  639|  43.0k|    MULADD(at[10], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  640|  43.0k|    MULADD(at[11], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  641|  43.0k|    MULADD(at[12], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  642|  43.0k|    MULADD(at[13], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  643|  43.0k|    MULADD(at[14], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  644|  43.0k|    MULADD(at[15], at[26]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  645|  43.0k|    COMBA_STORE(C->dp[25]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  646|       |    /* 26 */
  647|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  648|  43.0k|    MULADD(at[11], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  649|  43.0k|    MULADD(at[12], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  650|  43.0k|    MULADD(at[13], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  651|  43.0k|    MULADD(at[14], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  652|  43.0k|    MULADD(at[15], at[27]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  653|  43.0k|    COMBA_STORE(C->dp[26]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  654|       |    /* 27 */
  655|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  656|  43.0k|    MULADD(at[12], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  657|  43.0k|    MULADD(at[13], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  658|  43.0k|    MULADD(at[14], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  659|  43.0k|    MULADD(at[15], at[28]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  660|  43.0k|    COMBA_STORE(C->dp[27]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  661|       |    /* 28 */
  662|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  663|  43.0k|    MULADD(at[13], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  664|  43.0k|    MULADD(at[14], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  665|  43.0k|    MULADD(at[15], at[29]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  666|  43.0k|    COMBA_STORE(C->dp[28]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  667|       |    /* 29 */
  668|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  669|  43.0k|    MULADD(at[14], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  670|  43.0k|    MULADD(at[15], at[30]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  671|  43.0k|    COMBA_STORE(C->dp[29]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  672|       |    /* 30 */
  673|  43.0k|    COMBA_FORWARD;
  ------------------
  |  |   41|  43.0k|    do {              \
  |  |   42|  43.0k|        c0 = c1;      \
  |  |   43|  43.0k|        c1 = c2;      \
  |  |   44|  43.0k|        c2 = 0;       \
  |  |   45|  43.0k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  674|  43.0k|    MULADD(at[15], at[31]);
  ------------------
  |  |   52|  43.0k|    __asm__(                                        \
  |  |   53|  43.0k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|  43.0k|        "mulq  %7           \n\t"                   \
  |  |   55|  43.0k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|  43.0k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|  43.0k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|  43.0k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|  43.0k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|  43.0k|        : "%rax", "%rdx", "cc");
  ------------------
  675|  43.0k|    COMBA_STORE(C->dp[30]);
  ------------------
  |  |   67|  43.0k|    x = c0;
  ------------------
  676|  43.0k|    COMBA_STORE2(C->dp[31]);
  ------------------
  |  |   70|  43.0k|    x = c1;
  ------------------
  677|  43.0k|    C->used = 32;
  678|  43.0k|    C->sign = A->sign ^ B->sign;
  679|  43.0k|    mp_clamp(C);
  ------------------
  |  |   26|  43.0k|    {                                                    \
  |  |   27|  43.2k|        while ((a)->used && (a)->dp[(a)->used - 1] == 0) \
  |  |  ------------------
  |  |  |  Branch (27:16): [True: 43.2k, False: 0]
  |  |  |  Branch (27:29): [True: 152, False: 43.0k]
  |  |  ------------------
  |  |   28|  43.0k|            --((a)->used);                               \
  |  |   29|  43.0k|        (a)->sign = (a)->used ? (a)->sign : ZPOS;        \
  |  |  ------------------
  |  |  |  |  326|      0|#define ZPOS MP_ZPOS
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  43.0k|#define MP_ZPOS 0
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (29:21): [True: 43.0k, False: 0]
  |  |  ------------------
  |  |   30|  43.0k|    }
  ------------------
  680|  43.0k|    COMBA_FINI;
  681|  43.0k|}
s_mp_mul_comba_32:
  685|   758k|{
  686|   758k|    mp_digit c0, c1, c2, at[64];
  687|       |
  688|   758k|    memcpy(at, A->dp, 32 * sizeof(mp_digit));
  689|   758k|    memcpy(at + 32, B->dp, 32 * sizeof(mp_digit));
  690|   758k|    COMBA_START;
  691|       |
  692|   758k|    COMBA_CLEAR;
  ------------------
  |  |   37|   758k|    c0 = c1 = c2 = 0;
  ------------------
  693|       |    /* 0 */
  694|   758k|    MULADD(at[0], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  695|   758k|    COMBA_STORE(C->dp[0]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  696|       |    /* 1 */
  697|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  698|   758k|    MULADD(at[0], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  699|   758k|    MULADD(at[1], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  700|   758k|    COMBA_STORE(C->dp[1]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  701|       |    /* 2 */
  702|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  703|   758k|    MULADD(at[0], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  704|   758k|    MULADD(at[1], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  705|   758k|    MULADD(at[2], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  706|   758k|    COMBA_STORE(C->dp[2]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  707|       |    /* 3 */
  708|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  709|   758k|    MULADD(at[0], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  710|   758k|    MULADD(at[1], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  711|   758k|    MULADD(at[2], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  712|   758k|    MULADD(at[3], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  713|   758k|    COMBA_STORE(C->dp[3]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  714|       |    /* 4 */
  715|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  716|   758k|    MULADD(at[0], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  717|   758k|    MULADD(at[1], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  718|   758k|    MULADD(at[2], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  719|   758k|    MULADD(at[3], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  720|   758k|    MULADD(at[4], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  721|   758k|    COMBA_STORE(C->dp[4]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  722|       |    /* 5 */
  723|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  724|   758k|    MULADD(at[0], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  725|   758k|    MULADD(at[1], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  726|   758k|    MULADD(at[2], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  727|   758k|    MULADD(at[3], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  728|   758k|    MULADD(at[4], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  729|   758k|    MULADD(at[5], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  730|   758k|    COMBA_STORE(C->dp[5]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  731|       |    /* 6 */
  732|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  733|   758k|    MULADD(at[0], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  734|   758k|    MULADD(at[1], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  735|   758k|    MULADD(at[2], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  736|   758k|    MULADD(at[3], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  737|   758k|    MULADD(at[4], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  738|   758k|    MULADD(at[5], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  739|   758k|    MULADD(at[6], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  740|   758k|    COMBA_STORE(C->dp[6]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  741|       |    /* 7 */
  742|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  743|   758k|    MULADD(at[0], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  744|   758k|    MULADD(at[1], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  745|   758k|    MULADD(at[2], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  746|   758k|    MULADD(at[3], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  747|   758k|    MULADD(at[4], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  748|   758k|    MULADD(at[5], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  749|   758k|    MULADD(at[6], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  750|   758k|    MULADD(at[7], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  751|   758k|    COMBA_STORE(C->dp[7]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  752|       |    /* 8 */
  753|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  754|   758k|    MULADD(at[0], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  755|   758k|    MULADD(at[1], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  756|   758k|    MULADD(at[2], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  757|   758k|    MULADD(at[3], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  758|   758k|    MULADD(at[4], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  759|   758k|    MULADD(at[5], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  760|   758k|    MULADD(at[6], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  761|   758k|    MULADD(at[7], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  762|   758k|    MULADD(at[8], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  763|   758k|    COMBA_STORE(C->dp[8]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  764|       |    /* 9 */
  765|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  766|   758k|    MULADD(at[0], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  767|   758k|    MULADD(at[1], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  768|   758k|    MULADD(at[2], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  769|   758k|    MULADD(at[3], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  770|   758k|    MULADD(at[4], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  771|   758k|    MULADD(at[5], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  772|   758k|    MULADD(at[6], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  773|   758k|    MULADD(at[7], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  774|   758k|    MULADD(at[8], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  775|   758k|    MULADD(at[9], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  776|   758k|    COMBA_STORE(C->dp[9]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  777|       |    /* 10 */
  778|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  779|   758k|    MULADD(at[0], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  780|   758k|    MULADD(at[1], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  781|   758k|    MULADD(at[2], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  782|   758k|    MULADD(at[3], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  783|   758k|    MULADD(at[4], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  784|   758k|    MULADD(at[5], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  785|   758k|    MULADD(at[6], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  786|   758k|    MULADD(at[7], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  787|   758k|    MULADD(at[8], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  788|   758k|    MULADD(at[9], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  789|   758k|    MULADD(at[10], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  790|   758k|    COMBA_STORE(C->dp[10]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  791|       |    /* 11 */
  792|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  793|   758k|    MULADD(at[0], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  794|   758k|    MULADD(at[1], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  795|   758k|    MULADD(at[2], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  796|   758k|    MULADD(at[3], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  797|   758k|    MULADD(at[4], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  798|   758k|    MULADD(at[5], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  799|   758k|    MULADD(at[6], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  800|   758k|    MULADD(at[7], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  801|   758k|    MULADD(at[8], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  802|   758k|    MULADD(at[9], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  803|   758k|    MULADD(at[10], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  804|   758k|    MULADD(at[11], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  805|   758k|    COMBA_STORE(C->dp[11]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  806|       |    /* 12 */
  807|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  808|   758k|    MULADD(at[0], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  809|   758k|    MULADD(at[1], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  810|   758k|    MULADD(at[2], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  811|   758k|    MULADD(at[3], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  812|   758k|    MULADD(at[4], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  813|   758k|    MULADD(at[5], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  814|   758k|    MULADD(at[6], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  815|   758k|    MULADD(at[7], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  816|   758k|    MULADD(at[8], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  817|   758k|    MULADD(at[9], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  818|   758k|    MULADD(at[10], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  819|   758k|    MULADD(at[11], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  820|   758k|    MULADD(at[12], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  821|   758k|    COMBA_STORE(C->dp[12]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  822|       |    /* 13 */
  823|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  824|   758k|    MULADD(at[0], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  825|   758k|    MULADD(at[1], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  826|   758k|    MULADD(at[2], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  827|   758k|    MULADD(at[3], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  828|   758k|    MULADD(at[4], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  829|   758k|    MULADD(at[5], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  830|   758k|    MULADD(at[6], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  831|   758k|    MULADD(at[7], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  832|   758k|    MULADD(at[8], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  833|   758k|    MULADD(at[9], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  834|   758k|    MULADD(at[10], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  835|   758k|    MULADD(at[11], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  836|   758k|    MULADD(at[12], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  837|   758k|    MULADD(at[13], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  838|   758k|    COMBA_STORE(C->dp[13]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  839|       |    /* 14 */
  840|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  841|   758k|    MULADD(at[0], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  842|   758k|    MULADD(at[1], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  843|   758k|    MULADD(at[2], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  844|   758k|    MULADD(at[3], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  845|   758k|    MULADD(at[4], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  846|   758k|    MULADD(at[5], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  847|   758k|    MULADD(at[6], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  848|   758k|    MULADD(at[7], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  849|   758k|    MULADD(at[8], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  850|   758k|    MULADD(at[9], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  851|   758k|    MULADD(at[10], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  852|   758k|    MULADD(at[11], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  853|   758k|    MULADD(at[12], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  854|   758k|    MULADD(at[13], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  855|   758k|    MULADD(at[14], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  856|   758k|    COMBA_STORE(C->dp[14]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  857|       |    /* 15 */
  858|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  859|   758k|    MULADD(at[0], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  860|   758k|    MULADD(at[1], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  861|   758k|    MULADD(at[2], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  862|   758k|    MULADD(at[3], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  863|   758k|    MULADD(at[4], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  864|   758k|    MULADD(at[5], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  865|   758k|    MULADD(at[6], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  866|   758k|    MULADD(at[7], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  867|   758k|    MULADD(at[8], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  868|   758k|    MULADD(at[9], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  869|   758k|    MULADD(at[10], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  870|   758k|    MULADD(at[11], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  871|   758k|    MULADD(at[12], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  872|   758k|    MULADD(at[13], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  873|   758k|    MULADD(at[14], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  874|   758k|    MULADD(at[15], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  875|   758k|    COMBA_STORE(C->dp[15]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  876|       |    /* 16 */
  877|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  878|   758k|    MULADD(at[0], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  879|   758k|    MULADD(at[1], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  880|   758k|    MULADD(at[2], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  881|   758k|    MULADD(at[3], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  882|   758k|    MULADD(at[4], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  883|   758k|    MULADD(at[5], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  884|   758k|    MULADD(at[6], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  885|   758k|    MULADD(at[7], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  886|   758k|    MULADD(at[8], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  887|   758k|    MULADD(at[9], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  888|   758k|    MULADD(at[10], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  889|   758k|    MULADD(at[11], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  890|   758k|    MULADD(at[12], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  891|   758k|    MULADD(at[13], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  892|   758k|    MULADD(at[14], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  893|   758k|    MULADD(at[15], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  894|   758k|    MULADD(at[16], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  895|   758k|    COMBA_STORE(C->dp[16]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  896|       |    /* 17 */
  897|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  898|   758k|    MULADD(at[0], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  899|   758k|    MULADD(at[1], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  900|   758k|    MULADD(at[2], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  901|   758k|    MULADD(at[3], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  902|   758k|    MULADD(at[4], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  903|   758k|    MULADD(at[5], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  904|   758k|    MULADD(at[6], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  905|   758k|    MULADD(at[7], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  906|   758k|    MULADD(at[8], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  907|   758k|    MULADD(at[9], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  908|   758k|    MULADD(at[10], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  909|   758k|    MULADD(at[11], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  910|   758k|    MULADD(at[12], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  911|   758k|    MULADD(at[13], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  912|   758k|    MULADD(at[14], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  913|   758k|    MULADD(at[15], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  914|   758k|    MULADD(at[16], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  915|   758k|    MULADD(at[17], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  916|   758k|    COMBA_STORE(C->dp[17]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  917|       |    /* 18 */
  918|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  919|   758k|    MULADD(at[0], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  920|   758k|    MULADD(at[1], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  921|   758k|    MULADD(at[2], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  922|   758k|    MULADD(at[3], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  923|   758k|    MULADD(at[4], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  924|   758k|    MULADD(at[5], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  925|   758k|    MULADD(at[6], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  926|   758k|    MULADD(at[7], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  927|   758k|    MULADD(at[8], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  928|   758k|    MULADD(at[9], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  929|   758k|    MULADD(at[10], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  930|   758k|    MULADD(at[11], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  931|   758k|    MULADD(at[12], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  932|   758k|    MULADD(at[13], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  933|   758k|    MULADD(at[14], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  934|   758k|    MULADD(at[15], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  935|   758k|    MULADD(at[16], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  936|   758k|    MULADD(at[17], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  937|   758k|    MULADD(at[18], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  938|   758k|    COMBA_STORE(C->dp[18]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  939|       |    /* 19 */
  940|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  941|   758k|    MULADD(at[0], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  942|   758k|    MULADD(at[1], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  943|   758k|    MULADD(at[2], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  944|   758k|    MULADD(at[3], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  945|   758k|    MULADD(at[4], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  946|   758k|    MULADD(at[5], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  947|   758k|    MULADD(at[6], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  948|   758k|    MULADD(at[7], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  949|   758k|    MULADD(at[8], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  950|   758k|    MULADD(at[9], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  951|   758k|    MULADD(at[10], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  952|   758k|    MULADD(at[11], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  953|   758k|    MULADD(at[12], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  954|   758k|    MULADD(at[13], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  955|   758k|    MULADD(at[14], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  956|   758k|    MULADD(at[15], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  957|   758k|    MULADD(at[16], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  958|   758k|    MULADD(at[17], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  959|   758k|    MULADD(at[18], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  960|   758k|    MULADD(at[19], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  961|   758k|    COMBA_STORE(C->dp[19]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  962|       |    /* 20 */
  963|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  964|   758k|    MULADD(at[0], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  965|   758k|    MULADD(at[1], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  966|   758k|    MULADD(at[2], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  967|   758k|    MULADD(at[3], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  968|   758k|    MULADD(at[4], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  969|   758k|    MULADD(at[5], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  970|   758k|    MULADD(at[6], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  971|   758k|    MULADD(at[7], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  972|   758k|    MULADD(at[8], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  973|   758k|    MULADD(at[9], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  974|   758k|    MULADD(at[10], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  975|   758k|    MULADD(at[11], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  976|   758k|    MULADD(at[12], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  977|   758k|    MULADD(at[13], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  978|   758k|    MULADD(at[14], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  979|   758k|    MULADD(at[15], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  980|   758k|    MULADD(at[16], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  981|   758k|    MULADD(at[17], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  982|   758k|    MULADD(at[18], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  983|   758k|    MULADD(at[19], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  984|   758k|    MULADD(at[20], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  985|   758k|    COMBA_STORE(C->dp[20]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
  986|       |    /* 21 */
  987|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  988|   758k|    MULADD(at[0], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  989|   758k|    MULADD(at[1], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  990|   758k|    MULADD(at[2], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  991|   758k|    MULADD(at[3], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  992|   758k|    MULADD(at[4], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  993|   758k|    MULADD(at[5], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  994|   758k|    MULADD(at[6], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  995|   758k|    MULADD(at[7], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  996|   758k|    MULADD(at[8], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  997|   758k|    MULADD(at[9], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  998|   758k|    MULADD(at[10], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
  999|   758k|    MULADD(at[11], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1000|   758k|    MULADD(at[12], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1001|   758k|    MULADD(at[13], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1002|   758k|    MULADD(at[14], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1003|   758k|    MULADD(at[15], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1004|   758k|    MULADD(at[16], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1005|   758k|    MULADD(at[17], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1006|   758k|    MULADD(at[18], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1007|   758k|    MULADD(at[19], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1008|   758k|    MULADD(at[20], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1009|   758k|    MULADD(at[21], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1010|   758k|    COMBA_STORE(C->dp[21]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1011|       |    /* 22 */
 1012|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1013|   758k|    MULADD(at[0], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1014|   758k|    MULADD(at[1], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1015|   758k|    MULADD(at[2], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1016|   758k|    MULADD(at[3], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1017|   758k|    MULADD(at[4], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1018|   758k|    MULADD(at[5], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1019|   758k|    MULADD(at[6], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1020|   758k|    MULADD(at[7], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1021|   758k|    MULADD(at[8], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1022|   758k|    MULADD(at[9], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1023|   758k|    MULADD(at[10], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1024|   758k|    MULADD(at[11], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1025|   758k|    MULADD(at[12], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1026|   758k|    MULADD(at[13], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1027|   758k|    MULADD(at[14], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1028|   758k|    MULADD(at[15], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1029|   758k|    MULADD(at[16], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1030|   758k|    MULADD(at[17], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1031|   758k|    MULADD(at[18], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1032|   758k|    MULADD(at[19], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1033|   758k|    MULADD(at[20], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1034|   758k|    MULADD(at[21], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1035|   758k|    MULADD(at[22], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1036|   758k|    COMBA_STORE(C->dp[22]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1037|       |    /* 23 */
 1038|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1039|   758k|    MULADD(at[0], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1040|   758k|    MULADD(at[1], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1041|   758k|    MULADD(at[2], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1042|   758k|    MULADD(at[3], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1043|   758k|    MULADD(at[4], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1044|   758k|    MULADD(at[5], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1045|   758k|    MULADD(at[6], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1046|   758k|    MULADD(at[7], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1047|   758k|    MULADD(at[8], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1048|   758k|    MULADD(at[9], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1049|   758k|    MULADD(at[10], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1050|   758k|    MULADD(at[11], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1051|   758k|    MULADD(at[12], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1052|   758k|    MULADD(at[13], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1053|   758k|    MULADD(at[14], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1054|   758k|    MULADD(at[15], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1055|   758k|    MULADD(at[16], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1056|   758k|    MULADD(at[17], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1057|   758k|    MULADD(at[18], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1058|   758k|    MULADD(at[19], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1059|   758k|    MULADD(at[20], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1060|   758k|    MULADD(at[21], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1061|   758k|    MULADD(at[22], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1062|   758k|    MULADD(at[23], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1063|   758k|    COMBA_STORE(C->dp[23]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1064|       |    /* 24 */
 1065|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1066|   758k|    MULADD(at[0], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1067|   758k|    MULADD(at[1], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1068|   758k|    MULADD(at[2], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1069|   758k|    MULADD(at[3], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1070|   758k|    MULADD(at[4], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1071|   758k|    MULADD(at[5], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1072|   758k|    MULADD(at[6], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1073|   758k|    MULADD(at[7], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1074|   758k|    MULADD(at[8], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1075|   758k|    MULADD(at[9], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1076|   758k|    MULADD(at[10], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1077|   758k|    MULADD(at[11], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1078|   758k|    MULADD(at[12], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1079|   758k|    MULADD(at[13], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1080|   758k|    MULADD(at[14], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1081|   758k|    MULADD(at[15], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1082|   758k|    MULADD(at[16], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1083|   758k|    MULADD(at[17], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1084|   758k|    MULADD(at[18], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1085|   758k|    MULADD(at[19], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1086|   758k|    MULADD(at[20], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1087|   758k|    MULADD(at[21], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1088|   758k|    MULADD(at[22], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1089|   758k|    MULADD(at[23], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1090|   758k|    MULADD(at[24], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1091|   758k|    COMBA_STORE(C->dp[24]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1092|       |    /* 25 */
 1093|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1094|   758k|    MULADD(at[0], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1095|   758k|    MULADD(at[1], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1096|   758k|    MULADD(at[2], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1097|   758k|    MULADD(at[3], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1098|   758k|    MULADD(at[4], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1099|   758k|    MULADD(at[5], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1100|   758k|    MULADD(at[6], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1101|   758k|    MULADD(at[7], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1102|   758k|    MULADD(at[8], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1103|   758k|    MULADD(at[9], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1104|   758k|    MULADD(at[10], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1105|   758k|    MULADD(at[11], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1106|   758k|    MULADD(at[12], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1107|   758k|    MULADD(at[13], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1108|   758k|    MULADD(at[14], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1109|   758k|    MULADD(at[15], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1110|   758k|    MULADD(at[16], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1111|   758k|    MULADD(at[17], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1112|   758k|    MULADD(at[18], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1113|   758k|    MULADD(at[19], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1114|   758k|    MULADD(at[20], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1115|   758k|    MULADD(at[21], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1116|   758k|    MULADD(at[22], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1117|   758k|    MULADD(at[23], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1118|   758k|    MULADD(at[24], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1119|   758k|    MULADD(at[25], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1120|   758k|    COMBA_STORE(C->dp[25]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1121|       |    /* 26 */
 1122|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1123|   758k|    MULADD(at[0], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1124|   758k|    MULADD(at[1], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1125|   758k|    MULADD(at[2], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1126|   758k|    MULADD(at[3], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1127|   758k|    MULADD(at[4], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1128|   758k|    MULADD(at[5], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1129|   758k|    MULADD(at[6], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1130|   758k|    MULADD(at[7], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1131|   758k|    MULADD(at[8], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1132|   758k|    MULADD(at[9], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1133|   758k|    MULADD(at[10], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1134|   758k|    MULADD(at[11], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1135|   758k|    MULADD(at[12], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1136|   758k|    MULADD(at[13], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1137|   758k|    MULADD(at[14], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1138|   758k|    MULADD(at[15], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1139|   758k|    MULADD(at[16], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1140|   758k|    MULADD(at[17], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1141|   758k|    MULADD(at[18], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1142|   758k|    MULADD(at[19], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1143|   758k|    MULADD(at[20], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1144|   758k|    MULADD(at[21], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1145|   758k|    MULADD(at[22], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1146|   758k|    MULADD(at[23], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1147|   758k|    MULADD(at[24], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1148|   758k|    MULADD(at[25], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1149|   758k|    MULADD(at[26], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1150|   758k|    COMBA_STORE(C->dp[26]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1151|       |    /* 27 */
 1152|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1153|   758k|    MULADD(at[0], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1154|   758k|    MULADD(at[1], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1155|   758k|    MULADD(at[2], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1156|   758k|    MULADD(at[3], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1157|   758k|    MULADD(at[4], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1158|   758k|    MULADD(at[5], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1159|   758k|    MULADD(at[6], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1160|   758k|    MULADD(at[7], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1161|   758k|    MULADD(at[8], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1162|   758k|    MULADD(at[9], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1163|   758k|    MULADD(at[10], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1164|   758k|    MULADD(at[11], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1165|   758k|    MULADD(at[12], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1166|   758k|    MULADD(at[13], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1167|   758k|    MULADD(at[14], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1168|   758k|    MULADD(at[15], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1169|   758k|    MULADD(at[16], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1170|   758k|    MULADD(at[17], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1171|   758k|    MULADD(at[18], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1172|   758k|    MULADD(at[19], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1173|   758k|    MULADD(at[20], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1174|   758k|    MULADD(at[21], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1175|   758k|    MULADD(at[22], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1176|   758k|    MULADD(at[23], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1177|   758k|    MULADD(at[24], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1178|   758k|    MULADD(at[25], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1179|   758k|    MULADD(at[26], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1180|   758k|    MULADD(at[27], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1181|   758k|    COMBA_STORE(C->dp[27]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1182|       |    /* 28 */
 1183|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1184|   758k|    MULADD(at[0], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1185|   758k|    MULADD(at[1], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1186|   758k|    MULADD(at[2], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1187|   758k|    MULADD(at[3], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1188|   758k|    MULADD(at[4], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1189|   758k|    MULADD(at[5], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1190|   758k|    MULADD(at[6], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1191|   758k|    MULADD(at[7], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1192|   758k|    MULADD(at[8], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1193|   758k|    MULADD(at[9], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1194|   758k|    MULADD(at[10], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1195|   758k|    MULADD(at[11], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1196|   758k|    MULADD(at[12], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1197|   758k|    MULADD(at[13], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1198|   758k|    MULADD(at[14], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1199|   758k|    MULADD(at[15], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1200|   758k|    MULADD(at[16], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1201|   758k|    MULADD(at[17], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1202|   758k|    MULADD(at[18], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1203|   758k|    MULADD(at[19], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1204|   758k|    MULADD(at[20], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1205|   758k|    MULADD(at[21], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1206|   758k|    MULADD(at[22], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1207|   758k|    MULADD(at[23], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1208|   758k|    MULADD(at[24], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1209|   758k|    MULADD(at[25], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1210|   758k|    MULADD(at[26], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1211|   758k|    MULADD(at[27], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1212|   758k|    MULADD(at[28], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1213|   758k|    COMBA_STORE(C->dp[28]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1214|       |    /* 29 */
 1215|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1216|   758k|    MULADD(at[0], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1217|   758k|    MULADD(at[1], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1218|   758k|    MULADD(at[2], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1219|   758k|    MULADD(at[3], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1220|   758k|    MULADD(at[4], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1221|   758k|    MULADD(at[5], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1222|   758k|    MULADD(at[6], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1223|   758k|    MULADD(at[7], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1224|   758k|    MULADD(at[8], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1225|   758k|    MULADD(at[9], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1226|   758k|    MULADD(at[10], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1227|   758k|    MULADD(at[11], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1228|   758k|    MULADD(at[12], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1229|   758k|    MULADD(at[13], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1230|   758k|    MULADD(at[14], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1231|   758k|    MULADD(at[15], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1232|   758k|    MULADD(at[16], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1233|   758k|    MULADD(at[17], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1234|   758k|    MULADD(at[18], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1235|   758k|    MULADD(at[19], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1236|   758k|    MULADD(at[20], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1237|   758k|    MULADD(at[21], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1238|   758k|    MULADD(at[22], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1239|   758k|    MULADD(at[23], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1240|   758k|    MULADD(at[24], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1241|   758k|    MULADD(at[25], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1242|   758k|    MULADD(at[26], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1243|   758k|    MULADD(at[27], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1244|   758k|    MULADD(at[28], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1245|   758k|    MULADD(at[29], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1246|   758k|    COMBA_STORE(C->dp[29]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1247|       |    /* 30 */
 1248|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1249|   758k|    MULADD(at[0], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1250|   758k|    MULADD(at[1], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1251|   758k|    MULADD(at[2], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1252|   758k|    MULADD(at[3], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1253|   758k|    MULADD(at[4], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1254|   758k|    MULADD(at[5], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1255|   758k|    MULADD(at[6], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1256|   758k|    MULADD(at[7], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1257|   758k|    MULADD(at[8], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1258|   758k|    MULADD(at[9], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1259|   758k|    MULADD(at[10], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1260|   758k|    MULADD(at[11], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1261|   758k|    MULADD(at[12], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1262|   758k|    MULADD(at[13], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1263|   758k|    MULADD(at[14], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1264|   758k|    MULADD(at[15], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1265|   758k|    MULADD(at[16], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1266|   758k|    MULADD(at[17], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1267|   758k|    MULADD(at[18], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1268|   758k|    MULADD(at[19], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1269|   758k|    MULADD(at[20], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1270|   758k|    MULADD(at[21], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1271|   758k|    MULADD(at[22], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1272|   758k|    MULADD(at[23], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1273|   758k|    MULADD(at[24], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1274|   758k|    MULADD(at[25], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1275|   758k|    MULADD(at[26], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1276|   758k|    MULADD(at[27], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1277|   758k|    MULADD(at[28], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1278|   758k|    MULADD(at[29], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1279|   758k|    MULADD(at[30], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1280|   758k|    COMBA_STORE(C->dp[30]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1281|       |    /* 31 */
 1282|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1283|   758k|    MULADD(at[0], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1284|   758k|    MULADD(at[1], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1285|   758k|    MULADD(at[2], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1286|   758k|    MULADD(at[3], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1287|   758k|    MULADD(at[4], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1288|   758k|    MULADD(at[5], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1289|   758k|    MULADD(at[6], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1290|   758k|    MULADD(at[7], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1291|   758k|    MULADD(at[8], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1292|   758k|    MULADD(at[9], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1293|   758k|    MULADD(at[10], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1294|   758k|    MULADD(at[11], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1295|   758k|    MULADD(at[12], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1296|   758k|    MULADD(at[13], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1297|   758k|    MULADD(at[14], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1298|   758k|    MULADD(at[15], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1299|   758k|    MULADD(at[16], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1300|   758k|    MULADD(at[17], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1301|   758k|    MULADD(at[18], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1302|   758k|    MULADD(at[19], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1303|   758k|    MULADD(at[20], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1304|   758k|    MULADD(at[21], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1305|   758k|    MULADD(at[22], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1306|   758k|    MULADD(at[23], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1307|   758k|    MULADD(at[24], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1308|   758k|    MULADD(at[25], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1309|   758k|    MULADD(at[26], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1310|   758k|    MULADD(at[27], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1311|   758k|    MULADD(at[28], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1312|   758k|    MULADD(at[29], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1313|   758k|    MULADD(at[30], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1314|   758k|    MULADD(at[31], at[32]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1315|   758k|    COMBA_STORE(C->dp[31]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1316|       |    /* 32 */
 1317|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1318|   758k|    MULADD(at[1], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1319|   758k|    MULADD(at[2], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1320|   758k|    MULADD(at[3], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1321|   758k|    MULADD(at[4], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1322|   758k|    MULADD(at[5], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1323|   758k|    MULADD(at[6], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1324|   758k|    MULADD(at[7], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1325|   758k|    MULADD(at[8], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1326|   758k|    MULADD(at[9], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1327|   758k|    MULADD(at[10], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1328|   758k|    MULADD(at[11], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1329|   758k|    MULADD(at[12], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1330|   758k|    MULADD(at[13], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1331|   758k|    MULADD(at[14], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1332|   758k|    MULADD(at[15], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1333|   758k|    MULADD(at[16], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1334|   758k|    MULADD(at[17], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1335|   758k|    MULADD(at[18], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1336|   758k|    MULADD(at[19], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1337|   758k|    MULADD(at[20], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1338|   758k|    MULADD(at[21], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1339|   758k|    MULADD(at[22], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1340|   758k|    MULADD(at[23], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1341|   758k|    MULADD(at[24], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1342|   758k|    MULADD(at[25], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1343|   758k|    MULADD(at[26], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1344|   758k|    MULADD(at[27], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1345|   758k|    MULADD(at[28], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1346|   758k|    MULADD(at[29], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1347|   758k|    MULADD(at[30], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1348|   758k|    MULADD(at[31], at[33]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1349|   758k|    COMBA_STORE(C->dp[32]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1350|       |    /* 33 */
 1351|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1352|   758k|    MULADD(at[2], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1353|   758k|    MULADD(at[3], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1354|   758k|    MULADD(at[4], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1355|   758k|    MULADD(at[5], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1356|   758k|    MULADD(at[6], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1357|   758k|    MULADD(at[7], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1358|   758k|    MULADD(at[8], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1359|   758k|    MULADD(at[9], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1360|   758k|    MULADD(at[10], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1361|   758k|    MULADD(at[11], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1362|   758k|    MULADD(at[12], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1363|   758k|    MULADD(at[13], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1364|   758k|    MULADD(at[14], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1365|   758k|    MULADD(at[15], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1366|   758k|    MULADD(at[16], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1367|   758k|    MULADD(at[17], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1368|   758k|    MULADD(at[18], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1369|   758k|    MULADD(at[19], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1370|   758k|    MULADD(at[20], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1371|   758k|    MULADD(at[21], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1372|   758k|    MULADD(at[22], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1373|   758k|    MULADD(at[23], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1374|   758k|    MULADD(at[24], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1375|   758k|    MULADD(at[25], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1376|   758k|    MULADD(at[26], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1377|   758k|    MULADD(at[27], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1378|   758k|    MULADD(at[28], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1379|   758k|    MULADD(at[29], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1380|   758k|    MULADD(at[30], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1381|   758k|    MULADD(at[31], at[34]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1382|   758k|    COMBA_STORE(C->dp[33]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1383|       |    /* 34 */
 1384|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1385|   758k|    MULADD(at[3], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1386|   758k|    MULADD(at[4], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1387|   758k|    MULADD(at[5], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1388|   758k|    MULADD(at[6], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1389|   758k|    MULADD(at[7], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1390|   758k|    MULADD(at[8], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1391|   758k|    MULADD(at[9], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1392|   758k|    MULADD(at[10], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1393|   758k|    MULADD(at[11], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1394|   758k|    MULADD(at[12], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1395|   758k|    MULADD(at[13], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1396|   758k|    MULADD(at[14], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1397|   758k|    MULADD(at[15], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1398|   758k|    MULADD(at[16], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1399|   758k|    MULADD(at[17], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1400|   758k|    MULADD(at[18], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1401|   758k|    MULADD(at[19], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1402|   758k|    MULADD(at[20], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1403|   758k|    MULADD(at[21], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1404|   758k|    MULADD(at[22], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1405|   758k|    MULADD(at[23], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1406|   758k|    MULADD(at[24], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1407|   758k|    MULADD(at[25], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1408|   758k|    MULADD(at[26], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1409|   758k|    MULADD(at[27], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1410|   758k|    MULADD(at[28], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1411|   758k|    MULADD(at[29], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1412|   758k|    MULADD(at[30], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1413|   758k|    MULADD(at[31], at[35]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1414|   758k|    COMBA_STORE(C->dp[34]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1415|       |    /* 35 */
 1416|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1417|   758k|    MULADD(at[4], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1418|   758k|    MULADD(at[5], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1419|   758k|    MULADD(at[6], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1420|   758k|    MULADD(at[7], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1421|   758k|    MULADD(at[8], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1422|   758k|    MULADD(at[9], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1423|   758k|    MULADD(at[10], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1424|   758k|    MULADD(at[11], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1425|   758k|    MULADD(at[12], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1426|   758k|    MULADD(at[13], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1427|   758k|    MULADD(at[14], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1428|   758k|    MULADD(at[15], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1429|   758k|    MULADD(at[16], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1430|   758k|    MULADD(at[17], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1431|   758k|    MULADD(at[18], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1432|   758k|    MULADD(at[19], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1433|   758k|    MULADD(at[20], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1434|   758k|    MULADD(at[21], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1435|   758k|    MULADD(at[22], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1436|   758k|    MULADD(at[23], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1437|   758k|    MULADD(at[24], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1438|   758k|    MULADD(at[25], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1439|   758k|    MULADD(at[26], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1440|   758k|    MULADD(at[27], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1441|   758k|    MULADD(at[28], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1442|   758k|    MULADD(at[29], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1443|   758k|    MULADD(at[30], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1444|   758k|    MULADD(at[31], at[36]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1445|   758k|    COMBA_STORE(C->dp[35]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1446|       |    /* 36 */
 1447|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1448|   758k|    MULADD(at[5], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1449|   758k|    MULADD(at[6], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1450|   758k|    MULADD(at[7], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1451|   758k|    MULADD(at[8], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1452|   758k|    MULADD(at[9], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1453|   758k|    MULADD(at[10], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1454|   758k|    MULADD(at[11], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1455|   758k|    MULADD(at[12], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1456|   758k|    MULADD(at[13], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1457|   758k|    MULADD(at[14], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1458|   758k|    MULADD(at[15], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1459|   758k|    MULADD(at[16], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1460|   758k|    MULADD(at[17], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1461|   758k|    MULADD(at[18], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1462|   758k|    MULADD(at[19], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1463|   758k|    MULADD(at[20], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1464|   758k|    MULADD(at[21], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1465|   758k|    MULADD(at[22], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1466|   758k|    MULADD(at[23], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1467|   758k|    MULADD(at[24], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1468|   758k|    MULADD(at[25], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1469|   758k|    MULADD(at[26], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1470|   758k|    MULADD(at[27], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1471|   758k|    MULADD(at[28], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1472|   758k|    MULADD(at[29], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1473|   758k|    MULADD(at[30], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1474|   758k|    MULADD(at[31], at[37]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1475|   758k|    COMBA_STORE(C->dp[36]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1476|       |    /* 37 */
 1477|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1478|   758k|    MULADD(at[6], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1479|   758k|    MULADD(at[7], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1480|   758k|    MULADD(at[8], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1481|   758k|    MULADD(at[9], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1482|   758k|    MULADD(at[10], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1483|   758k|    MULADD(at[11], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1484|   758k|    MULADD(at[12], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1485|   758k|    MULADD(at[13], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1486|   758k|    MULADD(at[14], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1487|   758k|    MULADD(at[15], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1488|   758k|    MULADD(at[16], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1489|   758k|    MULADD(at[17], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1490|   758k|    MULADD(at[18], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1491|   758k|    MULADD(at[19], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1492|   758k|    MULADD(at[20], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1493|   758k|    MULADD(at[21], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1494|   758k|    MULADD(at[22], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1495|   758k|    MULADD(at[23], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1496|   758k|    MULADD(at[24], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1497|   758k|    MULADD(at[25], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1498|   758k|    MULADD(at[26], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1499|   758k|    MULADD(at[27], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1500|   758k|    MULADD(at[28], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1501|   758k|    MULADD(at[29], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1502|   758k|    MULADD(at[30], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1503|   758k|    MULADD(at[31], at[38]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1504|   758k|    COMBA_STORE(C->dp[37]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1505|       |    /* 38 */
 1506|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1507|   758k|    MULADD(at[7], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1508|   758k|    MULADD(at[8], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1509|   758k|    MULADD(at[9], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1510|   758k|    MULADD(at[10], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1511|   758k|    MULADD(at[11], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1512|   758k|    MULADD(at[12], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1513|   758k|    MULADD(at[13], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1514|   758k|    MULADD(at[14], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1515|   758k|    MULADD(at[15], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1516|   758k|    MULADD(at[16], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1517|   758k|    MULADD(at[17], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1518|   758k|    MULADD(at[18], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1519|   758k|    MULADD(at[19], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1520|   758k|    MULADD(at[20], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1521|   758k|    MULADD(at[21], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1522|   758k|    MULADD(at[22], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1523|   758k|    MULADD(at[23], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1524|   758k|    MULADD(at[24], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1525|   758k|    MULADD(at[25], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1526|   758k|    MULADD(at[26], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1527|   758k|    MULADD(at[27], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1528|   758k|    MULADD(at[28], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1529|   758k|    MULADD(at[29], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1530|   758k|    MULADD(at[30], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1531|   758k|    MULADD(at[31], at[39]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1532|   758k|    COMBA_STORE(C->dp[38]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1533|       |    /* 39 */
 1534|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1535|   758k|    MULADD(at[8], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1536|   758k|    MULADD(at[9], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1537|   758k|    MULADD(at[10], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1538|   758k|    MULADD(at[11], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1539|   758k|    MULADD(at[12], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1540|   758k|    MULADD(at[13], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1541|   758k|    MULADD(at[14], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1542|   758k|    MULADD(at[15], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1543|   758k|    MULADD(at[16], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1544|   758k|    MULADD(at[17], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1545|   758k|    MULADD(at[18], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1546|   758k|    MULADD(at[19], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1547|   758k|    MULADD(at[20], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1548|   758k|    MULADD(at[21], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1549|   758k|    MULADD(at[22], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1550|   758k|    MULADD(at[23], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1551|   758k|    MULADD(at[24], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1552|   758k|    MULADD(at[25], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1553|   758k|    MULADD(at[26], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1554|   758k|    MULADD(at[27], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1555|   758k|    MULADD(at[28], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1556|   758k|    MULADD(at[29], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1557|   758k|    MULADD(at[30], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1558|   758k|    MULADD(at[31], at[40]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1559|   758k|    COMBA_STORE(C->dp[39]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1560|       |    /* 40 */
 1561|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1562|   758k|    MULADD(at[9], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1563|   758k|    MULADD(at[10], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1564|   758k|    MULADD(at[11], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1565|   758k|    MULADD(at[12], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1566|   758k|    MULADD(at[13], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1567|   758k|    MULADD(at[14], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1568|   758k|    MULADD(at[15], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1569|   758k|    MULADD(at[16], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1570|   758k|    MULADD(at[17], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1571|   758k|    MULADD(at[18], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1572|   758k|    MULADD(at[19], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1573|   758k|    MULADD(at[20], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1574|   758k|    MULADD(at[21], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1575|   758k|    MULADD(at[22], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1576|   758k|    MULADD(at[23], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1577|   758k|    MULADD(at[24], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1578|   758k|    MULADD(at[25], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1579|   758k|    MULADD(at[26], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1580|   758k|    MULADD(at[27], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1581|   758k|    MULADD(at[28], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1582|   758k|    MULADD(at[29], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1583|   758k|    MULADD(at[30], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1584|   758k|    MULADD(at[31], at[41]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1585|   758k|    COMBA_STORE(C->dp[40]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1586|       |    /* 41 */
 1587|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1588|   758k|    MULADD(at[10], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1589|   758k|    MULADD(at[11], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1590|   758k|    MULADD(at[12], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1591|   758k|    MULADD(at[13], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1592|   758k|    MULADD(at[14], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1593|   758k|    MULADD(at[15], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1594|   758k|    MULADD(at[16], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1595|   758k|    MULADD(at[17], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1596|   758k|    MULADD(at[18], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1597|   758k|    MULADD(at[19], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1598|   758k|    MULADD(at[20], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1599|   758k|    MULADD(at[21], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1600|   758k|    MULADD(at[22], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1601|   758k|    MULADD(at[23], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1602|   758k|    MULADD(at[24], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1603|   758k|    MULADD(at[25], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1604|   758k|    MULADD(at[26], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1605|   758k|    MULADD(at[27], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1606|   758k|    MULADD(at[28], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1607|   758k|    MULADD(at[29], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1608|   758k|    MULADD(at[30], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1609|   758k|    MULADD(at[31], at[42]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1610|   758k|    COMBA_STORE(C->dp[41]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1611|       |    /* 42 */
 1612|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1613|   758k|    MULADD(at[11], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1614|   758k|    MULADD(at[12], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1615|   758k|    MULADD(at[13], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1616|   758k|    MULADD(at[14], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1617|   758k|    MULADD(at[15], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1618|   758k|    MULADD(at[16], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1619|   758k|    MULADD(at[17], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1620|   758k|    MULADD(at[18], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1621|   758k|    MULADD(at[19], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1622|   758k|    MULADD(at[20], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1623|   758k|    MULADD(at[21], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1624|   758k|    MULADD(at[22], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1625|   758k|    MULADD(at[23], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1626|   758k|    MULADD(at[24], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1627|   758k|    MULADD(at[25], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1628|   758k|    MULADD(at[26], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1629|   758k|    MULADD(at[27], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1630|   758k|    MULADD(at[28], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1631|   758k|    MULADD(at[29], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1632|   758k|    MULADD(at[30], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1633|   758k|    MULADD(at[31], at[43]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1634|   758k|    COMBA_STORE(C->dp[42]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1635|       |    /* 43 */
 1636|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1637|   758k|    MULADD(at[12], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1638|   758k|    MULADD(at[13], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1639|   758k|    MULADD(at[14], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1640|   758k|    MULADD(at[15], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1641|   758k|    MULADD(at[16], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1642|   758k|    MULADD(at[17], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1643|   758k|    MULADD(at[18], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1644|   758k|    MULADD(at[19], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1645|   758k|    MULADD(at[20], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1646|   758k|    MULADD(at[21], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1647|   758k|    MULADD(at[22], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1648|   758k|    MULADD(at[23], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1649|   758k|    MULADD(at[24], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1650|   758k|    MULADD(at[25], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1651|   758k|    MULADD(at[26], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1652|   758k|    MULADD(at[27], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1653|   758k|    MULADD(at[28], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1654|   758k|    MULADD(at[29], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1655|   758k|    MULADD(at[30], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1656|   758k|    MULADD(at[31], at[44]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1657|   758k|    COMBA_STORE(C->dp[43]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1658|       |    /* 44 */
 1659|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1660|   758k|    MULADD(at[13], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1661|   758k|    MULADD(at[14], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1662|   758k|    MULADD(at[15], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1663|   758k|    MULADD(at[16], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1664|   758k|    MULADD(at[17], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1665|   758k|    MULADD(at[18], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1666|   758k|    MULADD(at[19], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1667|   758k|    MULADD(at[20], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1668|   758k|    MULADD(at[21], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1669|   758k|    MULADD(at[22], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1670|   758k|    MULADD(at[23], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1671|   758k|    MULADD(at[24], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1672|   758k|    MULADD(at[25], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1673|   758k|    MULADD(at[26], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1674|   758k|    MULADD(at[27], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1675|   758k|    MULADD(at[28], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1676|   758k|    MULADD(at[29], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1677|   758k|    MULADD(at[30], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1678|   758k|    MULADD(at[31], at[45]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1679|   758k|    COMBA_STORE(C->dp[44]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1680|       |    /* 45 */
 1681|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1682|   758k|    MULADD(at[14], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1683|   758k|    MULADD(at[15], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1684|   758k|    MULADD(at[16], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1685|   758k|    MULADD(at[17], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1686|   758k|    MULADD(at[18], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1687|   758k|    MULADD(at[19], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1688|   758k|    MULADD(at[20], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1689|   758k|    MULADD(at[21], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1690|   758k|    MULADD(at[22], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1691|   758k|    MULADD(at[23], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1692|   758k|    MULADD(at[24], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1693|   758k|    MULADD(at[25], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1694|   758k|    MULADD(at[26], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1695|   758k|    MULADD(at[27], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1696|   758k|    MULADD(at[28], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1697|   758k|    MULADD(at[29], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1698|   758k|    MULADD(at[30], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1699|   758k|    MULADD(at[31], at[46]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1700|   758k|    COMBA_STORE(C->dp[45]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1701|       |    /* 46 */
 1702|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1703|   758k|    MULADD(at[15], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1704|   758k|    MULADD(at[16], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1705|   758k|    MULADD(at[17], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1706|   758k|    MULADD(at[18], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1707|   758k|    MULADD(at[19], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1708|   758k|    MULADD(at[20], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1709|   758k|    MULADD(at[21], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1710|   758k|    MULADD(at[22], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1711|   758k|    MULADD(at[23], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1712|   758k|    MULADD(at[24], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1713|   758k|    MULADD(at[25], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1714|   758k|    MULADD(at[26], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1715|   758k|    MULADD(at[27], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1716|   758k|    MULADD(at[28], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1717|   758k|    MULADD(at[29], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1718|   758k|    MULADD(at[30], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1719|   758k|    MULADD(at[31], at[47]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1720|   758k|    COMBA_STORE(C->dp[46]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1721|       |    /* 47 */
 1722|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1723|   758k|    MULADD(at[16], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1724|   758k|    MULADD(at[17], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1725|   758k|    MULADD(at[18], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1726|   758k|    MULADD(at[19], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1727|   758k|    MULADD(at[20], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1728|   758k|    MULADD(at[21], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1729|   758k|    MULADD(at[22], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1730|   758k|    MULADD(at[23], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1731|   758k|    MULADD(at[24], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1732|   758k|    MULADD(at[25], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1733|   758k|    MULADD(at[26], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1734|   758k|    MULADD(at[27], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1735|   758k|    MULADD(at[28], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1736|   758k|    MULADD(at[29], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1737|   758k|    MULADD(at[30], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1738|   758k|    MULADD(at[31], at[48]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1739|   758k|    COMBA_STORE(C->dp[47]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1740|       |    /* 48 */
 1741|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1742|   758k|    MULADD(at[17], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1743|   758k|    MULADD(at[18], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1744|   758k|    MULADD(at[19], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1745|   758k|    MULADD(at[20], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1746|   758k|    MULADD(at[21], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1747|   758k|    MULADD(at[22], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1748|   758k|    MULADD(at[23], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1749|   758k|    MULADD(at[24], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1750|   758k|    MULADD(at[25], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1751|   758k|    MULADD(at[26], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1752|   758k|    MULADD(at[27], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1753|   758k|    MULADD(at[28], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1754|   758k|    MULADD(at[29], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1755|   758k|    MULADD(at[30], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1756|   758k|    MULADD(at[31], at[49]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1757|   758k|    COMBA_STORE(C->dp[48]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1758|       |    /* 49 */
 1759|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1760|   758k|    MULADD(at[18], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1761|   758k|    MULADD(at[19], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1762|   758k|    MULADD(at[20], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1763|   758k|    MULADD(at[21], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1764|   758k|    MULADD(at[22], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1765|   758k|    MULADD(at[23], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1766|   758k|    MULADD(at[24], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1767|   758k|    MULADD(at[25], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1768|   758k|    MULADD(at[26], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1769|   758k|    MULADD(at[27], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1770|   758k|    MULADD(at[28], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1771|   758k|    MULADD(at[29], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1772|   758k|    MULADD(at[30], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1773|   758k|    MULADD(at[31], at[50]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1774|   758k|    COMBA_STORE(C->dp[49]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1775|       |    /* 50 */
 1776|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1777|   758k|    MULADD(at[19], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1778|   758k|    MULADD(at[20], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1779|   758k|    MULADD(at[21], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1780|   758k|    MULADD(at[22], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1781|   758k|    MULADD(at[23], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1782|   758k|    MULADD(at[24], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1783|   758k|    MULADD(at[25], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1784|   758k|    MULADD(at[26], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1785|   758k|    MULADD(at[27], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1786|   758k|    MULADD(at[28], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1787|   758k|    MULADD(at[29], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1788|   758k|    MULADD(at[30], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1789|   758k|    MULADD(at[31], at[51]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1790|   758k|    COMBA_STORE(C->dp[50]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1791|       |    /* 51 */
 1792|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1793|   758k|    MULADD(at[20], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1794|   758k|    MULADD(at[21], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1795|   758k|    MULADD(at[22], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1796|   758k|    MULADD(at[23], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1797|   758k|    MULADD(at[24], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1798|   758k|    MULADD(at[25], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1799|   758k|    MULADD(at[26], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1800|   758k|    MULADD(at[27], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1801|   758k|    MULADD(at[28], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1802|   758k|    MULADD(at[29], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1803|   758k|    MULADD(at[30], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1804|   758k|    MULADD(at[31], at[52]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1805|   758k|    COMBA_STORE(C->dp[51]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1806|       |    /* 52 */
 1807|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1808|   758k|    MULADD(at[21], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1809|   758k|    MULADD(at[22], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1810|   758k|    MULADD(at[23], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1811|   758k|    MULADD(at[24], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1812|   758k|    MULADD(at[25], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1813|   758k|    MULADD(at[26], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1814|   758k|    MULADD(at[27], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1815|   758k|    MULADD(at[28], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1816|   758k|    MULADD(at[29], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1817|   758k|    MULADD(at[30], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1818|   758k|    MULADD(at[31], at[53]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1819|   758k|    COMBA_STORE(C->dp[52]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1820|       |    /* 53 */
 1821|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1822|   758k|    MULADD(at[22], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1823|   758k|    MULADD(at[23], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1824|   758k|    MULADD(at[24], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1825|   758k|    MULADD(at[25], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1826|   758k|    MULADD(at[26], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1827|   758k|    MULADD(at[27], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1828|   758k|    MULADD(at[28], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1829|   758k|    MULADD(at[29], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1830|   758k|    MULADD(at[30], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1831|   758k|    MULADD(at[31], at[54]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1832|   758k|    COMBA_STORE(C->dp[53]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1833|       |    /* 54 */
 1834|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1835|   758k|    MULADD(at[23], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1836|   758k|    MULADD(at[24], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1837|   758k|    MULADD(at[25], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1838|   758k|    MULADD(at[26], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1839|   758k|    MULADD(at[27], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1840|   758k|    MULADD(at[28], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1841|   758k|    MULADD(at[29], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1842|   758k|    MULADD(at[30], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1843|   758k|    MULADD(at[31], at[55]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1844|   758k|    COMBA_STORE(C->dp[54]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1845|       |    /* 55 */
 1846|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1847|   758k|    MULADD(at[24], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1848|   758k|    MULADD(at[25], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1849|   758k|    MULADD(at[26], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1850|   758k|    MULADD(at[27], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1851|   758k|    MULADD(at[28], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1852|   758k|    MULADD(at[29], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1853|   758k|    MULADD(at[30], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1854|   758k|    MULADD(at[31], at[56]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1855|   758k|    COMBA_STORE(C->dp[55]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1856|       |    /* 56 */
 1857|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1858|   758k|    MULADD(at[25], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1859|   758k|    MULADD(at[26], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1860|   758k|    MULADD(at[27], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1861|   758k|    MULADD(at[28], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1862|   758k|    MULADD(at[29], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1863|   758k|    MULADD(at[30], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1864|   758k|    MULADD(at[31], at[57]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1865|   758k|    COMBA_STORE(C->dp[56]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1866|       |    /* 57 */
 1867|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1868|   758k|    MULADD(at[26], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1869|   758k|    MULADD(at[27], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1870|   758k|    MULADD(at[28], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1871|   758k|    MULADD(at[29], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1872|   758k|    MULADD(at[30], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1873|   758k|    MULADD(at[31], at[58]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1874|   758k|    COMBA_STORE(C->dp[57]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1875|       |    /* 58 */
 1876|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1877|   758k|    MULADD(at[27], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1878|   758k|    MULADD(at[28], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1879|   758k|    MULADD(at[29], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1880|   758k|    MULADD(at[30], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1881|   758k|    MULADD(at[31], at[59]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1882|   758k|    COMBA_STORE(C->dp[58]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1883|       |    /* 59 */
 1884|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1885|   758k|    MULADD(at[28], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1886|   758k|    MULADD(at[29], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1887|   758k|    MULADD(at[30], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1888|   758k|    MULADD(at[31], at[60]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1889|   758k|    COMBA_STORE(C->dp[59]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1890|       |    /* 60 */
 1891|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1892|   758k|    MULADD(at[29], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1893|   758k|    MULADD(at[30], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1894|   758k|    MULADD(at[31], at[61]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1895|   758k|    COMBA_STORE(C->dp[60]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1896|       |    /* 61 */
 1897|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1898|   758k|    MULADD(at[30], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1899|   758k|    MULADD(at[31], at[62]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1900|   758k|    COMBA_STORE(C->dp[61]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1901|       |    /* 62 */
 1902|   758k|    COMBA_FORWARD;
  ------------------
  |  |   41|   758k|    do {              \
  |  |   42|   758k|        c0 = c1;      \
  |  |   43|   758k|        c1 = c2;      \
  |  |   44|   758k|        c2 = 0;       \
  |  |   45|   758k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (45:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1903|   758k|    MULADD(at[31], at[63]);
  ------------------
  |  |   52|   758k|    __asm__(                                        \
  |  |   53|   758k|        "movq  %6,%%rax     \n\t"                   \
  |  |   54|   758k|        "mulq  %7           \n\t"                   \
  |  |   55|   758k|        "addq  %%rax,%0     \n\t"                   \
  |  |   56|   758k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   57|   758k|        "adcq  $0,%2        \n\t"                   \
  |  |   58|   758k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |   59|   758k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |   60|   758k|        : "%rax", "%rdx", "cc");
  ------------------
 1904|   758k|    COMBA_STORE(C->dp[62]);
  ------------------
  |  |   67|   758k|    x = c0;
  ------------------
 1905|   758k|    COMBA_STORE2(C->dp[63]);
  ------------------
  |  |   70|   758k|    x = c1;
  ------------------
 1906|   758k|    C->used = 64;
 1907|   758k|    C->sign = A->sign ^ B->sign;
 1908|   758k|    mp_clamp(C);
  ------------------
  |  |   26|   758k|    {                                                    \
  |  |   27|   758k|        while ((a)->used && (a)->dp[(a)->used - 1] == 0) \
  |  |  ------------------
  |  |  |  Branch (27:16): [True: 758k, False: 0]
  |  |  |  Branch (27:29): [True: 513, False: 758k]
  |  |  ------------------
  |  |   28|   758k|            --((a)->used);                               \
  |  |   29|   758k|        (a)->sign = (a)->used ? (a)->sign : ZPOS;        \
  |  |  ------------------
  |  |  |  |  326|      0|#define ZPOS MP_ZPOS
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   758k|#define MP_ZPOS 0
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (29:21): [True: 758k, False: 0]
  |  |  ------------------
  |  |   30|   758k|    }
  ------------------
 1909|   758k|    COMBA_FINI;
 1910|   758k|}
s_mp_sqr_comba_4:
 1914|    567|{
 1915|    567|    mp_digit *a, b[8], c0, c1, c2;
 1916|       |
 1917|    567|    a = A->dp;
 1918|    567|    COMBA_START;
 1919|       |
 1920|       |    /* clear carries */
 1921|    567|    CLEAR_CARRY;
  ------------------
  |  |   64|    567|    c0 = c1 = c2 = 0;
  ------------------
 1922|       |
 1923|       |    /* output 0 */
 1924|    567|    SQRADD(a[0], a[0]);
  ------------------
  |  |   82|    567|    __asm__(                                \
  |  |   83|    567|        "movq  %6,%%rax     \n\t"           \
  |  |   84|    567|        "mulq  %%rax        \n\t"           \
  |  |   85|    567|        "addq  %%rax,%0     \n\t"           \
  |  |   86|    567|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|    567|        "adcq  $0,%2        \n\t"           \
  |  |   88|    567|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|    567|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|    567|        : "%rax", "%rdx", "cc");
  ------------------
 1925|    567|    COMBA_STORE(b[0]);
  ------------------
  |  |   67|    567|    x = c0;
  ------------------
 1926|       |
 1927|       |    /* output 1 */
 1928|    567|    CARRY_FORWARD;
  ------------------
  |  |   73|    567|    do {              \
  |  |   74|    567|        c0 = c1;      \
  |  |   75|    567|        c1 = c2;      \
  |  |   76|    567|        c2 = 0;       \
  |  |   77|    567|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1929|    567|    SQRADD2(a[0], a[1]);
  ------------------
  |  |   93|    567|    __asm__(                                        \
  |  |   94|    567|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    567|        "mulq  %7           \n\t"                   \
  |  |   96|    567|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    567|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    567|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    567|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    567|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    567|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    567|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    567|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    567|        : "%rax", "%rdx", "cc");
  ------------------
 1930|    567|    COMBA_STORE(b[1]);
  ------------------
  |  |   67|    567|    x = c0;
  ------------------
 1931|       |
 1932|       |    /* output 2 */
 1933|    567|    CARRY_FORWARD;
  ------------------
  |  |   73|    567|    do {              \
  |  |   74|    567|        c0 = c1;      \
  |  |   75|    567|        c1 = c2;      \
  |  |   76|    567|        c2 = 0;       \
  |  |   77|    567|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1934|    567|    SQRADD2(a[0], a[2]);
  ------------------
  |  |   93|    567|    __asm__(                                        \
  |  |   94|    567|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    567|        "mulq  %7           \n\t"                   \
  |  |   96|    567|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    567|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    567|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    567|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    567|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    567|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    567|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    567|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    567|        : "%rax", "%rdx", "cc");
  ------------------
 1935|    567|    SQRADD(a[1], a[1]);
  ------------------
  |  |   82|    567|    __asm__(                                \
  |  |   83|    567|        "movq  %6,%%rax     \n\t"           \
  |  |   84|    567|        "mulq  %%rax        \n\t"           \
  |  |   85|    567|        "addq  %%rax,%0     \n\t"           \
  |  |   86|    567|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|    567|        "adcq  $0,%2        \n\t"           \
  |  |   88|    567|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|    567|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|    567|        : "%rax", "%rdx", "cc");
  ------------------
 1936|    567|    COMBA_STORE(b[2]);
  ------------------
  |  |   67|    567|    x = c0;
  ------------------
 1937|       |
 1938|       |    /* output 3 */
 1939|    567|    CARRY_FORWARD;
  ------------------
  |  |   73|    567|    do {              \
  |  |   74|    567|        c0 = c1;      \
  |  |   75|    567|        c1 = c2;      \
  |  |   76|    567|        c2 = 0;       \
  |  |   77|    567|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1940|    567|    SQRADD2(a[0], a[3]);
  ------------------
  |  |   93|    567|    __asm__(                                        \
  |  |   94|    567|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    567|        "mulq  %7           \n\t"                   \
  |  |   96|    567|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    567|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    567|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    567|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    567|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    567|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    567|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    567|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    567|        : "%rax", "%rdx", "cc");
  ------------------
 1941|    567|    SQRADD2(a[1], a[2]);
  ------------------
  |  |   93|    567|    __asm__(                                        \
  |  |   94|    567|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    567|        "mulq  %7           \n\t"                   \
  |  |   96|    567|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    567|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    567|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    567|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    567|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    567|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    567|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    567|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    567|        : "%rax", "%rdx", "cc");
  ------------------
 1942|    567|    COMBA_STORE(b[3]);
  ------------------
  |  |   67|    567|    x = c0;
  ------------------
 1943|       |
 1944|       |    /* output 4 */
 1945|    567|    CARRY_FORWARD;
  ------------------
  |  |   73|    567|    do {              \
  |  |   74|    567|        c0 = c1;      \
  |  |   75|    567|        c1 = c2;      \
  |  |   76|    567|        c2 = 0;       \
  |  |   77|    567|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1946|    567|    SQRADD2(a[1], a[3]);
  ------------------
  |  |   93|    567|    __asm__(                                        \
  |  |   94|    567|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    567|        "mulq  %7           \n\t"                   \
  |  |   96|    567|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    567|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    567|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    567|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    567|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    567|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    567|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    567|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    567|        : "%rax", "%rdx", "cc");
  ------------------
 1947|    567|    SQRADD(a[2], a[2]);
  ------------------
  |  |   82|    567|    __asm__(                                \
  |  |   83|    567|        "movq  %6,%%rax     \n\t"           \
  |  |   84|    567|        "mulq  %%rax        \n\t"           \
  |  |   85|    567|        "addq  %%rax,%0     \n\t"           \
  |  |   86|    567|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|    567|        "adcq  $0,%2        \n\t"           \
  |  |   88|    567|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|    567|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|    567|        : "%rax", "%rdx", "cc");
  ------------------
 1948|    567|    COMBA_STORE(b[4]);
  ------------------
  |  |   67|    567|    x = c0;
  ------------------
 1949|       |
 1950|       |    /* output 5 */
 1951|    567|    CARRY_FORWARD;
  ------------------
  |  |   73|    567|    do {              \
  |  |   74|    567|        c0 = c1;      \
  |  |   75|    567|        c1 = c2;      \
  |  |   76|    567|        c2 = 0;       \
  |  |   77|    567|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1952|    567|    SQRADD2(a[2], a[3]);
  ------------------
  |  |   93|    567|    __asm__(                                        \
  |  |   94|    567|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    567|        "mulq  %7           \n\t"                   \
  |  |   96|    567|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    567|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    567|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    567|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    567|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    567|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    567|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    567|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    567|        : "%rax", "%rdx", "cc");
  ------------------
 1953|    567|    COMBA_STORE(b[5]);
  ------------------
  |  |   67|    567|    x = c0;
  ------------------
 1954|       |
 1955|       |    /* output 6 */
 1956|    567|    CARRY_FORWARD;
  ------------------
  |  |   73|    567|    do {              \
  |  |   74|    567|        c0 = c1;      \
  |  |   75|    567|        c1 = c2;      \
  |  |   76|    567|        c2 = 0;       \
  |  |   77|    567|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1957|    567|    SQRADD(a[3], a[3]);
  ------------------
  |  |   82|    567|    __asm__(                                \
  |  |   83|    567|        "movq  %6,%%rax     \n\t"           \
  |  |   84|    567|        "mulq  %%rax        \n\t"           \
  |  |   85|    567|        "addq  %%rax,%0     \n\t"           \
  |  |   86|    567|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|    567|        "adcq  $0,%2        \n\t"           \
  |  |   88|    567|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|    567|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|    567|        : "%rax", "%rdx", "cc");
  ------------------
 1958|    567|    COMBA_STORE(b[6]);
  ------------------
  |  |   67|    567|    x = c0;
  ------------------
 1959|    567|    COMBA_STORE2(b[7]);
  ------------------
  |  |   70|    567|    x = c1;
  ------------------
 1960|    567|    COMBA_FINI;
 1961|       |
 1962|    567|    B->used = 8;
 1963|    567|    B->sign = ZPOS;
  ------------------
  |  |  326|    567|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|    567|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
 1964|    567|    memcpy(B->dp, b, 8 * sizeof(mp_digit));
 1965|    567|    mp_clamp(B);
  ------------------
  |  |   26|    567|    {                                                    \
  |  |   27|    707|        while ((a)->used && (a)->dp[(a)->used - 1] == 0) \
  |  |  ------------------
  |  |  |  Branch (27:16): [True: 707, False: 0]
  |  |  |  Branch (27:29): [True: 140, False: 567]
  |  |  ------------------
  |  |   28|    567|            --((a)->used);                               \
  |  |   29|    567|        (a)->sign = (a)->used ? (a)->sign : ZPOS;        \
  |  |  ------------------
  |  |  |  |  326|      0|#define ZPOS MP_ZPOS
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    567|#define MP_ZPOS 0
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (29:21): [True: 567, False: 0]
  |  |  ------------------
  |  |   30|    567|    }
  ------------------
 1966|    567|}
s_mp_sqr_comba_8:
 1970|    615|{
 1971|    615|    mp_digit *a, b[16], c0, c1, c2, sc0, sc1, sc2;
 1972|       |
 1973|    615|    a = A->dp;
 1974|    615|    COMBA_START;
 1975|       |
 1976|       |    /* clear carries */
 1977|    615|    CLEAR_CARRY;
  ------------------
  |  |   64|    615|    c0 = c1 = c2 = 0;
  ------------------
 1978|       |
 1979|       |    /* output 0 */
 1980|    615|    SQRADD(a[0], a[0]);
  ------------------
  |  |   82|    615|    __asm__(                                \
  |  |   83|    615|        "movq  %6,%%rax     \n\t"           \
  |  |   84|    615|        "mulq  %%rax        \n\t"           \
  |  |   85|    615|        "addq  %%rax,%0     \n\t"           \
  |  |   86|    615|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|    615|        "adcq  $0,%2        \n\t"           \
  |  |   88|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|    615|        : "%rax", "%rdx", "cc");
  ------------------
 1981|    615|    COMBA_STORE(b[0]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 1982|       |
 1983|       |    /* output 1 */
 1984|    615|    CARRY_FORWARD;
  ------------------
  |  |   73|    615|    do {              \
  |  |   74|    615|        c0 = c1;      \
  |  |   75|    615|        c1 = c2;      \
  |  |   76|    615|        c2 = 0;       \
  |  |   77|    615|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1985|    615|    SQRADD2(a[0], a[1]);
  ------------------
  |  |   93|    615|    __asm__(                                        \
  |  |   94|    615|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    615|        "mulq  %7           \n\t"                   \
  |  |   96|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    615|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    615|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    615|        : "%rax", "%rdx", "cc");
  ------------------
 1986|    615|    COMBA_STORE(b[1]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 1987|       |
 1988|       |    /* output 2 */
 1989|    615|    CARRY_FORWARD;
  ------------------
  |  |   73|    615|    do {              \
  |  |   74|    615|        c0 = c1;      \
  |  |   75|    615|        c1 = c2;      \
  |  |   76|    615|        c2 = 0;       \
  |  |   77|    615|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1990|    615|    SQRADD2(a[0], a[2]);
  ------------------
  |  |   93|    615|    __asm__(                                        \
  |  |   94|    615|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    615|        "mulq  %7           \n\t"                   \
  |  |   96|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    615|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    615|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    615|        : "%rax", "%rdx", "cc");
  ------------------
 1991|    615|    SQRADD(a[1], a[1]);
  ------------------
  |  |   82|    615|    __asm__(                                \
  |  |   83|    615|        "movq  %6,%%rax     \n\t"           \
  |  |   84|    615|        "mulq  %%rax        \n\t"           \
  |  |   85|    615|        "addq  %%rax,%0     \n\t"           \
  |  |   86|    615|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|    615|        "adcq  $0,%2        \n\t"           \
  |  |   88|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|    615|        : "%rax", "%rdx", "cc");
  ------------------
 1992|    615|    COMBA_STORE(b[2]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 1993|       |
 1994|       |    /* output 3 */
 1995|    615|    CARRY_FORWARD;
  ------------------
  |  |   73|    615|    do {              \
  |  |   74|    615|        c0 = c1;      \
  |  |   75|    615|        c1 = c2;      \
  |  |   76|    615|        c2 = 0;       \
  |  |   77|    615|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 1996|    615|    SQRADD2(a[0], a[3]);
  ------------------
  |  |   93|    615|    __asm__(                                        \
  |  |   94|    615|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    615|        "mulq  %7           \n\t"                   \
  |  |   96|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    615|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    615|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    615|        : "%rax", "%rdx", "cc");
  ------------------
 1997|    615|    SQRADD2(a[1], a[2]);
  ------------------
  |  |   93|    615|    __asm__(                                        \
  |  |   94|    615|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    615|        "mulq  %7           \n\t"                   \
  |  |   96|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    615|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    615|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    615|        : "%rax", "%rdx", "cc");
  ------------------
 1998|    615|    COMBA_STORE(b[3]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 1999|       |
 2000|       |    /* output 4 */
 2001|    615|    CARRY_FORWARD;
  ------------------
  |  |   73|    615|    do {              \
  |  |   74|    615|        c0 = c1;      \
  |  |   75|    615|        c1 = c2;      \
  |  |   76|    615|        c2 = 0;       \
  |  |   77|    615|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2002|    615|    SQRADD2(a[0], a[4]);
  ------------------
  |  |   93|    615|    __asm__(                                        \
  |  |   94|    615|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    615|        "mulq  %7           \n\t"                   \
  |  |   96|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    615|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    615|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2003|    615|    SQRADD2(a[1], a[3]);
  ------------------
  |  |   93|    615|    __asm__(                                        \
  |  |   94|    615|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    615|        "mulq  %7           \n\t"                   \
  |  |   96|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    615|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    615|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2004|    615|    SQRADD(a[2], a[2]);
  ------------------
  |  |   82|    615|    __asm__(                                \
  |  |   83|    615|        "movq  %6,%%rax     \n\t"           \
  |  |   84|    615|        "mulq  %%rax        \n\t"           \
  |  |   85|    615|        "addq  %%rax,%0     \n\t"           \
  |  |   86|    615|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|    615|        "adcq  $0,%2        \n\t"           \
  |  |   88|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2005|    615|    COMBA_STORE(b[4]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 2006|       |
 2007|       |    /* output 5 */
 2008|    615|    CARRY_FORWARD;
  ------------------
  |  |   73|    615|    do {              \
  |  |   74|    615|        c0 = c1;      \
  |  |   75|    615|        c1 = c2;      \
  |  |   76|    615|        c2 = 0;       \
  |  |   77|    615|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2009|    615|    SQRADDSC(a[0], a[5]);
  ------------------
  |  |  107|    615|    __asm__(                              \
  |  |  108|    615|        "movq  %3,%%rax     \n\t"         \
  |  |  109|    615|        "mulq  %4           \n\t"         \
  |  |  110|    615|        "movq  %%rax,%0     \n\t"         \
  |  |  111|    615|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|    615|        "xorq  %2,%2        \n\t"         \
  |  |  113|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|    615|        : "g"(i), "g"(j)                  \
  |  |  115|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2010|    615|    SQRADDAC(a[1], a[4]);
  ------------------
  |  |  118|    615|    __asm__(                                           \
  |  |  119|    615|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|    615|        "mulq  %7           \n\t"                      \
  |  |  121|    615|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|    615|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|    615|        "adcq  $0,%2        \n\t"                      \
  |  |  124|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|    615|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2011|    615|    SQRADDAC(a[2], a[3]);
  ------------------
  |  |  118|    615|    __asm__(                                           \
  |  |  119|    615|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|    615|        "mulq  %7           \n\t"                      \
  |  |  121|    615|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|    615|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|    615|        "adcq  $0,%2        \n\t"                      \
  |  |  124|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|    615|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2012|    615|    SQRADDDB;
  ------------------
  |  |  129|    615|    __asm__(                                                      \
  |  |  130|    615|        "addq %6,%0         \n\t"                                 \
  |  |  131|    615|        "adcq %7,%1         \n\t"                                 \
  |  |  132|    615|        "adcq %8,%2         \n\t"                                 \
  |  |  133|    615|        "addq %6,%0         \n\t"                                 \
  |  |  134|    615|        "adcq %7,%1         \n\t"                                 \
  |  |  135|    615|        "adcq %8,%2         \n\t"                                 \
  |  |  136|    615|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|    615|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|    615|        : "cc");
  ------------------
 2013|    615|    COMBA_STORE(b[5]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 2014|       |
 2015|       |    /* output 6 */
 2016|    615|    CARRY_FORWARD;
  ------------------
  |  |   73|    615|    do {              \
  |  |   74|    615|        c0 = c1;      \
  |  |   75|    615|        c1 = c2;      \
  |  |   76|    615|        c2 = 0;       \
  |  |   77|    615|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2017|    615|    SQRADDSC(a[0], a[6]);
  ------------------
  |  |  107|    615|    __asm__(                              \
  |  |  108|    615|        "movq  %3,%%rax     \n\t"         \
  |  |  109|    615|        "mulq  %4           \n\t"         \
  |  |  110|    615|        "movq  %%rax,%0     \n\t"         \
  |  |  111|    615|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|    615|        "xorq  %2,%2        \n\t"         \
  |  |  113|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|    615|        : "g"(i), "g"(j)                  \
  |  |  115|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2018|    615|    SQRADDAC(a[1], a[5]);
  ------------------
  |  |  118|    615|    __asm__(                                           \
  |  |  119|    615|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|    615|        "mulq  %7           \n\t"                      \
  |  |  121|    615|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|    615|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|    615|        "adcq  $0,%2        \n\t"                      \
  |  |  124|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|    615|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2019|    615|    SQRADDAC(a[2], a[4]);
  ------------------
  |  |  118|    615|    __asm__(                                           \
  |  |  119|    615|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|    615|        "mulq  %7           \n\t"                      \
  |  |  121|    615|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|    615|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|    615|        "adcq  $0,%2        \n\t"                      \
  |  |  124|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|    615|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2020|    615|    SQRADDDB;
  ------------------
  |  |  129|    615|    __asm__(                                                      \
  |  |  130|    615|        "addq %6,%0         \n\t"                                 \
  |  |  131|    615|        "adcq %7,%1         \n\t"                                 \
  |  |  132|    615|        "adcq %8,%2         \n\t"                                 \
  |  |  133|    615|        "addq %6,%0         \n\t"                                 \
  |  |  134|    615|        "adcq %7,%1         \n\t"                                 \
  |  |  135|    615|        "adcq %8,%2         \n\t"                                 \
  |  |  136|    615|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|    615|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|    615|        : "cc");
  ------------------
 2021|    615|    SQRADD(a[3], a[3]);
  ------------------
  |  |   82|    615|    __asm__(                                \
  |  |   83|    615|        "movq  %6,%%rax     \n\t"           \
  |  |   84|    615|        "mulq  %%rax        \n\t"           \
  |  |   85|    615|        "addq  %%rax,%0     \n\t"           \
  |  |   86|    615|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|    615|        "adcq  $0,%2        \n\t"           \
  |  |   88|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2022|    615|    COMBA_STORE(b[6]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 2023|       |
 2024|       |    /* output 7 */
 2025|    615|    CARRY_FORWARD;
  ------------------
  |  |   73|    615|    do {              \
  |  |   74|    615|        c0 = c1;      \
  |  |   75|    615|        c1 = c2;      \
  |  |   76|    615|        c2 = 0;       \
  |  |   77|    615|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2026|    615|    SQRADDSC(a[0], a[7]);
  ------------------
  |  |  107|    615|    __asm__(                              \
  |  |  108|    615|        "movq  %3,%%rax     \n\t"         \
  |  |  109|    615|        "mulq  %4           \n\t"         \
  |  |  110|    615|        "movq  %%rax,%0     \n\t"         \
  |  |  111|    615|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|    615|        "xorq  %2,%2        \n\t"         \
  |  |  113|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|    615|        : "g"(i), "g"(j)                  \
  |  |  115|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2027|    615|    SQRADDAC(a[1], a[6]);
  ------------------
  |  |  118|    615|    __asm__(                                           \
  |  |  119|    615|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|    615|        "mulq  %7           \n\t"                      \
  |  |  121|    615|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|    615|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|    615|        "adcq  $0,%2        \n\t"                      \
  |  |  124|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|    615|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2028|    615|    SQRADDAC(a[2], a[5]);
  ------------------
  |  |  118|    615|    __asm__(                                           \
  |  |  119|    615|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|    615|        "mulq  %7           \n\t"                      \
  |  |  121|    615|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|    615|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|    615|        "adcq  $0,%2        \n\t"                      \
  |  |  124|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|    615|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2029|    615|    SQRADDAC(a[3], a[4]);
  ------------------
  |  |  118|    615|    __asm__(                                           \
  |  |  119|    615|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|    615|        "mulq  %7           \n\t"                      \
  |  |  121|    615|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|    615|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|    615|        "adcq  $0,%2        \n\t"                      \
  |  |  124|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|    615|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2030|    615|    SQRADDDB;
  ------------------
  |  |  129|    615|    __asm__(                                                      \
  |  |  130|    615|        "addq %6,%0         \n\t"                                 \
  |  |  131|    615|        "adcq %7,%1         \n\t"                                 \
  |  |  132|    615|        "adcq %8,%2         \n\t"                                 \
  |  |  133|    615|        "addq %6,%0         \n\t"                                 \
  |  |  134|    615|        "adcq %7,%1         \n\t"                                 \
  |  |  135|    615|        "adcq %8,%2         \n\t"                                 \
  |  |  136|    615|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|    615|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|    615|        : "cc");
  ------------------
 2031|    615|    COMBA_STORE(b[7]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 2032|       |
 2033|       |    /* output 8 */
 2034|    615|    CARRY_FORWARD;
  ------------------
  |  |   73|    615|    do {              \
  |  |   74|    615|        c0 = c1;      \
  |  |   75|    615|        c1 = c2;      \
  |  |   76|    615|        c2 = 0;       \
  |  |   77|    615|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2035|    615|    SQRADDSC(a[1], a[7]);
  ------------------
  |  |  107|    615|    __asm__(                              \
  |  |  108|    615|        "movq  %3,%%rax     \n\t"         \
  |  |  109|    615|        "mulq  %4           \n\t"         \
  |  |  110|    615|        "movq  %%rax,%0     \n\t"         \
  |  |  111|    615|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|    615|        "xorq  %2,%2        \n\t"         \
  |  |  113|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|    615|        : "g"(i), "g"(j)                  \
  |  |  115|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2036|    615|    SQRADDAC(a[2], a[6]);
  ------------------
  |  |  118|    615|    __asm__(                                           \
  |  |  119|    615|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|    615|        "mulq  %7           \n\t"                      \
  |  |  121|    615|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|    615|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|    615|        "adcq  $0,%2        \n\t"                      \
  |  |  124|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|    615|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2037|    615|    SQRADDAC(a[3], a[5]);
  ------------------
  |  |  118|    615|    __asm__(                                           \
  |  |  119|    615|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|    615|        "mulq  %7           \n\t"                      \
  |  |  121|    615|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|    615|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|    615|        "adcq  $0,%2        \n\t"                      \
  |  |  124|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|    615|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2038|    615|    SQRADDDB;
  ------------------
  |  |  129|    615|    __asm__(                                                      \
  |  |  130|    615|        "addq %6,%0         \n\t"                                 \
  |  |  131|    615|        "adcq %7,%1         \n\t"                                 \
  |  |  132|    615|        "adcq %8,%2         \n\t"                                 \
  |  |  133|    615|        "addq %6,%0         \n\t"                                 \
  |  |  134|    615|        "adcq %7,%1         \n\t"                                 \
  |  |  135|    615|        "adcq %8,%2         \n\t"                                 \
  |  |  136|    615|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|    615|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|    615|        : "cc");
  ------------------
 2039|    615|    SQRADD(a[4], a[4]);
  ------------------
  |  |   82|    615|    __asm__(                                \
  |  |   83|    615|        "movq  %6,%%rax     \n\t"           \
  |  |   84|    615|        "mulq  %%rax        \n\t"           \
  |  |   85|    615|        "addq  %%rax,%0     \n\t"           \
  |  |   86|    615|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|    615|        "adcq  $0,%2        \n\t"           \
  |  |   88|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2040|    615|    COMBA_STORE(b[8]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 2041|       |
 2042|       |    /* output 9 */
 2043|    615|    CARRY_FORWARD;
  ------------------
  |  |   73|    615|    do {              \
  |  |   74|    615|        c0 = c1;      \
  |  |   75|    615|        c1 = c2;      \
  |  |   76|    615|        c2 = 0;       \
  |  |   77|    615|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2044|    615|    SQRADDSC(a[2], a[7]);
  ------------------
  |  |  107|    615|    __asm__(                              \
  |  |  108|    615|        "movq  %3,%%rax     \n\t"         \
  |  |  109|    615|        "mulq  %4           \n\t"         \
  |  |  110|    615|        "movq  %%rax,%0     \n\t"         \
  |  |  111|    615|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|    615|        "xorq  %2,%2        \n\t"         \
  |  |  113|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|    615|        : "g"(i), "g"(j)                  \
  |  |  115|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2045|    615|    SQRADDAC(a[3], a[6]);
  ------------------
  |  |  118|    615|    __asm__(                                           \
  |  |  119|    615|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|    615|        "mulq  %7           \n\t"                      \
  |  |  121|    615|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|    615|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|    615|        "adcq  $0,%2        \n\t"                      \
  |  |  124|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|    615|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2046|    615|    SQRADDAC(a[4], a[5]);
  ------------------
  |  |  118|    615|    __asm__(                                           \
  |  |  119|    615|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|    615|        "mulq  %7           \n\t"                      \
  |  |  121|    615|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|    615|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|    615|        "adcq  $0,%2        \n\t"                      \
  |  |  124|    615|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|    615|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2047|    615|    SQRADDDB;
  ------------------
  |  |  129|    615|    __asm__(                                                      \
  |  |  130|    615|        "addq %6,%0         \n\t"                                 \
  |  |  131|    615|        "adcq %7,%1         \n\t"                                 \
  |  |  132|    615|        "adcq %8,%2         \n\t"                                 \
  |  |  133|    615|        "addq %6,%0         \n\t"                                 \
  |  |  134|    615|        "adcq %7,%1         \n\t"                                 \
  |  |  135|    615|        "adcq %8,%2         \n\t"                                 \
  |  |  136|    615|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|    615|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|    615|        : "cc");
  ------------------
 2048|    615|    COMBA_STORE(b[9]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 2049|       |
 2050|       |    /* output 10 */
 2051|    615|    CARRY_FORWARD;
  ------------------
  |  |   73|    615|    do {              \
  |  |   74|    615|        c0 = c1;      \
  |  |   75|    615|        c1 = c2;      \
  |  |   76|    615|        c2 = 0;       \
  |  |   77|    615|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2052|    615|    SQRADD2(a[3], a[7]);
  ------------------
  |  |   93|    615|    __asm__(                                        \
  |  |   94|    615|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    615|        "mulq  %7           \n\t"                   \
  |  |   96|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    615|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    615|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2053|    615|    SQRADD2(a[4], a[6]);
  ------------------
  |  |   93|    615|    __asm__(                                        \
  |  |   94|    615|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    615|        "mulq  %7           \n\t"                   \
  |  |   96|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    615|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    615|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2054|    615|    SQRADD(a[5], a[5]);
  ------------------
  |  |   82|    615|    __asm__(                                \
  |  |   83|    615|        "movq  %6,%%rax     \n\t"           \
  |  |   84|    615|        "mulq  %%rax        \n\t"           \
  |  |   85|    615|        "addq  %%rax,%0     \n\t"           \
  |  |   86|    615|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|    615|        "adcq  $0,%2        \n\t"           \
  |  |   88|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2055|    615|    COMBA_STORE(b[10]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 2056|       |
 2057|       |    /* output 11 */
 2058|    615|    CARRY_FORWARD;
  ------------------
  |  |   73|    615|    do {              \
  |  |   74|    615|        c0 = c1;      \
  |  |   75|    615|        c1 = c2;      \
  |  |   76|    615|        c2 = 0;       \
  |  |   77|    615|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2059|    615|    SQRADD2(a[4], a[7]);
  ------------------
  |  |   93|    615|    __asm__(                                        \
  |  |   94|    615|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    615|        "mulq  %7           \n\t"                   \
  |  |   96|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    615|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    615|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2060|    615|    SQRADD2(a[5], a[6]);
  ------------------
  |  |   93|    615|    __asm__(                                        \
  |  |   94|    615|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    615|        "mulq  %7           \n\t"                   \
  |  |   96|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    615|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    615|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2061|    615|    COMBA_STORE(b[11]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 2062|       |
 2063|       |    /* output 12 */
 2064|    615|    CARRY_FORWARD;
  ------------------
  |  |   73|    615|    do {              \
  |  |   74|    615|        c0 = c1;      \
  |  |   75|    615|        c1 = c2;      \
  |  |   76|    615|        c2 = 0;       \
  |  |   77|    615|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2065|    615|    SQRADD2(a[5], a[7]);
  ------------------
  |  |   93|    615|    __asm__(                                        \
  |  |   94|    615|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    615|        "mulq  %7           \n\t"                   \
  |  |   96|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    615|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    615|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2066|    615|    SQRADD(a[6], a[6]);
  ------------------
  |  |   82|    615|    __asm__(                                \
  |  |   83|    615|        "movq  %6,%%rax     \n\t"           \
  |  |   84|    615|        "mulq  %%rax        \n\t"           \
  |  |   85|    615|        "addq  %%rax,%0     \n\t"           \
  |  |   86|    615|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|    615|        "adcq  $0,%2        \n\t"           \
  |  |   88|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2067|    615|    COMBA_STORE(b[12]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 2068|       |
 2069|       |    /* output 13 */
 2070|    615|    CARRY_FORWARD;
  ------------------
  |  |   73|    615|    do {              \
  |  |   74|    615|        c0 = c1;      \
  |  |   75|    615|        c1 = c2;      \
  |  |   76|    615|        c2 = 0;       \
  |  |   77|    615|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2071|    615|    SQRADD2(a[6], a[7]);
  ------------------
  |  |   93|    615|    __asm__(                                        \
  |  |   94|    615|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|    615|        "mulq  %7           \n\t"                   \
  |  |   96|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|    615|        "adcq  $0,%2        \n\t"                   \
  |  |   99|    615|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|    615|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|    615|        "adcq  $0,%2        \n\t"                   \
  |  |  102|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2072|    615|    COMBA_STORE(b[13]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 2073|       |
 2074|       |    /* output 14 */
 2075|    615|    CARRY_FORWARD;
  ------------------
  |  |   73|    615|    do {              \
  |  |   74|    615|        c0 = c1;      \
  |  |   75|    615|        c1 = c2;      \
  |  |   76|    615|        c2 = 0;       \
  |  |   77|    615|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2076|    615|    SQRADD(a[7], a[7]);
  ------------------
  |  |   82|    615|    __asm__(                                \
  |  |   83|    615|        "movq  %6,%%rax     \n\t"           \
  |  |   84|    615|        "mulq  %%rax        \n\t"           \
  |  |   85|    615|        "addq  %%rax,%0     \n\t"           \
  |  |   86|    615|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|    615|        "adcq  $0,%2        \n\t"           \
  |  |   88|    615|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|    615|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|    615|        : "%rax", "%rdx", "cc");
  ------------------
 2077|    615|    COMBA_STORE(b[14]);
  ------------------
  |  |   67|    615|    x = c0;
  ------------------
 2078|    615|    COMBA_STORE2(b[15]);
  ------------------
  |  |   70|    615|    x = c1;
  ------------------
 2079|    615|    COMBA_FINI;
 2080|       |
 2081|    615|    B->used = 16;
 2082|    615|    B->sign = ZPOS;
  ------------------
  |  |  326|    615|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|    615|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
 2083|    615|    memcpy(B->dp, b, 16 * sizeof(mp_digit));
 2084|    615|    mp_clamp(B);
  ------------------
  |  |   26|    615|    {                                                    \
  |  |   27|    825|        while ((a)->used && (a)->dp[(a)->used - 1] == 0) \
  |  |  ------------------
  |  |  |  Branch (27:16): [True: 825, False: 0]
  |  |  |  Branch (27:29): [True: 210, False: 615]
  |  |  ------------------
  |  |   28|    615|            --((a)->used);                               \
  |  |   29|    615|        (a)->sign = (a)->used ? (a)->sign : ZPOS;        \
  |  |  ------------------
  |  |  |  |  326|      0|#define ZPOS MP_ZPOS
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    615|#define MP_ZPOS 0
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (29:21): [True: 615, False: 0]
  |  |  ------------------
  |  |   30|    615|    }
  ------------------
 2085|    615|}
s_mp_sqr_comba_16:
 2089|  50.8k|{
 2090|  50.8k|    mp_digit *a, b[32], c0, c1, c2, sc0, sc1, sc2;
 2091|       |
 2092|  50.8k|    a = A->dp;
 2093|  50.8k|    COMBA_START;
 2094|       |
 2095|       |    /* clear carries */
 2096|  50.8k|    CLEAR_CARRY;
  ------------------
  |  |   64|  50.8k|    c0 = c1 = c2 = 0;
  ------------------
 2097|       |
 2098|       |    /* output 0 */
 2099|  50.8k|    SQRADD(a[0], a[0]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2100|  50.8k|    COMBA_STORE(b[0]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2101|       |
 2102|       |    /* output 1 */
 2103|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2104|  50.8k|    SQRADD2(a[0], a[1]);
  ------------------
  |  |   93|  50.8k|    __asm__(                                        \
  |  |   94|  50.8k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|  50.8k|        "mulq  %7           \n\t"                   \
  |  |   96|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2105|  50.8k|    COMBA_STORE(b[1]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2106|       |
 2107|       |    /* output 2 */
 2108|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2109|  50.8k|    SQRADD2(a[0], a[2]);
  ------------------
  |  |   93|  50.8k|    __asm__(                                        \
  |  |   94|  50.8k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|  50.8k|        "mulq  %7           \n\t"                   \
  |  |   96|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2110|  50.8k|    SQRADD(a[1], a[1]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2111|  50.8k|    COMBA_STORE(b[2]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2112|       |
 2113|       |    /* output 3 */
 2114|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2115|  50.8k|    SQRADD2(a[0], a[3]);
  ------------------
  |  |   93|  50.8k|    __asm__(                                        \
  |  |   94|  50.8k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|  50.8k|        "mulq  %7           \n\t"                   \
  |  |   96|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2116|  50.8k|    SQRADD2(a[1], a[2]);
  ------------------
  |  |   93|  50.8k|    __asm__(                                        \
  |  |   94|  50.8k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|  50.8k|        "mulq  %7           \n\t"                   \
  |  |   96|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2117|  50.8k|    COMBA_STORE(b[3]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2118|       |
 2119|       |    /* output 4 */
 2120|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2121|  50.8k|    SQRADD2(a[0], a[4]);
  ------------------
  |  |   93|  50.8k|    __asm__(                                        \
  |  |   94|  50.8k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|  50.8k|        "mulq  %7           \n\t"                   \
  |  |   96|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2122|  50.8k|    SQRADD2(a[1], a[3]);
  ------------------
  |  |   93|  50.8k|    __asm__(                                        \
  |  |   94|  50.8k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|  50.8k|        "mulq  %7           \n\t"                   \
  |  |   96|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2123|  50.8k|    SQRADD(a[2], a[2]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2124|  50.8k|    COMBA_STORE(b[4]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2125|       |
 2126|       |    /* output 5 */
 2127|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2128|  50.8k|    SQRADDSC(a[0], a[5]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2129|  50.8k|    SQRADDAC(a[1], a[4]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2130|  50.8k|    SQRADDAC(a[2], a[3]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2131|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2132|  50.8k|    COMBA_STORE(b[5]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2133|       |
 2134|       |    /* output 6 */
 2135|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2136|  50.8k|    SQRADDSC(a[0], a[6]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2137|  50.8k|    SQRADDAC(a[1], a[5]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2138|  50.8k|    SQRADDAC(a[2], a[4]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2139|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2140|  50.8k|    SQRADD(a[3], a[3]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2141|  50.8k|    COMBA_STORE(b[6]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2142|       |
 2143|       |    /* output 7 */
 2144|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2145|  50.8k|    SQRADDSC(a[0], a[7]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2146|  50.8k|    SQRADDAC(a[1], a[6]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2147|  50.8k|    SQRADDAC(a[2], a[5]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2148|  50.8k|    SQRADDAC(a[3], a[4]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2149|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2150|  50.8k|    COMBA_STORE(b[7]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2151|       |
 2152|       |    /* output 8 */
 2153|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2154|  50.8k|    SQRADDSC(a[0], a[8]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2155|  50.8k|    SQRADDAC(a[1], a[7]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2156|  50.8k|    SQRADDAC(a[2], a[6]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2157|  50.8k|    SQRADDAC(a[3], a[5]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2158|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2159|  50.8k|    SQRADD(a[4], a[4]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2160|  50.8k|    COMBA_STORE(b[8]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2161|       |
 2162|       |    /* output 9 */
 2163|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2164|  50.8k|    SQRADDSC(a[0], a[9]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2165|  50.8k|    SQRADDAC(a[1], a[8]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2166|  50.8k|    SQRADDAC(a[2], a[7]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2167|  50.8k|    SQRADDAC(a[3], a[6]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2168|  50.8k|    SQRADDAC(a[4], a[5]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2169|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2170|  50.8k|    COMBA_STORE(b[9]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2171|       |
 2172|       |    /* output 10 */
 2173|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2174|  50.8k|    SQRADDSC(a[0], a[10]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2175|  50.8k|    SQRADDAC(a[1], a[9]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2176|  50.8k|    SQRADDAC(a[2], a[8]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2177|  50.8k|    SQRADDAC(a[3], a[7]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2178|  50.8k|    SQRADDAC(a[4], a[6]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2179|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2180|  50.8k|    SQRADD(a[5], a[5]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2181|  50.8k|    COMBA_STORE(b[10]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2182|       |
 2183|       |    /* output 11 */
 2184|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2185|  50.8k|    SQRADDSC(a[0], a[11]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2186|  50.8k|    SQRADDAC(a[1], a[10]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2187|  50.8k|    SQRADDAC(a[2], a[9]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2188|  50.8k|    SQRADDAC(a[3], a[8]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2189|  50.8k|    SQRADDAC(a[4], a[7]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2190|  50.8k|    SQRADDAC(a[5], a[6]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2191|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2192|  50.8k|    COMBA_STORE(b[11]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2193|       |
 2194|       |    /* output 12 */
 2195|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2196|  50.8k|    SQRADDSC(a[0], a[12]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2197|  50.8k|    SQRADDAC(a[1], a[11]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2198|  50.8k|    SQRADDAC(a[2], a[10]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2199|  50.8k|    SQRADDAC(a[3], a[9]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2200|  50.8k|    SQRADDAC(a[4], a[8]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2201|  50.8k|    SQRADDAC(a[5], a[7]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2202|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2203|  50.8k|    SQRADD(a[6], a[6]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2204|  50.8k|    COMBA_STORE(b[12]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2205|       |
 2206|       |    /* output 13 */
 2207|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2208|  50.8k|    SQRADDSC(a[0], a[13]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2209|  50.8k|    SQRADDAC(a[1], a[12]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2210|  50.8k|    SQRADDAC(a[2], a[11]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2211|  50.8k|    SQRADDAC(a[3], a[10]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2212|  50.8k|    SQRADDAC(a[4], a[9]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2213|  50.8k|    SQRADDAC(a[5], a[8]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2214|  50.8k|    SQRADDAC(a[6], a[7]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2215|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2216|  50.8k|    COMBA_STORE(b[13]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2217|       |
 2218|       |    /* output 14 */
 2219|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2220|  50.8k|    SQRADDSC(a[0], a[14]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2221|  50.8k|    SQRADDAC(a[1], a[13]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2222|  50.8k|    SQRADDAC(a[2], a[12]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2223|  50.8k|    SQRADDAC(a[3], a[11]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2224|  50.8k|    SQRADDAC(a[4], a[10]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2225|  50.8k|    SQRADDAC(a[5], a[9]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2226|  50.8k|    SQRADDAC(a[6], a[8]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2227|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2228|  50.8k|    SQRADD(a[7], a[7]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2229|  50.8k|    COMBA_STORE(b[14]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2230|       |
 2231|       |    /* output 15 */
 2232|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2233|  50.8k|    SQRADDSC(a[0], a[15]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2234|  50.8k|    SQRADDAC(a[1], a[14]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2235|  50.8k|    SQRADDAC(a[2], a[13]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2236|  50.8k|    SQRADDAC(a[3], a[12]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2237|  50.8k|    SQRADDAC(a[4], a[11]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2238|  50.8k|    SQRADDAC(a[5], a[10]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2239|  50.8k|    SQRADDAC(a[6], a[9]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2240|  50.8k|    SQRADDAC(a[7], a[8]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2241|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2242|  50.8k|    COMBA_STORE(b[15]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2243|       |
 2244|       |    /* output 16 */
 2245|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2246|  50.8k|    SQRADDSC(a[1], a[15]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2247|  50.8k|    SQRADDAC(a[2], a[14]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2248|  50.8k|    SQRADDAC(a[3], a[13]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2249|  50.8k|    SQRADDAC(a[4], a[12]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2250|  50.8k|    SQRADDAC(a[5], a[11]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2251|  50.8k|    SQRADDAC(a[6], a[10]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2252|  50.8k|    SQRADDAC(a[7], a[9]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2253|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2254|  50.8k|    SQRADD(a[8], a[8]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2255|  50.8k|    COMBA_STORE(b[16]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2256|       |
 2257|       |    /* output 17 */
 2258|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2259|  50.8k|    SQRADDSC(a[2], a[15]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2260|  50.8k|    SQRADDAC(a[3], a[14]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2261|  50.8k|    SQRADDAC(a[4], a[13]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2262|  50.8k|    SQRADDAC(a[5], a[12]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2263|  50.8k|    SQRADDAC(a[6], a[11]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2264|  50.8k|    SQRADDAC(a[7], a[10]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2265|  50.8k|    SQRADDAC(a[8], a[9]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2266|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2267|  50.8k|    COMBA_STORE(b[17]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2268|       |
 2269|       |    /* output 18 */
 2270|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2271|  50.8k|    SQRADDSC(a[3], a[15]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2272|  50.8k|    SQRADDAC(a[4], a[14]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2273|  50.8k|    SQRADDAC(a[5], a[13]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2274|  50.8k|    SQRADDAC(a[6], a[12]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2275|  50.8k|    SQRADDAC(a[7], a[11]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2276|  50.8k|    SQRADDAC(a[8], a[10]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2277|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2278|  50.8k|    SQRADD(a[9], a[9]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2279|  50.8k|    COMBA_STORE(b[18]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2280|       |
 2281|       |    /* output 19 */
 2282|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2283|  50.8k|    SQRADDSC(a[4], a[15]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2284|  50.8k|    SQRADDAC(a[5], a[14]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2285|  50.8k|    SQRADDAC(a[6], a[13]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2286|  50.8k|    SQRADDAC(a[7], a[12]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2287|  50.8k|    SQRADDAC(a[8], a[11]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2288|  50.8k|    SQRADDAC(a[9], a[10]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2289|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2290|  50.8k|    COMBA_STORE(b[19]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2291|       |
 2292|       |    /* output 20 */
 2293|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2294|  50.8k|    SQRADDSC(a[5], a[15]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2295|  50.8k|    SQRADDAC(a[6], a[14]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2296|  50.8k|    SQRADDAC(a[7], a[13]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2297|  50.8k|    SQRADDAC(a[8], a[12]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2298|  50.8k|    SQRADDAC(a[9], a[11]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2299|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2300|  50.8k|    SQRADD(a[10], a[10]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2301|  50.8k|    COMBA_STORE(b[20]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2302|       |
 2303|       |    /* output 21 */
 2304|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2305|  50.8k|    SQRADDSC(a[6], a[15]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2306|  50.8k|    SQRADDAC(a[7], a[14]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2307|  50.8k|    SQRADDAC(a[8], a[13]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2308|  50.8k|    SQRADDAC(a[9], a[12]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2309|  50.8k|    SQRADDAC(a[10], a[11]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2310|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2311|  50.8k|    COMBA_STORE(b[21]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2312|       |
 2313|       |    /* output 22 */
 2314|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2315|  50.8k|    SQRADDSC(a[7], a[15]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2316|  50.8k|    SQRADDAC(a[8], a[14]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2317|  50.8k|    SQRADDAC(a[9], a[13]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2318|  50.8k|    SQRADDAC(a[10], a[12]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2319|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2320|  50.8k|    SQRADD(a[11], a[11]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2321|  50.8k|    COMBA_STORE(b[22]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2322|       |
 2323|       |    /* output 23 */
 2324|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2325|  50.8k|    SQRADDSC(a[8], a[15]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2326|  50.8k|    SQRADDAC(a[9], a[14]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2327|  50.8k|    SQRADDAC(a[10], a[13]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2328|  50.8k|    SQRADDAC(a[11], a[12]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2329|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2330|  50.8k|    COMBA_STORE(b[23]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2331|       |
 2332|       |    /* output 24 */
 2333|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2334|  50.8k|    SQRADDSC(a[9], a[15]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2335|  50.8k|    SQRADDAC(a[10], a[14]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2336|  50.8k|    SQRADDAC(a[11], a[13]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2337|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2338|  50.8k|    SQRADD(a[12], a[12]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2339|  50.8k|    COMBA_STORE(b[24]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2340|       |
 2341|       |    /* output 25 */
 2342|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2343|  50.8k|    SQRADDSC(a[10], a[15]);
  ------------------
  |  |  107|  50.8k|    __asm__(                              \
  |  |  108|  50.8k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|  50.8k|        "mulq  %4           \n\t"         \
  |  |  110|  50.8k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|  50.8k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|  50.8k|        "xorq  %2,%2        \n\t"         \
  |  |  113|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|  50.8k|        : "g"(i), "g"(j)                  \
  |  |  115|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2344|  50.8k|    SQRADDAC(a[11], a[14]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2345|  50.8k|    SQRADDAC(a[12], a[13]);
  ------------------
  |  |  118|  50.8k|    __asm__(                                           \
  |  |  119|  50.8k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|  50.8k|        "mulq  %7           \n\t"                      \
  |  |  121|  50.8k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|  50.8k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|  50.8k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|  50.8k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|  50.8k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2346|  50.8k|    SQRADDDB;
  ------------------
  |  |  129|  50.8k|    __asm__(                                                      \
  |  |  130|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  131|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|  50.8k|        "addq %6,%0         \n\t"                                 \
  |  |  134|  50.8k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|  50.8k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|  50.8k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|  50.8k|        : "cc");
  ------------------
 2347|  50.8k|    COMBA_STORE(b[25]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2348|       |
 2349|       |    /* output 26 */
 2350|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2351|  50.8k|    SQRADD2(a[11], a[15]);
  ------------------
  |  |   93|  50.8k|    __asm__(                                        \
  |  |   94|  50.8k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|  50.8k|        "mulq  %7           \n\t"                   \
  |  |   96|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2352|  50.8k|    SQRADD2(a[12], a[14]);
  ------------------
  |  |   93|  50.8k|    __asm__(                                        \
  |  |   94|  50.8k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|  50.8k|        "mulq  %7           \n\t"                   \
  |  |   96|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2353|  50.8k|    SQRADD(a[13], a[13]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2354|  50.8k|    COMBA_STORE(b[26]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2355|       |
 2356|       |    /* output 27 */
 2357|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2358|  50.8k|    SQRADD2(a[12], a[15]);
  ------------------
  |  |   93|  50.8k|    __asm__(                                        \
  |  |   94|  50.8k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|  50.8k|        "mulq  %7           \n\t"                   \
  |  |   96|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2359|  50.8k|    SQRADD2(a[13], a[14]);
  ------------------
  |  |   93|  50.8k|    __asm__(                                        \
  |  |   94|  50.8k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|  50.8k|        "mulq  %7           \n\t"                   \
  |  |   96|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2360|  50.8k|    COMBA_STORE(b[27]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2361|       |
 2362|       |    /* output 28 */
 2363|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2364|  50.8k|    SQRADD2(a[13], a[15]);
  ------------------
  |  |   93|  50.8k|    __asm__(                                        \
  |  |   94|  50.8k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|  50.8k|        "mulq  %7           \n\t"                   \
  |  |   96|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2365|  50.8k|    SQRADD(a[14], a[14]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2366|  50.8k|    COMBA_STORE(b[28]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2367|       |
 2368|       |    /* output 29 */
 2369|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2370|  50.8k|    SQRADD2(a[14], a[15]);
  ------------------
  |  |   93|  50.8k|    __asm__(                                        \
  |  |   94|  50.8k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|  50.8k|        "mulq  %7           \n\t"                   \
  |  |   96|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|  50.8k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|  50.8k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|  50.8k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2371|  50.8k|    COMBA_STORE(b[29]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2372|       |
 2373|       |    /* output 30 */
 2374|  50.8k|    CARRY_FORWARD;
  ------------------
  |  |   73|  50.8k|    do {              \
  |  |   74|  50.8k|        c0 = c1;      \
  |  |   75|  50.8k|        c1 = c2;      \
  |  |   76|  50.8k|        c2 = 0;       \
  |  |   77|  50.8k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2375|  50.8k|    SQRADD(a[15], a[15]);
  ------------------
  |  |   82|  50.8k|    __asm__(                                \
  |  |   83|  50.8k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|  50.8k|        "mulq  %%rax        \n\t"           \
  |  |   85|  50.8k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|  50.8k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|  50.8k|        "adcq  $0,%2        \n\t"           \
  |  |   88|  50.8k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|  50.8k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|  50.8k|        : "%rax", "%rdx", "cc");
  ------------------
 2376|  50.8k|    COMBA_STORE(b[30]);
  ------------------
  |  |   67|  50.8k|    x = c0;
  ------------------
 2377|  50.8k|    COMBA_STORE2(b[31]);
  ------------------
  |  |   70|  50.8k|    x = c1;
  ------------------
 2378|  50.8k|    COMBA_FINI;
 2379|       |
 2380|  50.8k|    B->used = 32;
 2381|  50.8k|    B->sign = ZPOS;
  ------------------
  |  |  326|  50.8k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|  50.8k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
 2382|  50.8k|    memcpy(B->dp, b, 32 * sizeof(mp_digit));
 2383|  50.8k|    mp_clamp(B);
  ------------------
  |  |   26|  50.8k|    {                                                    \
  |  |   27|  51.5k|        while ((a)->used && (a)->dp[(a)->used - 1] == 0) \
  |  |  ------------------
  |  |  |  Branch (27:16): [True: 51.5k, False: 0]
  |  |  |  Branch (27:29): [True: 706, False: 50.8k]
  |  |  ------------------
  |  |   28|  50.8k|            --((a)->used);                               \
  |  |   29|  50.8k|        (a)->sign = (a)->used ? (a)->sign : ZPOS;        \
  |  |  ------------------
  |  |  |  |  326|      0|#define ZPOS MP_ZPOS
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  50.8k|#define MP_ZPOS 0
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (29:21): [True: 50.8k, False: 0]
  |  |  ------------------
  |  |   30|  50.8k|    }
  ------------------
 2384|  50.8k|}
s_mp_sqr_comba_32:
 2388|   553k|{
 2389|   553k|    mp_digit *a, b[64], c0, c1, c2, sc0, sc1, sc2;
 2390|       |
 2391|   553k|    a = A->dp;
 2392|   553k|    COMBA_START;
 2393|       |
 2394|       |    /* clear carries */
 2395|   553k|    CLEAR_CARRY;
  ------------------
  |  |   64|   553k|    c0 = c1 = c2 = 0;
  ------------------
 2396|       |
 2397|       |    /* output 0 */
 2398|   553k|    SQRADD(a[0], a[0]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2399|   553k|    COMBA_STORE(b[0]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2400|       |
 2401|       |    /* output 1 */
 2402|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2403|   553k|    SQRADD2(a[0], a[1]);
  ------------------
  |  |   93|   553k|    __asm__(                                        \
  |  |   94|   553k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|   553k|        "mulq  %7           \n\t"                   \
  |  |   96|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2404|   553k|    COMBA_STORE(b[1]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2405|       |
 2406|       |    /* output 2 */
 2407|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2408|   553k|    SQRADD2(a[0], a[2]);
  ------------------
  |  |   93|   553k|    __asm__(                                        \
  |  |   94|   553k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|   553k|        "mulq  %7           \n\t"                   \
  |  |   96|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2409|   553k|    SQRADD(a[1], a[1]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2410|   553k|    COMBA_STORE(b[2]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2411|       |
 2412|       |    /* output 3 */
 2413|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2414|   553k|    SQRADD2(a[0], a[3]);
  ------------------
  |  |   93|   553k|    __asm__(                                        \
  |  |   94|   553k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|   553k|        "mulq  %7           \n\t"                   \
  |  |   96|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2415|   553k|    SQRADD2(a[1], a[2]);
  ------------------
  |  |   93|   553k|    __asm__(                                        \
  |  |   94|   553k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|   553k|        "mulq  %7           \n\t"                   \
  |  |   96|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2416|   553k|    COMBA_STORE(b[3]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2417|       |
 2418|       |    /* output 4 */
 2419|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2420|   553k|    SQRADD2(a[0], a[4]);
  ------------------
  |  |   93|   553k|    __asm__(                                        \
  |  |   94|   553k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|   553k|        "mulq  %7           \n\t"                   \
  |  |   96|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2421|   553k|    SQRADD2(a[1], a[3]);
  ------------------
  |  |   93|   553k|    __asm__(                                        \
  |  |   94|   553k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|   553k|        "mulq  %7           \n\t"                   \
  |  |   96|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2422|   553k|    SQRADD(a[2], a[2]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2423|   553k|    COMBA_STORE(b[4]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2424|       |
 2425|       |    /* output 5 */
 2426|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2427|   553k|    SQRADDSC(a[0], a[5]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2428|   553k|    SQRADDAC(a[1], a[4]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2429|   553k|    SQRADDAC(a[2], a[3]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2430|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2431|   553k|    COMBA_STORE(b[5]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2432|       |
 2433|       |    /* output 6 */
 2434|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2435|   553k|    SQRADDSC(a[0], a[6]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2436|   553k|    SQRADDAC(a[1], a[5]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2437|   553k|    SQRADDAC(a[2], a[4]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2438|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2439|   553k|    SQRADD(a[3], a[3]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2440|   553k|    COMBA_STORE(b[6]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2441|       |
 2442|       |    /* output 7 */
 2443|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2444|   553k|    SQRADDSC(a[0], a[7]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2445|   553k|    SQRADDAC(a[1], a[6]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2446|   553k|    SQRADDAC(a[2], a[5]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2447|   553k|    SQRADDAC(a[3], a[4]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2448|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2449|   553k|    COMBA_STORE(b[7]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2450|       |
 2451|       |    /* output 8 */
 2452|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2453|   553k|    SQRADDSC(a[0], a[8]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2454|   553k|    SQRADDAC(a[1], a[7]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2455|   553k|    SQRADDAC(a[2], a[6]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2456|   553k|    SQRADDAC(a[3], a[5]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2457|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2458|   553k|    SQRADD(a[4], a[4]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2459|   553k|    COMBA_STORE(b[8]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2460|       |
 2461|       |    /* output 9 */
 2462|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2463|   553k|    SQRADDSC(a[0], a[9]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2464|   553k|    SQRADDAC(a[1], a[8]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2465|   553k|    SQRADDAC(a[2], a[7]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2466|   553k|    SQRADDAC(a[3], a[6]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2467|   553k|    SQRADDAC(a[4], a[5]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2468|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2469|   553k|    COMBA_STORE(b[9]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2470|       |
 2471|       |    /* output 10 */
 2472|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2473|   553k|    SQRADDSC(a[0], a[10]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2474|   553k|    SQRADDAC(a[1], a[9]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2475|   553k|    SQRADDAC(a[2], a[8]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2476|   553k|    SQRADDAC(a[3], a[7]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2477|   553k|    SQRADDAC(a[4], a[6]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2478|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2479|   553k|    SQRADD(a[5], a[5]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2480|   553k|    COMBA_STORE(b[10]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2481|       |
 2482|       |    /* output 11 */
 2483|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2484|   553k|    SQRADDSC(a[0], a[11]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2485|   553k|    SQRADDAC(a[1], a[10]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2486|   553k|    SQRADDAC(a[2], a[9]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2487|   553k|    SQRADDAC(a[3], a[8]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2488|   553k|    SQRADDAC(a[4], a[7]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2489|   553k|    SQRADDAC(a[5], a[6]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2490|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2491|   553k|    COMBA_STORE(b[11]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2492|       |
 2493|       |    /* output 12 */
 2494|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2495|   553k|    SQRADDSC(a[0], a[12]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2496|   553k|    SQRADDAC(a[1], a[11]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2497|   553k|    SQRADDAC(a[2], a[10]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2498|   553k|    SQRADDAC(a[3], a[9]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2499|   553k|    SQRADDAC(a[4], a[8]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2500|   553k|    SQRADDAC(a[5], a[7]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2501|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2502|   553k|    SQRADD(a[6], a[6]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2503|   553k|    COMBA_STORE(b[12]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2504|       |
 2505|       |    /* output 13 */
 2506|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2507|   553k|    SQRADDSC(a[0], a[13]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2508|   553k|    SQRADDAC(a[1], a[12]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2509|   553k|    SQRADDAC(a[2], a[11]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2510|   553k|    SQRADDAC(a[3], a[10]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2511|   553k|    SQRADDAC(a[4], a[9]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2512|   553k|    SQRADDAC(a[5], a[8]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2513|   553k|    SQRADDAC(a[6], a[7]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2514|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2515|   553k|    COMBA_STORE(b[13]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2516|       |
 2517|       |    /* output 14 */
 2518|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2519|   553k|    SQRADDSC(a[0], a[14]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2520|   553k|    SQRADDAC(a[1], a[13]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2521|   553k|    SQRADDAC(a[2], a[12]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2522|   553k|    SQRADDAC(a[3], a[11]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2523|   553k|    SQRADDAC(a[4], a[10]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2524|   553k|    SQRADDAC(a[5], a[9]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2525|   553k|    SQRADDAC(a[6], a[8]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2526|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2527|   553k|    SQRADD(a[7], a[7]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2528|   553k|    COMBA_STORE(b[14]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2529|       |
 2530|       |    /* output 15 */
 2531|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2532|   553k|    SQRADDSC(a[0], a[15]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2533|   553k|    SQRADDAC(a[1], a[14]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2534|   553k|    SQRADDAC(a[2], a[13]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2535|   553k|    SQRADDAC(a[3], a[12]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2536|   553k|    SQRADDAC(a[4], a[11]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2537|   553k|    SQRADDAC(a[5], a[10]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2538|   553k|    SQRADDAC(a[6], a[9]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2539|   553k|    SQRADDAC(a[7], a[8]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2540|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2541|   553k|    COMBA_STORE(b[15]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2542|       |
 2543|       |    /* output 16 */
 2544|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2545|   553k|    SQRADDSC(a[0], a[16]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2546|   553k|    SQRADDAC(a[1], a[15]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2547|   553k|    SQRADDAC(a[2], a[14]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2548|   553k|    SQRADDAC(a[3], a[13]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2549|   553k|    SQRADDAC(a[4], a[12]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2550|   553k|    SQRADDAC(a[5], a[11]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2551|   553k|    SQRADDAC(a[6], a[10]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2552|   553k|    SQRADDAC(a[7], a[9]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2553|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2554|   553k|    SQRADD(a[8], a[8]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2555|   553k|    COMBA_STORE(b[16]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2556|       |
 2557|       |    /* output 17 */
 2558|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2559|   553k|    SQRADDSC(a[0], a[17]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2560|   553k|    SQRADDAC(a[1], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2561|   553k|    SQRADDAC(a[2], a[15]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2562|   553k|    SQRADDAC(a[3], a[14]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2563|   553k|    SQRADDAC(a[4], a[13]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2564|   553k|    SQRADDAC(a[5], a[12]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2565|   553k|    SQRADDAC(a[6], a[11]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2566|   553k|    SQRADDAC(a[7], a[10]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2567|   553k|    SQRADDAC(a[8], a[9]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2568|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2569|   553k|    COMBA_STORE(b[17]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2570|       |
 2571|       |    /* output 18 */
 2572|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2573|   553k|    SQRADDSC(a[0], a[18]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2574|   553k|    SQRADDAC(a[1], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2575|   553k|    SQRADDAC(a[2], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2576|   553k|    SQRADDAC(a[3], a[15]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2577|   553k|    SQRADDAC(a[4], a[14]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2578|   553k|    SQRADDAC(a[5], a[13]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2579|   553k|    SQRADDAC(a[6], a[12]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2580|   553k|    SQRADDAC(a[7], a[11]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2581|   553k|    SQRADDAC(a[8], a[10]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2582|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2583|   553k|    SQRADD(a[9], a[9]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2584|   553k|    COMBA_STORE(b[18]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2585|       |
 2586|       |    /* output 19 */
 2587|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2588|   553k|    SQRADDSC(a[0], a[19]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2589|   553k|    SQRADDAC(a[1], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2590|   553k|    SQRADDAC(a[2], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2591|   553k|    SQRADDAC(a[3], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2592|   553k|    SQRADDAC(a[4], a[15]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2593|   553k|    SQRADDAC(a[5], a[14]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2594|   553k|    SQRADDAC(a[6], a[13]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2595|   553k|    SQRADDAC(a[7], a[12]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2596|   553k|    SQRADDAC(a[8], a[11]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2597|   553k|    SQRADDAC(a[9], a[10]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2598|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2599|   553k|    COMBA_STORE(b[19]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2600|       |
 2601|       |    /* output 20 */
 2602|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2603|   553k|    SQRADDSC(a[0], a[20]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2604|   553k|    SQRADDAC(a[1], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2605|   553k|    SQRADDAC(a[2], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2606|   553k|    SQRADDAC(a[3], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2607|   553k|    SQRADDAC(a[4], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2608|   553k|    SQRADDAC(a[5], a[15]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2609|   553k|    SQRADDAC(a[6], a[14]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2610|   553k|    SQRADDAC(a[7], a[13]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2611|   553k|    SQRADDAC(a[8], a[12]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2612|   553k|    SQRADDAC(a[9], a[11]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2613|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2614|   553k|    SQRADD(a[10], a[10]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2615|   553k|    COMBA_STORE(b[20]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2616|       |
 2617|       |    /* output 21 */
 2618|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2619|   553k|    SQRADDSC(a[0], a[21]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2620|   553k|    SQRADDAC(a[1], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2621|   553k|    SQRADDAC(a[2], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2622|   553k|    SQRADDAC(a[3], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2623|   553k|    SQRADDAC(a[4], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2624|   553k|    SQRADDAC(a[5], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2625|   553k|    SQRADDAC(a[6], a[15]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2626|   553k|    SQRADDAC(a[7], a[14]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2627|   553k|    SQRADDAC(a[8], a[13]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2628|   553k|    SQRADDAC(a[9], a[12]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2629|   553k|    SQRADDAC(a[10], a[11]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2630|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2631|   553k|    COMBA_STORE(b[21]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2632|       |
 2633|       |    /* output 22 */
 2634|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2635|   553k|    SQRADDSC(a[0], a[22]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2636|   553k|    SQRADDAC(a[1], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2637|   553k|    SQRADDAC(a[2], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2638|   553k|    SQRADDAC(a[3], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2639|   553k|    SQRADDAC(a[4], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2640|   553k|    SQRADDAC(a[5], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2641|   553k|    SQRADDAC(a[6], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2642|   553k|    SQRADDAC(a[7], a[15]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2643|   553k|    SQRADDAC(a[8], a[14]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2644|   553k|    SQRADDAC(a[9], a[13]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2645|   553k|    SQRADDAC(a[10], a[12]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2646|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2647|   553k|    SQRADD(a[11], a[11]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2648|   553k|    COMBA_STORE(b[22]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2649|       |
 2650|       |    /* output 23 */
 2651|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2652|   553k|    SQRADDSC(a[0], a[23]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2653|   553k|    SQRADDAC(a[1], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2654|   553k|    SQRADDAC(a[2], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2655|   553k|    SQRADDAC(a[3], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2656|   553k|    SQRADDAC(a[4], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2657|   553k|    SQRADDAC(a[5], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2658|   553k|    SQRADDAC(a[6], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2659|   553k|    SQRADDAC(a[7], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2660|   553k|    SQRADDAC(a[8], a[15]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2661|   553k|    SQRADDAC(a[9], a[14]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2662|   553k|    SQRADDAC(a[10], a[13]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2663|   553k|    SQRADDAC(a[11], a[12]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2664|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2665|   553k|    COMBA_STORE(b[23]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2666|       |
 2667|       |    /* output 24 */
 2668|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2669|   553k|    SQRADDSC(a[0], a[24]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2670|   553k|    SQRADDAC(a[1], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2671|   553k|    SQRADDAC(a[2], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2672|   553k|    SQRADDAC(a[3], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2673|   553k|    SQRADDAC(a[4], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2674|   553k|    SQRADDAC(a[5], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2675|   553k|    SQRADDAC(a[6], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2676|   553k|    SQRADDAC(a[7], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2677|   553k|    SQRADDAC(a[8], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2678|   553k|    SQRADDAC(a[9], a[15]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2679|   553k|    SQRADDAC(a[10], a[14]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2680|   553k|    SQRADDAC(a[11], a[13]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2681|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2682|   553k|    SQRADD(a[12], a[12]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2683|   553k|    COMBA_STORE(b[24]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2684|       |
 2685|       |    /* output 25 */
 2686|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2687|   553k|    SQRADDSC(a[0], a[25]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2688|   553k|    SQRADDAC(a[1], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2689|   553k|    SQRADDAC(a[2], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2690|   553k|    SQRADDAC(a[3], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2691|   553k|    SQRADDAC(a[4], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2692|   553k|    SQRADDAC(a[5], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2693|   553k|    SQRADDAC(a[6], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2694|   553k|    SQRADDAC(a[7], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2695|   553k|    SQRADDAC(a[8], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2696|   553k|    SQRADDAC(a[9], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2697|   553k|    SQRADDAC(a[10], a[15]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2698|   553k|    SQRADDAC(a[11], a[14]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2699|   553k|    SQRADDAC(a[12], a[13]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2700|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2701|   553k|    COMBA_STORE(b[25]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2702|       |
 2703|       |    /* output 26 */
 2704|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2705|   553k|    SQRADDSC(a[0], a[26]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2706|   553k|    SQRADDAC(a[1], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2707|   553k|    SQRADDAC(a[2], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2708|   553k|    SQRADDAC(a[3], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2709|   553k|    SQRADDAC(a[4], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2710|   553k|    SQRADDAC(a[5], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2711|   553k|    SQRADDAC(a[6], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2712|   553k|    SQRADDAC(a[7], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2713|   553k|    SQRADDAC(a[8], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2714|   553k|    SQRADDAC(a[9], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2715|   553k|    SQRADDAC(a[10], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2716|   553k|    SQRADDAC(a[11], a[15]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2717|   553k|    SQRADDAC(a[12], a[14]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2718|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2719|   553k|    SQRADD(a[13], a[13]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2720|   553k|    COMBA_STORE(b[26]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2721|       |
 2722|       |    /* output 27 */
 2723|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2724|   553k|    SQRADDSC(a[0], a[27]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2725|   553k|    SQRADDAC(a[1], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2726|   553k|    SQRADDAC(a[2], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2727|   553k|    SQRADDAC(a[3], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2728|   553k|    SQRADDAC(a[4], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2729|   553k|    SQRADDAC(a[5], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2730|   553k|    SQRADDAC(a[6], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2731|   553k|    SQRADDAC(a[7], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2732|   553k|    SQRADDAC(a[8], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2733|   553k|    SQRADDAC(a[9], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2734|   553k|    SQRADDAC(a[10], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2735|   553k|    SQRADDAC(a[11], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2736|   553k|    SQRADDAC(a[12], a[15]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2737|   553k|    SQRADDAC(a[13], a[14]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2738|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2739|   553k|    COMBA_STORE(b[27]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2740|       |
 2741|       |    /* output 28 */
 2742|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2743|   553k|    SQRADDSC(a[0], a[28]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2744|   553k|    SQRADDAC(a[1], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2745|   553k|    SQRADDAC(a[2], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2746|   553k|    SQRADDAC(a[3], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2747|   553k|    SQRADDAC(a[4], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2748|   553k|    SQRADDAC(a[5], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2749|   553k|    SQRADDAC(a[6], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2750|   553k|    SQRADDAC(a[7], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2751|   553k|    SQRADDAC(a[8], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2752|   553k|    SQRADDAC(a[9], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2753|   553k|    SQRADDAC(a[10], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2754|   553k|    SQRADDAC(a[11], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2755|   553k|    SQRADDAC(a[12], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2756|   553k|    SQRADDAC(a[13], a[15]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2757|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2758|   553k|    SQRADD(a[14], a[14]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2759|   553k|    COMBA_STORE(b[28]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2760|       |
 2761|       |    /* output 29 */
 2762|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2763|   553k|    SQRADDSC(a[0], a[29]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2764|   553k|    SQRADDAC(a[1], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2765|   553k|    SQRADDAC(a[2], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2766|   553k|    SQRADDAC(a[3], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2767|   553k|    SQRADDAC(a[4], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2768|   553k|    SQRADDAC(a[5], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2769|   553k|    SQRADDAC(a[6], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2770|   553k|    SQRADDAC(a[7], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2771|   553k|    SQRADDAC(a[8], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2772|   553k|    SQRADDAC(a[9], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2773|   553k|    SQRADDAC(a[10], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2774|   553k|    SQRADDAC(a[11], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2775|   553k|    SQRADDAC(a[12], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2776|   553k|    SQRADDAC(a[13], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2777|   553k|    SQRADDAC(a[14], a[15]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2778|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2779|   553k|    COMBA_STORE(b[29]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2780|       |
 2781|       |    /* output 30 */
 2782|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2783|   553k|    SQRADDSC(a[0], a[30]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2784|   553k|    SQRADDAC(a[1], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2785|   553k|    SQRADDAC(a[2], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2786|   553k|    SQRADDAC(a[3], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2787|   553k|    SQRADDAC(a[4], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2788|   553k|    SQRADDAC(a[5], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2789|   553k|    SQRADDAC(a[6], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2790|   553k|    SQRADDAC(a[7], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2791|   553k|    SQRADDAC(a[8], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2792|   553k|    SQRADDAC(a[9], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2793|   553k|    SQRADDAC(a[10], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2794|   553k|    SQRADDAC(a[11], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2795|   553k|    SQRADDAC(a[12], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2796|   553k|    SQRADDAC(a[13], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2797|   553k|    SQRADDAC(a[14], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2798|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2799|   553k|    SQRADD(a[15], a[15]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2800|   553k|    COMBA_STORE(b[30]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2801|       |
 2802|       |    /* output 31 */
 2803|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2804|   553k|    SQRADDSC(a[0], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2805|   553k|    SQRADDAC(a[1], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2806|   553k|    SQRADDAC(a[2], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2807|   553k|    SQRADDAC(a[3], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2808|   553k|    SQRADDAC(a[4], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2809|   553k|    SQRADDAC(a[5], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2810|   553k|    SQRADDAC(a[6], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2811|   553k|    SQRADDAC(a[7], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2812|   553k|    SQRADDAC(a[8], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2813|   553k|    SQRADDAC(a[9], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2814|   553k|    SQRADDAC(a[10], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2815|   553k|    SQRADDAC(a[11], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2816|   553k|    SQRADDAC(a[12], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2817|   553k|    SQRADDAC(a[13], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2818|   553k|    SQRADDAC(a[14], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2819|   553k|    SQRADDAC(a[15], a[16]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2820|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2821|   553k|    COMBA_STORE(b[31]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2822|       |
 2823|       |    /* output 32 */
 2824|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2825|   553k|    SQRADDSC(a[1], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2826|   553k|    SQRADDAC(a[2], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2827|   553k|    SQRADDAC(a[3], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2828|   553k|    SQRADDAC(a[4], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2829|   553k|    SQRADDAC(a[5], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2830|   553k|    SQRADDAC(a[6], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2831|   553k|    SQRADDAC(a[7], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2832|   553k|    SQRADDAC(a[8], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2833|   553k|    SQRADDAC(a[9], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2834|   553k|    SQRADDAC(a[10], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2835|   553k|    SQRADDAC(a[11], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2836|   553k|    SQRADDAC(a[12], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2837|   553k|    SQRADDAC(a[13], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2838|   553k|    SQRADDAC(a[14], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2839|   553k|    SQRADDAC(a[15], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2840|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2841|   553k|    SQRADD(a[16], a[16]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2842|   553k|    COMBA_STORE(b[32]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2843|       |
 2844|       |    /* output 33 */
 2845|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2846|   553k|    SQRADDSC(a[2], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2847|   553k|    SQRADDAC(a[3], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2848|   553k|    SQRADDAC(a[4], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2849|   553k|    SQRADDAC(a[5], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2850|   553k|    SQRADDAC(a[6], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2851|   553k|    SQRADDAC(a[7], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2852|   553k|    SQRADDAC(a[8], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2853|   553k|    SQRADDAC(a[9], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2854|   553k|    SQRADDAC(a[10], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2855|   553k|    SQRADDAC(a[11], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2856|   553k|    SQRADDAC(a[12], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2857|   553k|    SQRADDAC(a[13], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2858|   553k|    SQRADDAC(a[14], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2859|   553k|    SQRADDAC(a[15], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2860|   553k|    SQRADDAC(a[16], a[17]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2861|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2862|   553k|    COMBA_STORE(b[33]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2863|       |
 2864|       |    /* output 34 */
 2865|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2866|   553k|    SQRADDSC(a[3], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2867|   553k|    SQRADDAC(a[4], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2868|   553k|    SQRADDAC(a[5], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2869|   553k|    SQRADDAC(a[6], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2870|   553k|    SQRADDAC(a[7], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2871|   553k|    SQRADDAC(a[8], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2872|   553k|    SQRADDAC(a[9], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2873|   553k|    SQRADDAC(a[10], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2874|   553k|    SQRADDAC(a[11], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2875|   553k|    SQRADDAC(a[12], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2876|   553k|    SQRADDAC(a[13], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2877|   553k|    SQRADDAC(a[14], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2878|   553k|    SQRADDAC(a[15], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2879|   553k|    SQRADDAC(a[16], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2880|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2881|   553k|    SQRADD(a[17], a[17]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2882|   553k|    COMBA_STORE(b[34]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2883|       |
 2884|       |    /* output 35 */
 2885|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2886|   553k|    SQRADDSC(a[4], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2887|   553k|    SQRADDAC(a[5], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2888|   553k|    SQRADDAC(a[6], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2889|   553k|    SQRADDAC(a[7], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2890|   553k|    SQRADDAC(a[8], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2891|   553k|    SQRADDAC(a[9], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2892|   553k|    SQRADDAC(a[10], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2893|   553k|    SQRADDAC(a[11], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2894|   553k|    SQRADDAC(a[12], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2895|   553k|    SQRADDAC(a[13], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2896|   553k|    SQRADDAC(a[14], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2897|   553k|    SQRADDAC(a[15], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2898|   553k|    SQRADDAC(a[16], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2899|   553k|    SQRADDAC(a[17], a[18]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2900|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2901|   553k|    COMBA_STORE(b[35]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2902|       |
 2903|       |    /* output 36 */
 2904|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2905|   553k|    SQRADDSC(a[5], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2906|   553k|    SQRADDAC(a[6], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2907|   553k|    SQRADDAC(a[7], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2908|   553k|    SQRADDAC(a[8], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2909|   553k|    SQRADDAC(a[9], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2910|   553k|    SQRADDAC(a[10], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2911|   553k|    SQRADDAC(a[11], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2912|   553k|    SQRADDAC(a[12], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2913|   553k|    SQRADDAC(a[13], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2914|   553k|    SQRADDAC(a[14], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2915|   553k|    SQRADDAC(a[15], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2916|   553k|    SQRADDAC(a[16], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2917|   553k|    SQRADDAC(a[17], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2918|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2919|   553k|    SQRADD(a[18], a[18]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2920|   553k|    COMBA_STORE(b[36]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2921|       |
 2922|       |    /* output 37 */
 2923|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2924|   553k|    SQRADDSC(a[6], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2925|   553k|    SQRADDAC(a[7], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2926|   553k|    SQRADDAC(a[8], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2927|   553k|    SQRADDAC(a[9], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2928|   553k|    SQRADDAC(a[10], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2929|   553k|    SQRADDAC(a[11], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2930|   553k|    SQRADDAC(a[12], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2931|   553k|    SQRADDAC(a[13], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2932|   553k|    SQRADDAC(a[14], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2933|   553k|    SQRADDAC(a[15], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2934|   553k|    SQRADDAC(a[16], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2935|   553k|    SQRADDAC(a[17], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2936|   553k|    SQRADDAC(a[18], a[19]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2937|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2938|   553k|    COMBA_STORE(b[37]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2939|       |
 2940|       |    /* output 38 */
 2941|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2942|   553k|    SQRADDSC(a[7], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2943|   553k|    SQRADDAC(a[8], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2944|   553k|    SQRADDAC(a[9], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2945|   553k|    SQRADDAC(a[10], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2946|   553k|    SQRADDAC(a[11], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2947|   553k|    SQRADDAC(a[12], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2948|   553k|    SQRADDAC(a[13], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2949|   553k|    SQRADDAC(a[14], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2950|   553k|    SQRADDAC(a[15], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2951|   553k|    SQRADDAC(a[16], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2952|   553k|    SQRADDAC(a[17], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2953|   553k|    SQRADDAC(a[18], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2954|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2955|   553k|    SQRADD(a[19], a[19]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2956|   553k|    COMBA_STORE(b[38]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2957|       |
 2958|       |    /* output 39 */
 2959|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2960|   553k|    SQRADDSC(a[8], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2961|   553k|    SQRADDAC(a[9], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2962|   553k|    SQRADDAC(a[10], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2963|   553k|    SQRADDAC(a[11], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2964|   553k|    SQRADDAC(a[12], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2965|   553k|    SQRADDAC(a[13], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2966|   553k|    SQRADDAC(a[14], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2967|   553k|    SQRADDAC(a[15], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2968|   553k|    SQRADDAC(a[16], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2969|   553k|    SQRADDAC(a[17], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2970|   553k|    SQRADDAC(a[18], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2971|   553k|    SQRADDAC(a[19], a[20]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2972|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2973|   553k|    COMBA_STORE(b[39]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2974|       |
 2975|       |    /* output 40 */
 2976|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2977|   553k|    SQRADDSC(a[9], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2978|   553k|    SQRADDAC(a[10], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2979|   553k|    SQRADDAC(a[11], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2980|   553k|    SQRADDAC(a[12], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2981|   553k|    SQRADDAC(a[13], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2982|   553k|    SQRADDAC(a[14], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2983|   553k|    SQRADDAC(a[15], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2984|   553k|    SQRADDAC(a[16], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2985|   553k|    SQRADDAC(a[17], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2986|   553k|    SQRADDAC(a[18], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2987|   553k|    SQRADDAC(a[19], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2988|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 2989|   553k|    SQRADD(a[20], a[20]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2990|   553k|    COMBA_STORE(b[40]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 2991|       |
 2992|       |    /* output 41 */
 2993|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2994|   553k|    SQRADDSC(a[10], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2995|   553k|    SQRADDAC(a[11], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2996|   553k|    SQRADDAC(a[12], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2997|   553k|    SQRADDAC(a[13], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2998|   553k|    SQRADDAC(a[14], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 2999|   553k|    SQRADDAC(a[15], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3000|   553k|    SQRADDAC(a[16], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3001|   553k|    SQRADDAC(a[17], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3002|   553k|    SQRADDAC(a[18], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3003|   553k|    SQRADDAC(a[19], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3004|   553k|    SQRADDAC(a[20], a[21]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3005|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3006|   553k|    COMBA_STORE(b[41]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3007|       |
 3008|       |    /* output 42 */
 3009|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3010|   553k|    SQRADDSC(a[11], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3011|   553k|    SQRADDAC(a[12], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3012|   553k|    SQRADDAC(a[13], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3013|   553k|    SQRADDAC(a[14], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3014|   553k|    SQRADDAC(a[15], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3015|   553k|    SQRADDAC(a[16], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3016|   553k|    SQRADDAC(a[17], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3017|   553k|    SQRADDAC(a[18], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3018|   553k|    SQRADDAC(a[19], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3019|   553k|    SQRADDAC(a[20], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3020|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3021|   553k|    SQRADD(a[21], a[21]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3022|   553k|    COMBA_STORE(b[42]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3023|       |
 3024|       |    /* output 43 */
 3025|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3026|   553k|    SQRADDSC(a[12], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3027|   553k|    SQRADDAC(a[13], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3028|   553k|    SQRADDAC(a[14], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3029|   553k|    SQRADDAC(a[15], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3030|   553k|    SQRADDAC(a[16], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3031|   553k|    SQRADDAC(a[17], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3032|   553k|    SQRADDAC(a[18], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3033|   553k|    SQRADDAC(a[19], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3034|   553k|    SQRADDAC(a[20], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3035|   553k|    SQRADDAC(a[21], a[22]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3036|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3037|   553k|    COMBA_STORE(b[43]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3038|       |
 3039|       |    /* output 44 */
 3040|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3041|   553k|    SQRADDSC(a[13], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3042|   553k|    SQRADDAC(a[14], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3043|   553k|    SQRADDAC(a[15], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3044|   553k|    SQRADDAC(a[16], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3045|   553k|    SQRADDAC(a[17], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3046|   553k|    SQRADDAC(a[18], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3047|   553k|    SQRADDAC(a[19], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3048|   553k|    SQRADDAC(a[20], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3049|   553k|    SQRADDAC(a[21], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3050|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3051|   553k|    SQRADD(a[22], a[22]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3052|   553k|    COMBA_STORE(b[44]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3053|       |
 3054|       |    /* output 45 */
 3055|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3056|   553k|    SQRADDSC(a[14], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3057|   553k|    SQRADDAC(a[15], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3058|   553k|    SQRADDAC(a[16], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3059|   553k|    SQRADDAC(a[17], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3060|   553k|    SQRADDAC(a[18], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3061|   553k|    SQRADDAC(a[19], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3062|   553k|    SQRADDAC(a[20], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3063|   553k|    SQRADDAC(a[21], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3064|   553k|    SQRADDAC(a[22], a[23]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3065|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3066|   553k|    COMBA_STORE(b[45]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3067|       |
 3068|       |    /* output 46 */
 3069|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3070|   553k|    SQRADDSC(a[15], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3071|   553k|    SQRADDAC(a[16], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3072|   553k|    SQRADDAC(a[17], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3073|   553k|    SQRADDAC(a[18], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3074|   553k|    SQRADDAC(a[19], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3075|   553k|    SQRADDAC(a[20], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3076|   553k|    SQRADDAC(a[21], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3077|   553k|    SQRADDAC(a[22], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3078|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3079|   553k|    SQRADD(a[23], a[23]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3080|   553k|    COMBA_STORE(b[46]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3081|       |
 3082|       |    /* output 47 */
 3083|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3084|   553k|    SQRADDSC(a[16], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3085|   553k|    SQRADDAC(a[17], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3086|   553k|    SQRADDAC(a[18], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3087|   553k|    SQRADDAC(a[19], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3088|   553k|    SQRADDAC(a[20], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3089|   553k|    SQRADDAC(a[21], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3090|   553k|    SQRADDAC(a[22], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3091|   553k|    SQRADDAC(a[23], a[24]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3092|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3093|   553k|    COMBA_STORE(b[47]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3094|       |
 3095|       |    /* output 48 */
 3096|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3097|   553k|    SQRADDSC(a[17], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3098|   553k|    SQRADDAC(a[18], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3099|   553k|    SQRADDAC(a[19], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3100|   553k|    SQRADDAC(a[20], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3101|   553k|    SQRADDAC(a[21], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3102|   553k|    SQRADDAC(a[22], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3103|   553k|    SQRADDAC(a[23], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3104|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3105|   553k|    SQRADD(a[24], a[24]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3106|   553k|    COMBA_STORE(b[48]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3107|       |
 3108|       |    /* output 49 */
 3109|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3110|   553k|    SQRADDSC(a[18], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3111|   553k|    SQRADDAC(a[19], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3112|   553k|    SQRADDAC(a[20], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3113|   553k|    SQRADDAC(a[21], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3114|   553k|    SQRADDAC(a[22], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3115|   553k|    SQRADDAC(a[23], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3116|   553k|    SQRADDAC(a[24], a[25]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3117|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3118|   553k|    COMBA_STORE(b[49]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3119|       |
 3120|       |    /* output 50 */
 3121|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3122|   553k|    SQRADDSC(a[19], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3123|   553k|    SQRADDAC(a[20], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3124|   553k|    SQRADDAC(a[21], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3125|   553k|    SQRADDAC(a[22], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3126|   553k|    SQRADDAC(a[23], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3127|   553k|    SQRADDAC(a[24], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3128|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3129|   553k|    SQRADD(a[25], a[25]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3130|   553k|    COMBA_STORE(b[50]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3131|       |
 3132|       |    /* output 51 */
 3133|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3134|   553k|    SQRADDSC(a[20], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3135|   553k|    SQRADDAC(a[21], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3136|   553k|    SQRADDAC(a[22], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3137|   553k|    SQRADDAC(a[23], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3138|   553k|    SQRADDAC(a[24], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3139|   553k|    SQRADDAC(a[25], a[26]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3140|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3141|   553k|    COMBA_STORE(b[51]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3142|       |
 3143|       |    /* output 52 */
 3144|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3145|   553k|    SQRADDSC(a[21], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3146|   553k|    SQRADDAC(a[22], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3147|   553k|    SQRADDAC(a[23], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3148|   553k|    SQRADDAC(a[24], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3149|   553k|    SQRADDAC(a[25], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3150|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3151|   553k|    SQRADD(a[26], a[26]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3152|   553k|    COMBA_STORE(b[52]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3153|       |
 3154|       |    /* output 53 */
 3155|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3156|   553k|    SQRADDSC(a[22], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3157|   553k|    SQRADDAC(a[23], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3158|   553k|    SQRADDAC(a[24], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3159|   553k|    SQRADDAC(a[25], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3160|   553k|    SQRADDAC(a[26], a[27]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3161|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3162|   553k|    COMBA_STORE(b[53]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3163|       |
 3164|       |    /* output 54 */
 3165|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3166|   553k|    SQRADDSC(a[23], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3167|   553k|    SQRADDAC(a[24], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3168|   553k|    SQRADDAC(a[25], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3169|   553k|    SQRADDAC(a[26], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3170|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3171|   553k|    SQRADD(a[27], a[27]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3172|   553k|    COMBA_STORE(b[54]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3173|       |
 3174|       |    /* output 55 */
 3175|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3176|   553k|    SQRADDSC(a[24], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3177|   553k|    SQRADDAC(a[25], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3178|   553k|    SQRADDAC(a[26], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3179|   553k|    SQRADDAC(a[27], a[28]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3180|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3181|   553k|    COMBA_STORE(b[55]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3182|       |
 3183|       |    /* output 56 */
 3184|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3185|   553k|    SQRADDSC(a[25], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3186|   553k|    SQRADDAC(a[26], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3187|   553k|    SQRADDAC(a[27], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3188|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3189|   553k|    SQRADD(a[28], a[28]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3190|   553k|    COMBA_STORE(b[56]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3191|       |
 3192|       |    /* output 57 */
 3193|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3194|   553k|    SQRADDSC(a[26], a[31]);
  ------------------
  |  |  107|   553k|    __asm__(                              \
  |  |  108|   553k|        "movq  %3,%%rax     \n\t"         \
  |  |  109|   553k|        "mulq  %4           \n\t"         \
  |  |  110|   553k|        "movq  %%rax,%0     \n\t"         \
  |  |  111|   553k|        "movq  %%rdx,%1     \n\t"         \
  |  |  112|   553k|        "xorq  %2,%2        \n\t"         \
  |  |  113|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2) \
  |  |  114|   553k|        : "g"(i), "g"(j)                  \
  |  |  115|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3195|   553k|    SQRADDAC(a[27], a[30]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3196|   553k|    SQRADDAC(a[28], a[29]);
  ------------------
  |  |  118|   553k|    __asm__(                                           \
  |  |  119|   553k|        "movq  %6,%%rax     \n\t"                      \
  |  |  120|   553k|        "mulq  %7           \n\t"                      \
  |  |  121|   553k|        "addq  %%rax,%0     \n\t"                      \
  |  |  122|   553k|        "adcq  %%rdx,%1     \n\t"                      \
  |  |  123|   553k|        "adcq  $0,%2        \n\t"                      \
  |  |  124|   553k|        : "=r"(sc0), "=r"(sc1), "=r"(sc2)              \
  |  |  125|   553k|        : "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) \
  |  |  126|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3197|   553k|    SQRADDDB;
  ------------------
  |  |  129|   553k|    __asm__(                                                      \
  |  |  130|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  131|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  132|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  133|   553k|        "addq %6,%0         \n\t"                                 \
  |  |  134|   553k|        "adcq %7,%1         \n\t"                                 \
  |  |  135|   553k|        "adcq %8,%2         \n\t"                                 \
  |  |  136|   553k|        : "=&r"(c0), "=&r"(c1), "=&r"(c2)                         \
  |  |  137|   553k|        : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) \
  |  |  138|   553k|        : "cc");
  ------------------
 3198|   553k|    COMBA_STORE(b[57]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3199|       |
 3200|       |    /* output 58 */
 3201|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3202|   553k|    SQRADD2(a[27], a[31]);
  ------------------
  |  |   93|   553k|    __asm__(                                        \
  |  |   94|   553k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|   553k|        "mulq  %7           \n\t"                   \
  |  |   96|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3203|   553k|    SQRADD2(a[28], a[30]);
  ------------------
  |  |   93|   553k|    __asm__(                                        \
  |  |   94|   553k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|   553k|        "mulq  %7           \n\t"                   \
  |  |   96|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3204|   553k|    SQRADD(a[29], a[29]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3205|   553k|    COMBA_STORE(b[58]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3206|       |
 3207|       |    /* output 59 */
 3208|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3209|   553k|    SQRADD2(a[28], a[31]);
  ------------------
  |  |   93|   553k|    __asm__(                                        \
  |  |   94|   553k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|   553k|        "mulq  %7           \n\t"                   \
  |  |   96|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3210|   553k|    SQRADD2(a[29], a[30]);
  ------------------
  |  |   93|   553k|    __asm__(                                        \
  |  |   94|   553k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|   553k|        "mulq  %7           \n\t"                   \
  |  |   96|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3211|   553k|    COMBA_STORE(b[59]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3212|       |
 3213|       |    /* output 60 */
 3214|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3215|   553k|    SQRADD2(a[29], a[31]);
  ------------------
  |  |   93|   553k|    __asm__(                                        \
  |  |   94|   553k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|   553k|        "mulq  %7           \n\t"                   \
  |  |   96|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3216|   553k|    SQRADD(a[30], a[30]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3217|   553k|    COMBA_STORE(b[60]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3218|       |
 3219|       |    /* output 61 */
 3220|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3221|   553k|    SQRADD2(a[30], a[31]);
  ------------------
  |  |   93|   553k|    __asm__(                                        \
  |  |   94|   553k|        "movq  %6,%%rax     \n\t"                   \
  |  |   95|   553k|        "mulq  %7           \n\t"                   \
  |  |   96|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |   97|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |   98|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |   99|   553k|        "addq  %%rax,%0     \n\t"                   \
  |  |  100|   553k|        "adcq  %%rdx,%1     \n\t"                   \
  |  |  101|   553k|        "adcq  $0,%2        \n\t"                   \
  |  |  102|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)              \
  |  |  103|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) \
  |  |  104|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3222|   553k|    COMBA_STORE(b[61]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3223|       |
 3224|       |    /* output 62 */
 3225|   553k|    CARRY_FORWARD;
  ------------------
  |  |   73|   553k|    do {              \
  |  |   74|   553k|        c0 = c1;      \
  |  |   75|   553k|        c1 = c2;      \
  |  |   76|   553k|        c2 = 0;       \
  |  |   77|   553k|    } while (0);
  |  |  ------------------
  |  |  |  Branch (77:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 3226|   553k|    SQRADD(a[31], a[31]);
  ------------------
  |  |   82|   553k|    __asm__(                                \
  |  |   83|   553k|        "movq  %6,%%rax     \n\t"           \
  |  |   84|   553k|        "mulq  %%rax        \n\t"           \
  |  |   85|   553k|        "addq  %%rax,%0     \n\t"           \
  |  |   86|   553k|        "adcq  %%rdx,%1     \n\t"           \
  |  |   87|   553k|        "adcq  $0,%2        \n\t"           \
  |  |   88|   553k|        : "=r"(c0), "=r"(c1), "=r"(c2)      \
  |  |   89|   553k|        : "0"(c0), "1"(c1), "2"(c2), "g"(i) \
  |  |   90|   553k|        : "%rax", "%rdx", "cc");
  ------------------
 3227|   553k|    COMBA_STORE(b[62]);
  ------------------
  |  |   67|   553k|    x = c0;
  ------------------
 3228|   553k|    COMBA_STORE2(b[63]);
  ------------------
  |  |   70|   553k|    x = c1;
  ------------------
 3229|   553k|    COMBA_FINI;
 3230|       |
 3231|   553k|    B->used = 64;
 3232|   553k|    B->sign = ZPOS;
  ------------------
  |  |  326|   553k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|   553k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
 3233|   553k|    memcpy(B->dp, b, 64 * sizeof(mp_digit));
 3234|   553k|    mp_clamp(B);
  ------------------
  |  |   26|   553k|    {                                                    \
  |  |   27|   554k|        while ((a)->used && (a)->dp[(a)->used - 1] == 0) \
  |  |  ------------------
  |  |  |  Branch (27:16): [True: 554k, False: 0]
  |  |  |  Branch (27:29): [True: 1.04k, False: 553k]
  |  |  ------------------
  |  |   28|   553k|            --((a)->used);                               \
  |  |   29|   553k|        (a)->sign = (a)->used ? (a)->sign : ZPOS;        \
  |  |  ------------------
  |  |  |  |  326|      0|#define ZPOS MP_ZPOS
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   553k|#define MP_ZPOS 0
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (29:21): [True: 553k, False: 0]
  |  |  ------------------
  |  |   30|   553k|    }
  ------------------
 3235|   553k|}

freebl_cpuid:
   41|      5|{
   42|      5|    __asm__("xor %%ecx, %%ecx\n\t"
   43|      5|            "cpuid\n\t"
   44|      5|            : "=a"(*eax),
   45|      5|              "=b"(*ebx),
   46|      5|              "=c"(*ecx),
   47|      5|              "=d"(*edx)
   48|      5|            : "0"(op));
   49|      5|}
s_mpi_getProcessorLineSize:
  653|      1|{
  654|      1|    unsigned long eax, ebx, ecx, edx;
  655|      1|    PRUint32 cpuid[3];
  656|      1|    unsigned long cpuidLevel;
  657|      1|    unsigned long cacheLineSize = 0;
  658|      1|    int manufacturer = MAN_UNKNOWN;
  ------------------
  |  |  627|      1|#define MAN_UNKNOWN 9
  ------------------
  659|      1|    int i;
  660|      1|    char string[13];
  661|       |
  662|       |#if !defined(AMD_64)
  663|       |    if (is386()) {
  664|       |        return 0; /* 386 had no cache */
  665|       |    }
  666|       |    if (is486()) {
  667|       |        return 32; /* really? need more info */
  668|       |    }
  669|       |#endif
  670|       |
  671|       |    /* Pentium, cpuid command is available */
  672|      1|    freebl_cpuid(0, &eax, &ebx, &ecx, &edx);
  673|      1|    cpuidLevel = eax;
  674|       |    /* string holds the CPU's manufacturer ID string - a twelve
  675|       |     * character ASCII string stored in ebx, edx, ecx, and
  676|       |     * the 32-bit extended feature flags are in edx, ecx.
  677|       |     */
  678|      1|    cpuid[0] = ebx;
  679|      1|    cpuid[1] = ecx;
  680|      1|    cpuid[2] = edx;
  681|      1|    memcpy(string, cpuid, sizeof(cpuid));
  682|      1|    string[12] = 0;
  683|       |
  684|      1|    manufacturer = MAN_UNKNOWN;
  ------------------
  |  |  627|      1|#define MAN_UNKNOWN 9
  ------------------
  685|     11|    for (i = 0; i < n_manufacturers; i++) {
  ------------------
  |  Branch (685:17): [True: 10, False: 1]
  ------------------
  686|     10|        if (strcmp(manMap[i], string) == 0) {
  ------------------
  |  Branch (686:13): [True: 0, False: 10]
  ------------------
  687|      0|            manufacturer = i;
  688|      0|        }
  689|     10|    }
  690|       |
  691|      1|    if (manufacturer == INTEL) {
  ------------------
  |  |  603|      1|#define INTEL 0
  ------------------
  |  Branch (691:9): [True: 0, False: 1]
  ------------------
  692|      0|        cacheLineSize = getIntelCacheLineSize(cpuidLevel);
  693|      1|    } else {
  694|      1|        cacheLineSize = getOtherCacheLineSize(cpuidLevel);
  695|      1|    }
  696|       |    /* doesn't support cache info based on cpuid. This means
  697|       |     * an old pentium class processor, which have cache lines of
  698|       |     * 32. If we learn differently, we can use a switch based on
  699|       |     * the Manufacturer id  */
  700|      1|    if (cacheLineSize == 0) {
  ------------------
  |  Branch (700:9): [True: 0, False: 1]
  ------------------
  701|      0|        cacheLineSize = 32;
  702|      0|    }
  703|      1|    return cacheLineSize;
  704|      1|}
mpcpucache.c:getOtherCacheLineSize:
  587|      1|{
  588|      1|    unsigned long lineSize = 0;
  589|      1|    unsigned long eax, ebx, ecx, edx;
  590|       |
  591|       |    /* get the Extended CPUID level */
  592|      1|    freebl_cpuid(0x80000000, &eax, &ebx, &ecx, &edx);
  593|      1|    cpuidLevel = eax;
  594|       |
  595|      1|    if (cpuidLevel >= 0x80000005) {
  ------------------
  |  Branch (595:9): [True: 1, False: 0]
  ------------------
  596|      1|        freebl_cpuid(0x80000005, &eax, &ebx, &ecx, &edx);
  597|      1|        lineSize = ecx & 0xff; /* line Size, L1 Data Cache */
  598|      1|    }
  599|      1|    return lineSize;
  600|      1|}

mp_init:
  121|  44.5k|{
  122|  44.5k|    return mp_init_size(mp, s_mp_defprec);
  123|       |
  124|  44.5k|} /* end mp_init() */
mp_init_size:
  140|   532k|{
  141|   532k|    ARGCHK(mp != NULL && prec > 0, MP_BADARG);
  ------------------
  |  |  355|   532k|#define ARGCHK(X, Y) assert(X)
  ------------------
  142|       |
  143|   532k|    prec = MP_ROUNDUP(prec, s_mp_defprec);
  ------------------
  |  |   89|   532k|#define MP_ROUNDUP(a, b) (MP_HOWMANY(a, b) * (b))
  |  |  ------------------
  |  |  |  |   88|   532k|#define MP_HOWMANY(a, b) (((a) + (b)-1) / (b))
  |  |  ------------------
  ------------------
  144|   532k|    if ((DIGITS(mp) = s_mp_alloc(prec, sizeof(mp_digit))) == NULL)
  ------------------
  |  |  335|   532k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|   532k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
  |  Branch (144:9): [True: 0, False: 532k]
  ------------------
  145|      0|        return MP_MEM;
  ------------------
  |  |   42|      0|#define MP_MEM -2    /* out of memory         */
  ------------------
  146|       |
  147|   532k|    SIGN(mp) = ZPOS;
  ------------------
  |  |  332|   532k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|   532k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  SIGN(mp) = ZPOS;
  ------------------
  |  |  326|   532k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|   532k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
  148|   532k|    USED(mp) = 1;
  ------------------
  |  |  333|   532k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   532k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  149|   532k|    ALLOC(mp) = prec;
  ------------------
  |  |  334|   532k|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|   532k|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
  150|       |
  151|   532k|    return MP_OKAY;
  ------------------
  |  |   39|   532k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  152|       |
  153|   532k|} /* end mp_init_size() */
mp_init_copy:
  169|  2.27M|{
  170|  2.27M|    ARGCHK(mp != NULL && from != NULL, MP_BADARG);
  ------------------
  |  |  355|  2.27M|#define ARGCHK(X, Y) assert(X)
  ------------------
  171|       |
  172|  2.27M|    if (mp == from)
  ------------------
  |  Branch (172:9): [True: 0, False: 2.27M]
  ------------------
  173|      0|        return MP_OKAY;
  ------------------
  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  174|       |
  175|  2.27M|    if ((DIGITS(mp) = s_mp_alloc(ALLOC(from), sizeof(mp_digit))) == NULL)
  ------------------
  |  |  335|  2.27M|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|  2.27M|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
                  if ((DIGITS(mp) = s_mp_alloc(ALLOC(from), sizeof(mp_digit))) == NULL)
  ------------------
  |  |  334|  2.27M|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|  2.27M|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
  |  Branch (175:9): [True: 0, False: 2.27M]
  ------------------
  176|      0|        return MP_MEM;
  ------------------
  |  |   42|      0|#define MP_MEM -2    /* out of memory         */
  ------------------
  177|       |
  178|  2.27M|    s_mp_copy(DIGITS(from), DIGITS(mp), USED(from));
  ------------------
  |  |  335|  2.27M|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|  2.27M|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
                  s_mp_copy(DIGITS(from), DIGITS(mp), USED(from));
  ------------------
  |  |  335|  2.27M|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|  2.27M|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
                  s_mp_copy(DIGITS(from), DIGITS(mp), USED(from));
  ------------------
  |  |  333|  2.27M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  2.27M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  179|  2.27M|    USED(mp) = USED(from);
  ------------------
  |  |  333|  2.27M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  2.27M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                  USED(mp) = USED(from);
  ------------------
  |  |  333|  2.27M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  2.27M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  180|  2.27M|    ALLOC(mp) = ALLOC(from);
  ------------------
  |  |  334|  2.27M|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|  2.27M|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
                  ALLOC(mp) = ALLOC(from);
  ------------------
  |  |  334|  2.27M|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|  2.27M|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
  181|  2.27M|    SIGN(mp) = SIGN(from);
  ------------------
  |  |  332|  2.27M|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  2.27M|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  SIGN(mp) = SIGN(from);
  ------------------
  |  |  332|  2.27M|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  2.27M|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
  182|       |
  183|  2.27M|    return MP_OKAY;
  ------------------
  |  |   39|  2.27M|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  184|       |
  185|  2.27M|} /* end mp_init_copy() */
mp_copy:
  201|   215k|{
  202|   215k|    ARGCHK(from != NULL && to != NULL, MP_BADARG);
  ------------------
  |  |  355|   215k|#define ARGCHK(X, Y) assert(X)
  ------------------
  203|       |
  204|   215k|    if (from == to)
  ------------------
  |  Branch (204:9): [True: 3.26k, False: 212k]
  ------------------
  205|  3.26k|        return MP_OKAY;
  ------------------
  |  |   39|  3.26k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  206|       |
  207|   212k|    { /* copy */
  208|   212k|        mp_digit *tmp;
  209|       |
  210|       |        /*
  211|       |          If the allocated buffer in 'to' already has enough space to hold
  212|       |          all the used digits of 'from', we'll re-use it to avoid hitting
  213|       |          the memory allocater more than necessary; otherwise, we'd have
  214|       |          to grow anyway, so we just allocate a hunk and make the copy as
  215|       |          usual
  216|       |         */
  217|   212k|        if (ALLOC(to) >= USED(from)) {
  ------------------
  |  |  334|   212k|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|   212k|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
                      if (ALLOC(to) >= USED(from)) {
  ------------------
  |  |  333|   212k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   212k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  |  Branch (217:13): [True: 212k, False: 0]
  ------------------
  218|   212k|            s_mp_setz(DIGITS(to) + USED(from), ALLOC(to) - USED(from));
  ------------------
  |  |  335|   212k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|   212k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
                          s_mp_setz(DIGITS(to) + USED(from), ALLOC(to) - USED(from));
  ------------------
  |  |  333|   212k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   212k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                          s_mp_setz(DIGITS(to) + USED(from), ALLOC(to) - USED(from));
  ------------------
  |  |  334|   212k|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|   212k|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
                          s_mp_setz(DIGITS(to) + USED(from), ALLOC(to) - USED(from));
  ------------------
  |  |  333|   212k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   212k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  219|   212k|            s_mp_copy(DIGITS(from), DIGITS(to), USED(from));
  ------------------
  |  |  335|   212k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|   212k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
                          s_mp_copy(DIGITS(from), DIGITS(to), USED(from));
  ------------------
  |  |  335|   212k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|   212k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
                          s_mp_copy(DIGITS(from), DIGITS(to), USED(from));
  ------------------
  |  |  333|   212k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   212k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  220|       |
  221|   212k|        } else {
  222|      0|            if ((tmp = s_mp_alloc(ALLOC(from), sizeof(mp_digit))) == NULL)
  ------------------
  |  |  334|      0|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|      0|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
  |  Branch (222:17): [True: 0, False: 0]
  ------------------
  223|      0|                return MP_MEM;
  ------------------
  |  |   42|      0|#define MP_MEM -2    /* out of memory         */
  ------------------
  224|       |
  225|      0|            s_mp_copy(DIGITS(from), tmp, USED(from));
  ------------------
  |  |  335|      0|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|      0|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
                          s_mp_copy(DIGITS(from), tmp, USED(from));
  ------------------
  |  |  333|      0|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|      0|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  226|       |
  227|      0|            if (DIGITS(to) != NULL) {
  ------------------
  |  |  335|      0|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|      0|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
  |  Branch (227:17): [True: 0, False: 0]
  ------------------
  228|      0|                s_mp_setz(DIGITS(to), ALLOC(to));
  ------------------
  |  |  335|      0|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|      0|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
                              s_mp_setz(DIGITS(to), ALLOC(to));
  ------------------
  |  |  334|      0|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|      0|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
  229|      0|                s_mp_free(DIGITS(to));
  ------------------
  |  |  335|      0|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|      0|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
  230|      0|            }
  231|       |
  232|      0|            DIGITS(to) = tmp;
  ------------------
  |  |  335|      0|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|      0|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
  233|      0|            ALLOC(to) = ALLOC(from);
  ------------------
  |  |  334|      0|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|      0|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
                          ALLOC(to) = ALLOC(from);
  ------------------
  |  |  334|      0|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|      0|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
  234|      0|        }
  235|       |
  236|       |        /* Copy the precision and sign from the original */
  237|   212k|        USED(to) = USED(from);
  ------------------
  |  |  333|   212k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   212k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                      USED(to) = USED(from);
  ------------------
  |  |  333|   212k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   212k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  238|   212k|        SIGN(to) = SIGN(from);
  ------------------
  |  |  332|   212k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|   212k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                      SIGN(to) = SIGN(from);
  ------------------
  |  |  332|   212k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|   212k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
  239|   212k|    } /* end copy */
  240|       |
  241|   212k|    return MP_OKAY;
  ------------------
  |  |   39|   212k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  242|       |
  243|   212k|} /* end mp_copy() */
mp_exch:
  259|  3.43k|{
  260|  3.43k|#if MP_ARGCHK == 2
  261|  3.43k|    assert(mp1 != NULL && mp2 != NULL);
  262|       |#else
  263|       |    if (mp1 == NULL || mp2 == NULL)
  264|       |        return;
  265|       |#endif
  266|       |
  267|  3.43k|    s_mp_exch(mp1, mp2);
  268|       |
  269|  3.43k|} /* end mp_exch() */
mp_clear:
  285|  3.47M|{
  286|  3.47M|    if (mp == NULL)
  ------------------
  |  Branch (286:9): [True: 0, False: 3.47M]
  ------------------
  287|      0|        return;
  288|       |
  289|  3.47M|    if (DIGITS(mp) != NULL) {
  ------------------
  |  |  335|  3.47M|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|  3.47M|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
  |  Branch (289:9): [True: 2.81M, False: 665k]
  ------------------
  290|  2.81M|        s_mp_setz(DIGITS(mp), ALLOC(mp));
  ------------------
  |  |  335|  2.81M|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|  2.81M|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
                      s_mp_setz(DIGITS(mp), ALLOC(mp));
  ------------------
  |  |  334|  2.81M|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|  2.81M|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
  291|  2.81M|        s_mp_free(DIGITS(mp));
  ------------------
  |  |  335|  2.81M|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|  2.81M|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
  292|  2.81M|        DIGITS(mp) = NULL;
  ------------------
  |  |  335|  2.81M|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|  2.81M|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
  293|  2.81M|    }
  294|       |
  295|  3.47M|    USED(mp) = 0;
  ------------------
  |  |  333|  3.47M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  3.47M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  296|  3.47M|    ALLOC(mp) = 0;
  ------------------
  |  |  334|  3.47M|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|  3.47M|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
  297|       |
  298|  3.47M|} /* end mp_clear() */
mp_zero:
  312|   113k|{
  313|   113k|    if (mp == NULL)
  ------------------
  |  Branch (313:9): [True: 0, False: 113k]
  ------------------
  314|      0|        return;
  315|       |
  316|   113k|    s_mp_setz(DIGITS(mp), ALLOC(mp));
  ------------------
  |  |  335|   113k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|   113k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
                  s_mp_setz(DIGITS(mp), ALLOC(mp));
  ------------------
  |  |  334|   113k|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|   113k|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
  317|   113k|    USED(mp) = 1;
  ------------------
  |  |  333|   113k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   113k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  318|   113k|    SIGN(mp) = ZPOS;
  ------------------
  |  |  332|   113k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|   113k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  SIGN(mp) = ZPOS;
  ------------------
  |  |  326|   113k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|   113k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
  319|       |
  320|   113k|} /* end mp_zero() */
mp_set:
  328|  43.8k|{
  329|  43.8k|    if (mp == NULL)
  ------------------
  |  Branch (329:9): [True: 0, False: 43.8k]
  ------------------
  330|      0|        return;
  331|       |
  332|  43.8k|    mp_zero(mp);
  333|  43.8k|    DIGIT(mp, 0) = d;
  ------------------
  |  |  336|  43.8k|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  43.8k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
  334|       |
  335|  43.8k|} /* end mp_set() */
mp_add:
  741|  2.64M|{
  742|  2.64M|    mp_err res;
  743|       |
  744|  2.64M|    ARGCHK(a != NULL && b != NULL && c != NULL, MP_BADARG);
  ------------------
  |  |  355|  2.64M|#define ARGCHK(X, Y) assert(X)
  ------------------
  745|       |
  746|  2.64M|    if (SIGN(a) == SIGN(b)) { /* same sign:  add values, keep sign */
  ------------------
  |  |  332|  2.64M|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  2.64M|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  if (SIGN(a) == SIGN(b)) { /* same sign:  add values, keep sign */
  ------------------
  |  |  332|  2.64M|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  2.64M|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
  |  Branch (746:9): [True: 1.84M, False: 805k]
  ------------------
  747|  1.84M|        MP_CHECKOK(s_mp_add_3arg(a, b, c));
  ------------------
  |  |  319|  1.84M|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.84M|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.84M]
  |  |  ------------------
  |  |  320|  1.84M|    goto CLEANUP
  ------------------
  748|  1.84M|    } else if (s_mp_cmp(a, b) >= 0) { /* different sign: |a| >= |b|   */
  ------------------
  |  Branch (748:16): [True: 280k, False: 524k]
  ------------------
  749|   280k|        MP_CHECKOK(s_mp_sub_3arg(a, b, c));
  ------------------
  |  |  319|   280k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   280k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 280k]
  |  |  ------------------
  |  |  320|   280k|    goto CLEANUP
  ------------------
  750|   524k|    } else { /* different sign: |a|  < |b|   */
  751|   524k|        MP_CHECKOK(s_mp_sub_3arg(b, a, c));
  ------------------
  |  |  319|   524k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   524k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 524k]
  |  |  ------------------
  |  |  320|   524k|    goto CLEANUP
  ------------------
  752|   524k|    }
  753|       |
  754|  2.64M|    if (s_mp_cmp_d(c, 0) == MP_EQ)
  ------------------
  |  |   50|  2.64M|#define MP_EQ 0
  ------------------
  |  Branch (754:9): [True: 2.33k, False: 2.64M]
  ------------------
  755|  2.33k|        SIGN(c) = ZPOS;
  ------------------
  |  |  332|  2.33k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  2.33k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                      SIGN(c) = ZPOS;
  ------------------
  |  |  326|  2.33k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|  2.33k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
  756|       |
  757|  2.64M|CLEANUP:
  758|  2.64M|    return res;
  759|       |
  760|  2.64M|} /* end mp_add() */
mp_sub:
  774|   676k|{
  775|   676k|    mp_err res;
  776|   676k|    int magDiff;
  777|       |
  778|   676k|    ARGCHK(a != NULL && b != NULL && c != NULL, MP_BADARG);
  ------------------
  |  |  355|   676k|#define ARGCHK(X, Y) assert(X)
  ------------------
  779|       |
  780|   676k|    if (a == b) {
  ------------------
  |  Branch (780:9): [True: 0, False: 676k]
  ------------------
  781|      0|        mp_zero(c);
  782|      0|        return MP_OKAY;
  ------------------
  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  783|      0|    }
  784|       |
  785|   676k|    if (MP_SIGN(a) != MP_SIGN(b)) {
  ------------------
  |  |  149|   676k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
                  if (MP_SIGN(a) != MP_SIGN(b)) {
  ------------------
  |  |  149|   676k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
  |  Branch (785:9): [True: 0, False: 676k]
  ------------------
  786|      0|        MP_CHECKOK(s_mp_add_3arg(a, b, c));
  ------------------
  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  320|      0|    goto CLEANUP
  ------------------
  787|   676k|    } else if (!(magDiff = s_mp_cmp(a, b))) {
  ------------------
  |  Branch (787:16): [True: 50.0k, False: 626k]
  ------------------
  788|  50.0k|        mp_zero(c);
  789|  50.0k|        res = MP_OKAY;
  ------------------
  |  |   39|  50.0k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  790|   626k|    } else if (magDiff > 0) {
  ------------------
  |  Branch (790:16): [True: 584k, False: 41.9k]
  ------------------
  791|   584k|        MP_CHECKOK(s_mp_sub_3arg(a, b, c));
  ------------------
  |  |  319|   584k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   584k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 584k]
  |  |  ------------------
  |  |  320|   584k|    goto CLEANUP
  ------------------
  792|   584k|    } else {
  793|  41.9k|        MP_CHECKOK(s_mp_sub_3arg(b, a, c));
  ------------------
  |  |  319|  41.9k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  41.9k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 41.9k]
  |  |  ------------------
  |  |  320|  41.9k|    goto CLEANUP
  ------------------
  794|  41.9k|        MP_SIGN(c) = !MP_SIGN(a);
  ------------------
  |  |  149|  41.9k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
                      MP_SIGN(c) = !MP_SIGN(a);
  ------------------
  |  |  149|  41.9k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
  795|  41.9k|    }
  796|       |
  797|   676k|    if (s_mp_cmp_d(c, 0) == MP_EQ)
  ------------------
  |  |   50|   676k|#define MP_EQ 0
  ------------------
  |  Branch (797:9): [True: 50.0k, False: 626k]
  ------------------
  798|  50.0k|        MP_SIGN(c) = MP_ZPOS;
  ------------------
  |  |  149|  50.0k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
                      MP_SIGN(c) = MP_ZPOS;
  ------------------
  |  |   37|  50.0k|#define MP_ZPOS 0
  ------------------
  799|       |
  800|   676k|CLEANUP:
  801|   676k|    return res;
  802|       |
  803|   676k|} /* end mp_sub() */
s_mp_mulg:
  819|  1.58M|{
  820|  1.58M|    mp_digit *pb;
  821|  1.58M|    mp_int tmp;
  822|  1.58M|    mp_err res;
  823|  1.58M|    mp_size ib;
  824|  1.58M|    mp_size useda, usedb;
  825|       |
  826|  1.58M|    ARGCHK(a != NULL && b != NULL && c != NULL, MP_BADARG);
  ------------------
  |  |  355|  1.58M|#define ARGCHK(X, Y) assert(X)
  ------------------
  827|       |
  828|  1.58M|    if (a == c) {
  ------------------
  |  Branch (828:9): [True: 1.57M, False: 10.9k]
  ------------------
  829|  1.57M|        if ((res = mp_init_copy(&tmp, a)) != MP_OKAY)
  ------------------
  |  |   39|  1.57M|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (829:13): [True: 0, False: 1.57M]
  ------------------
  830|      0|            return res;
  831|  1.57M|        if (a == b)
  ------------------
  |  Branch (831:13): [True: 0, False: 1.57M]
  ------------------
  832|      0|            b = &tmp;
  833|  1.57M|        a = &tmp;
  834|  1.57M|    } else if (b == c) {
  ------------------
  |  Branch (834:16): [True: 0, False: 10.9k]
  ------------------
  835|      0|        if ((res = mp_init_copy(&tmp, b)) != MP_OKAY)
  ------------------
  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (835:13): [True: 0, False: 0]
  ------------------
  836|      0|            return res;
  837|      0|        b = &tmp;
  838|  10.9k|    } else {
  839|  10.9k|        MP_DIGITS(&tmp) = 0;
  ------------------
  |  |  152|  10.9k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  840|  10.9k|    }
  841|       |
  842|  1.58M|    if (MP_USED(a) < MP_USED(b)) {
  ------------------
  |  |  150|  1.58M|#define MP_USED(MP) ((MP)->used)
  ------------------
                  if (MP_USED(a) < MP_USED(b)) {
  ------------------
  |  |  150|  1.58M|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (842:9): [True: 150k, False: 1.43M]
  ------------------
  843|   150k|        const mp_int *xch = b; /* switch a and b, to do fewer outer loops */
  844|   150k|        b = a;
  845|   150k|        a = xch;
  846|   150k|    }
  847|       |
  848|  1.58M|    MP_USED(c) = 1;
  ------------------
  |  |  150|  1.58M|#define MP_USED(MP) ((MP)->used)
  ------------------
  849|  1.58M|    MP_DIGIT(c, 0) = 0;
  ------------------
  |  |  153|  1.58M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
  850|  1.58M|    if ((res = s_mp_pad(c, USED(a) + USED(b))) != MP_OKAY)
  ------------------
  |  |  333|  1.58M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  1.58M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                  if ((res = s_mp_pad(c, USED(a) + USED(b))) != MP_OKAY)
  ------------------
  |  |  333|  1.58M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  1.58M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                  if ((res = s_mp_pad(c, USED(a) + USED(b))) != MP_OKAY)
  ------------------
  |  |   39|  1.58M|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (850:9): [True: 0, False: 1.58M]
  ------------------
  851|      0|        goto CLEANUP;
  852|       |
  853|  1.58M|#ifdef NSS_USE_COMBA
  854|       |    /* comba isn't constant time because it clamps! If we cared
  855|       |     * (we needed a constant time version of multiply that was 'faster'
  856|       |     * we could easily pass constantTime down to the comba code and
  857|       |     * get it to skip the clamp... but here are assembler versions
  858|       |     * which add comba to platforms that can't compile the normal
  859|       |     * comba's imbedded assembler which would also need to change, so
  860|       |     * for now we just skip comba when we are running constant time. */
  861|  1.58M|    if (!constantTime && (MP_USED(a) == MP_USED(b)) && IS_POWER_OF_2(MP_USED(b))) {
  ------------------
  |  |  150|  1.58M|#define MP_USED(MP) ((MP)->used)
  ------------------
                  if (!constantTime && (MP_USED(a) == MP_USED(b)) && IS_POWER_OF_2(MP_USED(b))) {
  ------------------
  |  |  150|  1.58M|#define MP_USED(MP) ((MP)->used)
  ------------------
                  if (!constantTime && (MP_USED(a) == MP_USED(b)) && IS_POWER_OF_2(MP_USED(b))) {
  ------------------
  |  |  153|  1.42M|#define IS_POWER_OF_2(a) ((a) && !((a) & ((a)-1)))
  |  |  ------------------
  |  |  |  Branch (153:27): [True: 1.42M, False: 0]
  |  |  |  Branch (153:34): [True: 825k, False: 602k]
  |  |  ------------------
  ------------------
  |  Branch (861:9): [True: 1.58M, False: 0]
  |  Branch (861:26): [True: 1.42M, False: 153k]
  ------------------
  862|   825k|        if (MP_USED(a) == 4) {
  ------------------
  |  |  150|   825k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (862:13): [True: 3.34k, False: 822k]
  ------------------
  863|  3.34k|            s_mp_mul_comba_4(a, b, c);
  864|  3.34k|            goto CLEANUP;
  865|  3.34k|        }
  866|   822k|        if (MP_USED(a) == 8) {
  ------------------
  |  |  150|   822k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (866:13): [True: 78, False: 822k]
  ------------------
  867|     78|            s_mp_mul_comba_8(a, b, c);
  868|     78|            goto CLEANUP;
  869|     78|        }
  870|   822k|        if (MP_USED(a) == 16) {
  ------------------
  |  |  150|   822k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (870:13): [True: 43.0k, False: 779k]
  ------------------
  871|  43.0k|            s_mp_mul_comba_16(a, b, c);
  872|  43.0k|            goto CLEANUP;
  873|  43.0k|        }
  874|   779k|        if (MP_USED(a) == 32) {
  ------------------
  |  |  150|   779k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (874:13): [True: 758k, False: 20.7k]
  ------------------
  875|   758k|            s_mp_mul_comba_32(a, b, c);
  876|   758k|            goto CLEANUP;
  877|   758k|        }
  878|   779k|    }
  879|   776k|#endif
  880|       |
  881|   776k|    pb = MP_DIGITS(b);
  ------------------
  |  |  152|   776k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  882|   776k|    s_mpv_mul_d(MP_DIGITS(a), MP_USED(a), *pb++, MP_DIGITS(c));
  ------------------
  |  |  181|   776k|    ((mp_digit *)c)[a_len] = s_mpv_mul_set_vec64(c, a, a_len, b)
  ------------------
  883|       |
  884|       |    /* Outer loop:  Digits of b */
  885|   776k|    useda = MP_USED(a);
  ------------------
  |  |  150|   776k|#define MP_USED(MP) ((MP)->used)
  ------------------
  886|   776k|    usedb = MP_USED(b);
  ------------------
  |  |  150|   776k|#define MP_USED(MP) ((MP)->used)
  ------------------
  887|  20.0M|    for (ib = 1; ib < usedb; ib++) {
  ------------------
  |  Branch (887:18): [True: 19.3M, False: 776k]
  ------------------
  888|  19.3M|        mp_digit b_i = *pb++;
  889|       |
  890|       |        /* Inner product:  Digits of a */
  891|  19.3M|        if (constantTime || b_i)
  ------------------
  |  Branch (891:13): [True: 0, False: 19.3M]
  |  Branch (891:29): [True: 17.3M, False: 1.92M]
  ------------------
  892|  17.3M|            s_mpv_mul_d_add(MP_DIGITS(a), useda, b_i, MP_DIGITS(c) + ib);
  ------------------
  |  |  185|  17.3M|    ((mp_digit *)c)[a_len] = s_mpv_mul_add_vec64(c, a, a_len, b)
  ------------------
  893|  1.92M|        else
  894|  1.92M|            MP_DIGIT(c, ib + useda) = b_i;
  ------------------
  |  |  153|  1.92M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
  895|  19.3M|    }
  896|       |
  897|   776k|    if (!constantTime) {
  ------------------
  |  Branch (897:9): [True: 776k, False: 0]
  ------------------
  898|   776k|        s_mp_clamp(c);
  899|   776k|    }
  900|       |
  901|   776k|    if (SIGN(a) == SIGN(b) || s_mp_cmp_d(c, 0) == MP_EQ)
  ------------------
  |  |  332|   776k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|   776k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  if (SIGN(a) == SIGN(b) || s_mp_cmp_d(c, 0) == MP_EQ)
  ------------------
  |  |  332|   776k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  1.55M|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  if (SIGN(a) == SIGN(b) || s_mp_cmp_d(c, 0) == MP_EQ)
  ------------------
  |  |   50|  6.53k|#define MP_EQ 0
  ------------------
  |  Branch (901:9): [True: 770k, False: 6.53k]
  |  Branch (901:31): [True: 0, False: 6.53k]
  ------------------
  902|   770k|        SIGN(c) = ZPOS;
  ------------------
  |  |  332|   770k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|   770k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                      SIGN(c) = ZPOS;
  ------------------
  |  |  326|   770k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|   770k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
  903|  6.53k|    else
  904|  6.53k|        SIGN(c) = NEG;
  ------------------
  |  |  332|  6.53k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  6.53k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                      SIGN(c) = NEG;
  ------------------
  |  |  325|  6.53k|#define NEG MP_NEG
  |  |  ------------------
  |  |  |  |   36|  6.53k|#define MP_NEG 1
  |  |  ------------------
  ------------------
  905|       |
  906|  1.58M|CLEANUP:
  907|  1.58M|    mp_clear(&tmp);
  908|  1.58M|    return res;
  909|   776k|} /* end smp_mulg() */
mp_mul:
  923|  1.58M|{
  924|  1.58M|    return s_mp_mulg(a, b, c, 0);
  925|  1.58M|} /* end mp_mul() */
mp_sqr:
  971|   650k|{
  972|   650k|    mp_digit *pa;
  973|   650k|    mp_digit d;
  974|   650k|    mp_err res;
  975|   650k|    mp_size ix;
  976|   650k|    mp_int tmp;
  977|   650k|    int count;
  978|       |
  979|   650k|    ARGCHK(a != NULL && sqr != NULL, MP_BADARG);
  ------------------
  |  |  355|   650k|#define ARGCHK(X, Y) assert(X)
  ------------------
  980|       |
  981|   650k|    if (a == sqr) {
  ------------------
  |  Branch (981:9): [True: 0, False: 650k]
  ------------------
  982|      0|        if ((res = mp_init_copy(&tmp, a)) != MP_OKAY)
  ------------------
  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (982:13): [True: 0, False: 0]
  ------------------
  983|      0|            return res;
  984|      0|        a = &tmp;
  985|   650k|    } else {
  986|   650k|        DIGITS(&tmp) = 0;
  ------------------
  |  |  335|   650k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|   650k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
  987|   650k|        res = MP_OKAY;
  ------------------
  |  |   39|   650k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  988|   650k|    }
  989|       |
  990|   650k|    ix = 2 * MP_USED(a);
  ------------------
  |  |  150|   650k|#define MP_USED(MP) ((MP)->used)
  ------------------
  991|   650k|    if (ix > MP_ALLOC(sqr)) {
  ------------------
  |  |  151|   650k|#define MP_ALLOC(MP) ((MP)->alloc)
  ------------------
  |  Branch (991:9): [True: 0, False: 650k]
  ------------------
  992|      0|        MP_USED(sqr) = 1;
  ------------------
  |  |  150|      0|#define MP_USED(MP) ((MP)->used)
  ------------------
  993|      0|        MP_CHECKOK(s_mp_grow(sqr, ix));
  ------------------
  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  320|      0|    goto CLEANUP
  ------------------
  994|      0|    }
  995|   650k|    MP_USED(sqr) = ix;
  ------------------
  |  |  150|   650k|#define MP_USED(MP) ((MP)->used)
  ------------------
  996|   650k|    MP_DIGIT(sqr, 0) = 0;
  ------------------
  |  |  153|   650k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
  997|       |
  998|   650k|#ifdef NSS_USE_COMBA
  999|   650k|    if (IS_POWER_OF_2(MP_USED(a))) {
  ------------------
  |  |  153|   650k|#define IS_POWER_OF_2(a) ((a) && !((a) & ((a)-1)))
  |  |  ------------------
  |  |  |  Branch (153:27): [True: 650k, False: 0]
  |  |  |  Branch (153:34): [True: 642k, False: 7.57k]
  |  |  ------------------
  ------------------
 1000|   642k|        if (MP_USED(a) == 4) {
  ------------------
  |  |  150|   642k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (1000:13): [True: 567, False: 642k]
  ------------------
 1001|    567|            s_mp_sqr_comba_4(a, sqr);
 1002|    567|            goto CLEANUP;
 1003|    567|        }
 1004|   642k|        if (MP_USED(a) == 8) {
  ------------------
  |  |  150|   642k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (1004:13): [True: 615, False: 641k]
  ------------------
 1005|    615|            s_mp_sqr_comba_8(a, sqr);
 1006|    615|            goto CLEANUP;
 1007|    615|        }
 1008|   641k|        if (MP_USED(a) == 16) {
  ------------------
  |  |  150|   641k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (1008:13): [True: 50.8k, False: 590k]
  ------------------
 1009|  50.8k|            s_mp_sqr_comba_16(a, sqr);
 1010|  50.8k|            goto CLEANUP;
 1011|  50.8k|        }
 1012|   590k|        if (MP_USED(a) == 32) {
  ------------------
  |  |  150|   590k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (1012:13): [True: 553k, False: 36.9k]
  ------------------
 1013|   553k|            s_mp_sqr_comba_32(a, sqr);
 1014|   553k|            goto CLEANUP;
 1015|   553k|        }
 1016|   590k|    }
 1017|  44.5k|#endif
 1018|       |
 1019|  44.5k|    pa = MP_DIGITS(a);
  ------------------
  |  |  152|  44.5k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 1020|  44.5k|    count = MP_USED(a) - 1;
  ------------------
  |  |  150|  44.5k|#define MP_USED(MP) ((MP)->used)
  ------------------
 1021|  44.5k|    if (count > 0) {
  ------------------
  |  Branch (1021:9): [True: 9.10k, False: 35.4k]
  ------------------
 1022|  9.10k|        d = *pa++;
 1023|  9.10k|        s_mpv_mul_d(pa, count, d, MP_DIGITS(sqr) + 1);
  ------------------
  |  |  181|  9.10k|    ((mp_digit *)c)[a_len] = s_mpv_mul_set_vec64(c, a, a_len, b)
  ------------------
 1024|   277k|        for (ix = 3; --count > 0; ix += 2) {
  ------------------
  |  Branch (1024:22): [True: 268k, False: 9.10k]
  ------------------
 1025|   268k|            d = *pa++;
 1026|   268k|            s_mpv_mul_d_add(pa, count, d, MP_DIGITS(sqr) + ix);
  ------------------
  |  |  185|   268k|    ((mp_digit *)c)[a_len] = s_mpv_mul_add_vec64(c, a, a_len, b)
  ------------------
 1027|   268k|        }                                    /* for(ix ...) */
 1028|  9.10k|        MP_DIGIT(sqr, MP_USED(sqr) - 1) = 0; /* above loop stopped short of this. */
  ------------------
  |  |  153|  9.10k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
 1029|       |
 1030|       |        /* now sqr *= 2 */
 1031|  9.10k|        s_mp_mul_2(sqr);
 1032|  35.4k|    } else {
 1033|  35.4k|        MP_DIGIT(sqr, 1) = 0;
  ------------------
  |  |  153|  35.4k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
 1034|  35.4k|    }
 1035|       |
 1036|       |    /* now add the squares of the digits of a to sqr. */
 1037|  44.5k|    s_mpv_sqr_add_prop(MP_DIGITS(a), MP_USED(a), MP_DIGITS(sqr));
  ------------------
  |  |  152|  44.5k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
                  s_mpv_sqr_add_prop(MP_DIGITS(a), MP_USED(a), MP_DIGITS(sqr));
  ------------------
  |  |  150|  44.5k|#define MP_USED(MP) ((MP)->used)
  ------------------
                  s_mpv_sqr_add_prop(MP_DIGITS(a), MP_USED(a), MP_DIGITS(sqr));
  ------------------
  |  |  152|  44.5k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 1038|       |
 1039|  44.5k|    SIGN(sqr) = ZPOS;
  ------------------
  |  |  332|  44.5k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  44.5k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  SIGN(sqr) = ZPOS;
  ------------------
  |  |  326|  44.5k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|  44.5k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
 1040|  44.5k|    s_mp_clamp(sqr);
 1041|       |
 1042|   650k|CLEANUP:
 1043|   650k|    mp_clear(&tmp);
 1044|   650k|    return res;
 1045|       |
 1046|  44.5k|} /* end mp_sqr() */
mp_div:
 1062|  14.0k|{
 1063|  14.0k|    mp_err res;
 1064|  14.0k|    mp_int *pQ, *pR;
 1065|  14.0k|    mp_int qtmp, rtmp, btmp;
 1066|  14.0k|    int cmp;
 1067|  14.0k|    mp_sign signA;
 1068|  14.0k|    mp_sign signB;
 1069|       |
 1070|  14.0k|    ARGCHK(a != NULL && b != NULL, MP_BADARG);
  ------------------
  |  |  355|  14.0k|#define ARGCHK(X, Y) assert(X)
  ------------------
 1071|       |
 1072|  14.0k|    signA = MP_SIGN(a);
  ------------------
  |  |  149|  14.0k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
 1073|  14.0k|    signB = MP_SIGN(b);
  ------------------
  |  |  149|  14.0k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
 1074|       |
 1075|  14.0k|    if (mp_cmp_z(b) == MP_EQ)
  ------------------
  |  |   50|  14.0k|#define MP_EQ 0
  ------------------
  |  Branch (1075:9): [True: 0, False: 14.0k]
  ------------------
 1076|      0|        return MP_RANGE;
  ------------------
  |  |   43|      0|#define MP_RANGE -3  /* argument out of range */
  ------------------
 1077|       |
 1078|  14.0k|    DIGITS(&qtmp) = 0;
  ------------------
  |  |  335|  14.0k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|  14.0k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
 1079|  14.0k|    DIGITS(&rtmp) = 0;
  ------------------
  |  |  335|  14.0k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|  14.0k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
 1080|  14.0k|    DIGITS(&btmp) = 0;
  ------------------
  |  |  335|  14.0k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|  14.0k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
 1081|       |
 1082|       |    /* Set up some temporaries... */
 1083|  14.0k|    if (!r || r == a || r == b) {
  ------------------
  |  Branch (1083:9): [True: 3.11k, False: 10.9k]
  |  Branch (1083:15): [True: 10.2k, False: 731]
  |  Branch (1083:25): [True: 0, False: 731]
  ------------------
 1084|  13.3k|        MP_CHECKOK(mp_init_copy(&rtmp, a));
  ------------------
  |  |  319|  13.3k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  13.3k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 13.3k]
  |  |  ------------------
  |  |  320|  13.3k|    goto CLEANUP
  ------------------
 1085|  13.3k|        pR = &rtmp;
 1086|  13.3k|    } else {
 1087|    731|        MP_CHECKOK(mp_copy(a, r));
  ------------------
  |  |  319|    731|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|    731|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 731]
  |  |  ------------------
  |  |  320|    731|    goto CLEANUP
  ------------------
 1088|    731|        pR = r;
 1089|    731|    }
 1090|       |
 1091|  14.0k|    if (!q || q == a || q == b) {
  ------------------
  |  Branch (1091:9): [True: 10.9k, False: 3.11k]
  |  Branch (1091:15): [True: 3.11k, False: 0]
  |  Branch (1091:25): [True: 0, False: 0]
  ------------------
 1092|  14.0k|        MP_CHECKOK(mp_init_size(&qtmp, MP_USED(a)));
  ------------------
  |  |  319|  14.0k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  14.0k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 14.0k]
  |  |  ------------------
  |  |  320|  14.0k|    goto CLEANUP
  ------------------
 1093|  14.0k|        pQ = &qtmp;
 1094|  14.0k|    } else {
 1095|      0|        MP_CHECKOK(s_mp_pad(q, MP_USED(a)));
  ------------------
  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  320|      0|    goto CLEANUP
  ------------------
 1096|      0|        pQ = q;
 1097|      0|        mp_zero(pQ);
 1098|      0|    }
 1099|       |
 1100|       |    /*
 1101|       |      If |a| <= |b|, we can compute the solution without division;
 1102|       |      otherwise, we actually do the work required.
 1103|       |     */
 1104|  14.0k|    if ((cmp = s_mp_cmp(a, b)) <= 0) {
  ------------------
  |  Branch (1104:9): [True: 12, False: 14.0k]
  ------------------
 1105|     12|        if (cmp) {
  ------------------
  |  Branch (1105:13): [True: 12, False: 0]
  ------------------
 1106|       |            /* r was set to a above. */
 1107|     12|            mp_zero(pQ);
 1108|     12|        } else {
 1109|      0|            mp_set(pQ, 1);
 1110|      0|            mp_zero(pR);
 1111|      0|        }
 1112|  14.0k|    } else {
 1113|  14.0k|        MP_CHECKOK(mp_init_copy(&btmp, b));
  ------------------
  |  |  319|  14.0k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  14.0k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 14.0k]
  |  |  ------------------
  |  |  320|  14.0k|    goto CLEANUP
  ------------------
 1114|  14.0k|        MP_CHECKOK(s_mp_div(pR, &btmp, pQ));
  ------------------
  |  |  319|  14.0k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  14.0k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 14.0k]
  |  |  ------------------
  |  |  320|  14.0k|    goto CLEANUP
  ------------------
 1115|  14.0k|    }
 1116|       |
 1117|       |    /* Compute the signs for the output  */
 1118|  14.0k|    MP_SIGN(pR) = signA;        /* Sr = Sa              */
  ------------------
  |  |  149|  14.0k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
 1119|       |    /* Sq = ZPOS if Sa == Sb */ /* Sq = NEG if Sa != Sb */
 1120|  14.0k|    MP_SIGN(pQ) = (signA == signB) ? ZPOS : NEG;
  ------------------
  |  |  149|  14.0k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
                  MP_SIGN(pQ) = (signA == signB) ? ZPOS : NEG;
  ------------------
  |  |  326|  13.9k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|  13.9k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
                  MP_SIGN(pQ) = (signA == signB) ? ZPOS : NEG;
  ------------------
  |  |  325|    164|#define NEG MP_NEG
  |  |  ------------------
  |  |  |  |   36|  14.2k|#define MP_NEG 1
  |  |  ------------------
  ------------------
  |  Branch (1120:19): [True: 13.9k, False: 164]
  ------------------
 1121|       |
 1122|  14.0k|    if (s_mp_cmp_d(pQ, 0) == MP_EQ)
  ------------------
  |  |   50|  14.0k|#define MP_EQ 0
  ------------------
  |  Branch (1122:9): [True: 12, False: 14.0k]
  ------------------
 1123|     12|        SIGN(pQ) = ZPOS;
  ------------------
  |  |  332|     12|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|     12|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                      SIGN(pQ) = ZPOS;
  ------------------
  |  |  326|     12|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|     12|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
 1124|  14.0k|    if (s_mp_cmp_d(pR, 0) == MP_EQ)
  ------------------
  |  |   50|  14.0k|#define MP_EQ 0
  ------------------
  |  Branch (1124:9): [True: 385, False: 13.7k]
  ------------------
 1125|    385|        SIGN(pR) = ZPOS;
  ------------------
  |  |  332|    385|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|    385|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                      SIGN(pR) = ZPOS;
  ------------------
  |  |  326|    385|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|    385|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
 1126|       |
 1127|       |    /* Copy output, if it is needed      */
 1128|  14.0k|    if (q && q != pQ)
  ------------------
  |  Branch (1128:9): [True: 3.11k, False: 10.9k]
  |  Branch (1128:14): [True: 3.11k, False: 0]
  ------------------
 1129|  3.11k|        s_mp_exch(pQ, q);
 1130|       |
 1131|  14.0k|    if (r && r != pR)
  ------------------
  |  Branch (1131:9): [True: 10.9k, False: 3.11k]
  |  Branch (1131:14): [True: 10.2k, False: 731]
  ------------------
 1132|  10.2k|        s_mp_exch(pR, r);
 1133|       |
 1134|  14.0k|CLEANUP:
 1135|  14.0k|    mp_clear(&btmp);
 1136|  14.0k|    mp_clear(&rtmp);
 1137|  14.0k|    mp_clear(&qtmp);
 1138|       |
 1139|  14.0k|    return res;
 1140|       |
 1141|  14.0k|} /* end mp_div() */
mp_mod:
 1279|  11.0k|{
 1280|  11.0k|    mp_err res;
 1281|  11.0k|    int mag;
 1282|       |
 1283|  11.0k|    ARGCHK(a != NULL && m != NULL && c != NULL, MP_BADARG);
  ------------------
  |  |  355|  11.0k|#define ARGCHK(X, Y) assert(X)
  ------------------
 1284|       |
 1285|  11.0k|    if (SIGN(m) == NEG)
  ------------------
  |  |  332|  11.0k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  11.0k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  if (SIGN(m) == NEG)
  ------------------
  |  |  325|  11.0k|#define NEG MP_NEG
  |  |  ------------------
  |  |  |  |   36|  11.0k|#define MP_NEG 1
  |  |  ------------------
  ------------------
  |  Branch (1285:9): [True: 0, False: 11.0k]
  ------------------
 1286|      0|        return MP_RANGE;
  ------------------
  |  |   43|      0|#define MP_RANGE -3  /* argument out of range */
  ------------------
 1287|       |
 1288|       |    /*
 1289|       |     If |a| > m, we need to divide to get the remainder and take the
 1290|       |     absolute value.
 1291|       |
 1292|       |     If |a| < m, we don't need to do any division, just copy and adjust
 1293|       |     the sign (if a is negative).
 1294|       |
 1295|       |     If |a| == m, we can simply set the result to zero.
 1296|       |
 1297|       |     This order is intended to minimize the average path length of the
 1298|       |     comparison chain on common workloads -- the most frequent cases are
 1299|       |     that |a| != m, so we do those first.
 1300|       |     */
 1301|  11.0k|    if ((mag = s_mp_cmp(a, m)) > 0) {
  ------------------
  |  Branch (1301:9): [True: 6.86k, False: 4.17k]
  ------------------
 1302|  6.86k|        if ((res = mp_div(a, m, NULL, c)) != MP_OKAY)
  ------------------
  |  |   39|  6.86k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1302:13): [True: 0, False: 6.86k]
  ------------------
 1303|      0|            return res;
 1304|       |
 1305|  6.86k|        if (SIGN(c) == NEG) {
  ------------------
  |  |  332|  6.86k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  6.86k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                      if (SIGN(c) == NEG) {
  ------------------
  |  |  325|  6.86k|#define NEG MP_NEG
  |  |  ------------------
  |  |  |  |   36|  6.86k|#define MP_NEG 1
  |  |  ------------------
  ------------------
  |  Branch (1305:13): [True: 164, False: 6.70k]
  ------------------
 1306|    164|            if ((res = mp_add(c, m, c)) != MP_OKAY)
  ------------------
  |  |   39|    164|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1306:17): [True: 0, False: 164]
  ------------------
 1307|      0|                return res;
 1308|    164|        }
 1309|       |
 1310|  6.86k|    } else if (mag < 0) {
  ------------------
  |  Branch (1310:16): [True: 4.17k, False: 3]
  ------------------
 1311|  4.17k|        if ((res = mp_copy(a, c)) != MP_OKAY)
  ------------------
  |  |   39|  4.17k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1311:13): [True: 0, False: 4.17k]
  ------------------
 1312|      0|            return res;
 1313|       |
 1314|  4.17k|        if (mp_cmp_z(a) < 0) {
  ------------------
  |  Branch (1314:13): [True: 438, False: 3.73k]
  ------------------
 1315|    438|            if ((res = mp_add(c, m, c)) != MP_OKAY)
  ------------------
  |  |   39|    438|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1315:17): [True: 0, False: 438]
  ------------------
 1316|      0|                return res;
 1317|    438|        }
 1318|       |
 1319|  4.17k|    } else {
 1320|      3|        mp_zero(c);
 1321|      3|    }
 1322|       |
 1323|  11.0k|    return MP_OKAY;
  ------------------
  |  |   39|  11.0k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 1324|       |
 1325|  11.0k|} /* end mp_mod() */
mp_mulmod:
 1562|  3.84k|{
 1563|  3.84k|    mp_err res;
 1564|       |
 1565|  3.84k|    ARGCHK(a != NULL && b != NULL && m != NULL && c != NULL, MP_BADARG);
  ------------------
  |  |  355|  3.84k|#define ARGCHK(X, Y) assert(X)
  ------------------
 1566|       |
 1567|  3.84k|    if ((res = mp_mul(a, b, c)) != MP_OKAY)
  ------------------
  |  |   39|  3.84k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1567:9): [True: 0, False: 3.84k]
  ------------------
 1568|      0|        return res;
 1569|  3.84k|    if ((res = mp_mod(c, m, c)) != MP_OKAY)
  ------------------
  |  |   39|  3.84k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1569:9): [True: 0, False: 3.84k]
  ------------------
 1570|      0|        return res;
 1571|       |
 1572|  3.84k|    return MP_OKAY;
  ------------------
  |  |   39|  3.84k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 1573|  3.84k|}
s_mp_exptmod:
 1645|  3.11k|{
 1646|  3.11k|    mp_int s, x, mu;
 1647|  3.11k|    mp_err res;
 1648|  3.11k|    mp_digit d;
 1649|  3.11k|    unsigned int dig, bit;
 1650|       |
 1651|  3.11k|    ARGCHK(a != NULL && b != NULL && c != NULL && m != NULL, MP_BADARG);
  ------------------
  |  |  355|  3.11k|#define ARGCHK(X, Y) assert(X)
  ------------------
 1652|       |
 1653|  3.11k|    if (mp_cmp_z(b) < 0 || mp_cmp_z(m) <= 0)
  ------------------
  |  Branch (1653:9): [True: 0, False: 3.11k]
  |  Branch (1653:28): [True: 0, False: 3.11k]
  ------------------
 1654|      0|        return MP_RANGE;
  ------------------
  |  |   43|      0|#define MP_RANGE -3  /* argument out of range */
  ------------------
 1655|       |
 1656|  3.11k|    if ((res = mp_init(&s)) != MP_OKAY)
  ------------------
  |  |   39|  3.11k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1656:9): [True: 0, False: 3.11k]
  ------------------
 1657|      0|        return res;
 1658|  3.11k|    if ((res = mp_init_copy(&x, a)) != MP_OKAY ||
  ------------------
  |  |   39|  6.23k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1658:9): [True: 0, False: 3.11k]
  ------------------
 1659|  3.11k|        (res = mp_mod(&x, m, &x)) != MP_OKAY)
  ------------------
  |  |   39|  3.11k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1659:9): [True: 0, False: 3.11k]
  ------------------
 1660|      0|        goto X;
 1661|  3.11k|    if ((res = mp_init(&mu)) != MP_OKAY)
  ------------------
  |  |   39|  3.11k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1661:9): [True: 0, False: 3.11k]
  ------------------
 1662|      0|        goto MU;
 1663|       |
 1664|  3.11k|    mp_set(&s, 1);
 1665|       |
 1666|       |    /* mu = b^2k / m */
 1667|  3.11k|    if ((res = s_mp_add_d(&mu, 1)) != MP_OKAY)
  ------------------
  |  |   39|  3.11k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1667:9): [True: 0, False: 3.11k]
  ------------------
 1668|      0|        goto CLEANUP;
 1669|  3.11k|    if ((res = s_mp_lshd(&mu, 2 * USED(m))) != MP_OKAY)
  ------------------
  |  |  333|  3.11k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  3.11k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                  if ((res = s_mp_lshd(&mu, 2 * USED(m))) != MP_OKAY)
  ------------------
  |  |   39|  3.11k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1669:9): [True: 0, False: 3.11k]
  ------------------
 1670|      0|        goto CLEANUP;
 1671|  3.11k|    if ((res = mp_div(&mu, m, &mu, NULL)) != MP_OKAY)
  ------------------
  |  |   39|  3.11k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1671:9): [True: 0, False: 3.11k]
  ------------------
 1672|      0|        goto CLEANUP;
 1673|       |
 1674|       |    /* Loop over digits of b in ascending order, except highest order */
 1675|  8.54k|    for (dig = 0; dig < (USED(b) - 1); dig++) {
  ------------------
  |  |  333|  8.54k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  8.54k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  |  Branch (1675:19): [True: 5.42k, False: 3.11k]
  ------------------
 1676|  5.42k|        d = DIGIT(b, dig);
  ------------------
  |  |  336|  5.42k|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  5.42k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 1677|       |
 1678|       |        /* Loop over the bits of the lower-order digits */
 1679|   352k|        for (bit = 0; bit < DIGIT_BIT; bit++) {
  ------------------
  |  |  328|   352k|#define DIGIT_BIT MP_DIGIT_BIT
  |  |  ------------------
  |  |  |  |  137|   352k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|   352k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1679:23): [True: 347k, False: 5.42k]
  ------------------
 1680|   347k|            if (d & 1) {
  ------------------
  |  Branch (1680:17): [True: 174k, False: 173k]
  ------------------
 1681|   174k|                if ((res = s_mp_mul(&s, &x)) != MP_OKAY)
  ------------------
  |  |   39|   174k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1681:21): [True: 0, False: 174k]
  ------------------
 1682|      0|                    goto CLEANUP;
 1683|   174k|                if ((res = s_mp_reduce(&s, m, &mu)) != MP_OKAY)
  ------------------
  |  |   39|   174k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1683:21): [True: 0, False: 174k]
  ------------------
 1684|      0|                    goto CLEANUP;
 1685|   174k|            }
 1686|       |
 1687|   347k|            d >>= 1;
 1688|       |
 1689|   347k|            if ((res = s_mp_sqr(&x)) != MP_OKAY)
  ------------------
  |  |   39|   347k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1689:17): [True: 0, False: 347k]
  ------------------
 1690|      0|                goto CLEANUP;
 1691|   347k|            if ((res = s_mp_reduce(&x, m, &mu)) != MP_OKAY)
  ------------------
  |  |   39|   347k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1691:17): [True: 0, False: 347k]
  ------------------
 1692|      0|                goto CLEANUP;
 1693|   347k|        }
 1694|  5.42k|    }
 1695|       |
 1696|       |    /* Now do the last digit... */
 1697|  3.11k|    d = DIGIT(b, dig);
  ------------------
  |  |  336|  3.11k|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  3.11k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 1698|       |
 1699|  99.9k|    while (d) {
  ------------------
  |  Branch (1699:12): [True: 96.8k, False: 3.11k]
  ------------------
 1700|  96.8k|        if (d & 1) {
  ------------------
  |  Branch (1700:13): [True: 50.8k, False: 45.9k]
  ------------------
 1701|  50.8k|            if ((res = s_mp_mul(&s, &x)) != MP_OKAY)
  ------------------
  |  |   39|  50.8k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1701:17): [True: 0, False: 50.8k]
  ------------------
 1702|      0|                goto CLEANUP;
 1703|  50.8k|            if ((res = s_mp_reduce(&s, m, &mu)) != MP_OKAY)
  ------------------
  |  |   39|  50.8k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1703:17): [True: 0, False: 50.8k]
  ------------------
 1704|      0|                goto CLEANUP;
 1705|  50.8k|        }
 1706|       |
 1707|  96.8k|        d >>= 1;
 1708|       |
 1709|  96.8k|        if ((res = s_mp_sqr(&x)) != MP_OKAY)
  ------------------
  |  |   39|  96.8k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1709:13): [True: 0, False: 96.8k]
  ------------------
 1710|      0|            goto CLEANUP;
 1711|  96.8k|        if ((res = s_mp_reduce(&x, m, &mu)) != MP_OKAY)
  ------------------
  |  |   39|  96.8k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (1711:13): [True: 0, False: 96.8k]
  ------------------
 1712|      0|            goto CLEANUP;
 1713|  96.8k|    }
 1714|       |
 1715|  3.11k|    s_mp_exch(&s, c);
 1716|       |
 1717|  3.11k|CLEANUP:
 1718|  3.11k|    mp_clear(&mu);
 1719|  3.11k|MU:
 1720|  3.11k|    mp_clear(&x);
 1721|  3.11k|X:
 1722|  3.11k|    mp_clear(&s);
 1723|       |
 1724|  3.11k|    return res;
 1725|       |
 1726|  3.11k|} /* end s_mp_exptmod() */
mp_cmp_z:
 1790|   971k|{
 1791|   971k|    ARGMPCHK(a != NULL);
  ------------------
  |  |  354|   971k|#define ARGMPCHK(X) assert(X)
  ------------------
 1792|       |
 1793|   971k|    if (SIGN(a) == NEG)
  ------------------
  |  |  332|   971k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|   971k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  if (SIGN(a) == NEG)
  ------------------
  |  |  325|   971k|#define NEG MP_NEG
  |  |  ------------------
  |  |  |  |   36|   971k|#define MP_NEG 1
  |  |  ------------------
  ------------------
  |  Branch (1793:9): [True: 35.5k, False: 935k]
  ------------------
 1794|  35.5k|        return MP_LT;
  ------------------
  |  |   49|  35.5k|#define MP_LT -1
  ------------------
 1795|   935k|    else if (USED(a) == 1 && DIGIT(a, 0) == 0)
  ------------------
  |  |  333|   935k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   935k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                  else if (USED(a) == 1 && DIGIT(a, 0) == 0)
  ------------------
  |  |  336|  91.6k|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  91.6k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
  |  Branch (1795:14): [True: 91.6k, False: 844k]
  |  Branch (1795:30): [True: 73.3k, False: 18.3k]
  ------------------
 1796|  73.3k|        return MP_EQ;
  ------------------
  |  |   50|  73.3k|#define MP_EQ 0
  ------------------
 1797|   862k|    else
 1798|   862k|        return MP_GT;
  ------------------
  |  |   51|   862k|#define MP_GT 1
  ------------------
 1799|       |
 1800|   971k|} /* end mp_cmp_z() */
mp_cmp_d:
 1814|  2.57k|{
 1815|  2.57k|    ARGCHK(a != NULL, MP_EQ);
  ------------------
  |  |  355|  2.57k|#define ARGCHK(X, Y) assert(X)
  ------------------
 1816|       |
 1817|  2.57k|    if (SIGN(a) == NEG)
  ------------------
  |  |  332|  2.57k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  2.57k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  if (SIGN(a) == NEG)
  ------------------
  |  |  325|  2.57k|#define NEG MP_NEG
  |  |  ------------------
  |  |  |  |   36|  2.57k|#define MP_NEG 1
  |  |  ------------------
  ------------------
  |  Branch (1817:9): [True: 0, False: 2.57k]
  ------------------
 1818|      0|        return MP_LT;
  ------------------
  |  |   49|      0|#define MP_LT -1
  ------------------
 1819|       |
 1820|  2.57k|    return s_mp_cmp_d(a, d);
 1821|       |
 1822|  2.57k|} /* end mp_cmp_d() */
mp_cmp:
 1830|   771k|{
 1831|   771k|    ARGCHK(a != NULL && b != NULL, MP_EQ);
  ------------------
  |  |  355|   771k|#define ARGCHK(X, Y) assert(X)
  ------------------
 1832|       |
 1833|   771k|    if (SIGN(a) == SIGN(b)) {
  ------------------
  |  |  332|   771k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|   771k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  if (SIGN(a) == SIGN(b)) {
  ------------------
  |  |  332|   771k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|   771k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
  |  Branch (1833:9): [True: 771k, False: 0]
  ------------------
 1834|   771k|        int mag;
 1835|       |
 1836|   771k|        if ((mag = s_mp_cmp(a, b)) == MP_EQ)
  ------------------
  |  |   50|   771k|#define MP_EQ 0
  ------------------
  |  Branch (1836:13): [True: 1.29k, False: 769k]
  ------------------
 1837|  1.29k|            return MP_EQ;
  ------------------
  |  |   50|  1.29k|#define MP_EQ 0
  ------------------
 1838|       |
 1839|   769k|        if (SIGN(a) == ZPOS)
  ------------------
  |  |  332|   769k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|   769k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                      if (SIGN(a) == ZPOS)
  ------------------
  |  |  326|   769k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|   769k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
  |  Branch (1839:13): [True: 769k, False: 0]
  ------------------
 1840|   769k|            return mag;
 1841|      0|        else
 1842|      0|            return -mag;
 1843|       |
 1844|   769k|    } else if (SIGN(a) == ZPOS) {
  ------------------
  |  |  332|      0|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|      0|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  } else if (SIGN(a) == ZPOS) {
  ------------------
  |  |  326|      0|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|      0|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
  |  Branch (1844:16): [True: 0, False: 0]
  ------------------
 1845|      0|        return MP_GT;
  ------------------
  |  |   51|      0|#define MP_GT 1
  ------------------
 1846|      0|    } else {
 1847|      0|        return MP_LT;
  ------------------
  |  |   49|      0|#define MP_LT -1
  ------------------
 1848|      0|    }
 1849|       |
 1850|   771k|} /* end mp_cmp() */
mp_isodd:
 1882|  11.5k|{
 1883|  11.5k|    ARGMPCHK(a != NULL);
  ------------------
  |  |  354|  11.5k|#define ARGMPCHK(X) assert(X)
  ------------------
 1884|       |
 1885|  11.5k|    return (int)(DIGIT(a, 0) & 1);
  ------------------
  |  |  336|  11.5k|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  11.5k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 1886|       |
 1887|  11.5k|} /* end mp_isodd() */
mp_iseven:
 1895|  4.88k|{
 1896|  4.88k|    return !mp_isodd(a);
 1897|       |
 1898|  4.88k|} /* end mp_iseven() */
mp_trailing_zeros:
 2185|  1.20k|{
 2186|  1.20k|    mp_digit d;
 2187|  1.20k|    mp_size n = 0;
 2188|  1.20k|    unsigned int ix;
 2189|       |
 2190|  1.20k|    if (!mp || !MP_DIGITS(mp) || !mp_cmp_z(mp))
  ------------------
  |  |  152|  2.40k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  |  Branch (2190:9): [True: 0, False: 1.20k]
  |  Branch (2190:16): [True: 0, False: 1.20k]
  |  Branch (2190:34): [True: 0, False: 1.20k]
  ------------------
 2191|      0|        return n;
 2192|       |
 2193|  2.21k|    for (ix = 0; !(d = MP_DIGIT(mp, ix)) && (ix < MP_USED(mp)); ++ix)
  ------------------
  |  |  153|  2.21k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
                  for (ix = 0; !(d = MP_DIGIT(mp, ix)) && (ix < MP_USED(mp)); ++ix)
  ------------------
  |  |  150|  1.01k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (2193:18): [True: 1.01k, False: 1.20k]
  |  Branch (2193:45): [True: 1.01k, False: 0]
  ------------------
 2194|  1.01k|        n += MP_DIGIT_BIT;
  ------------------
  |  |  137|  2.21k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|  1.01k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
 2195|  1.20k|    if (!d)
  ------------------
  |  Branch (2195:9): [True: 0, False: 1.20k]
  ------------------
 2196|      0|        return 0; /* shouldn't happen, but ... */
 2197|  1.20k|#if !defined(MP_USE_UINT_DIGIT)
 2198|  1.20k|    if (!(d & 0xffffffffU)) {
  ------------------
  |  Branch (2198:9): [True: 408, False: 795]
  ------------------
 2199|    408|        d >>= 32;
 2200|    408|        n += 32;
 2201|    408|    }
 2202|  1.20k|#endif
 2203|  1.20k|    if (!(d & 0xffffU)) {
  ------------------
  |  Branch (2203:9): [True: 239, False: 964]
  ------------------
 2204|    239|        d >>= 16;
 2205|    239|        n += 16;
 2206|    239|    }
 2207|  1.20k|    if (!(d & 0xffU)) {
  ------------------
  |  Branch (2207:9): [True: 406, False: 797]
  ------------------
 2208|    406|        d >>= 8;
 2209|    406|        n += 8;
 2210|    406|    }
 2211|  1.20k|    if (!(d & 0xfU)) {
  ------------------
  |  Branch (2211:9): [True: 377, False: 826]
  ------------------
 2212|    377|        d >>= 4;
 2213|    377|        n += 4;
 2214|    377|    }
 2215|  1.20k|    if (!(d & 0x3U)) {
  ------------------
  |  Branch (2215:9): [True: 456, False: 747]
  ------------------
 2216|    456|        d >>= 2;
 2217|    456|        n += 2;
 2218|    456|    }
 2219|  1.20k|    if (!(d & 0x1U)) {
  ------------------
  |  Branch (2219:9): [True: 455, False: 748]
  ------------------
 2220|    455|        d >>= 1;
 2221|    455|        n += 1;
 2222|    455|    }
 2223|  1.20k|#if MP_ARGCHK == 2
 2224|  1.20k|    assert(0 != (d & 1));
 2225|  1.20k|#endif
 2226|  1.20k|    return n;
 2227|  1.20k|}
s_mp_invmod_radix:
 2311|  3.31k|{
 2312|  3.31k|    mp_digit T = P;
 2313|  3.31k|    T *= 2 - (P * T);
 2314|  3.31k|    T *= 2 - (P * T);
 2315|  3.31k|    T *= 2 - (P * T);
 2316|  3.31k|    T *= 2 - (P * T);
 2317|  3.31k|#if !defined(MP_USE_UINT_DIGIT)
 2318|  3.31k|    T *= 2 - (P * T);
 2319|  3.31k|    T *= 2 - (P * T);
 2320|  3.31k|#endif
 2321|  3.31k|    return T;
 2322|  3.31k|}
s_mp_invmod_odd_m:
 2374|  1.28k|{
 2375|  1.28k|    mp_err res;
 2376|  1.28k|    mp_digit cond = 0;
 2377|  1.28k|    mp_int g, f, v, r, temp;
 2378|  1.28k|    int i, its, delta = 1, last = -1;
 2379|  1.28k|    mp_size top, flen, glen;
 2380|  1.28k|    mp_int *clear[6];
 2381|       |
 2382|  1.28k|    ARGCHK(a != NULL && m != NULL && c != NULL, MP_BADARG);
  ------------------
  |  |  355|  1.28k|#define ARGCHK(X, Y) assert(X)
  ------------------
 2383|       |    /* Check for invalid inputs. */
 2384|  1.28k|    if (mp_cmp_z(a) == MP_EQ || mp_cmp_d(m, 2) == MP_LT)
  ------------------
  |  |   50|  2.57k|#define MP_EQ 0
  ------------------
                  if (mp_cmp_z(a) == MP_EQ || mp_cmp_d(m, 2) == MP_LT)
  ------------------
  |  |   49|  1.28k|#define MP_LT -1
  ------------------
  |  Branch (2384:9): [True: 0, False: 1.28k]
  |  Branch (2384:33): [True: 0, False: 1.28k]
  ------------------
 2385|      0|        return MP_RANGE;
  ------------------
  |  |   43|      0|#define MP_RANGE -3  /* argument out of range */
  ------------------
 2386|       |
 2387|  1.28k|    if (a == m || mp_iseven(m))
  ------------------
  |  Branch (2387:9): [True: 0, False: 1.28k]
  |  Branch (2387:19): [True: 0, False: 1.28k]
  ------------------
 2388|      0|        return MP_UNDEF;
  ------------------
  |  |   45|      0|#define MP_UNDEF -5  /* answer is undefined   */
  ------------------
 2389|       |
 2390|  1.28k|    MP_CHECKOK(mp_init(&temp));
  ------------------
  |  |  319|  1.28k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |  320|  1.28k|    goto CLEANUP
  ------------------
 2391|  1.28k|    clear[++last] = &temp;
 2392|  1.28k|    MP_CHECKOK(mp_init(&v));
  ------------------
  |  |  319|  1.28k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |  320|  1.28k|    goto CLEANUP
  ------------------
 2393|  1.28k|    clear[++last] = &v;
 2394|  1.28k|    MP_CHECKOK(mp_init(&r));
  ------------------
  |  |  319|  1.28k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |  320|  1.28k|    goto CLEANUP
  ------------------
 2395|  1.28k|    clear[++last] = &r;
 2396|  1.28k|    MP_CHECKOK(mp_init_copy(&g, a));
  ------------------
  |  |  319|  1.28k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |  320|  1.28k|    goto CLEANUP
  ------------------
 2397|  1.28k|    clear[++last] = &g;
 2398|  1.28k|    MP_CHECKOK(mp_init_copy(&f, m));
  ------------------
  |  |  319|  1.28k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |  320|  1.28k|    goto CLEANUP
  ------------------
 2399|  1.28k|    clear[++last] = &f;
 2400|       |
 2401|  1.28k|    mp_set(&v, 0);
 2402|  1.28k|    mp_set(&r, 1);
 2403|       |
 2404|       |    /* Allocate to the size of largest mp_int. */
 2405|  1.28k|    top = (mp_size)1 + ((USED(&f) >= USED(&g)) ? USED(&f) : USED(&g));
  ------------------
  |  |  333|  1.28k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  1.28k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                  top = (mp_size)1 + ((USED(&f) >= USED(&g)) ? USED(&f) : USED(&g));
  ------------------
  |  |  333|  1.28k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  1.28k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                  top = (mp_size)1 + ((USED(&f) >= USED(&g)) ? USED(&f) : USED(&g));
  ------------------
  |  |  333|    578|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|    578|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                  top = (mp_size)1 + ((USED(&f) >= USED(&g)) ? USED(&f) : USED(&g));
  ------------------
  |  |  333|    710|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|    710|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  |  Branch (2405:25): [True: 578, False: 710]
  ------------------
 2406|  1.28k|    MP_CHECKOK(s_mp_grow(&f, top));
  ------------------
  |  |  319|  1.28k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |  320|  1.28k|    goto CLEANUP
  ------------------
 2407|  1.28k|    MP_CHECKOK(s_mp_grow(&g, top));
  ------------------
  |  |  319|  1.28k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |  320|  1.28k|    goto CLEANUP
  ------------------
 2408|  1.28k|    MP_CHECKOK(s_mp_grow(&temp, top));
  ------------------
  |  |  319|  1.28k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |  320|  1.28k|    goto CLEANUP
  ------------------
 2409|  1.28k|    MP_CHECKOK(s_mp_grow(&v, top));
  ------------------
  |  |  319|  1.28k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |  320|  1.28k|    goto CLEANUP
  ------------------
 2410|  1.28k|    MP_CHECKOK(s_mp_grow(&r, top));
  ------------------
  |  |  319|  1.28k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.28k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.28k]
  |  |  ------------------
  |  |  320|  1.28k|    goto CLEANUP
  ------------------
 2411|       |
 2412|       |    /* Upper bound for the total iterations. */
 2413|  1.28k|    flen = mpl_significant_bits(&f);
 2414|  1.28k|    glen = mpl_significant_bits(&g);
 2415|  1.28k|    its = 4 + 3 * ((flen >= glen) ? flen : glen);
  ------------------
  |  Branch (2415:20): [True: 448, False: 840]
  ------------------
 2416|       |
 2417|       |#if defined(_MSC_VER)
 2418|       |#pragma warning(push)
 2419|       |#pragma warning(disable : 4146) // Thanks MSVC, we know what we're negating an unsigned mp_digit
 2420|       |#endif
 2421|       |
 2422|   868k|    for (i = 0; i < its; i++) {
  ------------------
  |  Branch (2422:17): [True: 867k, False: 1.28k]
  ------------------
 2423|       |        /* Step 1: conditional swap. */
 2424|       |        /* Set cond if delta > 0 and g is odd. */
 2425|   867k|        cond = (-delta >> (8 * sizeof(delta) - 1)) & DIGIT(&g, 0) & 1;
  ------------------
  |  |  336|   867k|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|   867k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 2426|       |        /* If cond is set replace (delta,f,v) with (-delta,-f,-v). */
 2427|   867k|        delta = (-cond & -delta) | ((cond - 1) & delta);
 2428|   867k|        SIGN(&f) ^= cond;
  ------------------
  |  |  332|   867k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|   867k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
 2429|   867k|        SIGN(&v) ^= cond;
  ------------------
  |  |  332|   867k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|   867k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
 2430|       |        /* If cond is set swap (f,v) with (g,r). */
 2431|   867k|        MP_CHECKOK(mp_cswap(cond, &f, &g, top));
  ------------------
  |  |  319|   867k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   867k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 867k]
  |  |  ------------------
  |  |  320|   867k|    goto CLEANUP
  ------------------
 2432|   867k|        MP_CHECKOK(mp_cswap(cond, &v, &r, top));
  ------------------
  |  |  319|   867k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   867k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 867k]
  |  |  ------------------
  |  |  320|   867k|    goto CLEANUP
  ------------------
 2433|       |
 2434|       |        /* Step 2: elemination. */
 2435|       |        /* Update delta */
 2436|   867k|        delta++;
 2437|       |        /* If g is odd replace r with (r+v). */
 2438|   867k|        MP_CHECKOK(mp_add(&r, &v, &temp));
  ------------------
  |  |  319|   867k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   867k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 867k]
  |  |  ------------------
  |  |  320|   867k|    goto CLEANUP
  ------------------
 2439|   867k|        MP_CHECKOK(mp_cswap((DIGIT(&g, 0) & 1), &r, &temp, top));
  ------------------
  |  |  319|   867k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   867k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 867k]
  |  |  ------------------
  |  |  320|   867k|    goto CLEANUP
  ------------------
 2440|       |        /* If g is odd, right shift (g+f) else right shift g. */
 2441|   867k|        MP_CHECKOK(mp_add(&g, &f, &temp));
  ------------------
  |  |  319|   867k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   867k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 867k]
  |  |  ------------------
  |  |  320|   867k|    goto CLEANUP
  ------------------
 2442|   867k|        MP_CHECKOK(mp_cswap((DIGIT(&g, 0) & 1), &g, &temp, top));
  ------------------
  |  |  319|   867k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   867k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 867k]
  |  |  ------------------
  |  |  320|   867k|    goto CLEANUP
  ------------------
 2443|   867k|        s_mp_div_2(&g);
 2444|       |        /*
 2445|       |        If r is even, right shift it.
 2446|       |        If r is odd, right shift (r+m) which is even because m is odd.
 2447|       |        We want the result modulo m so adding in multiples of m here vanish.
 2448|       |        */
 2449|   867k|        MP_CHECKOK(mp_add(&r, m, &temp));
  ------------------
  |  |  319|   867k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   867k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 867k]
  |  |  ------------------
  |  |  320|   867k|    goto CLEANUP
  ------------------
 2450|   867k|        MP_CHECKOK(mp_cswap((DIGIT(&r, 0) & 1), &r, &temp, top));
  ------------------
  |  |  319|   867k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   867k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 867k]
  |  |  ------------------
  |  |  320|   867k|    goto CLEANUP
  ------------------
 2451|   867k|        s_mp_div_2(&r);
 2452|   867k|    }
 2453|       |
 2454|       |#if defined(_MSC_VER)
 2455|       |#pragma warning(pop)
 2456|       |#endif
 2457|       |
 2458|       |    /* We have the inverse in v, propagate sign from f. */
 2459|  1.28k|    SIGN(&v) ^= SIGN(&f);
  ------------------
  |  |  332|  1.28k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  1.28k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  SIGN(&v) ^= SIGN(&f);
  ------------------
  |  |  332|  1.28k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  1.28k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
 2460|       |    /* GCD is in f, take the absolute value. */
 2461|  1.28k|    SIGN(&f) = ZPOS;
  ------------------
  |  |  332|  1.28k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  1.28k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  SIGN(&f) = ZPOS;
  ------------------
  |  |  326|  1.28k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|  1.28k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
 2462|       |
 2463|       |    /* If gcd != 1, not invertible. */
 2464|  1.28k|    if (mp_cmp_d(&f, 1) != MP_EQ) {
  ------------------
  |  |   50|  1.28k|#define MP_EQ 0
  ------------------
  |  Branch (2464:9): [True: 46, False: 1.24k]
  ------------------
 2465|     46|        res = MP_UNDEF;
  ------------------
  |  |   45|     46|#define MP_UNDEF -5  /* answer is undefined   */
  ------------------
 2466|     46|        goto CLEANUP;
 2467|     46|    }
 2468|       |
 2469|       |    /* Return inverse modulo m. */
 2470|  1.24k|    MP_CHECKOK(mp_mod(&v, m, c));
  ------------------
  |  |  319|  1.24k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.24k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.24k]
  |  |  ------------------
  |  |  320|  1.24k|    goto CLEANUP
  ------------------
 2471|       |
 2472|  1.28k|CLEANUP:
 2473|  7.72k|    while (last >= 0)
  ------------------
  |  Branch (2473:12): [True: 6.44k, False: 1.28k]
  ------------------
 2474|  6.44k|        mp_clear(clear[last--]);
 2475|  1.28k|    return res;
 2476|  1.24k|}
s_mp_invmod_2d:
 2516|  2.35k|{
 2517|  2.35k|    mp_err res;
 2518|  2.35k|    mp_size ix = k + 4;
 2519|  2.35k|    mp_int t0, t1, val, tmp, two2k;
 2520|       |
 2521|  2.35k|    static const mp_digit d2 = 2;
 2522|  2.35k|    static const mp_int two = { MP_ZPOS, 1, 1, (mp_digit *)&d2 };
  ------------------
  |  |   37|  2.35k|#define MP_ZPOS 0
  ------------------
 2523|       |
 2524|  2.35k|    if (mp_iseven(a))
  ------------------
  |  Branch (2524:9): [True: 0, False: 2.35k]
  ------------------
 2525|      0|        return MP_UNDEF;
  ------------------
  |  |   45|      0|#define MP_UNDEF -5  /* answer is undefined   */
  ------------------
 2526|       |
 2527|       |#if defined(_MSC_VER)
 2528|       |#pragma warning(push)
 2529|       |#pragma warning(disable : 4146) // Thanks MSVC, we know what we're negating an unsigned mp_digit
 2530|       |#endif
 2531|  2.35k|    if (k <= MP_DIGIT_BIT) {
  ------------------
  |  |  137|  2.35k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|  2.35k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
  |  Branch (2531:9): [True: 1.11k, False: 1.24k]
  ------------------
 2532|  1.11k|        mp_digit i = s_mp_invmod_radix(MP_DIGIT(a, 0));
  ------------------
  |  |  153|  1.11k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
 2533|       |        /* propagate the sign from mp_int */
 2534|  1.11k|        i = (i ^ -(mp_digit)SIGN(a)) + (mp_digit)SIGN(a);
  ------------------
  |  |  332|  1.11k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  1.11k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                      i = (i ^ -(mp_digit)SIGN(a)) + (mp_digit)SIGN(a);
  ------------------
  |  |  332|  1.11k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  1.11k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
 2535|  1.11k|        if (k < MP_DIGIT_BIT)
  ------------------
  |  |  137|  1.11k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|  1.11k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
  |  Branch (2535:13): [True: 1.10k, False: 10]
  ------------------
 2536|  1.10k|            i &= ((mp_digit)1 << k) - (mp_digit)1;
 2537|  1.11k|        mp_set(c, i);
 2538|  1.11k|        return MP_OKAY;
  ------------------
  |  |   39|  1.11k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 2539|  1.11k|    }
 2540|       |#if defined(_MSC_VER)
 2541|       |#pragma warning(pop)
 2542|       |#endif
 2543|       |
 2544|  1.24k|    MP_DIGITS(&t0) = 0;
  ------------------
  |  |  152|  1.24k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 2545|  1.24k|    MP_DIGITS(&t1) = 0;
  ------------------
  |  |  152|  1.24k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 2546|  1.24k|    MP_DIGITS(&val) = 0;
  ------------------
  |  |  152|  1.24k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 2547|  1.24k|    MP_DIGITS(&tmp) = 0;
  ------------------
  |  |  152|  1.24k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 2548|  1.24k|    MP_DIGITS(&two2k) = 0;
  ------------------
  |  |  152|  1.24k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 2549|  1.24k|    MP_CHECKOK(mp_init_copy(&val, a));
  ------------------
  |  |  319|  1.24k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.24k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.24k]
  |  |  ------------------
  |  |  320|  1.24k|    goto CLEANUP
  ------------------
 2550|  1.24k|    s_mp_mod_2d(&val, k);
 2551|  1.24k|    MP_CHECKOK(mp_init_copy(&t0, &val));
  ------------------
  |  |  319|  1.24k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.24k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.24k]
  |  |  ------------------
  |  |  320|  1.24k|    goto CLEANUP
  ------------------
 2552|  1.24k|    MP_CHECKOK(mp_init_copy(&t1, &t0));
  ------------------
  |  |  319|  1.24k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.24k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.24k]
  |  |  ------------------
  |  |  320|  1.24k|    goto CLEANUP
  ------------------
 2553|  1.24k|    MP_CHECKOK(mp_init(&tmp));
  ------------------
  |  |  319|  1.24k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.24k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.24k]
  |  |  ------------------
  |  |  320|  1.24k|    goto CLEANUP
  ------------------
 2554|  1.24k|    MP_CHECKOK(mp_init(&two2k));
  ------------------
  |  |  319|  1.24k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.24k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.24k]
  |  |  ------------------
  |  |  320|  1.24k|    goto CLEANUP
  ------------------
 2555|  1.24k|    MP_CHECKOK(s_mp_2expt(&two2k, k));
  ------------------
  |  |  319|  1.24k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.24k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.24k]
  |  |  ------------------
  |  |  320|  1.24k|    goto CLEANUP
  ------------------
 2556|  6.03k|    do {
 2557|  6.03k|        MP_CHECKOK(mp_mul(&val, &t1, &tmp));
  ------------------
  |  |  319|  6.03k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  6.03k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 6.03k]
  |  |  ------------------
  |  |  320|  6.03k|    goto CLEANUP
  ------------------
 2558|  6.03k|        MP_CHECKOK(mp_sub(&two, &tmp, &tmp));
  ------------------
  |  |  319|  6.03k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  6.03k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 6.03k]
  |  |  ------------------
  |  |  320|  6.03k|    goto CLEANUP
  ------------------
 2559|  6.03k|        MP_CHECKOK(mp_mul(&t1, &tmp, &t1));
  ------------------
  |  |  319|  6.03k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  6.03k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 6.03k]
  |  |  ------------------
  |  |  320|  6.03k|    goto CLEANUP
  ------------------
 2560|  6.03k|        s_mp_mod_2d(&t1, k);
 2561|  12.0k|        while (MP_SIGN(&t1) != MP_ZPOS) {
  ------------------
  |  |  149|  12.0k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
                      while (MP_SIGN(&t1) != MP_ZPOS) {
  ------------------
  |  |   37|  12.0k|#define MP_ZPOS 0
  ------------------
  |  Branch (2561:16): [True: 6.01k, False: 6.03k]
  ------------------
 2562|  6.01k|            MP_CHECKOK(mp_add(&t1, &two2k, &t1));
  ------------------
  |  |  319|  6.01k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  6.01k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 6.01k]
  |  |  ------------------
  |  |  320|  6.01k|    goto CLEANUP
  ------------------
 2563|  6.01k|        }
 2564|  6.03k|        if (mp_cmp(&t1, &t0) == MP_EQ)
  ------------------
  |  |   50|  6.03k|#define MP_EQ 0
  ------------------
  |  Branch (2564:13): [True: 1.24k, False: 4.79k]
  ------------------
 2565|  1.24k|            break;
 2566|  4.79k|        MP_CHECKOK(mp_copy(&t1, &t0));
  ------------------
  |  |  319|  4.79k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  4.79k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 4.79k]
  |  |  ------------------
  |  |  320|  4.79k|    goto CLEANUP
  ------------------
 2567|  4.79k|    } while (--ix > 0);
  ------------------
  |  Branch (2567:14): [True: 4.79k, False: 0]
  ------------------
 2568|  1.24k|    if (!ix) {
  ------------------
  |  Branch (2568:9): [True: 0, False: 1.24k]
  ------------------
 2569|      0|        res = MP_UNDEF;
  ------------------
  |  |   45|      0|#define MP_UNDEF -5  /* answer is undefined   */
  ------------------
 2570|  1.24k|    } else {
 2571|  1.24k|        mp_exch(c, &t1);
 2572|  1.24k|    }
 2573|       |
 2574|  1.24k|CLEANUP:
 2575|  1.24k|    mp_clear(&t0);
 2576|  1.24k|    mp_clear(&t1);
 2577|  1.24k|    mp_clear(&val);
 2578|  1.24k|    mp_clear(&tmp);
 2579|  1.24k|    mp_clear(&two2k);
 2580|  1.24k|    return res;
 2581|  1.24k|}
s_mp_invmod_even_m:
 2585|  1.24k|{
 2586|  1.24k|    mp_err res;
 2587|  1.24k|    mp_size k;
 2588|  1.24k|    mp_int oddFactor, evenFactor; /* factors of the modulus */
 2589|  1.24k|    mp_int oddPart, evenPart;     /* parts to combine via CRT. */
 2590|  1.24k|    mp_int C2, tmp1, tmp2;
 2591|       |
 2592|  1.24k|    ARGCHK(a != NULL && m != NULL && c != NULL, MP_BADARG);
  ------------------
  |  |  355|  1.24k|#define ARGCHK(X, Y) assert(X)
  ------------------
 2593|       |
 2594|       |    /*static const mp_digit d1 = 1; */
 2595|       |    /*static const mp_int one = { MP_ZPOS, 1, 1, (mp_digit *)&d1 }; */
 2596|       |
 2597|  1.24k|    if ((res = s_mp_ispow2(m)) >= 0) {
  ------------------
  |  Branch (2597:9): [True: 39, False: 1.20k]
  ------------------
 2598|     39|        k = res;
 2599|     39|        return s_mp_invmod_2d(a, k, c);
 2600|     39|    }
 2601|  1.20k|    MP_DIGITS(&oddFactor) = 0;
  ------------------
  |  |  152|  1.20k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 2602|  1.20k|    MP_DIGITS(&evenFactor) = 0;
  ------------------
  |  |  152|  1.20k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 2603|  1.20k|    MP_DIGITS(&oddPart) = 0;
  ------------------
  |  |  152|  1.20k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 2604|  1.20k|    MP_DIGITS(&evenPart) = 0;
  ------------------
  |  |  152|  1.20k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 2605|  1.20k|    MP_DIGITS(&C2) = 0;
  ------------------
  |  |  152|  1.20k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 2606|  1.20k|    MP_DIGITS(&tmp1) = 0;
  ------------------
  |  |  152|  1.20k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 2607|  1.20k|    MP_DIGITS(&tmp2) = 0;
  ------------------
  |  |  152|  1.20k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 2608|       |
 2609|  1.20k|    MP_CHECKOK(mp_init_copy(&oddFactor, m)); /* oddFactor = m */
  ------------------
  |  |  319|  1.20k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.20k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.20k]
  |  |  ------------------
  |  |  320|  1.20k|    goto CLEANUP
  ------------------
 2610|  1.20k|    MP_CHECKOK(mp_init(&evenFactor));
  ------------------
  |  |  319|  1.20k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.20k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.20k]
  |  |  ------------------
  |  |  320|  1.20k|    goto CLEANUP
  ------------------
 2611|  1.20k|    MP_CHECKOK(mp_init(&oddPart));
  ------------------
  |  |  319|  1.20k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.20k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.20k]
  |  |  ------------------
  |  |  320|  1.20k|    goto CLEANUP
  ------------------
 2612|  1.20k|    MP_CHECKOK(mp_init(&evenPart));
  ------------------
  |  |  319|  1.20k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.20k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.20k]
  |  |  ------------------
  |  |  320|  1.20k|    goto CLEANUP
  ------------------
 2613|  1.20k|    MP_CHECKOK(mp_init(&C2));
  ------------------
  |  |  319|  1.20k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.20k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.20k]
  |  |  ------------------
  |  |  320|  1.20k|    goto CLEANUP
  ------------------
 2614|  1.20k|    MP_CHECKOK(mp_init(&tmp1));
  ------------------
  |  |  319|  1.20k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.20k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.20k]
  |  |  ------------------
  |  |  320|  1.20k|    goto CLEANUP
  ------------------
 2615|  1.20k|    MP_CHECKOK(mp_init(&tmp2));
  ------------------
  |  |  319|  1.20k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.20k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.20k]
  |  |  ------------------
  |  |  320|  1.20k|    goto CLEANUP
  ------------------
 2616|       |
 2617|  1.20k|    k = mp_trailing_zeros(m);
 2618|  1.20k|    s_mp_div_2d(&oddFactor, k);
 2619|  1.20k|    MP_CHECKOK(s_mp_2expt(&evenFactor, k));
  ------------------
  |  |  319|  1.20k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.20k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.20k]
  |  |  ------------------
  |  |  320|  1.20k|    goto CLEANUP
  ------------------
 2620|       |
 2621|       |    /* compute a**-1 mod oddFactor. */
 2622|  1.20k|    MP_CHECKOK(s_mp_invmod_odd_m(a, &oddFactor, &oddPart));
  ------------------
  |  |  319|  1.20k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.20k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 44, False: 1.15k]
  |  |  ------------------
  |  |  320|  1.20k|    goto CLEANUP
  ------------------
 2623|       |    /* compute a**-1 mod evenFactor, where evenFactor == 2**k. */
 2624|  1.15k|    MP_CHECKOK(s_mp_invmod_2d(a, k, &evenPart));
  ------------------
  |  |  319|  1.15k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.15k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.15k]
  |  |  ------------------
  |  |  320|  1.15k|    goto CLEANUP
  ------------------
 2625|       |
 2626|       |    /* Use Chinese Remainer theorem to compute a**-1 mod m. */
 2627|       |    /* let m1 = oddFactor,  v1 = oddPart,
 2628|       |     * let m2 = evenFactor, v2 = evenPart.
 2629|       |     */
 2630|       |
 2631|       |    /* Compute C2 = m1**-1 mod m2. */
 2632|  1.15k|    MP_CHECKOK(s_mp_invmod_2d(&oddFactor, k, &C2));
  ------------------
  |  |  319|  1.15k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.15k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.15k]
  |  |  ------------------
  |  |  320|  1.15k|    goto CLEANUP
  ------------------
 2633|       |
 2634|       |    /* compute u = (v2 - v1)*C2 mod m2 */
 2635|  1.15k|    MP_CHECKOK(mp_sub(&evenPart, &oddPart, &tmp1));
  ------------------
  |  |  319|  1.15k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.15k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.15k]
  |  |  ------------------
  |  |  320|  1.15k|    goto CLEANUP
  ------------------
 2636|  1.15k|    MP_CHECKOK(mp_mul(&tmp1, &C2, &tmp2));
  ------------------
  |  |  319|  1.15k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.15k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.15k]
  |  |  ------------------
  |  |  320|  1.15k|    goto CLEANUP
  ------------------
 2637|  1.15k|    s_mp_mod_2d(&tmp2, k);
 2638|  1.98k|    while (MP_SIGN(&tmp2) != MP_ZPOS) {
  ------------------
  |  |  149|  1.98k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
                  while (MP_SIGN(&tmp2) != MP_ZPOS) {
  ------------------
  |  |   37|  1.98k|#define MP_ZPOS 0
  ------------------
  |  Branch (2638:12): [True: 822, False: 1.15k]
  ------------------
 2639|    822|        MP_CHECKOK(mp_add(&tmp2, &evenFactor, &tmp2));
  ------------------
  |  |  319|    822|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|    822|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 822]
  |  |  ------------------
  |  |  320|    822|    goto CLEANUP
  ------------------
 2640|    822|    }
 2641|       |
 2642|       |    /* compute answer = v1 + u*m1 */
 2643|  1.15k|    MP_CHECKOK(mp_mul(&tmp2, &oddFactor, c));
  ------------------
  |  |  319|  1.15k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.15k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.15k]
  |  |  ------------------
  |  |  320|  1.15k|    goto CLEANUP
  ------------------
 2644|  1.15k|    MP_CHECKOK(mp_add(&oddPart, c, c));
  ------------------
  |  |  319|  1.15k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.15k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.15k]
  |  |  ------------------
  |  |  320|  1.15k|    goto CLEANUP
  ------------------
 2645|       |    /* not sure this is necessary, but it's low cost if not. */
 2646|  1.15k|    MP_CHECKOK(mp_mod(c, m, c));
  ------------------
  |  |  319|  1.15k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.15k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.15k]
  |  |  ------------------
  |  |  320|  1.15k|    goto CLEANUP
  ------------------
 2647|       |
 2648|  1.20k|CLEANUP:
 2649|  1.20k|    mp_clear(&oddFactor);
 2650|  1.20k|    mp_clear(&evenFactor);
 2651|  1.20k|    mp_clear(&oddPart);
 2652|  1.20k|    mp_clear(&evenPart);
 2653|  1.20k|    mp_clear(&C2);
 2654|  1.20k|    mp_clear(&tmp1);
 2655|  1.20k|    mp_clear(&tmp2);
 2656|  1.20k|    return res;
 2657|  1.15k|}
mp_invmod:
 2671|  1.32k|{
 2672|  1.32k|    ARGCHK(a != NULL && m != NULL && c != NULL, MP_BADARG);
  ------------------
  |  |  355|  1.32k|#define ARGCHK(X, Y) assert(X)
  ------------------
 2673|       |
 2674|  1.32k|    if (mp_cmp_z(a) == 0 || mp_cmp_z(m) == 0)
  ------------------
  |  Branch (2674:9): [True: 0, False: 1.32k]
  |  Branch (2674:29): [True: 0, False: 1.32k]
  ------------------
 2675|      0|        return MP_RANGE;
  ------------------
  |  |   43|      0|#define MP_RANGE -3  /* argument out of range */
  ------------------
 2676|       |
 2677|  1.32k|    if (mp_isodd(m)) {
  ------------------
  |  Branch (2677:9): [True: 85, False: 1.24k]
  ------------------
 2678|     85|        return s_mp_invmod_odd_m(a, m, c);
 2679|     85|    }
 2680|  1.24k|    if (mp_iseven(a))
  ------------------
  |  Branch (2680:9): [True: 1, False: 1.24k]
  ------------------
 2681|      1|        return MP_UNDEF; /* not invertable */
  ------------------
  |  |   45|      1|#define MP_UNDEF -5  /* answer is undefined   */
  ------------------
 2682|       |
 2683|  1.24k|    return s_mp_invmod_even_m(a, m, c);
 2684|       |
 2685|  1.24k|} /* end mp_invmod() */
s_mp_grow:
 3038|   578k|{
 3039|   578k|    ARGCHK(mp != NULL, MP_BADARG);
  ------------------
  |  |  355|   578k|#define ARGCHK(X, Y) assert(X)
  ------------------
 3040|       |
 3041|   578k|    if (min > ALLOC(mp)) {
  ------------------
  |  |  334|   578k|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|   578k|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
  |  Branch (3041:9): [True: 572k, False: 6.44k]
  ------------------
 3042|   572k|        mp_digit *tmp;
 3043|       |
 3044|       |        /* Set min to next nearest default precision block size */
 3045|   572k|        min = MP_ROUNDUP(min, s_mp_defprec);
  ------------------
  |  |   89|   572k|#define MP_ROUNDUP(a, b) (MP_HOWMANY(a, b) * (b))
  |  |  ------------------
  |  |  |  |   88|   572k|#define MP_HOWMANY(a, b) (((a) + (b)-1) / (b))
  |  |  ------------------
  ------------------
 3046|       |
 3047|   572k|        if ((tmp = s_mp_alloc(min, sizeof(mp_digit))) == NULL)
  ------------------
  |  Branch (3047:13): [True: 0, False: 572k]
  ------------------
 3048|      0|            return MP_MEM;
  ------------------
  |  |   42|      0|#define MP_MEM -2    /* out of memory         */
  ------------------
 3049|       |
 3050|   572k|        s_mp_copy(DIGITS(mp), tmp, USED(mp));
  ------------------
  |  |  335|   572k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|   572k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
                      s_mp_copy(DIGITS(mp), tmp, USED(mp));
  ------------------
  |  |  333|   572k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   572k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
 3051|       |
 3052|   572k|        s_mp_setz(DIGITS(mp), ALLOC(mp));
  ------------------
  |  |  335|   572k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|   572k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
                      s_mp_setz(DIGITS(mp), ALLOC(mp));
  ------------------
  |  |  334|   572k|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|   572k|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
 3053|   572k|        s_mp_free(DIGITS(mp));
  ------------------
  |  |  335|   572k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|   572k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
 3054|   572k|        DIGITS(mp) = tmp;
  ------------------
  |  |  335|   572k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|   572k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
 3055|   572k|        ALLOC(mp) = min;
  ------------------
  |  |  334|   572k|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|   572k|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
 3056|   572k|    }
 3057|       |
 3058|   578k|    return MP_OKAY;
  ------------------
  |  |   39|   578k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 3059|       |
 3060|   578k|} /* end s_mp_grow() */
s_mp_pad:
 3069|  5.68M|{
 3070|  5.68M|    ARGCHK(mp != NULL, MP_BADARG);
  ------------------
  |  |  355|  5.68M|#define ARGCHK(X, Y) assert(X)
  ------------------
 3071|       |
 3072|  5.68M|    if (min > USED(mp)) {
  ------------------
  |  |  333|  5.68M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  5.68M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  |  Branch (3072:9): [True: 3.15M, False: 2.53M]
  ------------------
 3073|  3.15M|        mp_err res;
 3074|       |
 3075|       |        /* Make sure there is room to increase precision  */
 3076|  3.15M|        if (min > ALLOC(mp)) {
  ------------------
  |  |  334|  3.15M|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|  3.15M|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
  |  Branch (3076:13): [True: 572k, False: 2.57M]
  ------------------
 3077|   572k|            if ((res = s_mp_grow(mp, min)) != MP_OKAY)
  ------------------
  |  |   39|   572k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (3077:17): [True: 0, False: 572k]
  ------------------
 3078|      0|                return res;
 3079|  2.57M|        } else {
 3080|  2.57M|            s_mp_setz(DIGITS(mp) + USED(mp), min - USED(mp));
  ------------------
  |  |  335|  2.57M|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|  2.57M|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
                          s_mp_setz(DIGITS(mp) + USED(mp), min - USED(mp));
  ------------------
  |  |  333|  2.57M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  2.57M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                          s_mp_setz(DIGITS(mp) + USED(mp), min - USED(mp));
  ------------------
  |  |  333|  2.57M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  2.57M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
 3081|  2.57M|        }
 3082|       |
 3083|       |        /* Increase precision; should already be 0-filled */
 3084|  3.15M|        USED(mp) = min;
  ------------------
  |  |  333|  3.15M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  3.15M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
 3085|  3.15M|    }
 3086|       |
 3087|  5.68M|    return MP_OKAY;
  ------------------
  |  |   39|  5.68M|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 3088|       |
 3089|  5.68M|} /* end s_mp_pad() */
s_mp_setz:
 3098|  6.46M|{
 3099|  6.46M|    memset(dp, 0, count * sizeof(mp_digit));
 3100|  6.46M|} /* end s_mp_setz() */
s_mp_copy:
 3109|  3.06M|{
 3110|  3.06M|    memcpy(dp, sp, count * sizeof(mp_digit));
 3111|  3.06M|} /* end s_mp_copy() */
s_mp_alloc:
 3120|  3.38M|{
 3121|  3.38M|    return calloc(nb, ni);
 3122|       |
 3123|  3.38M|} /* end s_mp_alloc() */
s_mp_free:
 3132|  3.38M|{
 3133|  3.38M|    if (ptr) {
  ------------------
  |  Branch (3133:9): [True: 3.38M, False: 0]
  ------------------
 3134|  3.38M|        free(ptr);
 3135|  3.38M|    }
 3136|  3.38M|} /* end s_mp_free() */
s_mp_clamp:
 3145|  6.30M|{
 3146|  6.30M|    mp_size used = MP_USED(mp);
  ------------------
  |  |  150|  6.30M|#define MP_USED(MP) ((MP)->used)
  ------------------
 3147|  50.7M|    while (used > 1 && DIGIT(mp, used - 1) == 0)
  ------------------
  |  |  336|  49.5M|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  49.5M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
  |  Branch (3147:12): [True: 49.5M, False: 1.24M]
  |  Branch (3147:24): [True: 44.4M, False: 5.05M]
  ------------------
 3148|  44.4M|        --used;
 3149|  6.30M|    MP_USED(mp) = used;
  ------------------
  |  |  150|  6.30M|#define MP_USED(MP) ((MP)->used)
  ------------------
 3150|  6.30M|    if (used == 1 && DIGIT(mp, 0) == 0)
  ------------------
  |  |  336|  1.24M|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  1.24M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
  |  Branch (3150:9): [True: 1.24M, False: 5.05M]
  |  Branch (3150:22): [True: 630k, False: 618k]
  ------------------
 3151|   630k|        MP_SIGN(mp) = ZPOS;
  ------------------
  |  |  149|   630k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
                      MP_SIGN(mp) = ZPOS;
  ------------------
  |  |  326|   630k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|   630k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
 3152|  6.30M|} /* end s_mp_clamp() */
s_mp_exch:
 3161|   464k|{
 3162|   464k|    mp_int tmp;
 3163|   464k|    if (!a || !b) {
  ------------------
  |  Branch (3163:9): [True: 0, False: 464k]
  |  Branch (3163:15): [True: 0, False: 464k]
  ------------------
 3164|      0|        return;
 3165|      0|    }
 3166|       |
 3167|   464k|    tmp = *a;
 3168|   464k|    *a = *b;
 3169|   464k|    *b = tmp;
 3170|       |
 3171|   464k|} /* end s_mp_exch() */
s_mp_lshd:
 3189|   272k|{
 3190|   272k|    mp_err res;
 3191|   272k|    unsigned int ix;
 3192|       |
 3193|   272k|    ARGCHK(mp != NULL, MP_BADARG);
  ------------------
  |  |  355|   272k|#define ARGCHK(X, Y) assert(X)
  ------------------
 3194|       |
 3195|   272k|    if (p == 0)
  ------------------
  |  Branch (3195:9): [True: 0, False: 272k]
  ------------------
 3196|      0|        return MP_OKAY;
  ------------------
  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 3197|       |
 3198|   272k|    if (MP_USED(mp) == 1 && MP_DIGIT(mp, 0) == 0)
  ------------------
  |  |  150|   272k|#define MP_USED(MP) ((MP)->used)
  ------------------
                  if (MP_USED(mp) == 1 && MP_DIGIT(mp, 0) == 0)
  ------------------
  |  |  153|  54.7k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
  |  Branch (3198:9): [True: 54.7k, False: 218k]
  |  Branch (3198:29): [True: 12, False: 54.7k]
  ------------------
 3199|     12|        return MP_OKAY;
  ------------------
  |  |   39|     12|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 3200|       |
 3201|   272k|    if ((res = s_mp_pad(mp, USED(mp) + p)) != MP_OKAY)
  ------------------
  |  |  333|   272k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   272k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                  if ((res = s_mp_pad(mp, USED(mp) + p)) != MP_OKAY)
  ------------------
  |  |   39|   272k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (3201:9): [True: 0, False: 272k]
  ------------------
 3202|      0|        return res;
 3203|       |
 3204|       |    /* Shift all the significant figures over as needed */
 3205|  3.89M|    for (ix = USED(mp) - p; ix-- > 0;) {
  ------------------
  |  |  333|   272k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   272k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  |  Branch (3205:29): [True: 3.62M, False: 272k]
  ------------------
 3206|  3.62M|        DIGIT(mp, ix + p) = DIGIT(mp, ix);
  ------------------
  |  |  336|  3.62M|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  3.62M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
                      DIGIT(mp, ix + p) = DIGIT(mp, ix);
  ------------------
  |  |  336|  3.62M|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  3.62M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 3207|  3.62M|    }
 3208|       |
 3209|       |    /* Fill the bottom digits with zeroes */
 3210|  1.90M|    for (ix = 0; (mp_size)ix < p; ix++)
  ------------------
  |  Branch (3210:18): [True: 1.62M, False: 272k]
  ------------------
 3211|  1.62M|        DIGIT(mp, ix) = 0;
  ------------------
  |  |  336|  1.62M|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  1.62M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 3212|       |
 3213|   272k|    return MP_OKAY;
  ------------------
  |  |   39|   272k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 3214|       |
 3215|   272k|} /* end s_mp_lshd() */
s_mp_mul_2d:
 3227|  11.8k|{
 3228|  11.8k|    mp_err res;
 3229|  11.8k|    mp_digit dshift, rshift, mask, x, prev = 0;
 3230|  11.8k|    mp_digit *pa = NULL;
 3231|  11.8k|    int i;
 3232|       |
 3233|  11.8k|    ARGCHK(mp != NULL, MP_BADARG);
  ------------------
  |  |  355|  11.8k|#define ARGCHK(X, Y) assert(X)
  ------------------
 3234|       |
 3235|  11.8k|    dshift = d / MP_DIGIT_BIT;
  ------------------
  |  |  137|  11.8k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|  11.8k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
 3236|  11.8k|    d %= MP_DIGIT_BIT;
  ------------------
  |  |  137|  11.8k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|  11.8k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
 3237|       |    /* mp_digit >> rshift is undefined behavior for rshift >= MP_DIGIT_BIT */
 3238|       |    /* mod and corresponding mask logic avoid that when d = 0 */
 3239|  11.8k|    rshift = MP_DIGIT_BIT - d;
  ------------------
  |  |  137|  11.8k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|  11.8k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
 3240|  11.8k|    rshift %= MP_DIGIT_BIT;
  ------------------
  |  |  137|  11.8k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|  11.8k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
 3241|       |    /* mask = (2**d - 1) * 2**(w-d) mod 2**w */
 3242|  11.8k|    mask = (DIGIT_MAX << rshift) + 1;
  ------------------
  |  |  327|  11.8k|#define DIGIT_MAX MP_DIGIT_MAX
  |  |  ------------------
  |  |  |  |   79|  11.8k|#define MP_DIGIT_MAX ULONG_MAX
  |  |  ------------------
  ------------------
 3243|  11.8k|    mask &= DIGIT_MAX - 1;
  ------------------
  |  |  327|  11.8k|#define DIGIT_MAX MP_DIGIT_MAX
  |  |  ------------------
  |  |  |  |   79|  11.8k|#define MP_DIGIT_MAX ULONG_MAX
  |  |  ------------------
  ------------------
 3244|       |    /* bits to be shifted out of the top word */
 3245|  11.8k|    x = MP_DIGIT(mp, MP_USED(mp) - 1) & mask;
  ------------------
  |  |  153|  11.8k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
 3246|       |
 3247|  11.8k|    if (MP_OKAY != (res = s_mp_pad(mp, MP_USED(mp) + dshift + (x != 0))))
  ------------------
  |  |   39|  11.8k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
                  if (MP_OKAY != (res = s_mp_pad(mp, MP_USED(mp) + dshift + (x != 0))))
  ------------------
  |  |  150|  11.8k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (3247:9): [True: 0, False: 11.8k]
  ------------------
 3248|      0|        return res;
 3249|       |
 3250|  11.8k|    if (dshift && MP_OKAY != (res = s_mp_lshd(mp, dshift)))
  ------------------
  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (3250:9): [True: 0, False: 11.8k]
  |  Branch (3250:19): [True: 0, False: 0]
  ------------------
 3251|      0|        return res;
 3252|       |
 3253|  11.8k|    pa = MP_DIGITS(mp) + dshift;
  ------------------
  |  |  152|  11.8k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 3254|       |
 3255|   246k|    for (i = MP_USED(mp) - dshift; i > 0; i--) {
  ------------------
  |  |  150|  11.8k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (3255:36): [True: 234k, False: 11.8k]
  ------------------
 3256|   234k|        x = *pa;
 3257|   234k|        *pa++ = (x << d) | prev;
 3258|   234k|        prev = (x & mask) >> rshift;
 3259|   234k|    }
 3260|       |
 3261|  11.8k|    s_mp_clamp(mp);
 3262|  11.8k|    return MP_OKAY;
  ------------------
  |  |   39|  11.8k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 3263|  11.8k|} /* end s_mp_mul_2d() */
s_mp_rshd:
 3275|  3.34M|{
 3276|  3.34M|    mp_size ix;
 3277|  3.34M|    mp_digit *src, *dst;
 3278|       |
 3279|  3.34M|    if (p == 0)
  ------------------
  |  Branch (3279:9): [True: 1.73M, False: 1.60M]
  ------------------
 3280|  1.73M|        return;
 3281|       |
 3282|       |    /* Shortcut when all digits are to be shifted off */
 3283|  1.60M|    if (p >= USED(mp)) {
  ------------------
  |  |  333|  1.60M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  1.60M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  |  Branch (3283:9): [True: 113k, False: 1.49M]
  ------------------
 3284|   113k|        s_mp_setz(DIGITS(mp), ALLOC(mp));
  ------------------
  |  |  335|   113k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|   113k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
                      s_mp_setz(DIGITS(mp), ALLOC(mp));
  ------------------
  |  |  334|   113k|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|   113k|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
 3285|   113k|        USED(mp) = 1;
  ------------------
  |  |  333|   113k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   113k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
 3286|   113k|        SIGN(mp) = ZPOS;
  ------------------
  |  |  332|   113k|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|   113k|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                      SIGN(mp) = ZPOS;
  ------------------
  |  |  326|   113k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|   113k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
 3287|   113k|        return;
 3288|   113k|    }
 3289|       |
 3290|       |    /* Shift all the significant figures over as needed */
 3291|  1.49M|    dst = MP_DIGITS(mp);
  ------------------
  |  |  152|  1.49M|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 3292|  1.49M|    src = dst + p;
 3293|  48.0M|    for (ix = USED(mp) - p; ix > 0; ix--)
  ------------------
  |  |  333|  1.49M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  1.49M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  |  Branch (3293:29): [True: 46.5M, False: 1.49M]
  ------------------
 3294|  46.5M|        *dst++ = *src++;
 3295|       |
 3296|  1.49M|    MP_USED(mp) -= p;
  ------------------
  |  |  150|  1.49M|#define MP_USED(MP) ((MP)->used)
  ------------------
 3297|       |    /* Fill the top digits with zeroes */
 3298|  47.6M|    while (p-- > 0)
  ------------------
  |  Branch (3298:12): [True: 46.1M, False: 1.49M]
  ------------------
 3299|  46.1M|        *dst++ = 0;
 3300|       |
 3301|  1.49M|} /* end s_mp_rshd() */
s_mp_div_2:
 3310|  1.73M|{
 3311|  1.73M|    s_mp_div_2d(mp, 1);
 3312|       |
 3313|  1.73M|} /* end s_mp_div_2() */
s_mp_mul_2:
 3321|  9.10k|{
 3322|  9.10k|    mp_digit *pd;
 3323|  9.10k|    unsigned int ix, used;
 3324|  9.10k|    mp_digit kin = 0;
 3325|       |
 3326|  9.10k|    ARGCHK(mp != NULL, MP_BADARG);
  ------------------
  |  |  355|  9.10k|#define ARGCHK(X, Y) assert(X)
  ------------------
 3327|       |
 3328|       |    /* Shift digits leftward by 1 bit */
 3329|  9.10k|    used = MP_USED(mp);
  ------------------
  |  |  150|  9.10k|#define MP_USED(MP) ((MP)->used)
  ------------------
 3330|  9.10k|    pd = MP_DIGITS(mp);
  ------------------
  |  |  152|  9.10k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 3331|   582k|    for (ix = 0; ix < used; ix++) {
  ------------------
  |  Branch (3331:18): [True: 573k, False: 9.10k]
  ------------------
 3332|   573k|        mp_digit d = *pd;
 3333|   573k|        *pd++ = (d << 1) | kin;
 3334|   573k|        kin = (d >> (DIGIT_BIT - 1));
  ------------------
  |  |  328|   573k|#define DIGIT_BIT MP_DIGIT_BIT
  |  |  ------------------
  |  |  |  |  137|   573k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|   573k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3335|   573k|    }
 3336|       |
 3337|       |    /* Deal with rollover from last digit */
 3338|  9.10k|    if (kin) {
  ------------------
  |  Branch (3338:9): [True: 0, False: 9.10k]
  ------------------
 3339|      0|        if (ix >= ALLOC(mp)) {
  ------------------
  |  |  334|      0|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|      0|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
  |  Branch (3339:13): [True: 0, False: 0]
  ------------------
 3340|      0|            mp_err res;
 3341|      0|            if ((res = s_mp_grow(mp, ALLOC(mp) + 1)) != MP_OKAY)
  ------------------
  |  |  334|      0|#define ALLOC(MP) MP_ALLOC(MP)
  |  |  ------------------
  |  |  |  |  151|      0|#define MP_ALLOC(MP) ((MP)->alloc)
  |  |  ------------------
  ------------------
                          if ((res = s_mp_grow(mp, ALLOC(mp) + 1)) != MP_OKAY)
  ------------------
  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (3341:17): [True: 0, False: 0]
  ------------------
 3342|      0|                return res;
 3343|      0|        }
 3344|       |
 3345|      0|        DIGIT(mp, ix) = kin;
  ------------------
  |  |  336|      0|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|      0|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 3346|      0|        USED(mp) += 1;
  ------------------
  |  |  333|      0|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|      0|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
 3347|      0|    }
 3348|       |
 3349|  9.10k|    return MP_OKAY;
  ------------------
  |  |   39|  9.10k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 3350|       |
 3351|  9.10k|} /* end s_mp_mul_2() */
s_mp_mod_2d:
 3364|  1.34M|{
 3365|  1.34M|    mp_size ndig = (d / DIGIT_BIT), nbit = (d % DIGIT_BIT);
  ------------------
  |  |  328|  1.34M|#define DIGIT_BIT MP_DIGIT_BIT
  |  |  ------------------
  |  |  |  |  137|  1.34M|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|  1.34M|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  mp_size ndig = (d / DIGIT_BIT), nbit = (d % DIGIT_BIT);
  ------------------
  |  |  328|  1.34M|#define DIGIT_BIT MP_DIGIT_BIT
  |  |  ------------------
  |  |  |  |  137|  1.34M|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|  1.34M|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3366|  1.34M|    mp_size ix;
 3367|  1.34M|    mp_digit dmask;
 3368|       |
 3369|  1.34M|    if (ndig >= USED(mp))
  ------------------
  |  |  333|  1.34M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  1.34M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  |  Branch (3369:9): [True: 116k, False: 1.23M]
  ------------------
 3370|   116k|        return;
 3371|       |
 3372|       |    /* Flush all the bits above 2^d in its digit */
 3373|  1.23M|    dmask = ((mp_digit)1 << nbit) - 1;
 3374|  1.23M|    DIGIT(mp, ndig) &= dmask;
  ------------------
  |  |  336|  1.23M|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  1.23M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 3375|       |
 3376|       |    /* Flush all digits above the one with 2^d in it */
 3377|  36.7M|    for (ix = ndig + 1; ix < USED(mp); ix++)
  ------------------
  |  |  333|  36.7M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  36.7M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  |  Branch (3377:25): [True: 35.5M, False: 1.23M]
  ------------------
 3378|  35.5M|        DIGIT(mp, ix) = 0;
  ------------------
  |  |  336|  35.5M|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  35.5M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 3379|       |
 3380|  1.23M|    s_mp_clamp(mp);
 3381|       |
 3382|  1.23M|} /* end s_mp_mod_2d() */
s_mp_div_2d:
 3395|  1.74M|{
 3396|  1.74M|    int ix;
 3397|  1.74M|    mp_digit save, next, mask, lshift;
 3398|       |
 3399|  1.74M|    s_mp_rshd(mp, d / DIGIT_BIT);
  ------------------
  |  |  328|  1.74M|#define DIGIT_BIT MP_DIGIT_BIT
  |  |  ------------------
  |  |  |  |  137|  1.74M|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|  1.74M|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3400|  1.74M|    d %= DIGIT_BIT;
  ------------------
  |  |  328|  1.74M|#define DIGIT_BIT MP_DIGIT_BIT
  |  |  ------------------
  |  |  |  |  137|  1.74M|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|  1.74M|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3401|       |    /* mp_digit << lshift is undefined behavior for lshift >= MP_DIGIT_BIT */
 3402|       |    /* mod and corresponding mask logic avoid that when d = 0 */
 3403|  1.74M|    lshift = DIGIT_BIT - d;
  ------------------
  |  |  328|  1.74M|#define DIGIT_BIT MP_DIGIT_BIT
  |  |  ------------------
  |  |  |  |  137|  1.74M|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|  1.74M|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3404|  1.74M|    lshift %= DIGIT_BIT;
  ------------------
  |  |  328|  1.74M|#define DIGIT_BIT MP_DIGIT_BIT
  |  |  ------------------
  |  |  |  |  137|  1.74M|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|  1.74M|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3405|  1.74M|    mask = ((mp_digit)1 << d) - 1;
 3406|  1.74M|    save = 0;
 3407|  5.69M|    for (ix = USED(mp) - 1; ix >= 0; ix--) {
  ------------------
  |  |  333|  1.74M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  1.74M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  |  Branch (3407:29): [True: 3.95M, False: 1.74M]
  ------------------
 3408|  3.95M|        next = DIGIT(mp, ix) & mask;
  ------------------
  |  |  336|  3.95M|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  3.95M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 3409|  3.95M|        DIGIT(mp, ix) = (save << lshift) | (DIGIT(mp, ix) >> d);
  ------------------
  |  |  336|  3.95M|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  3.95M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
                      DIGIT(mp, ix) = (save << lshift) | (DIGIT(mp, ix) >> d);
  ------------------
  |  |  336|  3.95M|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  3.95M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 3410|  3.95M|        save = next;
 3411|  3.95M|    }
 3412|  1.74M|    s_mp_clamp(mp);
 3413|       |
 3414|  1.74M|} /* end s_mp_div_2d() */
s_mp_norm:
 3433|  13.3k|{
 3434|  13.3k|    mp_digit d;
 3435|  13.3k|    mp_digit mask;
 3436|  13.3k|    mp_digit b_msd;
 3437|  13.3k|    mp_err res = MP_OKAY;
  ------------------
  |  |   39|  13.3k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 3438|       |
 3439|  13.3k|    ARGCHK(a != NULL && b != NULL && pd != NULL, MP_BADARG);
  ------------------
  |  |  355|  13.3k|#define ARGCHK(X, Y) assert(X)
  ------------------
 3440|       |
 3441|  13.3k|    d = 0;
 3442|  13.3k|    mask = DIGIT_MAX & ~(DIGIT_MAX >> 1); /* mask is msb of digit */
  ------------------
  |  |  327|  13.3k|#define DIGIT_MAX MP_DIGIT_MAX
  |  |  ------------------
  |  |  |  |   79|  13.3k|#define MP_DIGIT_MAX ULONG_MAX
  |  |  ------------------
  ------------------
                  mask = DIGIT_MAX & ~(DIGIT_MAX >> 1); /* mask is msb of digit */
  ------------------
  |  |  327|  13.3k|#define DIGIT_MAX MP_DIGIT_MAX
  |  |  ------------------
  |  |  |  |   79|  13.3k|#define MP_DIGIT_MAX ULONG_MAX
  |  |  ------------------
  ------------------
 3443|  13.3k|    b_msd = DIGIT(b, USED(b) - 1);
  ------------------
  |  |  336|  13.3k|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  13.3k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 3444|   116k|    while (!(b_msd & mask)) {
  ------------------
  |  Branch (3444:12): [True: 103k, False: 13.3k]
  ------------------
 3445|   103k|        b_msd <<= 1;
 3446|   103k|        ++d;
 3447|   103k|    }
 3448|       |
 3449|  13.3k|    if (d) {
  ------------------
  |  Branch (3449:9): [True: 3.89k, False: 9.45k]
  ------------------
 3450|  3.89k|        MP_CHECKOK(s_mp_mul_2d(a, d));
  ------------------
  |  |  319|  3.89k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  3.89k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 3.89k]
  |  |  ------------------
  |  |  320|  3.89k|    goto CLEANUP
  ------------------
 3451|  3.89k|        MP_CHECKOK(s_mp_mul_2d(b, d));
  ------------------
  |  |  319|  3.89k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  3.89k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 3.89k]
  |  |  ------------------
  |  |  320|  3.89k|    goto CLEANUP
  ------------------
 3452|  3.89k|    }
 3453|       |
 3454|  13.3k|    *pd = d;
 3455|  13.3k|CLEANUP:
 3456|  13.3k|    return res;
 3457|       |
 3458|  13.3k|} /* end s_mp_norm() */
s_mp_add_d:
 3471|  3.11k|{
 3472|       |#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_ADD_WORD)
 3473|       |    mp_word w, k = 0;
 3474|       |    mp_size ix = 1;
 3475|       |
 3476|       |    w = (mp_word)DIGIT(mp, 0) + d;
 3477|       |    DIGIT(mp, 0) = ACCUM(w);
 3478|       |    k = CARRYOUT(w);
 3479|       |
 3480|       |    while (ix < USED(mp) && k) {
 3481|       |        w = (mp_word)DIGIT(mp, ix) + k;
 3482|       |        DIGIT(mp, ix) = ACCUM(w);
 3483|       |        k = CARRYOUT(w);
 3484|       |        ++ix;
 3485|       |    }
 3486|       |
 3487|       |    if (k != 0) {
 3488|       |        mp_err res;
 3489|       |
 3490|       |        if ((res = s_mp_pad(mp, USED(mp) + 1)) != MP_OKAY)
 3491|       |            return res;
 3492|       |
 3493|       |        DIGIT(mp, ix) = (mp_digit)k;
 3494|       |    }
 3495|       |
 3496|       |    return MP_OKAY;
 3497|       |#else
 3498|  3.11k|    mp_digit *pmp = MP_DIGITS(mp);
  ------------------
  |  |  152|  3.11k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 3499|  3.11k|    mp_digit sum, mp_i, carry = 0;
 3500|  3.11k|    mp_err res = MP_OKAY;
  ------------------
  |  |   39|  3.11k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 3501|  3.11k|    int used = (int)MP_USED(mp);
  ------------------
  |  |  150|  3.11k|#define MP_USED(MP) ((MP)->used)
  ------------------
 3502|       |
 3503|  3.11k|    mp_i = *pmp;
 3504|  3.11k|    *pmp++ = sum = d + mp_i;
 3505|  3.11k|    carry = (sum < d);
 3506|  3.11k|    while (carry && --used > 0) {
  ------------------
  |  Branch (3506:12): [True: 0, False: 3.11k]
  |  Branch (3506:21): [True: 0, False: 0]
  ------------------
 3507|      0|        mp_i = *pmp;
 3508|      0|        *pmp++ = sum = carry + mp_i;
 3509|      0|        carry = !sum;
 3510|      0|    }
 3511|  3.11k|    if (carry && !used) {
  ------------------
  |  Branch (3511:9): [True: 0, False: 3.11k]
  |  Branch (3511:18): [True: 0, False: 0]
  ------------------
 3512|       |        /* mp is growing */
 3513|      0|        used = MP_USED(mp);
  ------------------
  |  |  150|      0|#define MP_USED(MP) ((MP)->used)
  ------------------
 3514|      0|        MP_CHECKOK(s_mp_pad(mp, used + 1));
  ------------------
  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  320|      0|    goto CLEANUP
  ------------------
 3515|      0|        MP_DIGIT(mp, used) = carry;
  ------------------
  |  |  153|      0|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
 3516|      0|    }
 3517|  3.11k|CLEANUP:
 3518|  3.11k|    return res;
 3519|  3.11k|#endif
 3520|  3.11k|} /* end s_mp_add_d() */
s_mp_mul_d:
 3580|   197k|{
 3581|   197k|    mp_err res;
 3582|   197k|    mp_size used;
 3583|   197k|    int pow;
 3584|       |
 3585|   197k|    if (!d) {
  ------------------
  |  Branch (3585:9): [True: 0, False: 197k]
  ------------------
 3586|      0|        mp_zero(a);
 3587|      0|        return MP_OKAY;
  ------------------
  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 3588|      0|    }
 3589|   197k|    if (d == 1)
  ------------------
  |  Branch (3589:9): [True: 5.05k, False: 192k]
  ------------------
 3590|  5.05k|        return MP_OKAY;
  ------------------
  |  |   39|  5.05k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 3591|   192k|    if (0 <= (pow = s_mp_ispow2d(d))) {
  ------------------
  |  Branch (3591:9): [True: 4.09k, False: 188k]
  ------------------
 3592|  4.09k|        return s_mp_mul_2d(a, (mp_digit)pow);
 3593|  4.09k|    }
 3594|       |
 3595|   188k|    used = MP_USED(a);
  ------------------
  |  |  150|   188k|#define MP_USED(MP) ((MP)->used)
  ------------------
 3596|   188k|    MP_CHECKOK(s_mp_pad(a, used + 1));
  ------------------
  |  |  319|   188k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   188k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 188k]
  |  |  ------------------
  |  |  320|   188k|    goto CLEANUP
  ------------------
 3597|       |
 3598|   188k|    s_mpv_mul_d(MP_DIGITS(a), used, d, MP_DIGITS(a));
  ------------------
  |  |  181|   188k|    ((mp_digit *)c)[a_len] = s_mpv_mul_set_vec64(c, a, a_len, b)
  ------------------
 3599|       |
 3600|   188k|    s_mp_clamp(a);
 3601|       |
 3602|   188k|CLEANUP:
 3603|   188k|    return res;
 3604|       |
 3605|   188k|} /* end s_mp_mul_d() */
s_mp_add_3arg:
 3824|  1.84M|{
 3825|  1.84M|    mp_digit *pa, *pb, *pc;
 3826|       |#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_ADD_WORD)
 3827|       |    mp_word w = 0;
 3828|       |#else
 3829|  1.84M|    mp_digit sum, carry = 0, d;
 3830|  1.84M|#endif
 3831|  1.84M|    mp_size ix;
 3832|  1.84M|    mp_size used;
 3833|  1.84M|    mp_err res;
 3834|       |
 3835|  1.84M|    MP_SIGN(c) = MP_SIGN(a);
  ------------------
  |  |  149|  1.84M|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
                  MP_SIGN(c) = MP_SIGN(a);
  ------------------
  |  |  149|  1.84M|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
 3836|  1.84M|    if (MP_USED(a) < MP_USED(b)) {
  ------------------
  |  |  150|  1.84M|#define MP_USED(MP) ((MP)->used)
  ------------------
                  if (MP_USED(a) < MP_USED(b)) {
  ------------------
  |  |  150|  1.84M|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (3836:9): [True: 284k, False: 1.55M]
  ------------------
 3837|   284k|        const mp_int *xch = a;
 3838|   284k|        a = b;
 3839|   284k|        b = xch;
 3840|   284k|    }
 3841|       |
 3842|       |    /* Make sure a has enough precision for the output value */
 3843|  1.84M|    if (MP_OKAY != (res = s_mp_pad(c, MP_USED(a))))
  ------------------
  |  |   39|  1.84M|#define MP_OKAY 0    /* no error, all is well */
  ------------------
                  if (MP_OKAY != (res = s_mp_pad(c, MP_USED(a))))
  ------------------
  |  |  150|  1.84M|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (3843:9): [True: 0, False: 1.84M]
  ------------------
 3844|      0|        return res;
 3845|       |
 3846|       |    /*
 3847|       |     Add up all digits up to the precision of b.  If b had initially
 3848|       |     the same precision as a, or greater, we took care of it by the
 3849|       |     exchange step above, so there is no problem.  If b had initially
 3850|       |     less precision, we'll have to make sure the carry out is duly
 3851|       |     propagated upward among the higher-order digits of the sum.
 3852|       |    */
 3853|  1.84M|    pa = MP_DIGITS(a);
  ------------------
  |  |  152|  1.84M|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 3854|  1.84M|    pb = MP_DIGITS(b);
  ------------------
  |  |  152|  1.84M|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 3855|  1.84M|    pc = MP_DIGITS(c);
  ------------------
  |  |  152|  1.84M|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 3856|  1.84M|    used = MP_USED(b);
  ------------------
  |  |  150|  1.84M|#define MP_USED(MP) ((MP)->used)
  ------------------
 3857|  6.18M|    for (ix = 0; ix < used; ix++) {
  ------------------
  |  Branch (3857:18): [True: 4.33M, False: 1.84M]
  ------------------
 3858|       |#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_ADD_WORD)
 3859|       |        w = w + *pa++ + *pb++;
 3860|       |        *pc++ = ACCUM(w);
 3861|       |        w = CARRYOUT(w);
 3862|       |#else
 3863|  4.33M|        d = *pa++;
 3864|  4.33M|        sum = d + *pb++;
 3865|  4.33M|        d = (sum < d); /* detect overflow */
 3866|  4.33M|        *pc++ = sum += carry;
 3867|  4.33M|        carry = d + (sum < carry); /* detect overflow */
 3868|  4.33M|#endif
 3869|  4.33M|    }
 3870|       |
 3871|       |    /* If we run out of 'b' digits before we're actually done, make
 3872|       |     sure the carries get propagated upward...
 3873|       |   */
 3874|  2.50M|    for (used = MP_USED(a); ix < used; ++ix) {
  ------------------
  |  |  150|  1.84M|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (3874:29): [True: 662k, False: 1.84M]
  ------------------
 3875|       |#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_ADD_WORD)
 3876|       |        w = w + *pa++;
 3877|       |        *pc++ = ACCUM(w);
 3878|       |        w = CARRYOUT(w);
 3879|       |#else
 3880|   662k|        *pc++ = sum = carry + *pa++;
 3881|   662k|        carry = (sum < carry);
 3882|   662k|#endif
 3883|   662k|    }
 3884|       |
 3885|       |/* If there's an overall carry out, increase precision and include
 3886|       |     it.  We could have done this initially, but why touch the memory
 3887|       |     allocator unless we're sure we have to?
 3888|       |   */
 3889|       |#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_ADD_WORD)
 3890|       |    if (w) {
 3891|       |        if ((res = s_mp_pad(c, used + 1)) != MP_OKAY)
 3892|       |            return res;
 3893|       |
 3894|       |        DIGIT(c, used) = (mp_digit)w;
 3895|       |        ++used;
 3896|       |    }
 3897|       |#else
 3898|  1.84M|    if (carry) {
  ------------------
  |  Branch (3898:9): [True: 82.1k, False: 1.75M]
  ------------------
 3899|  82.1k|        if ((res = s_mp_pad(c, used + 1)) != MP_OKAY)
  ------------------
  |  |   39|  82.1k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (3899:13): [True: 0, False: 82.1k]
  ------------------
 3900|      0|            return res;
 3901|       |
 3902|  82.1k|        DIGIT(c, used) = carry;
  ------------------
  |  |  336|  82.1k|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  82.1k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 3903|  82.1k|        ++used;
 3904|  82.1k|    }
 3905|  1.84M|#endif
 3906|  1.84M|    MP_USED(c) = used;
  ------------------
  |  |  150|  1.84M|#define MP_USED(MP) ((MP)->used)
  ------------------
 3907|  1.84M|    return MP_OKAY;
  ------------------
  |  |   39|  1.84M|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 3908|  1.84M|}
s_mp_sub:
 4001|   345k|{
 4002|   345k|    mp_digit *pa, *pb, *limit;
 4003|       |#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_SUB_WORD)
 4004|       |    mp_sword w = 0;
 4005|       |#else
 4006|   345k|    mp_digit d, diff, borrow = 0;
 4007|   345k|#endif
 4008|       |
 4009|       |    /*
 4010|       |    Subtract and propagate borrow.  Up to the precision of b, this
 4011|       |    accounts for the digits of b; after that, we just make sure the
 4012|       |    carries get to the right place.  This saves having to pad b out to
 4013|       |    the precision of a just to make the loops work right...
 4014|       |   */
 4015|   345k|    pa = MP_DIGITS(a);
  ------------------
  |  |  152|   345k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 4016|   345k|    pb = MP_DIGITS(b);
  ------------------
  |  |  152|   345k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 4017|   345k|    limit = pb + MP_USED(b);
  ------------------
  |  |  150|   345k|#define MP_USED(MP) ((MP)->used)
  ------------------
 4018|  9.99M|    while (pb < limit) {
  ------------------
  |  Branch (4018:12): [True: 9.65M, False: 345k]
  ------------------
 4019|       |#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_SUB_WORD)
 4020|       |        w = w + *pa - *pb++;
 4021|       |        *pa++ = ACCUM(w);
 4022|       |        w >>= MP_DIGIT_BIT;
 4023|       |#else
 4024|  9.65M|        d = *pa;
 4025|  9.65M|        diff = d - *pb++;
 4026|  9.65M|        d = (diff > d); /* detect borrow */
 4027|  9.65M|        if (borrow && --diff == MP_DIGIT_MAX)
  ------------------
  |  |   79|  3.28M|#define MP_DIGIT_MAX ULONG_MAX
  ------------------
  |  Branch (4027:13): [True: 3.28M, False: 6.36M]
  |  Branch (4027:23): [True: 259k, False: 3.02M]
  ------------------
 4028|   259k|            ++d;
 4029|  9.65M|        *pa++ = diff;
 4030|  9.65M|        borrow = d;
 4031|  9.65M|#endif
 4032|  9.65M|    }
 4033|   345k|    limit = MP_DIGITS(a) + MP_USED(a);
  ------------------
  |  |  152|   345k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
                  limit = MP_DIGITS(a) + MP_USED(a);
  ------------------
  |  |  150|   345k|#define MP_USED(MP) ((MP)->used)
  ------------------
 4034|       |#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_SUB_WORD)
 4035|       |    while (w && pa < limit) {
 4036|       |        w = w + *pa;
 4037|       |        *pa++ = ACCUM(w);
 4038|       |        w >>= MP_DIGIT_BIT;
 4039|       |    }
 4040|       |#else
 4041|   418k|    while (borrow && pa < limit) {
  ------------------
  |  Branch (4041:12): [True: 73.5k, False: 345k]
  |  Branch (4041:22): [True: 73.5k, False: 0]
  ------------------
 4042|  73.5k|        d = *pa;
 4043|  73.5k|        *pa++ = diff = d - borrow;
 4044|  73.5k|        borrow = (diff > d);
 4045|  73.5k|    }
 4046|   345k|#endif
 4047|       |
 4048|       |    /* Clobber any leading zeroes we created    */
 4049|   345k|    s_mp_clamp(a);
 4050|       |
 4051|       |/*
 4052|       |     If there was a borrow out, then |b| > |a| in violation
 4053|       |     of our input invariant.  We've already done the work,
 4054|       |     but we'll at least complain about it...
 4055|       |   */
 4056|       |#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_SUB_WORD)
 4057|       |    return w ? MP_RANGE : MP_OKAY;
 4058|       |#else
 4059|   345k|    return borrow ? MP_RANGE : MP_OKAY;
  ------------------
  |  |   43|      0|#define MP_RANGE -3  /* argument out of range */
  ------------------
                  return borrow ? MP_RANGE : MP_OKAY;
  ------------------
  |  |   39|   345k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (4059:12): [True: 0, False: 345k]
  ------------------
 4060|   345k|#endif
 4061|   345k|} /* end s_mp_sub() */
s_mp_sub_3arg:
 4068|  1.43M|{
 4069|  1.43M|    mp_digit *pa, *pb, *pc;
 4070|       |#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_SUB_WORD)
 4071|       |    mp_sword w = 0;
 4072|       |#else
 4073|  1.43M|    mp_digit d, diff, borrow = 0;
 4074|  1.43M|#endif
 4075|  1.43M|    int ix, limit;
 4076|  1.43M|    mp_err res;
 4077|       |
 4078|  1.43M|    MP_SIGN(c) = MP_SIGN(a);
  ------------------
  |  |  149|  1.43M|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
                  MP_SIGN(c) = MP_SIGN(a);
  ------------------
  |  |  149|  1.43M|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
 4079|       |
 4080|       |    /* Make sure a has enough precision for the output value */
 4081|  1.43M|    if (MP_OKAY != (res = s_mp_pad(c, MP_USED(a))))
  ------------------
  |  |   39|  1.43M|#define MP_OKAY 0    /* no error, all is well */
  ------------------
                  if (MP_OKAY != (res = s_mp_pad(c, MP_USED(a))))
  ------------------
  |  |  150|  1.43M|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (4081:9): [True: 0, False: 1.43M]
  ------------------
 4082|      0|        return res;
 4083|       |
 4084|       |    /*
 4085|       |    Subtract and propagate borrow.  Up to the precision of b, this
 4086|       |    accounts for the digits of b; after that, we just make sure the
 4087|       |    carries get to the right place.  This saves having to pad b out to
 4088|       |    the precision of a just to make the loops work right...
 4089|       |   */
 4090|  1.43M|    pa = MP_DIGITS(a);
  ------------------
  |  |  152|  1.43M|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 4091|  1.43M|    pb = MP_DIGITS(b);
  ------------------
  |  |  152|  1.43M|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 4092|  1.43M|    pc = MP_DIGITS(c);
  ------------------
  |  |  152|  1.43M|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 4093|  1.43M|    limit = MP_USED(b);
  ------------------
  |  |  150|  1.43M|#define MP_USED(MP) ((MP)->used)
  ------------------
 4094|  23.7M|    for (ix = 0; ix < limit; ++ix) {
  ------------------
  |  Branch (4094:18): [True: 22.3M, False: 1.43M]
  ------------------
 4095|       |#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_SUB_WORD)
 4096|       |        w = w + *pa++ - *pb++;
 4097|       |        *pc++ = ACCUM(w);
 4098|       |        w >>= MP_DIGIT_BIT;
 4099|       |#else
 4100|  22.3M|        d = *pa++;
 4101|  22.3M|        diff = d - *pb++;
 4102|  22.3M|        d = (diff > d);
 4103|  22.3M|        if (borrow && --diff == MP_DIGIT_MAX)
  ------------------
  |  |   79|  8.79M|#define MP_DIGIT_MAX ULONG_MAX
  ------------------
  |  Branch (4103:13): [True: 8.79M, False: 13.5M]
  |  Branch (4103:23): [True: 73.1k, False: 8.71M]
  ------------------
 4104|  73.1k|            ++d;
 4105|  22.3M|        *pc++ = diff;
 4106|  22.3M|        borrow = d;
 4107|  22.3M|#endif
 4108|  22.3M|    }
 4109|  1.82M|    for (limit = MP_USED(a); ix < limit; ++ix) {
  ------------------
  |  |  150|  1.43M|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (4109:30): [True: 396k, False: 1.43M]
  ------------------
 4110|       |#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_SUB_WORD)
 4111|       |        w = w + *pa++;
 4112|       |        *pc++ = ACCUM(w);
 4113|       |        w >>= MP_DIGIT_BIT;
 4114|       |#else
 4115|   396k|        d = *pa++;
 4116|   396k|        *pc++ = diff = d - borrow;
 4117|   396k|        borrow = (diff > d);
 4118|   396k|#endif
 4119|   396k|    }
 4120|       |
 4121|       |    /* Clobber any leading zeroes we created    */
 4122|  1.43M|    MP_USED(c) = ix;
  ------------------
  |  |  150|  1.43M|#define MP_USED(MP) ((MP)->used)
  ------------------
 4123|  1.43M|    s_mp_clamp(c);
 4124|       |
 4125|       |/*
 4126|       |     If there was a borrow out, then |b| > |a| in violation
 4127|       |     of our input invariant.  We've already done the work,
 4128|       |     but we'll at least complain about it...
 4129|       |   */
 4130|       |#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_SUB_WORD)
 4131|       |    return w ? MP_RANGE : MP_OKAY;
 4132|       |#else
 4133|  1.43M|    return borrow ? MP_RANGE : MP_OKAY;
  ------------------
  |  |   43|      0|#define MP_RANGE -3  /* argument out of range */
  ------------------
                  return borrow ? MP_RANGE : MP_OKAY;
  ------------------
  |  |   39|  1.43M|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (4133:12): [True: 0, False: 1.43M]
  ------------------
 4134|  1.43M|#endif
 4135|  1.43M|}
s_mp_mul:
 4141|  1.56M|{
 4142|  1.56M|    return mp_mul(a, b, a);
 4143|  1.56M|} /* end s_mp_mul() */
s_mpv_sqr_add_prop:
 4364|  44.5k|{
 4365|       |#if !defined(MP_NO_MP_WORD) && !defined(MP_NO_MUL_WORD)
 4366|       |    mp_word w;
 4367|       |    mp_digit d;
 4368|       |    mp_size ix;
 4369|       |
 4370|       |    w = 0;
 4371|       |#define ADD_SQUARE(n)                     \
 4372|       |    d = pa[n];                            \
 4373|       |    w += (d * (mp_word)d) + ps[2 * n];    \
 4374|       |    ps[2 * n] = ACCUM(w);                 \
 4375|       |    w = (w >> DIGIT_BIT) + ps[2 * n + 1]; \
 4376|       |    ps[2 * n + 1] = ACCUM(w);             \
 4377|       |    w = (w >> DIGIT_BIT)
 4378|       |
 4379|       |    for (ix = a_len; ix >= 4; ix -= 4) {
 4380|       |        ADD_SQUARE(0);
 4381|       |        ADD_SQUARE(1);
 4382|       |        ADD_SQUARE(2);
 4383|       |        ADD_SQUARE(3);
 4384|       |        pa += 4;
 4385|       |        ps += 8;
 4386|       |    }
 4387|       |    if (ix) {
 4388|       |        ps += 2 * ix;
 4389|       |        pa += ix;
 4390|       |        switch (ix) {
 4391|       |            case 3:
 4392|       |                ADD_SQUARE(-3); /* FALLTHRU */
 4393|       |            case 2:
 4394|       |                ADD_SQUARE(-2); /* FALLTHRU */
 4395|       |            case 1:
 4396|       |                ADD_SQUARE(-1); /* FALLTHRU */
 4397|       |            case 0:
 4398|       |                break;
 4399|       |        }
 4400|       |    }
 4401|       |    while (w) {
 4402|       |        w += *ps;
 4403|       |        *ps++ = ACCUM(w);
 4404|       |        w = (w >> DIGIT_BIT);
 4405|       |    }
 4406|       |#else
 4407|  44.5k|    mp_digit carry = 0;
 4408|   366k|    while (a_len--) {
  ------------------
  |  Branch (4408:12): [True: 321k, False: 44.5k]
  ------------------
 4409|   321k|        mp_digit a_i = *pa++;
 4410|   321k|        mp_digit a0a0, a1a1;
 4411|       |
 4412|   321k|        MP_SQR_D(a_i, a1a1, a0a0);
  ------------------
  |  | 4347|   321k|    {                                                              \
  |  | 4348|   321k|        mp_digit Pmid;                                             \
  |  | 4349|   321k|        Plo = (a & MP_HALF_DIGIT_MAX) * (a & MP_HALF_DIGIT_MAX);   \
  |  |  ------------------
  |  |  |  |   81|   321k|#define MP_HALF_DIGIT_MAX UINT_MAX
  |  |  ------------------
  |  |                       Plo = (a & MP_HALF_DIGIT_MAX) * (a & MP_HALF_DIGIT_MAX);   \
  |  |  ------------------
  |  |  |  |   81|   321k|#define MP_HALF_DIGIT_MAX UINT_MAX
  |  |  ------------------
  |  | 4350|   321k|        Phi = (a >> MP_HALF_DIGIT_BIT) * (a >> MP_HALF_DIGIT_BIT); \
  |  |  ------------------
  |  |  |  |  141|   321k|#define MP_HALF_DIGIT_BIT (MP_DIGIT_BIT / 2)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|   321k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  136|   321k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       Phi = (a >> MP_HALF_DIGIT_BIT) * (a >> MP_HALF_DIGIT_BIT); \
  |  |  ------------------
  |  |  |  |  141|   321k|#define MP_HALF_DIGIT_BIT (MP_DIGIT_BIT / 2)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|   321k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  136|   321k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4351|   321k|        Pmid = (a & MP_HALF_DIGIT_MAX) * (a >> MP_HALF_DIGIT_BIT); \
  |  |  ------------------
  |  |  |  |   81|   321k|#define MP_HALF_DIGIT_MAX UINT_MAX
  |  |  ------------------
  |  |                       Pmid = (a & MP_HALF_DIGIT_MAX) * (a >> MP_HALF_DIGIT_BIT); \
  |  |  ------------------
  |  |  |  |  141|   321k|#define MP_HALF_DIGIT_BIT (MP_DIGIT_BIT / 2)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|   321k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  136|   321k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4352|   321k|        Phi += Pmid >> (MP_HALF_DIGIT_BIT - 1);                    \
  |  |  ------------------
  |  |  |  |  141|   321k|#define MP_HALF_DIGIT_BIT (MP_DIGIT_BIT / 2)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|   321k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  136|   321k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4353|   321k|        Pmid <<= (MP_HALF_DIGIT_BIT + 1);                          \
  |  |  ------------------
  |  |  |  |  141|   321k|#define MP_HALF_DIGIT_BIT (MP_DIGIT_BIT / 2)
  |  |  |  |  ------------------
  |  |  |  |  |  |  137|   321k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  136|   321k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 4354|   321k|        Plo += Pmid;                                               \
  |  | 4355|   321k|        if (Plo < Pmid)                                            \
  |  |  ------------------
  |  |  |  Branch (4355:13): [True: 59.2k, False: 262k]
  |  |  ------------------
  |  | 4356|   321k|            ++Phi;                                                 \
  |  | 4357|   321k|    }
  ------------------
 4413|       |
 4414|       |        /* here a1a1 and a0a0 constitute a_i ** 2 */
 4415|   321k|        a0a0 += carry;
 4416|   321k|        if (a0a0 < carry)
  ------------------
  |  Branch (4416:13): [True: 0, False: 321k]
  ------------------
 4417|      0|            ++a1a1;
 4418|       |
 4419|       |        /* now add to ps */
 4420|   321k|        a0a0 += a_i = *ps;
 4421|   321k|        if (a0a0 < a_i)
  ------------------
  |  Branch (4421:13): [True: 70.7k, False: 251k]
  ------------------
 4422|  70.7k|            ++a1a1;
 4423|   321k|        *ps++ = a0a0;
 4424|   321k|        a1a1 += a_i = *ps;
 4425|   321k|        carry = (a1a1 < a_i);
 4426|   321k|        *ps++ = a1a1;
 4427|   321k|    }
 4428|  44.5k|    while (carry) {
  ------------------
  |  Branch (4428:12): [True: 0, False: 44.5k]
  ------------------
 4429|      0|        mp_digit s_i = *ps;
 4430|      0|        carry += s_i;
 4431|      0|        *ps++ = carry;
 4432|      0|        carry = carry < s_i;
 4433|      0|    }
 4434|  44.5k|#endif
 4435|  44.5k|}
s_mpv_div_2dx1d:
 4446|   192k|{
 4447|   192k|    mp_digit d1, d0, q1, q0;
 4448|   192k|    mp_digit r1, r0, m;
 4449|       |
 4450|   192k|    d1 = divisor >> MP_HALF_DIGIT_BIT;
  ------------------
  |  |  141|   192k|#define MP_HALF_DIGIT_BIT (MP_DIGIT_BIT / 2)
  |  |  ------------------
  |  |  |  |  137|   192k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|   192k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4451|   192k|    d0 = divisor & MP_HALF_DIGIT_MAX;
  ------------------
  |  |   81|   192k|#define MP_HALF_DIGIT_MAX UINT_MAX
  ------------------
 4452|   192k|    r1 = Nhi % d1;
 4453|   192k|    q1 = Nhi / d1;
 4454|   192k|    m = q1 * d0;
 4455|   192k|    r1 = (r1 << MP_HALF_DIGIT_BIT) | (Nlo >> MP_HALF_DIGIT_BIT);
  ------------------
  |  |  141|   192k|#define MP_HALF_DIGIT_BIT (MP_DIGIT_BIT / 2)
  |  |  ------------------
  |  |  |  |  137|   192k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|   192k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  r1 = (r1 << MP_HALF_DIGIT_BIT) | (Nlo >> MP_HALF_DIGIT_BIT);
  ------------------
  |  |  141|   192k|#define MP_HALF_DIGIT_BIT (MP_DIGIT_BIT / 2)
  |  |  ------------------
  |  |  |  |  137|   192k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|   192k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4456|   192k|    if (r1 < m) {
  ------------------
  |  Branch (4456:9): [True: 52.4k, False: 139k]
  ------------------
 4457|  52.4k|        q1--, r1 += divisor;
 4458|  52.4k|        if (r1 >= divisor && r1 < m) {
  ------------------
  |  Branch (4458:13): [True: 27.8k, False: 24.6k]
  |  Branch (4458:30): [True: 4.21k, False: 23.5k]
  ------------------
 4459|  4.21k|            q1--, r1 += divisor;
 4460|  4.21k|        }
 4461|  52.4k|    }
 4462|   192k|    r1 -= m;
 4463|   192k|    r0 = r1 % d1;
 4464|   192k|    q0 = r1 / d1;
 4465|   192k|    m = q0 * d0;
 4466|   192k|    r0 = (r0 << MP_HALF_DIGIT_BIT) | (Nlo & MP_HALF_DIGIT_MAX);
  ------------------
  |  |  141|   192k|#define MP_HALF_DIGIT_BIT (MP_DIGIT_BIT / 2)
  |  |  ------------------
  |  |  |  |  137|   192k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|   192k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  r0 = (r0 << MP_HALF_DIGIT_BIT) | (Nlo & MP_HALF_DIGIT_MAX);
  ------------------
  |  |   81|   192k|#define MP_HALF_DIGIT_MAX UINT_MAX
  ------------------
 4467|   192k|    if (r0 < m) {
  ------------------
  |  Branch (4467:9): [True: 53.4k, False: 138k]
  ------------------
 4468|  53.4k|        q0--, r0 += divisor;
 4469|  53.4k|        if (r0 >= divisor && r0 < m) {
  ------------------
  |  Branch (4469:13): [True: 28.3k, False: 25.0k]
  |  Branch (4469:30): [True: 4.11k, False: 24.2k]
  ------------------
 4470|  4.11k|            q0--, r0 += divisor;
 4471|  4.11k|        }
 4472|  53.4k|    }
 4473|   192k|    if (qp)
  ------------------
  |  Branch (4473:9): [True: 192k, False: 0]
  ------------------
 4474|   192k|        *qp = (q1 << MP_HALF_DIGIT_BIT) | q0;
  ------------------
  |  |  141|   192k|#define MP_HALF_DIGIT_BIT (MP_DIGIT_BIT / 2)
  |  |  ------------------
  |  |  |  |  137|   192k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|   192k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4475|   192k|    if (rp)
  ------------------
  |  Branch (4475:9): [True: 192k, False: 0]
  ------------------
 4476|   192k|        *rp = r0 - m;
 4477|   192k|    return MP_OKAY;
  ------------------
  |  |   39|   192k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 4478|   192k|}
s_mp_sqr:
 4486|   444k|{
 4487|   444k|    mp_err res;
 4488|   444k|    mp_int tmp;
 4489|       |
 4490|   444k|    if ((res = mp_init_size(&tmp, 2 * USED(a))) != MP_OKAY)
  ------------------
  |  |  333|   444k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   444k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                  if ((res = mp_init_size(&tmp, 2 * USED(a))) != MP_OKAY)
  ------------------
  |  |   39|   444k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (4490:9): [True: 0, False: 444k]
  ------------------
 4491|      0|        return res;
 4492|   444k|    res = mp_sqr(a, &tmp);
 4493|   444k|    if (res == MP_OKAY) {
  ------------------
  |  |   39|   444k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (4493:9): [True: 444k, False: 0]
  ------------------
 4494|   444k|        s_mp_exch(&tmp, a);
 4495|   444k|    }
 4496|   444k|    mp_clear(&tmp);
 4497|   444k|    return res;
 4498|   444k|}
s_mp_div:
 4515|  14.0k|{
 4516|  14.0k|    mp_int part, t;
 4517|  14.0k|    mp_digit q_msd;
 4518|  14.0k|    mp_err res;
 4519|  14.0k|    mp_digit d;
 4520|  14.0k|    mp_digit div_msd;
 4521|  14.0k|    int ix;
 4522|       |
 4523|  14.0k|    if (mp_cmp_z(div) == 0)
  ------------------
  |  Branch (4523:9): [True: 0, False: 14.0k]
  ------------------
 4524|      0|        return MP_RANGE;
  ------------------
  |  |   43|      0|#define MP_RANGE -3  /* argument out of range */
  ------------------
 4525|       |
 4526|  14.0k|    DIGITS(&t) = 0;
  ------------------
  |  |  335|  14.0k|#define DIGITS(MP) MP_DIGITS(MP)
  |  |  ------------------
  |  |  |  |  152|  14.0k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
 4527|       |    /* Shortcut if divisor is power of two */
 4528|  14.0k|    if ((ix = s_mp_ispow2(div)) >= 0) {
  ------------------
  |  Branch (4528:9): [True: 732, False: 13.3k]
  ------------------
 4529|    732|        MP_CHECKOK(mp_copy(rem, quot));
  ------------------
  |  |  319|    732|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|    732|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 732]
  |  |  ------------------
  |  |  320|    732|    goto CLEANUP
  ------------------
 4530|    732|        s_mp_div_2d(quot, (mp_digit)ix);
 4531|    732|        s_mp_mod_2d(rem, (mp_digit)ix);
 4532|       |
 4533|    732|        return MP_OKAY;
  ------------------
  |  |   39|    732|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 4534|    732|    }
 4535|       |
 4536|  13.3k|    MP_SIGN(rem) = ZPOS;
  ------------------
  |  |  149|  13.3k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
                  MP_SIGN(rem) = ZPOS;
  ------------------
  |  |  326|  13.3k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|  13.3k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
 4537|  13.3k|    MP_SIGN(div) = ZPOS;
  ------------------
  |  |  149|  13.3k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
                  MP_SIGN(div) = ZPOS;
  ------------------
  |  |  326|  13.3k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|  13.3k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
 4538|  13.3k|    MP_SIGN(&part) = ZPOS;
  ------------------
  |  |  149|  13.3k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
                  MP_SIGN(&part) = ZPOS;
  ------------------
  |  |  326|  13.3k|#define ZPOS MP_ZPOS
  |  |  ------------------
  |  |  |  |   37|  13.3k|#define MP_ZPOS 0
  |  |  ------------------
  ------------------
 4539|       |
 4540|       |    /* A working temporary for division     */
 4541|  13.3k|    MP_CHECKOK(mp_init_size(&t, MP_ALLOC(rem)));
  ------------------
  |  |  319|  13.3k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  13.3k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 13.3k]
  |  |  ------------------
  |  |  320|  13.3k|    goto CLEANUP
  ------------------
 4542|       |
 4543|       |    /* Normalize to optimize guessing       */
 4544|  13.3k|    MP_CHECKOK(s_mp_norm(rem, div, &d));
  ------------------
  |  |  319|  13.3k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  13.3k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 13.3k]
  |  |  ------------------
  |  |  320|  13.3k|    goto CLEANUP
  ------------------
 4545|       |
 4546|       |    /* Perform the division itself...woo!   */
 4547|  13.3k|    MP_USED(quot) = MP_ALLOC(quot);
  ------------------
  |  |  150|  13.3k|#define MP_USED(MP) ((MP)->used)
  ------------------
                  MP_USED(quot) = MP_ALLOC(quot);
  ------------------
  |  |  151|  13.3k|#define MP_ALLOC(MP) ((MP)->alloc)
  ------------------
 4548|       |
 4549|       |    /* Find a partial substring of rem which is at least div */
 4550|       |    /* If we didn't find one, we're finished dividing    */
 4551|   210k|    while (MP_USED(rem) > MP_USED(div) || s_mp_cmp(rem, div) >= 0) {
  ------------------
  |  |  150|   210k|#define MP_USED(MP) ((MP)->used)
  ------------------
                  while (MP_USED(rem) > MP_USED(div) || s_mp_cmp(rem, div) >= 0) {
  ------------------
  |  |  150|   421k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (4551:12): [True: 196k, False: 14.3k]
  |  Branch (4551:43): [True: 1.04k, False: 13.3k]
  ------------------
 4552|   197k|        int i;
 4553|   197k|        int unusedRem;
 4554|   197k|        int partExtended = 0; /* set to true if we need to extend part */
 4555|       |
 4556|   197k|        unusedRem = MP_USED(rem) - MP_USED(div);
  ------------------
  |  |  150|   197k|#define MP_USED(MP) ((MP)->used)
  ------------------
                      unusedRem = MP_USED(rem) - MP_USED(div);
  ------------------
  |  |  150|   197k|#define MP_USED(MP) ((MP)->used)
  ------------------
 4557|   197k|        MP_DIGITS(&part) = MP_DIGITS(rem) + unusedRem;
  ------------------
  |  |  152|   197k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
                      MP_DIGITS(&part) = MP_DIGITS(rem) + unusedRem;
  ------------------
  |  |  152|   197k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 4558|   197k|        MP_ALLOC(&part) = MP_ALLOC(rem) - unusedRem;
  ------------------
  |  |  151|   197k|#define MP_ALLOC(MP) ((MP)->alloc)
  ------------------
                      MP_ALLOC(&part) = MP_ALLOC(rem) - unusedRem;
  ------------------
  |  |  151|   197k|#define MP_ALLOC(MP) ((MP)->alloc)
  ------------------
 4559|   197k|        MP_USED(&part) = MP_USED(div);
  ------------------
  |  |  150|   197k|#define MP_USED(MP) ((MP)->used)
  ------------------
                      MP_USED(&part) = MP_USED(div);
  ------------------
  |  |  150|   197k|#define MP_USED(MP) ((MP)->used)
  ------------------
 4560|       |
 4561|       |        /* We have now truncated the part of the remainder to the same length as
 4562|       |         * the divisor. If part is smaller than div, extend part by one digit. */
 4563|   197k|        if (s_mp_cmp(&part, div) < 0) {
  ------------------
  |  Branch (4563:13): [True: 195k, False: 1.40k]
  ------------------
 4564|   195k|            --unusedRem;
 4565|   195k|#if MP_ARGCHK == 2
 4566|   195k|            assert(unusedRem >= 0);
 4567|   195k|#endif
 4568|   195k|            --MP_DIGITS(&part);
  ------------------
  |  |  152|   195k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 4569|   195k|            ++MP_USED(&part);
  ------------------
  |  |  150|   195k|#define MP_USED(MP) ((MP)->used)
  ------------------
 4570|   195k|            ++MP_ALLOC(&part);
  ------------------
  |  |  151|   195k|#define MP_ALLOC(MP) ((MP)->alloc)
  ------------------
 4571|   195k|            partExtended = 1;
 4572|   195k|        }
 4573|       |
 4574|       |        /* Compute a guess for the next quotient digit       */
 4575|   197k|        q_msd = MP_DIGIT(&part, MP_USED(&part) - 1);
  ------------------
  |  |  153|   197k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
 4576|   197k|        div_msd = MP_DIGIT(div, MP_USED(div) - 1);
  ------------------
  |  |  153|   197k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
 4577|   197k|        if (!partExtended) {
  ------------------
  |  Branch (4577:13): [True: 1.40k, False: 195k]
  ------------------
 4578|       |            /* In this case, q_msd /= div_msd is always 1. First, since div_msd is
 4579|       |             * normalized to have the high bit set, 2*div_msd > MP_DIGIT_MAX. Since
 4580|       |             * we didn't extend part, q_msd >= div_msd. Therefore we know that
 4581|       |             * div_msd <= q_msd <= MP_DIGIT_MAX < 2*div_msd. Dividing by div_msd we
 4582|       |             * get 1 <= q_msd/div_msd < 2. So q_msd /= div_msd must be 1. */
 4583|  1.40k|            q_msd = 1;
 4584|   195k|        } else {
 4585|   195k|            if (q_msd == div_msd) {
  ------------------
  |  Branch (4585:17): [True: 3.83k, False: 192k]
  ------------------
 4586|  3.83k|                q_msd = MP_DIGIT_MAX;
  ------------------
  |  |   79|  3.83k|#define MP_DIGIT_MAX ULONG_MAX
  ------------------
 4587|   192k|            } else {
 4588|   192k|                mp_digit r;
 4589|   192k|                MP_CHECKOK(s_mpv_div_2dx1d(q_msd, MP_DIGIT(&part, MP_USED(&part) - 2),
  ------------------
  |  |  319|   192k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   192k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 192k]
  |  |  ------------------
  |  |  320|   192k|    goto CLEANUP
  ------------------
 4590|   192k|                                           div_msd, &q_msd, &r));
 4591|   192k|            }
 4592|   195k|        }
 4593|   197k|#if MP_ARGCHK == 2
 4594|   197k|        assert(q_msd > 0); /* This case should never occur any more. */
 4595|   197k|#endif
 4596|   197k|        if (q_msd <= 0)
  ------------------
  |  Branch (4596:13): [True: 0, False: 197k]
  ------------------
 4597|      0|            break;
 4598|       |
 4599|       |        /* See what that multiplies out to                   */
 4600|   197k|        mp_copy(div, &t);
 4601|   197k|        MP_CHECKOK(s_mp_mul_d(&t, q_msd));
  ------------------
  |  |  319|   197k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   197k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 197k]
  |  |  ------------------
  |  |  320|   197k|    goto CLEANUP
  ------------------
 4602|       |
 4603|       |        /*
 4604|       |           If it's too big, back it off.  We should not have to do this
 4605|       |           more than once, or, in rare cases, twice.  Knuth describes a
 4606|       |           method by which this could be reduced to a maximum of once, but
 4607|       |           I didn't implement that here.
 4608|       |           When using s_mpv_div_2dx1d, we may have to do this 3 times.
 4609|       |         */
 4610|   245k|        for (i = 4; s_mp_cmp(&t, &part) > 0 && i > 0; --i) {
  ------------------
  |  Branch (4610:21): [True: 47.8k, False: 197k]
  |  Branch (4610:48): [True: 47.8k, False: 0]
  ------------------
 4611|  47.8k|            --q_msd;
 4612|  47.8k|            MP_CHECKOK(s_mp_sub(&t, div)); /* t -= div */
  ------------------
  |  |  319|  47.8k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  47.8k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 47.8k]
  |  |  ------------------
  |  |  320|  47.8k|    goto CLEANUP
  ------------------
 4613|  47.8k|        }
 4614|   197k|        if (i < 0) {
  ------------------
  |  Branch (4614:13): [True: 0, False: 197k]
  ------------------
 4615|      0|            res = MP_RANGE;
  ------------------
  |  |   43|      0|#define MP_RANGE -3  /* argument out of range */
  ------------------
 4616|      0|            goto CLEANUP;
 4617|      0|        }
 4618|       |
 4619|       |        /* At this point, q_msd should be the right next digit   */
 4620|   197k|        MP_CHECKOK(s_mp_sub(&part, &t)); /* part -= t */
  ------------------
  |  |  319|   197k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   197k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 197k]
  |  |  ------------------
  |  |  320|   197k|    goto CLEANUP
  ------------------
 4621|   197k|        s_mp_clamp(rem);
 4622|       |
 4623|       |        /*
 4624|       |          Include the digit in the quotient.  We allocated enough memory
 4625|       |          for any quotient we could ever possibly get, so we should not
 4626|       |          have to check for failures here
 4627|       |         */
 4628|   197k|        MP_DIGIT(quot, unusedRem) = q_msd;
  ------------------
  |  |  153|   197k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
 4629|   197k|    }
 4630|       |
 4631|       |    /* Denormalize remainder                */
 4632|  13.3k|    if (d) {
  ------------------
  |  Branch (4632:9): [True: 3.89k, False: 9.45k]
  ------------------
 4633|  3.89k|        s_mp_div_2d(rem, d);
 4634|  3.89k|    }
 4635|       |
 4636|  13.3k|    s_mp_clamp(quot);
 4637|       |
 4638|  13.3k|CLEANUP:
 4639|  13.3k|    mp_clear(&t);
 4640|       |
 4641|  13.3k|    return res;
 4642|       |
 4643|  13.3k|} /* end s_mp_div() */
s_mp_2expt:
 4651|  2.44k|{
 4652|  2.44k|    mp_err res;
 4653|  2.44k|    mp_size dig, bit;
 4654|       |
 4655|  2.44k|    dig = k / DIGIT_BIT;
  ------------------
  |  |  328|  2.44k|#define DIGIT_BIT MP_DIGIT_BIT
  |  |  ------------------
  |  |  |  |  137|  2.44k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|  2.44k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4656|  2.44k|    bit = k % DIGIT_BIT;
  ------------------
  |  |  328|  2.44k|#define DIGIT_BIT MP_DIGIT_BIT
  |  |  ------------------
  |  |  |  |  137|  2.44k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|  2.44k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4657|       |
 4658|  2.44k|    mp_zero(a);
 4659|  2.44k|    if ((res = s_mp_pad(a, dig + 1)) != MP_OKAY)
  ------------------
  |  |   39|  2.44k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (4659:9): [True: 0, False: 2.44k]
  ------------------
 4660|      0|        return res;
 4661|       |
 4662|  2.44k|    DIGIT(a, dig) |= ((mp_digit)1 << bit);
  ------------------
  |  |  336|  2.44k|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  2.44k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 4663|       |
 4664|  2.44k|    return MP_OKAY;
  ------------------
  |  |   39|  2.44k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 4665|       |
 4666|  2.44k|} /* end s_mp_2expt() */
s_mp_reduce:
 4687|   669k|{
 4688|   669k|    mp_int q;
 4689|   669k|    mp_err res;
 4690|       |
 4691|   669k|    if ((res = mp_init_copy(&q, x)) != MP_OKAY)
  ------------------
  |  |   39|   669k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (4691:9): [True: 0, False: 669k]
  ------------------
 4692|      0|        return res;
 4693|       |
 4694|   669k|    s_mp_rshd(&q, USED(m) - 1); /* q1 = x / b^(k-1)  */
  ------------------
  |  |  333|   669k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   669k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
 4695|   669k|    s_mp_mul(&q, mu);           /* q2 = q1 * mu      */
 4696|   669k|    s_mp_rshd(&q, USED(m) + 1); /* q3 = q2 / b^(k+1) */
  ------------------
  |  |  333|   669k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   669k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
 4697|       |
 4698|       |    /* x = x mod b^(k+1), quick (no division) */
 4699|   669k|    s_mp_mod_2d(x, DIGIT_BIT * (USED(m) + 1));
  ------------------
  |  |  328|   669k|#define DIGIT_BIT MP_DIGIT_BIT
  |  |  ------------------
  |  |  |  |  137|   669k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|   669k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  s_mp_mod_2d(x, DIGIT_BIT * (USED(m) + 1));
  ------------------
  |  |  333|   669k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   669k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
 4700|       |
 4701|       |    /* q = q * m mod b^(k+1), quick (no division) */
 4702|   669k|    s_mp_mul(&q, m);
 4703|   669k|    s_mp_mod_2d(&q, DIGIT_BIT * (USED(m) + 1));
  ------------------
  |  |  328|   669k|#define DIGIT_BIT MP_DIGIT_BIT
  |  |  ------------------
  |  |  |  |  137|   669k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|   669k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  s_mp_mod_2d(&q, DIGIT_BIT * (USED(m) + 1));
  ------------------
  |  |  333|   669k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|   669k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
 4704|       |
 4705|       |    /* x = x - q */
 4706|   669k|    if ((res = mp_sub(x, &q, x)) != MP_OKAY)
  ------------------
  |  |   39|   669k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (4706:9): [True: 0, False: 669k]
  ------------------
 4707|      0|        goto CLEANUP;
 4708|       |
 4709|       |    /* If x < 0, add b^(k+1) to it */
 4710|   669k|    if (mp_cmp_z(x) < 0) {
  ------------------
  |  Branch (4710:9): [True: 35.1k, False: 634k]
  ------------------
 4711|  35.1k|        mp_set(&q, 1);
 4712|  35.1k|        if ((res = s_mp_lshd(&q, USED(m) + 1)) != MP_OKAY)
  ------------------
  |  |  333|  35.1k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  35.1k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                      if ((res = s_mp_lshd(&q, USED(m) + 1)) != MP_OKAY)
  ------------------
  |  |   39|  35.1k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (4712:13): [True: 0, False: 35.1k]
  ------------------
 4713|      0|            goto CLEANUP;
 4714|  35.1k|        if ((res = mp_add(x, &q, x)) != MP_OKAY)
  ------------------
  |  |   39|  35.1k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (4714:13): [True: 0, False: 35.1k]
  ------------------
 4715|      0|            goto CLEANUP;
 4716|  35.1k|    }
 4717|       |
 4718|       |    /* Back off if it's too big */
 4719|   710k|    while (mp_cmp(x, m) >= 0) {
  ------------------
  |  Branch (4719:12): [True: 41.5k, False: 669k]
  ------------------
 4720|  41.5k|        if ((res = s_mp_sub(x, m)) != MP_OKAY)
  ------------------
  |  |   39|  41.5k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (4720:13): [True: 0, False: 41.5k]
  ------------------
 4721|      0|            break;
 4722|  41.5k|    }
 4723|       |
 4724|   669k|CLEANUP:
 4725|   669k|    mp_clear(&q);
 4726|       |
 4727|   669k|    return res;
 4728|       |
 4729|   669k|} /* end s_mp_reduce() */
s_mp_cmp:
 4742|  3.00M|{
 4743|  3.00M|    ARGMPCHK(a != NULL && b != NULL);
  ------------------
  |  |  354|  3.00M|#define ARGMPCHK(X) assert(X)
  ------------------
 4744|       |
 4745|  3.00M|    mp_size used_a = MP_USED(a);
  ------------------
  |  |  150|  3.00M|#define MP_USED(MP) ((MP)->used)
  ------------------
 4746|  3.00M|    {
 4747|  3.00M|        mp_size used_b = MP_USED(b);
  ------------------
  |  |  150|  3.00M|#define MP_USED(MP) ((MP)->used)
  ------------------
 4748|       |
 4749|  3.00M|        if (used_a > used_b)
  ------------------
  |  Branch (4749:13): [True: 84.1k, False: 2.92M]
  ------------------
 4750|  84.1k|            goto IS_GT;
 4751|  2.92M|        if (used_a < used_b)
  ------------------
  |  Branch (4751:13): [True: 188k, False: 2.73M]
  ------------------
 4752|   188k|            goto IS_LT;
 4753|  2.92M|    }
 4754|  2.73M|    {
 4755|  2.73M|        mp_digit *pa, *pb;
 4756|  2.73M|        mp_digit da = 0, db = 0;
 4757|       |
 4758|  2.73M|#define CMP_AB(n)                     \
 4759|  2.73M|    if ((da = pa[n]) != (db = pb[n])) \
 4760|  2.73M|    goto done
 4761|       |
 4762|  2.73M|        pa = MP_DIGITS(a) + used_a;
  ------------------
  |  |  152|  2.73M|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 4763|  2.73M|        pb = MP_DIGITS(b) + used_a;
  ------------------
  |  |  152|  2.73M|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 4764|  2.75M|        while (used_a >= 4) {
  ------------------
  |  Branch (4764:16): [True: 2.15M, False: 605k]
  ------------------
 4765|  2.15M|            pa -= 4;
 4766|  2.15M|            pb -= 4;
 4767|  2.15M|            used_a -= 4;
 4768|  2.15M|            CMP_AB(3);
  ------------------
  |  | 4759|  2.15M|    if ((da = pa[n]) != (db = pb[n])) \
  |  |  ------------------
  |  |  |  Branch (4759:9): [True: 1.59M, False: 554k]
  |  |  ------------------
  |  | 4760|  2.15M|    goto done
  ------------------
 4769|   554k|            CMP_AB(2);
  ------------------
  |  | 4759|   554k|    if ((da = pa[n]) != (db = pb[n])) \
  |  |  ------------------
  |  |  |  Branch (4759:9): [True: 519k, False: 34.8k]
  |  |  ------------------
  |  | 4760|   554k|    goto done
  ------------------
 4770|  34.8k|            CMP_AB(1);
  ------------------
  |  | 4759|  34.8k|    if ((da = pa[n]) != (db = pb[n])) \
  |  |  ------------------
  |  |  |  Branch (4759:9): [True: 5.23k, False: 29.6k]
  |  |  ------------------
  |  | 4760|  34.8k|    goto done
  ------------------
 4771|  29.6k|            CMP_AB(0);
  ------------------
  |  | 4759|  29.6k|    if ((da = pa[n]) != (db = pb[n])) \
  |  |  ------------------
  |  |  |  Branch (4759:9): [True: 4.67k, False: 24.9k]
  |  |  ------------------
  |  | 4760|  29.6k|    goto done
  ------------------
 4772|  29.6k|        }
 4773|   663k|        while (used_a-- > 0 && ((da = *--pa) == (db = *--pb)))
  ------------------
  |  Branch (4773:16): [True: 609k, False: 53.6k]
  |  Branch (4773:32): [True: 57.4k, False: 552k]
  ------------------
 4774|  57.4k|            /* do nothing */;
 4775|  2.73M|    done:
 4776|  2.73M|        if (da > db)
  ------------------
  |  Branch (4776:13): [True: 953k, False: 1.77M]
  ------------------
 4777|   953k|            goto IS_GT;
 4778|  1.77M|        if (da < db)
  ------------------
  |  Branch (4778:13): [True: 1.72M, False: 53.6k]
  ------------------
 4779|  1.72M|            goto IS_LT;
 4780|  1.77M|    }
 4781|  53.6k|    return MP_EQ;
  ------------------
  |  |   50|  53.6k|#define MP_EQ 0
  ------------------
 4782|  1.91M|IS_LT:
 4783|  1.91M|    return MP_LT;
  ------------------
  |  |   49|  1.91M|#define MP_LT -1
  ------------------
 4784|  1.03M|IS_GT:
 4785|  1.03M|    return MP_GT;
  ------------------
  |  |   51|  1.03M|#define MP_GT 1
  ------------------
 4786|  1.77M|} /* end s_mp_cmp() */
s_mp_cmp_d:
 4795|  3.35M|{
 4796|  3.35M|    ARGMPCHK(a != NULL);
  ------------------
  |  |  354|  3.35M|#define ARGMPCHK(X) assert(X)
  ------------------
 4797|       |
 4798|  3.35M|    if (USED(a) > 1)
  ------------------
  |  |  333|  3.35M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  3.35M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
  |  Branch (4798:9): [True: 2.58M, False: 771k]
  ------------------
 4799|  2.58M|        return MP_GT;
  ------------------
  |  |   51|  2.58M|#define MP_GT 1
  ------------------
 4800|       |
 4801|   771k|    if (DIGIT(a, 0) < d)
  ------------------
  |  |  336|   771k|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|   771k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
  |  Branch (4801:9): [True: 0, False: 771k]
  ------------------
 4802|      0|        return MP_LT;
  ------------------
  |  |   49|      0|#define MP_LT -1
  ------------------
 4803|   771k|    else if (DIGIT(a, 0) > d)
  ------------------
  |  |  336|   771k|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|   771k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
  |  Branch (4803:14): [True: 717k, False: 54.0k]
  ------------------
 4804|   717k|        return MP_GT;
  ------------------
  |  |   51|   717k|#define MP_GT 1
  ------------------
 4805|  54.0k|    else
 4806|  54.0k|        return MP_EQ;
  ------------------
  |  |   50|  54.0k|#define MP_EQ 0
  ------------------
 4807|       |
 4808|   771k|} /* end s_mp_cmp_d() */
s_mp_ispow2:
 4820|  15.3k|{
 4821|  15.3k|    mp_digit d;
 4822|  15.3k|    int extra = 0, ix;
 4823|       |
 4824|  15.3k|    ARGMPCHK(v != NULL);
  ------------------
  |  |  354|  15.3k|#define ARGMPCHK(X) assert(X)
  ------------------
 4825|       |
 4826|  15.3k|    ix = MP_USED(v) - 1;
  ------------------
  |  |  150|  15.3k|#define MP_USED(MP) ((MP)->used)
  ------------------
 4827|  15.3k|    d = MP_DIGIT(v, ix); /* most significant digit of v */
  ------------------
  |  |  153|  15.3k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
 4828|       |
 4829|  15.3k|    extra = s_mp_ispow2d(d);
 4830|  15.3k|    if (extra < 0 || ix == 0)
  ------------------
  |  Branch (4830:9): [True: 11.0k, False: 4.30k]
  |  Branch (4830:22): [True: 0, False: 4.30k]
  ------------------
 4831|  11.0k|        return extra;
 4832|       |
 4833|  48.3k|    while (--ix >= 0) {
  ------------------
  |  Branch (4833:12): [True: 47.5k, False: 771]
  ------------------
 4834|  47.5k|        if (DIGIT(v, ix) != 0)
  ------------------
  |  |  336|  47.5k|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  47.5k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
  |  Branch (4834:13): [True: 3.53k, False: 44.0k]
  ------------------
 4835|  3.53k|            return -1; /* not a power of two */
 4836|  44.0k|        extra += MP_DIGIT_BIT;
  ------------------
  |  |  137|  44.0k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|  44.0k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
 4837|  44.0k|    }
 4838|       |
 4839|    771|    return extra;
 4840|       |
 4841|  4.30k|} /* end s_mp_ispow2() */
s_mp_ispow2d:
 4849|   207k|{
 4850|   207k|    if ((d != 0) && ((d & (d - 1)) == 0)) { /* d is a power of 2 */
  ------------------
  |  Branch (4850:9): [True: 207k, False: 0]
  |  Branch (4850:21): [True: 8.40k, False: 199k]
  ------------------
 4851|  8.40k|        int pow = 0;
 4852|       |#if defined(MP_USE_UINT_DIGIT)
 4853|       |        if (d & 0xffff0000U)
 4854|       |            pow += 16;
 4855|       |        if (d & 0xff00ff00U)
 4856|       |            pow += 8;
 4857|       |        if (d & 0xf0f0f0f0U)
 4858|       |            pow += 4;
 4859|       |        if (d & 0xccccccccU)
 4860|       |            pow += 2;
 4861|       |        if (d & 0xaaaaaaaaU)
 4862|       |            pow += 1;
 4863|       |#elif defined(MP_USE_LONG_LONG_DIGIT)
 4864|       |        if (d & 0xffffffff00000000ULL)
 4865|       |            pow += 32;
 4866|       |        if (d & 0xffff0000ffff0000ULL)
 4867|       |            pow += 16;
 4868|       |        if (d & 0xff00ff00ff00ff00ULL)
 4869|       |            pow += 8;
 4870|       |        if (d & 0xf0f0f0f0f0f0f0f0ULL)
 4871|       |            pow += 4;
 4872|       |        if (d & 0xccccccccccccccccULL)
 4873|       |            pow += 2;
 4874|       |        if (d & 0xaaaaaaaaaaaaaaaaULL)
 4875|       |            pow += 1;
 4876|       |#elif defined(MP_USE_LONG_DIGIT)
 4877|  8.40k|        if (d & 0xffffffff00000000UL)
  ------------------
  |  Branch (4877:13): [True: 5.56k, False: 2.84k]
  ------------------
 4878|  5.56k|            pow += 32;
 4879|  8.40k|        if (d & 0xffff0000ffff0000UL)
  ------------------
  |  Branch (4879:13): [True: 4.78k, False: 3.61k]
  ------------------
 4880|  4.78k|            pow += 16;
 4881|  8.40k|        if (d & 0xff00ff00ff00ff00UL)
  ------------------
  |  Branch (4881:13): [True: 4.83k, False: 3.56k]
  ------------------
 4882|  4.83k|            pow += 8;
 4883|  8.40k|        if (d & 0xf0f0f0f0f0f0f0f0UL)
  ------------------
  |  Branch (4883:13): [True: 4.62k, False: 3.77k]
  ------------------
 4884|  4.62k|            pow += 4;
 4885|  8.40k|        if (d & 0xccccccccccccccccUL)
  ------------------
  |  Branch (4885:13): [True: 4.72k, False: 3.67k]
  ------------------
 4886|  4.72k|            pow += 2;
 4887|  8.40k|        if (d & 0xaaaaaaaaaaaaaaaaUL)
  ------------------
  |  Branch (4887:13): [True: 6.42k, False: 1.97k]
  ------------------
 4888|  6.42k|            pow += 1;
 4889|       |#else
 4890|       |#error "unknown type for mp_digit"
 4891|       |#endif
 4892|  8.40k|        return pow;
 4893|  8.40k|    }
 4894|   199k|    return -1;
 4895|       |
 4896|   207k|} /* end s_mp_ispow2d() */
mp_read_unsigned_octets:
 5002|  17.5k|{
 5003|  17.5k|    int count;
 5004|  17.5k|    mp_err res;
 5005|  17.5k|    mp_digit d;
 5006|       |
 5007|  17.5k|    ARGCHK(mp != NULL && str != NULL && len > 0, MP_BADARG);
  ------------------
  |  |  355|  17.5k|#define ARGCHK(X, Y) assert(X)
  ------------------
 5008|       |
 5009|  17.5k|    mp_zero(mp);
 5010|       |
 5011|  17.5k|    count = len % sizeof(mp_digit);
 5012|  17.5k|    if (count) {
  ------------------
  |  Branch (5012:9): [True: 8.65k, False: 8.87k]
  ------------------
 5013|  43.7k|        for (d = 0; count-- > 0; --len) {
  ------------------
  |  Branch (5013:21): [True: 35.1k, False: 8.65k]
  ------------------
 5014|  35.1k|            d = (d << 8) | *str++;
 5015|  35.1k|        }
 5016|  8.65k|        MP_DIGIT(mp, 0) = d;
  ------------------
  |  |  153|  8.65k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
 5017|  8.65k|    }
 5018|       |
 5019|       |    /* Read the rest of the digits */
 5020|   271k|    for (; len > 0; len -= sizeof(mp_digit)) {
  ------------------
  |  Branch (5020:12): [True: 253k, False: 17.5k]
  ------------------
 5021|  2.28M|        for (d = 0, count = sizeof(mp_digit); count > 0; --count) {
  ------------------
  |  Branch (5021:47): [True: 2.02M, False: 253k]
  ------------------
 5022|  2.02M|            d = (d << 8) | *str++;
 5023|  2.02M|        }
 5024|   253k|        if (MP_EQ == mp_cmp_z(mp)) {
  ------------------
  |  |   50|   253k|#define MP_EQ 0
  ------------------
  |  Branch (5024:13): [True: 23.0k, False: 230k]
  ------------------
 5025|  23.0k|            if (!d)
  ------------------
  |  Branch (5025:17): [True: 14.2k, False: 8.86k]
  ------------------
 5026|  14.2k|                continue;
 5027|   230k|        } else {
 5028|   230k|            if ((res = s_mp_lshd(mp, 1)) != MP_OKAY)
  ------------------
  |  |   39|   230k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (5028:17): [True: 0, False: 230k]
  ------------------
 5029|      0|                return res;
 5030|   230k|        }
 5031|   239k|        MP_DIGIT(mp, 0) = d;
  ------------------
  |  |  153|   239k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
 5032|   239k|    }
 5033|  17.5k|    return MP_OKAY;
  ------------------
  |  |   39|  17.5k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 5034|  17.5k|} /* end mp_read_unsigned_octets() */
mp_to_fixlen_octets:
 5149|  2.75k|{
 5150|  2.75k|    int ix, jx;
 5151|  2.75k|    unsigned int bytes;
 5152|       |
 5153|  2.75k|    ARGCHK(mp != NULL && str != NULL && !SIGN(mp) && length > 0, MP_BADARG);
  ------------------
  |  |  355|  2.75k|#define ARGCHK(X, Y) assert(X)
  ------------------
 5154|       |
 5155|       |    /* Constant time on the value of mp.  Don't use mp_unsigned_octet_size. */
 5156|  2.75k|    bytes = USED(mp) * MP_DIGIT_SIZE;
  ------------------
  |  |  333|  2.75k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  2.75k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                  bytes = USED(mp) * MP_DIGIT_SIZE;
  ------------------
  |  |  136|  2.75k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  ------------------
 5157|       |
 5158|       |    /* If the output is shorter than the native size of mp, then check that any
 5159|       |     * bytes not written have zero values.  This check isn't constant time on
 5160|       |     * the assumption that timing-sensitive callers can guarantee that mp fits
 5161|       |     * in the allocated space. */
 5162|  2.75k|    ix = USED(mp) - 1;
  ------------------
  |  |  333|  2.75k|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  2.75k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
 5163|  2.75k|    if (bytes > length) {
  ------------------
  |  Branch (5163:9): [True: 0, False: 2.75k]
  ------------------
 5164|      0|        unsigned int zeros = bytes - length;
 5165|       |
 5166|      0|        while (zeros >= MP_DIGIT_SIZE) {
  ------------------
  |  |  136|      0|#define MP_DIGIT_SIZE sizeof(mp_digit)
  ------------------
  |  Branch (5166:16): [True: 0, False: 0]
  ------------------
 5167|      0|            ARGCHK(DIGIT(mp, ix) == 0, MP_BADARG);
  ------------------
  |  |  355|      0|#define ARGCHK(X, Y) assert(X)
  ------------------
 5168|      0|            zeros -= MP_DIGIT_SIZE;
  ------------------
  |  |  136|      0|#define MP_DIGIT_SIZE sizeof(mp_digit)
  ------------------
 5169|      0|            ix--;
 5170|      0|        }
 5171|       |
 5172|      0|        if (zeros > 0) {
  ------------------
  |  Branch (5172:13): [True: 0, False: 0]
  ------------------
 5173|      0|            mp_digit d = DIGIT(mp, ix);
  ------------------
  |  |  336|      0|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|      0|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 5174|      0|            mp_digit m = ~0ULL << ((MP_DIGIT_SIZE - zeros) * CHAR_BIT);
  ------------------
  |  |  136|      0|#define MP_DIGIT_SIZE sizeof(mp_digit)
  ------------------
 5175|      0|            ARGCHK((d & m) == 0, MP_BADARG);
  ------------------
  |  |  355|      0|#define ARGCHK(X, Y) assert(X)
  ------------------
 5176|      0|            for (jx = MP_DIGIT_SIZE - zeros - 1; jx >= 0; jx--) {
  ------------------
  |  |  136|      0|#define MP_DIGIT_SIZE sizeof(mp_digit)
  ------------------
  |  Branch (5176:50): [True: 0, False: 0]
  ------------------
 5177|      0|                *str++ = d >> (jx * CHAR_BIT);
 5178|      0|            }
 5179|      0|            ix--;
 5180|      0|        }
 5181|  2.75k|    } else if (bytes < length) {
  ------------------
  |  Branch (5181:16): [True: 175, False: 2.57k]
  ------------------
 5182|       |        /* Place any needed leading zeros. */
 5183|    175|        unsigned int zeros = length - bytes;
 5184|    175|        memset(str, 0, zeros);
 5185|    175|        str += zeros;
 5186|    175|    }
 5187|       |
 5188|       |    /* Iterate over each whole digit... */
 5189|  55.0k|    for (; ix >= 0; ix--) {
  ------------------
  |  Branch (5189:12): [True: 52.3k, False: 2.75k]
  ------------------
 5190|  52.3k|        mp_digit d = DIGIT(mp, ix);
  ------------------
  |  |  336|  52.3k|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  52.3k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 5191|       |
 5192|       |        /* Unpack digit bytes, high order first */
 5193|   470k|        for (jx = MP_DIGIT_SIZE - 1; jx >= 0; jx--) {
  ------------------
  |  |  136|  52.3k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  ------------------
  |  Branch (5193:38): [True: 418k, False: 52.3k]
  ------------------
 5194|   418k|            *str++ = d >> (jx * CHAR_BIT);
 5195|   418k|        }
 5196|  52.3k|    }
 5197|  2.75k|    return MP_OKAY;
  ------------------
  |  |   39|  2.75k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
 5198|  2.75k|} /* end mp_to_fixlen_octets() */
mp_cswap:
 5205|  4.33M|{
 5206|  4.33M|    mp_digit x;
 5207|  4.33M|    unsigned int i;
 5208|  4.33M|    mp_err res = 0;
 5209|       |
 5210|       |    /* if pointers are equal return */
 5211|  4.33M|    if (a == b)
  ------------------
  |  Branch (5211:9): [True: 0, False: 4.33M]
  ------------------
 5212|      0|        return res;
 5213|       |
 5214|  4.33M|    if (MP_ALLOC(a) < numdigits || MP_ALLOC(b) < numdigits) {
  ------------------
  |  |  151|  4.33M|#define MP_ALLOC(MP) ((MP)->alloc)
  ------------------
                  if (MP_ALLOC(a) < numdigits || MP_ALLOC(b) < numdigits) {
  ------------------
  |  |  151|  4.33M|#define MP_ALLOC(MP) ((MP)->alloc)
  ------------------
  |  Branch (5214:9): [True: 0, False: 4.33M]
  |  Branch (5214:36): [True: 0, False: 4.33M]
  ------------------
 5215|      0|        MP_CHECKOK(s_mp_grow(a, numdigits));
  ------------------
  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  320|      0|    goto CLEANUP
  ------------------
 5216|      0|        MP_CHECKOK(s_mp_grow(b, numdigits));
  ------------------
  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  320|      0|    goto CLEANUP
  ------------------
 5217|      0|    }
 5218|       |
 5219|  4.33M|    condition = ((~condition & ((condition - 1))) >> (MP_DIGIT_BIT - 1)) - 1;
  ------------------
  |  |  137|  4.33M|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|  4.33M|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
 5220|       |
 5221|  4.33M|    x = (USED(a) ^ USED(b)) & condition;
  ------------------
  |  |  333|  4.33M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  4.33M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
                  x = (USED(a) ^ USED(b)) & condition;
  ------------------
  |  |  333|  4.33M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  4.33M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
 5222|  4.33M|    USED(a) ^= x;
  ------------------
  |  |  333|  4.33M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  4.33M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
 5223|  4.33M|    USED(b) ^= x;
  ------------------
  |  |  333|  4.33M|#define USED(MP) MP_USED(MP)
  |  |  ------------------
  |  |  |  |  150|  4.33M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  ------------------
 5224|       |
 5225|  4.33M|    x = (SIGN(a) ^ SIGN(b)) & condition;
  ------------------
  |  |  332|  4.33M|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  4.33M|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
                  x = (SIGN(a) ^ SIGN(b)) & condition;
  ------------------
  |  |  332|  4.33M|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  4.33M|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
 5226|  4.33M|    SIGN(a) ^= x;
  ------------------
  |  |  332|  4.33M|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  4.33M|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
 5227|  4.33M|    SIGN(b) ^= x;
  ------------------
  |  |  332|  4.33M|#define SIGN(MP) MP_SIGN(MP)
  |  |  ------------------
  |  |  |  |  149|  4.33M|#define MP_SIGN(MP) ((MP)->sign)
  |  |  ------------------
  ------------------
 5228|       |
 5229|  26.0M|    for (i = 0; i < numdigits; i++) {
  ------------------
  |  Branch (5229:17): [True: 21.6M, False: 4.33M]
  ------------------
 5230|  21.6M|        x = (DIGIT(a, i) ^ DIGIT(b, i)) & condition;
  ------------------
  |  |  336|  21.6M|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  21.6M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
                      x = (DIGIT(a, i) ^ DIGIT(b, i)) & condition;
  ------------------
  |  |  336|  21.6M|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  21.6M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 5231|  21.6M|        DIGIT(a, i) ^= x;
  ------------------
  |  |  336|  21.6M|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  21.6M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 5232|  21.6M|        DIGIT(b, i) ^= x;
  ------------------
  |  |  336|  21.6M|#define DIGIT(MP, N) MP_DIGIT(MP, N)
  |  |  ------------------
  |  |  |  |  153|  21.6M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  |  |  ------------------
  ------------------
 5233|  21.6M|    }
 5234|       |
 5235|  4.33M|CLEANUP:
 5236|  4.33M|    return res;
 5237|  4.33M|} /* end mp_cswap() */

s_mpv_mul_d_add_prop:
   21|  9.67M|{
   22|  9.67M|    mp_digit w;
   23|  9.67M|    mp_digit d;
   24|       |
   25|  9.67M|    d = s_mpv_mul_add_vec64(c, a, a_len, b);
   26|  9.67M|    c += a_len;
   27|  21.5M|    while (d) {
  ------------------
  |  Branch (27:12): [True: 11.8M, False: 9.67M]
  ------------------
   28|  11.8M|        w = c[0] + d;
   29|  11.8M|        d = (w < c[0] || w < d);
  ------------------
  |  Branch (29:14): [True: 2.23M, False: 9.59M]
  |  Branch (29:26): [True: 0, False: 9.59M]
  ------------------
   30|  11.8M|        *c++ = w;
   31|  11.8M|    }
   32|  9.67M|}

mpl_get_bits:
  392|  53.8k|{
  393|  53.8k|    mp_size rshift = (lsbNum % MP_DIGIT_BIT);
  ------------------
  |  |  137|  53.8k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|  53.8k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
  394|  53.8k|    mp_size lsWndx = (lsbNum / MP_DIGIT_BIT);
  ------------------
  |  |  137|  53.8k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|  53.8k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
  395|  53.8k|    mp_digit *digit = MP_DIGITS(a) + lsWndx;
  ------------------
  |  |  152|  53.8k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  396|  53.8k|    mp_digit mask = ((1 << numBits) - 1);
  397|       |
  398|  53.8k|    ARGCHK(numBits < CHAR_BIT * sizeof mask, MP_BADARG);
  ------------------
  |  |  355|  53.8k|#define ARGCHK(X, Y) assert(X)
  ------------------
  399|  53.8k|    ARGCHK(MP_HOWMANY(lsbNum, MP_DIGIT_BIT) <= MP_USED(a), MP_RANGE);
  ------------------
  |  |  355|  53.8k|#define ARGCHK(X, Y) assert(X)
  ------------------
  400|       |
  401|  53.8k|    if ((numBits + lsbNum % MP_DIGIT_BIT <= MP_DIGIT_BIT) ||
  ------------------
  |  |  137|  53.8k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|  53.8k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
                  if ((numBits + lsbNum % MP_DIGIT_BIT <= MP_DIGIT_BIT) ||
  ------------------
  |  |  137|  53.8k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|  53.8k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
  |  Branch (401:9): [True: 53.8k, False: 0]
  ------------------
  402|  53.8k|        (lsWndx + 1 >= MP_USED(a))) {
  ------------------
  |  |  150|      0|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (402:9): [True: 0, False: 0]
  ------------------
  403|  53.8k|        mask &= (digit[0] >> rshift);
  404|  53.8k|    } else {
  405|      0|        mask &= ((digit[0] >> rshift) | (digit[1] << (MP_DIGIT_BIT - rshift)));
  ------------------
  |  |  137|      0|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|      0|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
  406|      0|    }
  407|  53.8k|    return (mp_err)mask;
  408|  53.8k|}
mpl_significant_bits:
  427|  4.77k|{
  428|       |    /*
  429|       |      start bits at 1.
  430|       |      lg(0) = 0 => bits = 1 by function semantics.
  431|       |      below does a binary search for the _position_ of the top bit set,
  432|       |      which is floor(lg(abs(a))) for a != 0.
  433|       |     */
  434|  4.77k|    mp_size bits = 1;
  435|  4.77k|    int ix;
  436|       |
  437|  4.77k|    ARGCHK(a != NULL, MP_BADARG);
  ------------------
  |  |  355|  4.77k|#define ARGCHK(X, Y) assert(X)
  ------------------
  438|       |
  439|  4.77k|    for (ix = MP_USED(a); ix > 0;) {
  ------------------
  |  |  150|  4.77k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (439:27): [True: 4.77k, False: 0]
  ------------------
  440|  4.77k|        mp_digit d, x, mask;
  441|  4.77k|        if ((d = MP_DIGIT(a, --ix)) == 0)
  ------------------
  |  |  153|  4.77k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
  |  Branch (441:13): [True: 0, False: 4.77k]
  ------------------
  442|      0|            continue;
  443|  4.77k|#if !defined(MP_USE_UINT_DIGIT)
  444|  4.77k|        LZCNTLOOP(32);
  ------------------
  |  |  411|  4.77k|    do {                                           \
  |  |  412|  4.77k|        x = d >> (i);                              \
  |  |  413|  4.77k|        mask = (0 - x);                            \
  |  |  414|  4.77k|        mask = (0 - (mask >> (MP_DIGIT_BIT - 1))); \
  |  |  ------------------
  |  |  |  |  137|  4.77k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|  4.77k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  415|  4.77k|        bits += (i)&mask;                          \
  |  |  416|  4.77k|        d ^= (x ^ d) & mask;                       \
  |  |  417|  4.77k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (417:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  445|  4.77k|#endif
  446|  4.77k|        LZCNTLOOP(16);
  ------------------
  |  |  411|  4.77k|    do {                                           \
  |  |  412|  4.77k|        x = d >> (i);                              \
  |  |  413|  4.77k|        mask = (0 - x);                            \
  |  |  414|  4.77k|        mask = (0 - (mask >> (MP_DIGIT_BIT - 1))); \
  |  |  ------------------
  |  |  |  |  137|  4.77k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|  4.77k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  415|  4.77k|        bits += (i)&mask;                          \
  |  |  416|  4.77k|        d ^= (x ^ d) & mask;                       \
  |  |  417|  4.77k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (417:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  447|  4.77k|        LZCNTLOOP(8);
  ------------------
  |  |  411|  4.77k|    do {                                           \
  |  |  412|  4.77k|        x = d >> (i);                              \
  |  |  413|  4.77k|        mask = (0 - x);                            \
  |  |  414|  4.77k|        mask = (0 - (mask >> (MP_DIGIT_BIT - 1))); \
  |  |  ------------------
  |  |  |  |  137|  4.77k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|  4.77k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  415|  4.77k|        bits += (i)&mask;                          \
  |  |  416|  4.77k|        d ^= (x ^ d) & mask;                       \
  |  |  417|  4.77k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (417:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  448|  4.77k|        LZCNTLOOP(4);
  ------------------
  |  |  411|  4.77k|    do {                                           \
  |  |  412|  4.77k|        x = d >> (i);                              \
  |  |  413|  4.77k|        mask = (0 - x);                            \
  |  |  414|  4.77k|        mask = (0 - (mask >> (MP_DIGIT_BIT - 1))); \
  |  |  ------------------
  |  |  |  |  137|  4.77k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|  4.77k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  415|  4.77k|        bits += (i)&mask;                          \
  |  |  416|  4.77k|        d ^= (x ^ d) & mask;                       \
  |  |  417|  4.77k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (417:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  449|  4.77k|        LZCNTLOOP(2);
  ------------------
  |  |  411|  4.77k|    do {                                           \
  |  |  412|  4.77k|        x = d >> (i);                              \
  |  |  413|  4.77k|        mask = (0 - x);                            \
  |  |  414|  4.77k|        mask = (0 - (mask >> (MP_DIGIT_BIT - 1))); \
  |  |  ------------------
  |  |  |  |  137|  4.77k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|  4.77k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  415|  4.77k|        bits += (i)&mask;                          \
  |  |  416|  4.77k|        d ^= (x ^ d) & mask;                       \
  |  |  417|  4.77k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (417:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  450|  4.77k|        LZCNTLOOP(1);
  ------------------
  |  |  411|  4.77k|    do {                                           \
  |  |  412|  4.77k|        x = d >> (i);                              \
  |  |  413|  4.77k|        mask = (0 - x);                            \
  |  |  414|  4.77k|        mask = (0 - (mask >> (MP_DIGIT_BIT - 1))); \
  |  |  ------------------
  |  |  |  |  137|  4.77k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  136|  4.77k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  415|  4.77k|        bits += (i)&mask;                          \
  |  |  416|  4.77k|        d ^= (x ^ d) & mask;                       \
  |  |  417|  4.77k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (417:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
  451|  4.77k|        break;
  452|  4.77k|    }
  453|  4.77k|    bits += ix * MP_DIGIT_BIT;
  ------------------
  |  |  137|  4.77k|#define MP_DIGIT_BIT (CHAR_BIT * MP_DIGIT_SIZE)
  |  |  ------------------
  |  |  |  |  136|  4.77k|#define MP_DIGIT_SIZE sizeof(mp_digit)
  |  |  ------------------
  ------------------
  454|  4.77k|    return bits;
  455|  4.77k|}

s_mp_redc:
   34|   208k|{
   35|   208k|    mp_err res;
   36|   208k|    mp_size i;
   37|       |
   38|   208k|    i = (MP_USED(&mmm->N) << 1) + 1;
  ------------------
  |  |  150|   208k|#define MP_USED(MP) ((MP)->used)
  ------------------
   39|   208k|    MP_CHECKOK(s_mp_pad(T, i));
  ------------------
  |  |  319|   208k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|   208k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 208k]
  |  |  ------------------
  |  |  320|   208k|    goto CLEANUP
  ------------------
   40|  6.44M|    for (i = 0; i < MP_USED(&mmm->N); ++i) {
  ------------------
  |  |  150|  6.44M|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (40:17): [True: 6.23M, False: 208k]
  ------------------
   41|  6.23M|        mp_digit m_i = MP_DIGIT(T, i) * mmm->n0prime;
  ------------------
  |  |  153|  6.23M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
   42|       |        /* T += N * m_i * (MP_RADIX ** i); */
   43|  6.23M|        s_mp_mul_d_add_offset(&mmm->N, m_i, T, i);
  ------------------
  |  |  213|  6.23M|    s_mpv_mul_d_add_prop(MP_DIGITS(a), MP_USED(a), b, MP_DIGITS(c) + off)
  |  |  ------------------
  |  |  |  |  152|  6.23M|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  |  |                   s_mpv_mul_d_add_prop(MP_DIGITS(a), MP_USED(a), b, MP_DIGITS(c) + off)
  |  |  ------------------
  |  |  |  |  150|  6.23M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  |  |                   s_mpv_mul_d_add_prop(MP_DIGITS(a), MP_USED(a), b, MP_DIGITS(c) + off)
  |  |  ------------------
  |  |  |  |  152|  6.23M|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
   44|  6.23M|    }
   45|   208k|    s_mp_clamp(T);
   46|       |
   47|       |    /* T /= R */
   48|   208k|    s_mp_rshd(T, MP_USED(&mmm->N));
  ------------------
  |  |  150|   208k|#define MP_USED(MP) ((MP)->used)
  ------------------
   49|       |
   50|   208k|    if (s_mp_cmp(T, &mmm->N) >= 0) {
  ------------------
  |  Branch (50:9): [True: 48.2k, False: 160k]
  ------------------
   51|       |        /* T = T - N */
   52|  48.2k|        MP_CHECKOK(s_mp_sub(T, &mmm->N));
  ------------------
  |  |  319|  48.2k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  48.2k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 48.2k]
  |  |  ------------------
  |  |  320|  48.2k|    goto CLEANUP
  ------------------
   53|  48.2k|#ifdef DEBUG
   54|  48.2k|        if (mp_cmp(T, &mmm->N) >= 0) {
  ------------------
  |  Branch (54:13): [True: 0, False: 48.2k]
  ------------------
   55|      0|            res = MP_UNDEF;
  ------------------
  |  |   45|      0|#define MP_UNDEF -5  /* answer is undefined   */
  ------------------
   56|      0|            goto CLEANUP;
   57|      0|        }
   58|  48.2k|#endif
   59|  48.2k|    }
   60|   208k|    res = MP_OKAY;
  ------------------
  |  |   39|   208k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
   61|   208k|CLEANUP:
   62|   208k|    return res;
   63|   208k|}
s_mp_mul_mont:
   75|  61.2k|{
   76|  61.2k|    mp_digit *pb;
   77|  61.2k|    mp_digit m_i;
   78|  61.2k|    mp_err res;
   79|  61.2k|    mp_size ib; /* "index b": index of current digit of B */
   80|  61.2k|    mp_size useda, usedb;
   81|       |
   82|  61.2k|    ARGCHK(a != NULL && b != NULL && c != NULL, MP_BADARG);
  ------------------
  |  |  355|  61.2k|#define ARGCHK(X, Y) assert(X)
  ------------------
   83|       |
   84|  61.2k|    if (MP_USED(a) < MP_USED(b)) {
  ------------------
  |  |  150|  61.2k|#define MP_USED(MP) ((MP)->used)
  ------------------
                  if (MP_USED(a) < MP_USED(b)) {
  ------------------
  |  |  150|  61.2k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (84:9): [True: 643, False: 60.6k]
  ------------------
   85|    643|        const mp_int *xch = b; /* switch a and b, to do fewer outer loops */
   86|    643|        b = a;
   87|    643|        a = xch;
   88|    643|    }
   89|       |
   90|  61.2k|    MP_USED(c) = 1;
  ------------------
  |  |  150|  61.2k|#define MP_USED(MP) ((MP)->used)
  ------------------
   91|  61.2k|    MP_DIGIT(c, 0) = 0;
  ------------------
  |  |  153|  61.2k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
   92|  61.2k|    ib = (MP_USED(&mmm->N) << 1) + 1;
  ------------------
  |  |  150|  61.2k|#define MP_USED(MP) ((MP)->used)
  ------------------
   93|  61.2k|    if ((res = s_mp_pad(c, ib)) != MP_OKAY)
  ------------------
  |  |   39|  61.2k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  |  Branch (93:9): [True: 0, False: 61.2k]
  ------------------
   94|      0|        goto CLEANUP;
   95|       |
   96|  61.2k|    useda = MP_USED(a);
  ------------------
  |  |  150|  61.2k|#define MP_USED(MP) ((MP)->used)
  ------------------
   97|  61.2k|    pb = MP_DIGITS(b);
  ------------------
  |  |  152|  61.2k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
   98|  61.2k|    s_mpv_mul_d(MP_DIGITS(a), useda, *pb++, MP_DIGITS(c));
  ------------------
  |  |  181|  61.2k|    ((mp_digit *)c)[a_len] = s_mpv_mul_set_vec64(c, a, a_len, b)
  ------------------
   99|  61.2k|    s_mp_setz(MP_DIGITS(c) + useda + 1, ib - (useda + 1));
  ------------------
  |  |  152|  61.2k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  100|  61.2k|    m_i = MP_DIGIT(c, 0) * mmm->n0prime;
  ------------------
  |  |  153|  61.2k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
  101|  61.2k|    s_mp_mul_d_add_offset(&mmm->N, m_i, c, 0);
  ------------------
  |  |  213|  61.2k|    s_mpv_mul_d_add_prop(MP_DIGITS(a), MP_USED(a), b, MP_DIGITS(c) + off)
  |  |  ------------------
  |  |  |  |  152|  61.2k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  |  |                   s_mpv_mul_d_add_prop(MP_DIGITS(a), MP_USED(a), b, MP_DIGITS(c) + off)
  |  |  ------------------
  |  |  |  |  150|  61.2k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  |  |                   s_mpv_mul_d_add_prop(MP_DIGITS(a), MP_USED(a), b, MP_DIGITS(c) + off)
  |  |  ------------------
  |  |  |  |  152|  61.2k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
  102|       |
  103|       |    /* Outer loop:  Digits of b */
  104|  61.2k|    usedb = MP_USED(b);
  ------------------
  |  |  150|  61.2k|#define MP_USED(MP) ((MP)->used)
  ------------------
  105|  1.74M|    for (ib = 1; ib < usedb; ib++) {
  ------------------
  |  Branch (105:18): [True: 1.68M, False: 61.2k]
  ------------------
  106|  1.68M|        mp_digit b_i = *pb++;
  107|       |
  108|       |        /* Inner product:  Digits of a */
  109|  1.68M|        if (b_i)
  ------------------
  |  Branch (109:13): [True: 1.65M, False: 27.6k]
  ------------------
  110|  1.65M|            s_mpv_mul_d_add_prop(MP_DIGITS(a), useda, b_i, MP_DIGITS(c) + ib);
  ------------------
  |  |  152|  1.65M|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
                          s_mpv_mul_d_add_prop(MP_DIGITS(a), useda, b_i, MP_DIGITS(c) + ib);
  ------------------
  |  |  152|  1.65M|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  111|  1.68M|        m_i = MP_DIGIT(c, ib) * mmm->n0prime;
  ------------------
  |  |  153|  1.68M|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
  112|  1.68M|        s_mp_mul_d_add_offset(&mmm->N, m_i, c, ib);
  ------------------
  |  |  213|  1.68M|    s_mpv_mul_d_add_prop(MP_DIGITS(a), MP_USED(a), b, MP_DIGITS(c) + off)
  |  |  ------------------
  |  |  |  |  152|  1.68M|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  |  |                   s_mpv_mul_d_add_prop(MP_DIGITS(a), MP_USED(a), b, MP_DIGITS(c) + off)
  |  |  ------------------
  |  |  |  |  150|  1.68M|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  |  |                   s_mpv_mul_d_add_prop(MP_DIGITS(a), MP_USED(a), b, MP_DIGITS(c) + off)
  |  |  ------------------
  |  |  |  |  152|  1.68M|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
  113|  1.68M|    }
  114|  61.2k|    if (usedb < MP_USED(&mmm->N)) {
  ------------------
  |  |  150|  61.2k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (114:9): [True: 3.33k, False: 57.9k]
  ------------------
  115|  37.2k|        for (usedb = MP_USED(&mmm->N); ib < usedb; ++ib) {
  ------------------
  |  |  150|  3.33k|#define MP_USED(MP) ((MP)->used)
  ------------------
  |  Branch (115:40): [True: 33.9k, False: 3.33k]
  ------------------
  116|  33.9k|            m_i = MP_DIGIT(c, ib) * mmm->n0prime;
  ------------------
  |  |  153|  33.9k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
  117|  33.9k|            s_mp_mul_d_add_offset(&mmm->N, m_i, c, ib);
  ------------------
  |  |  213|  33.9k|    s_mpv_mul_d_add_prop(MP_DIGITS(a), MP_USED(a), b, MP_DIGITS(c) + off)
  |  |  ------------------
  |  |  |  |  152|  33.9k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  |  |                   s_mpv_mul_d_add_prop(MP_DIGITS(a), MP_USED(a), b, MP_DIGITS(c) + off)
  |  |  ------------------
  |  |  |  |  150|  33.9k|#define MP_USED(MP) ((MP)->used)
  |  |  ------------------
  |  |                   s_mpv_mul_d_add_prop(MP_DIGITS(a), MP_USED(a), b, MP_DIGITS(c) + off)
  |  |  ------------------
  |  |  |  |  152|  33.9k|#define MP_DIGITS(MP) ((MP)->dp)
  |  |  ------------------
  ------------------
  118|  33.9k|        }
  119|  3.33k|    }
  120|  61.2k|    s_mp_clamp(c);
  121|  61.2k|    s_mp_rshd(c, MP_USED(&mmm->N)); /* c /= R */
  ------------------
  |  |  150|  61.2k|#define MP_USED(MP) ((MP)->used)
  ------------------
  122|  61.2k|    if (s_mp_cmp(c, &mmm->N) >= 0) {
  ------------------
  |  Branch (122:9): [True: 10.3k, False: 50.9k]
  ------------------
  123|  10.3k|        MP_CHECKOK(s_mp_sub(c, &mmm->N));
  ------------------
  |  |  319|  10.3k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  10.3k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 10.3k]
  |  |  ------------------
  |  |  320|  10.3k|    goto CLEANUP
  ------------------
  124|  10.3k|    }
  125|  61.2k|    res = MP_OKAY;
  ------------------
  |  |   39|  61.2k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  126|       |
  127|  61.2k|CLEANUP:
  128|  61.2k|    return res;
  129|  61.2k|}
mp_to_mont:
  134|  4.10k|{
  135|  4.10k|    mp_err res;
  136|       |
  137|       |    /* xMont = x * R mod N   where  N is modulus */
  138|  4.10k|    if (x != xMont) {
  ------------------
  |  Branch (138:9): [True: 2.19k, False: 1.91k]
  ------------------
  139|  2.19k|        MP_CHECKOK(mp_copy(x, xMont));
  ------------------
  |  |  319|  2.19k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  2.19k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 2.19k]
  |  |  ------------------
  |  |  320|  2.19k|    goto CLEANUP
  ------------------
  140|  2.19k|    }
  141|  4.10k|    MP_CHECKOK(s_mp_lshd(xMont, MP_USED(N))); /* xMont = x << b */
  ------------------
  |  |  319|  4.10k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  4.10k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 4.10k]
  |  |  ------------------
  |  |  320|  4.10k|    goto CLEANUP
  ------------------
  142|  4.10k|    MP_CHECKOK(mp_div(xMont, N, 0, xMont));   /*         mod N */
  ------------------
  |  |  319|  4.10k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  4.10k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 4.10k]
  |  |  ------------------
  |  |  320|  4.10k|    goto CLEANUP
  ------------------
  143|  4.10k|CLEANUP:
  144|  4.10k|    return res;
  145|  4.10k|}
mp_calculate_mont_n0i:
  149|  2.19k|{
  150|  2.19k|    return 0 - s_mp_invmod_radix(MP_DIGIT(N, 0));
  ------------------
  |  |  153|  2.19k|#define MP_DIGIT(MP, N) (MP)->dp[(N)]
  ------------------
  151|  2.19k|}
mpi_to_weave:
  738|  7.64k|{
  739|  7.64k|    mp_size i;
  740|  7.64k|    mp_digit *endDest = weaved + (nDigits * nBignums);
  741|       |
  742|  38.2k|    for (i = 0; i < WEAVE_WORD_SIZE; i++) {
  ------------------
  |  |  694|  38.2k|#define WEAVE_WORD_SIZE 4
  ------------------
  |  Branch (742:17): [True: 30.5k, False: 7.64k]
  ------------------
  743|  30.5k|        mp_size used = MP_USED(&bignums[i]);
  ------------------
  |  |  150|  30.5k|#define MP_USED(MP) ((MP)->used)
  ------------------
  744|  30.5k|        mp_digit *pSrc = MP_DIGITS(&bignums[i]);
  ------------------
  |  |  152|  30.5k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  745|  30.5k|        mp_digit *endSrc = pSrc + used;
  746|  30.5k|        mp_digit *pDest = weaved + i;
  747|       |
  748|  30.5k|        ARGCHK(MP_SIGN(&bignums[i]) == MP_ZPOS, MP_BADARG);
  ------------------
  |  |  355|  30.5k|#define ARGCHK(X, Y) assert(X)
  ------------------
  749|  30.5k|        ARGCHK(used <= nDigits, MP_BADARG);
  ------------------
  |  |  355|  30.5k|#define ARGCHK(X, Y) assert(X)
  ------------------
  750|       |
  751|   756k|        for (; pSrc < endSrc; pSrc++) {
  ------------------
  |  Branch (751:16): [True: 725k, False: 30.5k]
  ------------------
  752|   725k|            *pDest = *pSrc;
  753|   725k|            pDest += nBignums;
  754|   725k|        }
  755|  55.6k|        while (pDest < endDest) {
  ------------------
  |  Branch (755:16): [True: 25.0k, False: 30.5k]
  ------------------
  756|  25.0k|            *pDest = 0;
  757|  25.0k|            pDest += nBignums;
  758|  25.0k|        }
  759|  30.5k|    }
  760|       |
  761|  7.64k|    return MP_OKAY;
  ------------------
  |  |   39|  7.64k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  762|  7.64k|}
weave_to_mpi:
  782|  52.7k|{
  783|       |    /* these are indices, but need to be the same size as mp_digit
  784|       |     * because of the CONST_TIME operations */
  785|  52.7k|    mp_digit i, j;
  786|  52.7k|    mp_digit d;
  787|  52.7k|    mp_digit *pDest = MP_DIGITS(a);
  ------------------
  |  |  152|  52.7k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  788|       |
  789|  52.7k|    MP_SIGN(a) = MP_ZPOS;
  ------------------
  |  |  149|  52.7k|#define MP_SIGN(MP) ((MP)->sign)
  ------------------
                  MP_SIGN(a) = MP_ZPOS;
  ------------------
  |  |   37|  52.7k|#define MP_ZPOS 0
  ------------------
  790|  52.7k|    MP_USED(a) = nDigits;
  ------------------
  |  |  150|  52.7k|#define MP_USED(MP) ((MP)->used)
  ------------------
  791|       |
  792|  52.7k|    assert(weaved != NULL);
  793|       |
  794|       |    /* Fetch the proper column in constant time, indexing over the whole array */
  795|  1.62M|    for (i = 0; i < nDigits; ++i) {
  ------------------
  |  Branch (795:17): [True: 1.57M, False: 52.7k]
  ------------------
  796|  1.57M|        d = 0;
  797|  26.7M|        for (j = 0; j < nBignums; ++j) {
  ------------------
  |  Branch (797:21): [True: 25.1M, False: 1.57M]
  ------------------
  798|  25.1M|            d |= weaved[i * nBignums + j] & CONST_TIME_EQ(j, index);
  ------------------
  |  |  769|  25.1M|#define CONST_TIME_EQ(a, b) CONST_TIME_EQ_Z((a) ^ (b))
  |  |  ------------------
  |  |  |  |  768|  25.1M|#define CONST_TIME_EQ_Z(x) CONST_TIME_MSB(~(x) & ((x)-1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  767|  25.1M|#define CONST_TIME_MSB(x) (0L - ((x) >> (8 * sizeof(x) - 1)))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  799|  25.1M|        }
  800|  1.57M|        pDest[i] = d;
  801|  1.57M|    }
  802|       |
  803|  52.7k|    s_mp_clamp(a);
  804|  52.7k|    return MP_OKAY;
  ------------------
  |  |   39|  52.7k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  805|  52.7k|}
mp_exptmod_safe_i:
  841|  2.19k|{
  842|  2.19k|    mp_int *pa1, *pa2, *ptmp;
  843|  2.19k|    mp_size i;
  844|  2.19k|    mp_size first_window;
  845|  2.19k|    mp_err res;
  846|  2.19k|    int expOff;
  847|  2.19k|    mp_int accum1, accum2, accum[WEAVE_WORD_SIZE];
  848|  2.19k|    mp_int tmp;
  849|  2.19k|    mp_digit *powersArray = NULL;
  850|  2.19k|    mp_digit *powers = NULL;
  851|       |
  852|  2.19k|    MP_DIGITS(&accum1) = 0;
  ------------------
  |  |  152|  2.19k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  853|  2.19k|    MP_DIGITS(&accum2) = 0;
  ------------------
  |  |  152|  2.19k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  854|  2.19k|    MP_DIGITS(&accum[0]) = 0;
  ------------------
  |  |  152|  2.19k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  855|  2.19k|    MP_DIGITS(&accum[1]) = 0;
  ------------------
  |  |  152|  2.19k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  856|  2.19k|    MP_DIGITS(&accum[2]) = 0;
  ------------------
  |  |  152|  2.19k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  857|  2.19k|    MP_DIGITS(&accum[3]) = 0;
  ------------------
  |  |  152|  2.19k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  858|  2.19k|    MP_DIGITS(&tmp) = 0;
  ------------------
  |  |  152|  2.19k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  859|       |
  860|       |    /* grab the first window value. This allows us to preload accumulator1
  861|       |     * and save a conversion, some squares and a multiple*/
  862|  2.19k|    MP_CHECKOK(mpl_get_bits(exponent,
  ------------------
  |  |  319|  2.19k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  2.19k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 2.19k]
  |  |  ------------------
  |  |  320|  2.19k|    goto CLEANUP
  ------------------
  863|  2.19k|                            bits_in_exponent - window_bits, window_bits));
  864|  2.19k|    first_window = (mp_size)res;
  865|       |
  866|  2.19k|    MP_CHECKOK(mp_init_size(&accum1, 3 * nLen + 2));
  ------------------
  |  |  319|  2.19k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  2.19k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 2.19k]
  |  |  ------------------
  |  |  320|  2.19k|    goto CLEANUP
  ------------------
  867|  2.19k|    MP_CHECKOK(mp_init_size(&accum2, 3 * nLen + 2));
  ------------------
  |  |  319|  2.19k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  2.19k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 2.19k]
  |  |  ------------------
  |  |  320|  2.19k|    goto CLEANUP
  ------------------
  868|       |
  869|       |    /* build the first WEAVE_WORD powers inline */
  870|       |    /* if WEAVE_WORD_SIZE is not 4, this code will have to change */
  871|  2.19k|    if (num_powers > 2) {
  ------------------
  |  Branch (871:9): [True: 1.91k, False: 284]
  ------------------
  872|  1.91k|        MP_CHECKOK(mp_init_size(&accum[0], 3 * nLen + 2));
  ------------------
  |  |  319|  1.91k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.91k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.91k]
  |  |  ------------------
  |  |  320|  1.91k|    goto CLEANUP
  ------------------
  873|  1.91k|        MP_CHECKOK(mp_init_size(&accum[1], 3 * nLen + 2));
  ------------------
  |  |  319|  1.91k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.91k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.91k]
  |  |  ------------------
  |  |  320|  1.91k|    goto CLEANUP
  ------------------
  874|  1.91k|        MP_CHECKOK(mp_init_size(&accum[2], 3 * nLen + 2));
  ------------------
  |  |  319|  1.91k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.91k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.91k]
  |  |  ------------------
  |  |  320|  1.91k|    goto CLEANUP
  ------------------
  875|  1.91k|        MP_CHECKOK(mp_init_size(&accum[3], 3 * nLen + 2));
  ------------------
  |  |  319|  1.91k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.91k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.91k]
  |  |  ------------------
  |  |  320|  1.91k|    goto CLEANUP
  ------------------
  876|  1.91k|        mp_set(&accum[0], 1);
  877|  1.91k|        MP_CHECKOK(mp_to_mont(&accum[0], &(mmm->N), &accum[0]));
  ------------------
  |  |  319|  1.91k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.91k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.91k]
  |  |  ------------------
  |  |  320|  1.91k|    goto CLEANUP
  ------------------
  878|  1.91k|        MP_CHECKOK(mp_copy(montBase, &accum[1]));
  ------------------
  |  |  319|  1.91k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.91k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.91k]
  |  |  ------------------
  |  |  320|  1.91k|    goto CLEANUP
  ------------------
  879|  3.82k|        SQR(montBase, &accum[2]);
  ------------------
  |  |  808|  1.91k|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|  1.91k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  1.91k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 1.91k]
  |  |  |  |  ------------------
  |  |  |  |  320|  1.91k|    goto CLEANUP
  |  |  ------------------
  |  |  809|  1.91k|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|  1.91k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  1.91k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 1.91k]
  |  |  |  |  ------------------
  |  |  |  |  320|  1.91k|    goto CLEANUP
  |  |  ------------------
  ------------------
  880|  1.91k|        MUL_NOWEAVE(montBase, &accum[2], &accum[3]);
  ------------------
  |  |  817|  1.91k|    MP_CHECKOK(s_mp_mul_mont(a, x, b, mmm))
  |  |  ------------------
  |  |  |  |  319|  1.91k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  1.91k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 1.91k]
  |  |  |  |  ------------------
  |  |  |  |  320|  1.91k|    goto CLEANUP
  |  |  ------------------
  ------------------
  881|  1.91k|        powersArray = (mp_digit *)malloc(num_powers * (nLen * sizeof(mp_digit) + 1));
  882|  1.91k|        if (!powersArray) {
  ------------------
  |  Branch (882:13): [True: 0, False: 1.91k]
  ------------------
  883|      0|            res = MP_MEM;
  ------------------
  |  |   42|      0|#define MP_MEM -2    /* out of memory         */
  ------------------
  884|      0|            goto CLEANUP;
  885|      0|        }
  886|       |        /* powers[i] = base ** (i); */
  887|  1.91k|        powers = (mp_digit *)MP_ALIGN(powersArray, num_powers);
  ------------------
  |  |  828|  1.91k|#define MP_ALIGN(x, y) ((((ptrdiff_t)(x)) + ((y)-1)) & (((ptrdiff_t)0) - (y)))
  ------------------
  888|  1.91k|        MP_CHECKOK(mpi_to_weave(accum, powers, nLen, num_powers));
  ------------------
  |  |  319|  1.91k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.91k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.91k]
  |  |  ------------------
  |  |  320|  1.91k|    goto CLEANUP
  ------------------
  889|  1.91k|        if (first_window < 4) {
  ------------------
  |  Branch (889:13): [True: 427, False: 1.48k]
  ------------------
  890|    427|            MP_CHECKOK(mp_copy(&accum[first_window], &accum1));
  ------------------
  |  |  319|    427|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|    427|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 427]
  |  |  ------------------
  |  |  320|    427|    goto CLEANUP
  ------------------
  891|    427|            first_window = num_powers;
  892|    427|        }
  893|  1.91k|    } else {
  894|    284|        if (first_window == 0) {
  ------------------
  |  Branch (894:13): [True: 0, False: 284]
  ------------------
  895|      0|            mp_set(&accum1, 1);
  896|      0|            MP_CHECKOK(mp_to_mont(&accum1, &(mmm->N), &accum1));
  ------------------
  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  320|      0|    goto CLEANUP
  ------------------
  897|    284|        } else {
  898|       |            /* assert first_window == 1? */
  899|    284|            MP_CHECKOK(mp_copy(montBase, &accum1));
  ------------------
  |  |  319|    284|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|    284|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 284]
  |  |  ------------------
  |  |  320|    284|    goto CLEANUP
  ------------------
  900|    284|        }
  901|    284|    }
  902|       |
  903|       |    /*
  904|       |     * calculate all the powers in the powers array.
  905|       |     * this adds 2**(k-1)-2 square operations over just calculating the
  906|       |     * odd powers where k is the window size in the two other mp_modexpt
  907|       |     * implementations in this file. We will get some of that
  908|       |     * back by not needing the first 'k' squares and one multiply for the
  909|       |     * first window.
  910|       |     * Given the value of 4 for WEAVE_WORD_SIZE, this loop will only execute if
  911|       |     * num_powers > 2, in which case powers will have been allocated.
  912|       |     */
  913|  25.1k|    for (i = WEAVE_WORD_SIZE; i < num_powers; i++) {
  ------------------
  |  |  694|  2.19k|#define WEAVE_WORD_SIZE 4
  ------------------
  |  Branch (913:31): [True: 22.9k, False: 2.19k]
  ------------------
  914|  22.9k|        int acc_index = i & (WEAVE_WORD_SIZE - 1); /* i % WEAVE_WORD_SIZE */
  ------------------
  |  |  694|  22.9k|#define WEAVE_WORD_SIZE 4
  ------------------
  915|  22.9k|        if (i & 1) {
  ------------------
  |  Branch (915:13): [True: 11.4k, False: 11.4k]
  ------------------
  916|  11.4k|            MUL_NOWEAVE(montBase, &accum[acc_index - 1], &accum[acc_index]);
  ------------------
  |  |  817|  11.4k|    MP_CHECKOK(s_mp_mul_mont(a, x, b, mmm))
  |  |  ------------------
  |  |  |  |  319|  11.4k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  11.4k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 11.4k]
  |  |  |  |  ------------------
  |  |  |  |  320|  11.4k|    goto CLEANUP
  |  |  ------------------
  ------------------
  917|       |            /* we've filled the array do our 'per array' processing */
  918|  11.4k|            if (acc_index == (WEAVE_WORD_SIZE - 1)) {
  ------------------
  |  |  694|  11.4k|#define WEAVE_WORD_SIZE 4
  ------------------
  |  Branch (918:17): [True: 5.73k, False: 5.73k]
  ------------------
  919|  5.73k|                MP_CHECKOK(mpi_to_weave(accum, powers + i - (WEAVE_WORD_SIZE - 1),
  ------------------
  |  |  319|  5.73k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  5.73k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 5.73k]
  |  |  ------------------
  |  |  320|  5.73k|    goto CLEANUP
  ------------------
  920|  5.73k|                                        nLen, num_powers));
  921|       |
  922|  5.73k|                if (first_window <= i) {
  ------------------
  |  Branch (922:21): [True: 1.48k, False: 4.25k]
  ------------------
  923|  1.48k|                    MP_CHECKOK(mp_copy(&accum[first_window & (WEAVE_WORD_SIZE - 1)],
  ------------------
  |  |  319|  1.48k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.48k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.48k]
  |  |  ------------------
  |  |  320|  1.48k|    goto CLEANUP
  ------------------
  924|  1.48k|                                       &accum1));
  925|  1.48k|                    first_window = num_powers;
  926|  1.48k|                }
  927|  5.73k|            }
  928|  11.4k|        } else {
  929|       |            /* up to 8 we can find 2^i-1 in the accum array, but at 8 we our source
  930|       |             * and target are the same so we need to copy.. After that, the
  931|       |             * value is overwritten, so we need to fetch it from the stored
  932|       |             * weave array */
  933|  11.4k|            if (i > 2 * WEAVE_WORD_SIZE) {
  ------------------
  |  |  694|  11.4k|#define WEAVE_WORD_SIZE 4
  ------------------
  |  Branch (933:17): [True: 5.73k, False: 5.73k]
  ------------------
  934|  5.73k|                MP_CHECKOK(weave_to_mpi(&accum2, powers, i / 2, nLen, num_powers));
  ------------------
  |  |  319|  5.73k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  5.73k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 5.73k]
  |  |  ------------------
  |  |  320|  5.73k|    goto CLEANUP
  ------------------
  935|  11.4k|                SQR(&accum2, &accum[acc_index]);
  ------------------
  |  |  808|  5.73k|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|  5.73k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  5.73k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 5.73k]
  |  |  |  |  ------------------
  |  |  |  |  320|  5.73k|    goto CLEANUP
  |  |  ------------------
  |  |  809|  5.73k|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|  5.73k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  5.73k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 5.73k]
  |  |  |  |  ------------------
  |  |  |  |  320|  5.73k|    goto CLEANUP
  |  |  ------------------
  ------------------
  936|  11.4k|            } else {
  937|  5.73k|                int half_power_index = (i / 2) & (WEAVE_WORD_SIZE - 1);
  ------------------
  |  |  694|  5.73k|#define WEAVE_WORD_SIZE 4
  ------------------
  938|  5.73k|                if (half_power_index == acc_index) {
  ------------------
  |  Branch (938:21): [True: 1.91k, False: 3.82k]
  ------------------
  939|       |                    /* copy is cheaper than weave_to_mpi */
  940|  1.91k|                    MP_CHECKOK(mp_copy(&accum[half_power_index], &accum2));
  ------------------
  |  |  319|  1.91k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.91k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.91k]
  |  |  ------------------
  |  |  320|  1.91k|    goto CLEANUP
  ------------------
  941|  3.82k|                    SQR(&accum2, &accum[acc_index]);
  ------------------
  |  |  808|  1.91k|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|  1.91k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  1.91k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 1.91k]
  |  |  |  |  ------------------
  |  |  |  |  320|  1.91k|    goto CLEANUP
  |  |  ------------------
  |  |  809|  1.91k|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|  1.91k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  1.91k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 1.91k]
  |  |  |  |  ------------------
  |  |  |  |  320|  1.91k|    goto CLEANUP
  |  |  ------------------
  ------------------
  942|  3.82k|                } else {
  943|  3.82k|                    SQR(&accum[half_power_index], &accum[acc_index]);
  ------------------
  |  |  808|  3.82k|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|  3.82k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  3.82k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 3.82k]
  |  |  |  |  ------------------
  |  |  |  |  320|  3.82k|    goto CLEANUP
  |  |  ------------------
  |  |  809|  3.82k|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|  3.82k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  3.82k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 3.82k]
  |  |  |  |  ------------------
  |  |  |  |  320|  3.82k|    goto CLEANUP
  |  |  ------------------
  ------------------
  944|  3.82k|                }
  945|  5.73k|            }
  946|  11.4k|        }
  947|  22.9k|    }
  948|       |/* if the accum1 isn't set, Then there is something wrong with our logic
  949|       | * above and is an internal programming error.
  950|       | */
  951|  2.19k|#if MP_ARGCHK == 2
  952|  2.19k|    assert(MP_USED(&accum1) != 0);
  953|  2.19k|#endif
  954|       |
  955|       |    /* set accumulator to montgomery residue of 1 */
  956|  2.19k|    pa1 = &accum1;
  957|  2.19k|    pa2 = &accum2;
  958|       |
  959|       |    /* tmp is not used if window_bits == 1. */
  960|  2.19k|    if (window_bits != 1) {
  ------------------
  |  Branch (960:9): [True: 1.91k, False: 284]
  ------------------
  961|  1.91k|        MP_CHECKOK(mp_init_size(&tmp, 3 * nLen + 2));
  ------------------
  |  |  319|  1.91k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  1.91k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 1.91k]
  |  |  ------------------
  |  |  320|  1.91k|    goto CLEANUP
  ------------------
  962|  1.91k|    }
  963|       |
  964|  53.8k|    for (expOff = bits_in_exponent - window_bits * 2; expOff >= 0; expOff -= window_bits) {
  ------------------
  |  Branch (964:55): [True: 51.6k, False: 2.19k]
  ------------------
  965|  51.6k|        mp_size smallExp;
  966|  51.6k|        MP_CHECKOK(mpl_get_bits(exponent, expOff, window_bits));
  ------------------
  |  |  319|  51.6k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  51.6k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 51.6k]
  |  |  ------------------
  |  |  320|  51.6k|    goto CLEANUP
  ------------------
  967|  51.6k|        smallExp = (mp_size)res;
  968|       |
  969|       |        /* handle unroll the loops */
  970|  51.6k|        switch (window_bits) {
  971|  4.58k|            case 1:
  ------------------
  |  Branch (971:13): [True: 4.58k, False: 47.0k]
  ------------------
  972|  4.58k|                if (!smallExp) {
  ------------------
  |  Branch (972:21): [True: 3.70k, False: 874]
  ------------------
  973|  3.70k|                    SQR(pa1, pa2);
  ------------------
  |  |  808|  3.70k|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|  3.70k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  3.70k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 3.70k]
  |  |  |  |  ------------------
  |  |  |  |  320|  3.70k|    goto CLEANUP
  |  |  ------------------
  |  |  809|  3.70k|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|  3.70k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  3.70k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 3.70k]
  |  |  |  |  ------------------
  |  |  |  |  320|  3.70k|    goto CLEANUP
  |  |  ------------------
  ------------------
  974|  3.70k|                    SWAPPA;
  ------------------
  |  |  825|  3.70k|    ptmp = pa1; \
  |  |  826|  3.70k|    pa1 = pa2;  \
  |  |  827|  3.70k|    pa2 = ptmp
  ------------------
  975|  3.70k|                } else if (smallExp & 1) {
  ------------------
  |  Branch (975:28): [True: 874, False: 0]
  ------------------
  976|    874|                    SQR(pa1, pa2);
  ------------------
  |  |  808|    874|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|    874|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|    874|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 874]
  |  |  |  |  ------------------
  |  |  |  |  320|    874|    goto CLEANUP
  |  |  ------------------
  |  |  809|    874|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|    874|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|    874|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 874]
  |  |  |  |  ------------------
  |  |  |  |  320|    874|    goto CLEANUP
  |  |  ------------------
  ------------------
  977|    874|                    MUL_NOWEAVE(montBase, pa2, pa1);
  ------------------
  |  |  817|    874|    MP_CHECKOK(s_mp_mul_mont(a, x, b, mmm))
  |  |  ------------------
  |  |  |  |  319|    874|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|    874|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 874]
  |  |  |  |  ------------------
  |  |  |  |  320|    874|    goto CLEANUP
  |  |  ------------------
  ------------------
  978|    874|                } else {
  979|      0|                    abort();
  980|      0|                }
  981|  4.58k|                break;
  982|  4.58k|            case 6:
  ------------------
  |  Branch (982:13): [True: 0, False: 51.6k]
  ------------------
  983|      0|                SQR(pa1, pa2);
  ------------------
  |  |  808|      0|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  |  |  809|      0|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  ------------------
  984|      0|                SQR(pa2, pa1);
  ------------------
  |  |  808|      0|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  |  |  809|      0|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  ------------------
  985|       |            /* fall through */
  986|  47.0k|            case 4:
  ------------------
  |  Branch (986:13): [True: 47.0k, False: 4.58k]
  ------------------
  987|  47.0k|                SQR(pa1, pa2);
  ------------------
  |  |  808|  47.0k|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|  47.0k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  47.0k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 47.0k]
  |  |  |  |  ------------------
  |  |  |  |  320|  47.0k|    goto CLEANUP
  |  |  ------------------
  |  |  809|  47.0k|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|  47.0k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  47.0k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 47.0k]
  |  |  |  |  ------------------
  |  |  |  |  320|  47.0k|    goto CLEANUP
  |  |  ------------------
  ------------------
  988|  94.0k|                SQR(pa2, pa1);
  ------------------
  |  |  808|  47.0k|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|  47.0k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  47.0k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 47.0k]
  |  |  |  |  ------------------
  |  |  |  |  320|  47.0k|    goto CLEANUP
  |  |  ------------------
  |  |  809|  47.0k|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|  47.0k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  47.0k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 47.0k]
  |  |  |  |  ------------------
  |  |  |  |  320|  47.0k|    goto CLEANUP
  |  |  ------------------
  ------------------
  989|  94.0k|                SQR(pa1, pa2);
  ------------------
  |  |  808|  47.0k|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|  47.0k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  47.0k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 47.0k]
  |  |  |  |  ------------------
  |  |  |  |  320|  47.0k|    goto CLEANUP
  |  |  ------------------
  |  |  809|  47.0k|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|  47.0k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  47.0k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 47.0k]
  |  |  |  |  ------------------
  |  |  |  |  320|  47.0k|    goto CLEANUP
  |  |  ------------------
  ------------------
  990|  94.0k|                SQR(pa2, pa1);
  ------------------
  |  |  808|  47.0k|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|  47.0k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  47.0k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 47.0k]
  |  |  |  |  ------------------
  |  |  |  |  320|  47.0k|    goto CLEANUP
  |  |  ------------------
  |  |  809|  47.0k|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|  47.0k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  47.0k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 47.0k]
  |  |  |  |  ------------------
  |  |  |  |  320|  47.0k|    goto CLEANUP
  |  |  ------------------
  ------------------
  991|  94.0k|                MUL(smallExp, pa1, pa2);
  ------------------
  |  |  821|  47.0k|    MP_CHECKOK(weave_to_mpi(&tmp, powers, (x), nLen, num_powers)); \
  |  |  ------------------
  |  |  |  |  319|  47.0k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  47.0k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 47.0k]
  |  |  |  |  ------------------
  |  |  |  |  320|  47.0k|    goto CLEANUP
  |  |  ------------------
  |  |  822|  47.0k|    MUL_NOWEAVE(&tmp, a, b)
  |  |  ------------------
  |  |  |  |  817|  47.0k|    MP_CHECKOK(s_mp_mul_mont(a, x, b, mmm))
  |  |  |  |  ------------------
  |  |  |  |  |  |  319|  47.0k|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|  47.0k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (319:9): [True: 0, False: 47.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  320|  47.0k|    goto CLEANUP
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  992|  47.0k|                SWAPPA;
  ------------------
  |  |  825|  47.0k|    ptmp = pa1; \
  |  |  826|  47.0k|    pa1 = pa2;  \
  |  |  827|  47.0k|    pa2 = ptmp
  ------------------
  993|  47.0k|                break;
  994|      0|            case 5:
  ------------------
  |  Branch (994:13): [True: 0, False: 51.6k]
  ------------------
  995|      0|                SQR(pa1, pa2);
  ------------------
  |  |  808|      0|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  |  |  809|      0|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  ------------------
  996|      0|                SQR(pa2, pa1);
  ------------------
  |  |  808|      0|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  |  |  809|      0|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  ------------------
  997|      0|                SQR(pa1, pa2);
  ------------------
  |  |  808|      0|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  |  |  809|      0|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  ------------------
  998|      0|                SQR(pa2, pa1);
  ------------------
  |  |  808|      0|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  |  |  809|      0|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  ------------------
  999|      0|                SQR(pa1, pa2);
  ------------------
  |  |  808|      0|    MP_CHECKOK(mp_sqr(a, b)); \
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  |  |  809|      0|    MP_CHECKOK(s_mp_redc(b, mmm))
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  ------------------
 1000|      0|                MUL(smallExp, pa2, pa1);
  ------------------
  |  |  821|      0|    MP_CHECKOK(weave_to_mpi(&tmp, powers, (x), nLen, num_powers)); \
  |  |  ------------------
  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  320|      0|    goto CLEANUP
  |  |  ------------------
  |  |  822|      0|    MUL_NOWEAVE(&tmp, a, b)
  |  |  ------------------
  |  |  |  |  817|      0|    MP_CHECKOK(s_mp_mul_mont(a, x, b, mmm))
  |  |  |  |  ------------------
  |  |  |  |  |  |  319|      0|    if (MP_OKAY > (res = (x))) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|      0|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (319:9): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  320|      0|    goto CLEANUP
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1001|      0|                break;
 1002|      0|            default:
  ------------------
  |  Branch (1002:13): [True: 0, False: 51.6k]
  ------------------
 1003|      0|                abort(); /* could do a loop? */
 1004|  51.6k|        }
 1005|  51.6k|    }
 1006|       |
 1007|  2.19k|    res = s_mp_redc(pa1, mmm);
 1008|  2.19k|    mp_exch(pa1, result);
 1009|       |
 1010|  2.19k|CLEANUP:
 1011|  2.19k|    mp_clear(&accum1);
 1012|  2.19k|    mp_clear(&accum2);
 1013|  2.19k|    mp_clear(&accum[0]);
 1014|  2.19k|    mp_clear(&accum[1]);
 1015|  2.19k|    mp_clear(&accum[2]);
 1016|  2.19k|    mp_clear(&accum[3]);
 1017|  2.19k|    mp_clear(&tmp);
 1018|       |    /* zero required by FIPS here, can't use PORT_ZFree
 1019|       |     * because mpi doesn't link with util */
 1020|  2.19k|    if (powers) {
  ------------------
  |  Branch (1020:9): [True: 1.91k, False: 284]
  ------------------
 1021|  1.91k|        PORT_Memset(powers, 0, num_powers * sizeof(mp_digit));
  ------------------
  |  |  182|  1.91k|#define PORT_Memset memset
  ------------------
 1022|  1.91k|    }
 1023|  2.19k|    free(powersArray);
 1024|  2.19k|    return res;
 1025|  2.19k|}
mp_exptmod:
 1033|  5.31k|{
 1034|  5.31k|    const mp_int *base;
 1035|  5.31k|    mp_size bits_in_exponent, i, window_bits, odd_ints;
 1036|  5.31k|    mp_err res;
 1037|  5.31k|    int nLen;
 1038|  5.31k|    mp_int montBase, goodBase;
 1039|  5.31k|    mp_mont_modulus mmm;
 1040|  5.31k|#ifdef MP_USING_CACHE_SAFE_MOD_EXP
 1041|  5.31k|    static unsigned int max_window_bits;
 1042|  5.31k|#endif
 1043|       |
 1044|       |    /* function for computing n0prime only works if n0 is odd */
 1045|  5.31k|    if (!mp_isodd(modulus))
  ------------------
  |  Branch (1045:9): [True: 3.11k, False: 2.19k]
  ------------------
 1046|  3.11k|        return s_mp_exptmod(inBase, exponent, modulus, result);
 1047|       |
 1048|  2.19k|    if (mp_cmp_z(inBase) == MP_LT)
  ------------------
  |  |   49|  2.19k|#define MP_LT -1
  ------------------
  |  Branch (1048:9): [True: 0, False: 2.19k]
  ------------------
 1049|      0|        return MP_RANGE;
  ------------------
  |  |   43|      0|#define MP_RANGE -3  /* argument out of range */
  ------------------
 1050|  2.19k|    MP_DIGITS(&montBase) = 0;
  ------------------
  |  |  152|  2.19k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 1051|  2.19k|    MP_DIGITS(&goodBase) = 0;
  ------------------
  |  |  152|  2.19k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
 1052|       |
 1053|  2.19k|    if (mp_cmp(inBase, modulus) < 0) {
  ------------------
  |  Branch (1053:9): [True: 1.79k, False: 401]
  ------------------
 1054|  1.79k|        base = inBase;
 1055|  1.79k|    } else {
 1056|    401|        MP_CHECKOK(mp_init(&goodBase));
  ------------------
  |  |  319|    401|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|    401|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 401]
  |  |  ------------------
  |  |  320|    401|    goto CLEANUP
  ------------------
 1057|    401|        base = &goodBase;
 1058|    401|        MP_CHECKOK(mp_mod(inBase, modulus, &goodBase));
  ------------------
  |  |  319|    401|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|    401|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 401]
  |  |  ------------------
  |  |  320|    401|    goto CLEANUP
  ------------------
 1059|    401|    }
 1060|       |
 1061|  2.19k|    nLen = MP_USED(modulus);
  ------------------
  |  |  150|  2.19k|#define MP_USED(MP) ((MP)->used)
  ------------------
 1062|  2.19k|    MP_CHECKOK(mp_init_size(&montBase, 2 * nLen + 2));
  ------------------
  |  |  319|  2.19k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  2.19k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 2.19k]
  |  |  ------------------
  |  |  320|  2.19k|    goto CLEANUP
  ------------------
 1063|       |
 1064|  2.19k|    mmm.N = *modulus; /* a copy of the mp_int struct */
 1065|       |
 1066|       |    /* compute n0', given n0, n0' = -(n0 ** -1) mod MP_RADIX
 1067|       |    **        where n0 = least significant mp_digit of N, the modulus.
 1068|       |    */
 1069|  2.19k|    mmm.n0prime = mp_calculate_mont_n0i(modulus);
 1070|       |
 1071|  2.19k|    MP_CHECKOK(mp_to_mont(base, modulus, &montBase));
  ------------------
  |  |  319|  2.19k|    if (MP_OKAY > (res = (x))) \
  |  |  ------------------
  |  |  |  |   39|  2.19k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (319:9): [True: 0, False: 2.19k]
  |  |  ------------------
  |  |  320|  2.19k|    goto CLEANUP
  ------------------
 1072|       |
 1073|  2.19k|    bits_in_exponent = mpl_significant_bits(exponent);
 1074|  2.19k|#ifdef MP_USING_CACHE_SAFE_MOD_EXP
 1075|  2.19k|    if (mp_using_cache_safe_exp) {
  ------------------
  |  Branch (1075:9): [True: 2.19k, False: 0]
  ------------------
 1076|  2.19k|        if (bits_in_exponent > 780)
  ------------------
  |  Branch (1076:13): [True: 0, False: 2.19k]
  ------------------
 1077|      0|            window_bits = 6;
 1078|  2.19k|        else if (bits_in_exponent > 256)
  ------------------
  |  Branch (1078:18): [True: 0, False: 2.19k]
  ------------------
 1079|      0|            window_bits = 5;
 1080|  2.19k|        else if (bits_in_exponent > 20)
  ------------------
  |  Branch (1080:18): [True: 1.91k, False: 284]
  ------------------
 1081|  1.91k|            window_bits = 4;
 1082|       |        /* RSA public key exponents are typically under 20 bits (common values
 1083|       |         * are: 3, 17, 65537) and a 4-bit window is inefficient
 1084|       |         */
 1085|    284|        else
 1086|    284|            window_bits = 1;
 1087|  2.19k|    } else
 1088|      0|#endif
 1089|      0|        if (bits_in_exponent > 480)
  ------------------
  |  Branch (1089:13): [True: 0, False: 0]
  ------------------
 1090|      0|        window_bits = 6;
 1091|      0|    else if (bits_in_exponent > 160)
  ------------------
  |  Branch (1091:14): [True: 0, False: 0]
  ------------------
 1092|      0|        window_bits = 5;
 1093|      0|    else if (bits_in_exponent > 20)
  ------------------
  |  Branch (1093:14): [True: 0, False: 0]
  ------------------
 1094|      0|        window_bits = 4;
 1095|       |    /* RSA public key exponents are typically under 20 bits (common values
 1096|       |     * are: 3, 17, 65537) and a 4-bit window is inefficient
 1097|       |     */
 1098|      0|    else
 1099|      0|        window_bits = 1;
 1100|       |
 1101|  2.19k|#ifdef MP_USING_CACHE_SAFE_MOD_EXP
 1102|       |    /*
 1103|       |     * clamp the window size based on
 1104|       |     * the cache line size.
 1105|       |     */
 1106|  2.19k|    if (!max_window_bits) {
  ------------------
  |  Branch (1106:9): [True: 1, False: 2.19k]
  ------------------
 1107|      1|        unsigned long cache_size = s_mpi_getProcessorLineSize();
 1108|       |        /* processor has no cache, use 'fast' code always */
 1109|      1|        if (cache_size == 0) {
  ------------------
  |  Branch (1109:13): [True: 0, False: 1]
  ------------------
 1110|      0|            mp_using_cache_safe_exp = 0;
 1111|      0|        }
 1112|      1|        if ((cache_size == 0) || (cache_size >= 64)) {
  ------------------
  |  Branch (1112:13): [True: 0, False: 1]
  |  Branch (1112:34): [True: 1, False: 0]
  ------------------
 1113|      1|            max_window_bits = 6;
 1114|      1|        } else if (cache_size >= 32) {
  ------------------
  |  Branch (1114:20): [True: 0, False: 0]
  ------------------
 1115|      0|            max_window_bits = 5;
 1116|      0|        } else if (cache_size >= 16) {
  ------------------
  |  Branch (1116:20): [True: 0, False: 0]
  ------------------
 1117|      0|            max_window_bits = 4;
 1118|      0|        } else
 1119|      0|            max_window_bits = 1; /* should this be an assert? */
 1120|      1|    }
 1121|       |
 1122|       |    /* clamp the window size down before we caclulate bits_in_exponent */
 1123|  2.19k|    if (mp_using_cache_safe_exp) {
  ------------------
  |  Branch (1123:9): [True: 2.19k, False: 0]
  ------------------
 1124|  2.19k|        if (window_bits > max_window_bits) {
  ------------------
  |  Branch (1124:13): [True: 0, False: 2.19k]
  ------------------
 1125|      0|            window_bits = max_window_bits;
 1126|      0|        }
 1127|  2.19k|    }
 1128|  2.19k|#endif
 1129|       |
 1130|  2.19k|    odd_ints = 1 << (window_bits - 1);
 1131|  2.19k|    i = bits_in_exponent % window_bits;
 1132|  2.19k|    if (i != 0) {
  ------------------
  |  Branch (1132:9): [True: 1.21k, False: 983]
  ------------------
 1133|  1.21k|        bits_in_exponent += window_bits - i;
 1134|  1.21k|    }
 1135|       |
 1136|       |#ifdef MP_USING_MONT_MULF
 1137|       |    if (mp_using_mont_mulf) {
 1138|       |        MP_CHECKOK(s_mp_pad(&montBase, nLen));
 1139|       |        res = mp_exptmod_f(&montBase, exponent, modulus, result, &mmm, nLen,
 1140|       |                           bits_in_exponent, window_bits, odd_ints);
 1141|       |    } else
 1142|       |#endif
 1143|  2.19k|#ifdef MP_USING_CACHE_SAFE_MOD_EXP
 1144|  2.19k|        if (mp_using_cache_safe_exp) {
  ------------------
  |  Branch (1144:13): [True: 2.19k, False: 0]
  ------------------
 1145|  2.19k|        res = mp_exptmod_safe_i(&montBase, exponent, modulus, result, &mmm, nLen,
 1146|  2.19k|                                bits_in_exponent, window_bits, 1 << window_bits);
 1147|  2.19k|    } else
 1148|      0|#endif
 1149|      0|        res = mp_exptmod_i(&montBase, exponent, modulus, result, &mmm, nLen,
 1150|      0|                           bits_in_exponent, window_bits, odd_ints);
 1151|       |
 1152|  2.19k|CLEANUP:
 1153|  2.19k|    mp_clear(&montBase);
 1154|  2.19k|    mp_clear(&goodBase);
 1155|       |    /* Don't mp_clear mmm.N because it is merely a copy of modulus.
 1156|       |    ** Just zap it.
 1157|       |    */
 1158|  2.19k|    memset(&mmm, 0, sizeof mmm);
 1159|  2.19k|    return res;
 1160|  2.19k|}

PQG_GetLength:
  214|  1.33k|{
  215|  1.33k|    unsigned int len = obj->len;
  216|       |
  217|  1.33k|    if (obj->data == NULL) {
  ------------------
  |  Branch (217:9): [True: 0, False: 1.33k]
  ------------------
  218|      0|        return 0;
  219|      0|    }
  220|  1.33k|    if (len > 1 && obj->data[0] == 0) {
  ------------------
  |  Branch (220:9): [True: 1.33k, False: 0]
  |  Branch (220:20): [True: 0, False: 1.33k]
  ------------------
  221|      0|        len--;
  222|      0|    }
  223|  1.33k|    return len;
  224|  1.33k|}

HASH_GetRawHashObject:
  238|    134|{
  239|    134|    if (hashType <= HASH_AlgNULL || hashType >= HASH_AlgTOTAL) {
  ------------------
  |  Branch (239:9): [True: 0, False: 134]
  |  Branch (239:37): [True: 0, False: 134]
  ------------------
  240|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  241|      0|        return NULL;
  242|      0|    }
  243|    134|    return &SECRawHashObjects[hashType];
  244|    134|}
rawhash.c:RawHash_SHA1_NewContext:
   17|      3|    {                                                                                    \
   18|      3|        ctxtype *ctx = mmm##_NewContext();                                               \
   19|      3|        return ctx;                                                                      \
   20|      3|    }                                                                                    \
rawhash.c:RawHash_SHA1_DestroyContext:
   42|      3|    {                                                                                    \
   43|      3|        ctxtype *ctx = vctx;                                                             \
   44|      3|        mmm##_DestroyContext(ctx, freeit);                                               \
   45|      3|    }
rawhash.c:RawHash_SHA1_Begin:
   23|     25|    {                                                                                    \
   24|     25|        ctxtype *ctx = vctx;                                                             \
   25|     25|        mmm##_Begin(ctx);                                                                \
   26|     25|    }                                                                                    \
rawhash.c:RawHash_SHA1_Update:
   29|     51|    {                                                                                    \
   30|     51|        ctxtype *ctx = vctx;                                                             \
   31|     51|        mmm##_Update(ctx, input, len);                                                   \
   32|     51|    }                                                                                    \
rawhash.c:RawHash_SHA1_End:
   36|     25|    {                                                                                    \
   37|     25|        ctxtype *ctx = vctx;                                                             \
   38|     25|        mmm##_End(ctx, digest, len, maxLen);                                             \
   39|     25|    }                                                                                    \
rawhash.c:RawHash_SHA256_NewContext:
   17|     62|    {                                                                                    \
   18|     62|        ctxtype *ctx = mmm##_NewContext();                                               \
   19|     62|        return ctx;                                                                      \
   20|     62|    }                                                                                    \
rawhash.c:RawHash_SHA256_DestroyContext:
   42|     62|    {                                                                                    \
   43|     62|        ctxtype *ctx = vctx;                                                             \
   44|     62|        mmm##_DestroyContext(ctx, freeit);                                               \
   45|     62|    }
rawhash.c:RawHash_SHA256_Begin:
   23|    190|    {                                                                                    \
   24|    190|        ctxtype *ctx = vctx;                                                             \
   25|    190|        mmm##_Begin(ctx);                                                                \
   26|    190|    }                                                                                    \
rawhash.c:RawHash_SHA256_Update:
   29|    408|    {                                                                                    \
   30|    408|        ctxtype *ctx = vctx;                                                             \
   31|    408|        mmm##_Update(ctx, input, len);                                                   \
   32|    408|    }                                                                                    \
rawhash.c:RawHash_SHA256_End:
   36|    190|    {                                                                                    \
   37|    190|        ctxtype *ctx = vctx;                                                             \
   38|    190|        mmm##_End(ctx, digest, len, maxLen);                                             \
   39|    190|    }                                                                                    \
rawhash.c:RawHash_SHA384_NewContext:
   17|     14|    {                                                                                    \
   18|     14|        ctxtype *ctx = mmm##_NewContext();                                               \
   19|     14|        return ctx;                                                                      \
   20|     14|    }                                                                                    \
rawhash.c:RawHash_SHA384_DestroyContext:
   42|     14|    {                                                                                    \
   43|     14|        ctxtype *ctx = vctx;                                                             \
   44|     14|        mmm##_DestroyContext(ctx, freeit);                                               \
   45|     14|    }
rawhash.c:RawHash_SHA384_Begin:
   23|     22|    {                                                                                    \
   24|     22|        ctxtype *ctx = vctx;                                                             \
   25|     22|        mmm##_Begin(ctx);                                                                \
   26|     22|    }                                                                                    \
rawhash.c:RawHash_SHA384_Update:
   29|     50|    {                                                                                    \
   30|     50|        ctxtype *ctx = vctx;                                                             \
   31|     50|        mmm##_Update(ctx, input, len);                                                   \
   32|     50|    }                                                                                    \
rawhash.c:RawHash_SHA384_End:
   36|     22|    {                                                                                    \
   37|     22|        ctxtype *ctx = vctx;                                                             \
   38|     22|        mmm##_End(ctx, digest, len, maxLen);                                             \
   39|     22|    }                                                                                    \
rawhash.c:RawHash_SHA512_NewContext:
   17|     21|    {                                                                                    \
   18|     21|        ctxtype *ctx = mmm##_NewContext();                                               \
   19|     21|        return ctx;                                                                      \
   20|     21|    }                                                                                    \
rawhash.c:RawHash_SHA512_DestroyContext:
   42|     21|    {                                                                                    \
   43|     21|        ctxtype *ctx = vctx;                                                             \
   44|     21|        mmm##_DestroyContext(ctx, freeit);                                               \
   45|     21|    }
rawhash.c:RawHash_SHA512_Begin:
   23|     50|    {                                                                                    \
   24|     50|        ctxtype *ctx = vctx;                                                             \
   25|     50|        mmm##_Begin(ctx);                                                                \
   26|     50|    }                                                                                    \
rawhash.c:RawHash_SHA512_Update:
   29|    107|    {                                                                                    \
   30|    107|        ctxtype *ctx = vctx;                                                             \
   31|    107|        mmm##_Update(ctx, input, len);                                                   \
   32|    107|    }                                                                                    \
rawhash.c:RawHash_SHA512_End:
   36|     50|    {                                                                                    \
   37|     50|        ctxtype *ctx = vctx;                                                             \
   38|     50|        mmm##_End(ctx, digest, len, maxLen);                                             \
   39|     50|    }                                                                                    \
rawhash.c:RawHash_SHA224_NewContext:
   17|      1|    {                                                                                    \
   18|      1|        ctxtype *ctx = mmm##_NewContext();                                               \
   19|      1|        return ctx;                                                                      \
   20|      1|    }                                                                                    \
rawhash.c:RawHash_SHA224_DestroyContext:
   42|      1|    {                                                                                    \
   43|      1|        ctxtype *ctx = vctx;                                                             \
   44|      1|        mmm##_DestroyContext(ctx, freeit);                                               \
   45|      1|    }
rawhash.c:RawHash_SHA224_Begin:
   23|      7|    {                                                                                    \
   24|      7|        ctxtype *ctx = vctx;                                                             \
   25|      7|        mmm##_Begin(ctx);                                                                \
   26|      7|    }                                                                                    \
rawhash.c:RawHash_SHA224_Update:
   29|     14|    {                                                                                    \
   30|     14|        ctxtype *ctx = vctx;                                                             \
   31|     14|        mmm##_Update(ctx, input, len);                                                   \
   32|     14|    }                                                                                    \
rawhash.c:RawHash_SHA224_End:
   36|      7|    {                                                                                    \
   37|      7|        ctxtype *ctx = vctx;                                                             \
   38|      7|        mmm##_End(ctx, digest, len, maxLen);                                             \
   39|      7|    }                                                                                    \

RSA_PublicKeyOp:
  934|  2.76k|{
  935|  2.76k|    unsigned int modLen, expLen, offset;
  936|  2.76k|    mp_int n, e, m, c;
  937|  2.76k|    mp_err err = MP_OKAY;
  ------------------
  |  |   39|  2.76k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  938|  2.76k|    SECStatus rv = SECSuccess;
  939|  2.76k|    if (!key || !output || !input) {
  ------------------
  |  Branch (939:9): [True: 0, False: 2.76k]
  |  Branch (939:17): [True: 0, False: 2.76k]
  |  Branch (939:28): [True: 0, False: 2.76k]
  ------------------
  940|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  941|      0|        return SECFailure;
  942|      0|    }
  943|  2.76k|    MP_DIGITS(&n) = 0;
  ------------------
  |  |  152|  2.76k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  944|  2.76k|    MP_DIGITS(&e) = 0;
  ------------------
  |  |  152|  2.76k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  945|  2.76k|    MP_DIGITS(&m) = 0;
  ------------------
  |  |  152|  2.76k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  946|  2.76k|    MP_DIGITS(&c) = 0;
  ------------------
  |  |  152|  2.76k|#define MP_DIGITS(MP) ((MP)->dp)
  ------------------
  947|  2.76k|    CHECK_MPI_OK(mp_init(&n));
  ------------------
  |  |   12|  2.76k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  2.76k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 2.76k]
  |  |  ------------------
  |  |   13|  2.76k|    goto cleanup
  ------------------
  948|  2.76k|    CHECK_MPI_OK(mp_init(&e));
  ------------------
  |  |   12|  2.76k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  2.76k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 2.76k]
  |  |  ------------------
  |  |   13|  2.76k|    goto cleanup
  ------------------
  949|  2.76k|    CHECK_MPI_OK(mp_init(&m));
  ------------------
  |  |   12|  2.76k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  2.76k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 2.76k]
  |  |  ------------------
  |  |   13|  2.76k|    goto cleanup
  ------------------
  950|  2.76k|    CHECK_MPI_OK(mp_init(&c));
  ------------------
  |  |   12|  2.76k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  2.76k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 2.76k]
  |  |  ------------------
  |  |   13|  2.76k|    goto cleanup
  ------------------
  951|  2.76k|    modLen = rsa_modulusLen(&key->modulus);
  952|  2.76k|    expLen = rsa_modulusLen(&key->publicExponent);
  953|       |
  954|  2.76k|    if (modLen == 0) {
  ------------------
  |  Branch (954:9): [True: 0, False: 2.76k]
  ------------------
  955|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  956|      0|        rv = SECFailure;
  957|      0|        goto cleanup;
  958|      0|    }
  959|       |
  960|       |    /* 1.  Obtain public key (n, e) */
  961|  2.76k|    if (BAD_RSA_KEY_SIZE(modLen, expLen)) {
  ------------------
  |  |   47|  2.76k|    ((expLen) > (modLen) || (modLen) > RSA_MAX_MODULUS_BITS / 8 || \
  |  |  ------------------
  |  |  |  |  152|  2.76k|#define RSA_MAX_MODULUS_BITS 16384
  |  |  ------------------
  |  |  |  Branch (47:6): [True: 0, False: 2.76k]
  |  |  |  Branch (47:29): [True: 0, False: 2.76k]
  |  |  ------------------
  |  |   48|  2.76k|     (expLen) > RSA_MAX_EXPONENT_BITS / 8)
  |  |  ------------------
  |  |  |  |  153|  2.76k|#define RSA_MAX_EXPONENT_BITS 64
  |  |  ------------------
  |  |  |  Branch (48:6): [True: 0, False: 2.76k]
  |  |  ------------------
  ------------------
  962|      0|        PORT_SetError(SEC_ERROR_INVALID_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  963|      0|        rv = SECFailure;
  964|      0|        goto cleanup;
  965|      0|    }
  966|  2.76k|    SECITEM_TO_MPINT(key->modulus, &n);
  ------------------
  |  |   19|  2.76k|    CHECK_MPI_OK(mp_read_unsigned_octets((mp), (it).data, (it).len))
  |  |  ------------------
  |  |  |  |   12|  2.76k|    if (MP_OKAY > (err = func)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  2.76k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (12:9): [True: 0, False: 2.76k]
  |  |  |  |  ------------------
  |  |  |  |   13|  2.76k|    goto cleanup
  |  |  ------------------
  ------------------
  967|  2.76k|    SECITEM_TO_MPINT(key->publicExponent, &e);
  ------------------
  |  |   19|  2.76k|    CHECK_MPI_OK(mp_read_unsigned_octets((mp), (it).data, (it).len))
  |  |  ------------------
  |  |  |  |   12|  2.76k|    if (MP_OKAY > (err = func)) \
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  2.76k|#define MP_OKAY 0    /* no error, all is well */
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (12:9): [True: 0, False: 2.76k]
  |  |  |  |  ------------------
  |  |  |  |   13|  2.76k|    goto cleanup
  |  |  ------------------
  ------------------
  968|  2.76k|    if (e.used > n.used) {
  ------------------
  |  Branch (968:9): [True: 0, False: 2.76k]
  ------------------
  969|       |        /* exponent should not be greater than modulus */
  970|      0|        PORT_SetError(SEC_ERROR_INVALID_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  971|      0|        rv = SECFailure;
  972|      0|        goto cleanup;
  973|      0|    }
  974|       |    /* 2. check input out of range (needs to be in range [0..n-1]) */
  975|  2.76k|    offset = (key->modulus.data[0] == 0) ? 1 : 0; /* may be leading 0 */
  ------------------
  |  Branch (975:14): [True: 0, False: 2.76k]
  ------------------
  976|  2.76k|    if (memcmp(input, key->modulus.data + offset, modLen) >= 0) {
  ------------------
  |  Branch (976:9): [True: 9, False: 2.75k]
  ------------------
  977|      9|        PORT_SetError(SEC_ERROR_INPUT_LEN);
  ------------------
  |  |   65|      9|#define PORT_SetError PORT_SetError_Util
  ------------------
  978|      9|        rv = SECFailure;
  979|      9|        goto cleanup;
  980|      9|    }
  981|       |    /* 2 bis.  Represent message as integer in range [0..n-1] */
  982|  2.75k|    CHECK_MPI_OK(mp_read_unsigned_octets(&m, input, modLen));
  ------------------
  |  |   12|  2.75k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  2.75k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 2.75k]
  |  |  ------------------
  |  |   13|  2.75k|    goto cleanup
  ------------------
  983|       |/* 3.  Compute c = m**e mod n */
  984|       |#ifdef USE_MPI_EXPT_D
  985|       |    /* XXX see which is faster */
  986|       |    if (MP_USED(&e) == 1) {
  987|       |        CHECK_MPI_OK(mp_exptmod_d(&m, MP_DIGIT(&e, 0), &n, &c));
  988|       |    } else
  989|       |#endif
  990|  2.75k|        CHECK_MPI_OK(mp_exptmod(&m, &e, &n, &c));
  ------------------
  |  |   12|  2.75k|    if (MP_OKAY > (err = func)) \
  |  |  ------------------
  |  |  |  |   39|  2.75k|#define MP_OKAY 0    /* no error, all is well */
  |  |  ------------------
  |  |  |  Branch (12:9): [True: 0, False: 2.75k]
  |  |  ------------------
  |  |   13|  2.75k|    goto cleanup
  ------------------
  991|       |    /* 4.  result c is ciphertext */
  992|  2.75k|    err = mp_to_fixlen_octets(&c, output, modLen);
  993|  2.75k|    if (err >= 0)
  ------------------
  |  Branch (993:9): [True: 2.75k, False: 0]
  ------------------
  994|  2.75k|        err = MP_OKAY;
  ------------------
  |  |   39|  2.75k|#define MP_OKAY 0    /* no error, all is well */
  ------------------
  995|  2.76k|cleanup:
  996|  2.76k|    mp_clear(&n);
  997|  2.76k|    mp_clear(&e);
  998|  2.76k|    mp_clear(&m);
  999|  2.76k|    mp_clear(&c);
 1000|  2.76k|    if (err) {
  ------------------
  |  Branch (1000:9): [True: 0, False: 2.76k]
  ------------------
 1001|      0|        MP_TO_SEC_ERROR(err);
  ------------------
  |  |   41|      0|    switch (err) {                                    \
  |  |   42|      0|        case MP_MEM:                                  \
  |  |  ------------------
  |  |  |  |   42|      0|#define MP_MEM -2    /* out of memory         */
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   43|      0|            PORT_SetError(SEC_ERROR_NO_MEMORY);       \
  |  |  ------------------
  |  |  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  |  |  ------------------
  |  |   44|      0|            break;                                    \
  |  |   45|      0|        case MP_RANGE:                                \
  |  |  ------------------
  |  |  |  |   43|      0|#define MP_RANGE -3  /* argument out of range */
  |  |  ------------------
  |  |  |  Branch (45:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   46|      0|            PORT_SetError(SEC_ERROR_BAD_DATA);        \
  |  |  ------------------
  |  |  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  |  |  ------------------
  |  |   47|      0|            break;                                    \
  |  |   48|      0|        case MP_BADARG:                               \
  |  |  ------------------
  |  |  |  |   44|      0|#define MP_BADARG -4 /* invalid parameter     */
  |  |  ------------------
  |  |  |  Branch (48:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   49|      0|            PORT_SetError(SEC_ERROR_INVALID_ARGS);    \
  |  |  ------------------
  |  |  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  |  |  ------------------
  |  |   50|      0|            break;                                    \
  |  |   51|      0|        default:                                      \
  |  |  ------------------
  |  |  |  Branch (51:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   52|      0|            PORT_SetError(SEC_ERROR_LIBRARY_FAILURE); \
  |  |  ------------------
  |  |  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  |  |  ------------------
  |  |   53|      0|            break;                                    \
  |  |   54|      0|    }
  ------------------
 1002|      0|        rv = SECFailure;
 1003|      0|    }
 1004|  2.76k|    return rv;
 1005|  2.76k|}
RSA_Init:
 1670|      1|{
 1671|      1|    if (PR_CallOnce(&coBPInit, init_blinding_params_list) != PR_SUCCESS) {
  ------------------
  |  Branch (1671:9): [True: 0, False: 1]
  ------------------
 1672|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1673|      0|        return SECFailure;
 1674|      0|    }
 1675|      1|    return SECSuccess;
 1676|      1|}
RSA_Cleanup:
 1681|      1|{
 1682|      1|    blindingParams *bp = NULL;
 1683|      1|    if (!coBPInit.initialized)
  ------------------
  |  Branch (1683:9): [True: 0, False: 1]
  ------------------
 1684|      0|        return;
 1685|       |
 1686|      1|    while (!PR_CLIST_IS_EMPTY(&blindingParamsList.head)) {
  ------------------
  |  |   94|      1|    ((_l)->next == (_l))
  ------------------
  |  Branch (1686:12): [True: 0, False: 1]
  ------------------
 1687|      0|        RSABlindingParams *rsabp =
 1688|      0|            (RSABlindingParams *)PR_LIST_HEAD(&blindingParamsList.head);
  ------------------
  |  |   65|      0|#define PR_LIST_HEAD(_l) (_l)->next
  ------------------
 1689|      0|        PR_REMOVE_LINK(&rsabp->link);
  ------------------
  |  |   72|      0|    PR_BEGIN_MACRO             \
  |  |  ------------------
  |  |  |  |  123|      0|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |   73|      0|    (_e)->prev->next = (_e)->next; \
  |  |   74|      0|    (_e)->next->prev = (_e)->prev; \
  |  |   75|      0|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|      0|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1690|       |        /* clear parameters cache */
 1691|      0|        while (rsabp->bp != NULL) {
  ------------------
  |  Branch (1691:16): [True: 0, False: 0]
  ------------------
 1692|      0|            bp = rsabp->bp;
 1693|      0|            rsabp->bp = rsabp->bp->next;
 1694|      0|            mp_clear(&bp->f);
 1695|      0|            mp_clear(&bp->g);
 1696|      0|        }
 1697|      0|        SECITEM_ZfreeItem(&rsabp->modulus, PR_FALSE);
  ------------------
  |  |  110|      0|#define SECITEM_ZfreeItem SECITEM_ZfreeItem_Util
  ------------------
                      SECITEM_ZfreeItem(&rsabp->modulus, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1698|      0|        PORT_Free(rsabp);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1699|      0|    }
 1700|       |
 1701|      1|    if (blindingParamsList.cVar) {
  ------------------
  |  Branch (1701:9): [True: 1, False: 0]
  ------------------
 1702|      1|        PR_DestroyCondVar(blindingParamsList.cVar);
 1703|      1|        blindingParamsList.cVar = NULL;
 1704|      1|    }
 1705|       |
 1706|      1|    if (blindingParamsList.lock) {
  ------------------
  |  Branch (1706:9): [True: 1, False: 0]
  ------------------
 1707|      1|        SKIP_AFTER_FORK(PZ_DestroyLock(blindingParamsList.lock));
  ------------------
  |  |   42|      1|    if (!bl_parentForkedAfterC_Initialize) \
  |  |  ------------------
  |  |  |  Branch (42:9): [True: 1, False: 0]
  |  |  ------------------
  |  |   43|      1|    x
  ------------------
 1708|      1|        blindingParamsList.lock = NULL;
 1709|      1|    }
 1710|       |
 1711|      1|    coBPInit.initialized = 0;
 1712|      1|    coBPInit.inProgress = 0;
 1713|      1|    coBPInit.status = 0;
 1714|      1|}
BL_Cleanup:
 1723|      1|{
 1724|      1|    RSA_Cleanup();
 1725|      1|}
BL_SetForkState:
 1734|      2|{
 1735|      2|    bl_parentForkedAfterC_Initialize = forked;
 1736|      2|}
rsa.c:rsa_modulusLen:
  917|  5.52k|{
  918|  5.52k|    if (modulus->len == 0) {
  ------------------
  |  Branch (918:9): [True: 0, False: 5.52k]
  ------------------
  919|      0|        return 0;
  920|  5.52k|    };
  921|  5.52k|    unsigned char byteZero = modulus->data[0];
  922|  5.52k|    unsigned int modLen = modulus->len - !byteZero;
  923|  5.52k|    return modLen;
  924|  5.52k|}
rsa.c:init_blinding_params_list:
 1187|      1|{
 1188|      1|    blindingParamsList.lock = PZ_NewLock(nssILockOther);
  ------------------
  |  |  243|      1|#define PZ_NewLock(t) PR_NewLock()
  ------------------
 1189|      1|    if (!blindingParamsList.lock) {
  ------------------
  |  Branch (1189:9): [True: 0, False: 1]
  ------------------
 1190|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1191|      0|        return PR_FAILURE;
 1192|      0|    }
 1193|      1|    blindingParamsList.cVar = PR_NewCondVar(blindingParamsList.lock);
 1194|      1|    if (!blindingParamsList.cVar) {
  ------------------
  |  Branch (1194:9): [True: 0, False: 1]
  ------------------
 1195|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1196|      0|        return PR_FAILURE;
 1197|      0|    }
 1198|      1|    blindingParamsList.waitCount = 0;
 1199|      1|    PR_INIT_CLIST(&blindingParamsList.head);
  ------------------
  |  |  100|      1|    PR_BEGIN_MACRO     \
  |  |  ------------------
  |  |  |  |  123|      1|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  101|      1|    (_l)->next = (_l); \
  |  |  102|      1|    (_l)->prev = (_l); \
  |  |  103|      1|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|      1|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1200|      1|    return PR_SUCCESS;
 1201|      1|}

RSA_CheckSignPSS:
 1484|     76|{
 1485|     76|    SECStatus rv;
 1486|     76|    unsigned int modulusLen = rsa_modulusLen(&key->modulus);
 1487|     76|    unsigned int modulusBits = rsa_modulusBits(&key->modulus);
 1488|     76|    unsigned int emLen = modulusLen;
 1489|     76|    unsigned char *buffer, *em;
 1490|       |
 1491|     76|    if (sigLen != modulusLen) {
  ------------------
  |  Branch (1491:9): [True: 0, False: 76]
  ------------------
 1492|      0|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1493|      0|        return SECFailure;
 1494|      0|    }
 1495|       |
 1496|     76|    if ((hashAlg == HASH_AlgNULL) || (maskHashAlg == HASH_AlgNULL)) {
  ------------------
  |  Branch (1496:9): [True: 0, False: 76]
  |  Branch (1496:38): [True: 0, False: 76]
  ------------------
 1497|      0|        PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1498|      0|        return SECFailure;
 1499|      0|    }
 1500|       |
 1501|     76|    buffer = em = (unsigned char *)PORT_Alloc(modulusLen);
  ------------------
  |  |   52|     76|#define PORT_Alloc PORT_Alloc_Util
  ------------------
 1502|     76|    if (!buffer) {
  ------------------
  |  Branch (1502:9): [True: 0, False: 76]
  ------------------
 1503|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1504|      0|        return SECFailure;
 1505|      0|    }
 1506|       |
 1507|     76|    rv = RSA_PublicKeyOp(key, buffer, sig);
 1508|     76|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1508:9): [True: 1, False: 75]
  ------------------
 1509|      1|        PORT_Free(buffer);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
 1510|      1|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
 1511|      1|        return SECFailure;
 1512|      1|    }
 1513|       |
 1514|       |    /* len(em) == ceil((modulusBits - 1) / 8). */
 1515|     75|    if (modulusBits % 8 == 1) {
  ------------------
  |  Branch (1515:9): [True: 0, False: 75]
  ------------------
 1516|      0|        emLen--;
 1517|      0|        em++;
 1518|      0|    }
 1519|     75|    rv = emsa_pss_verify(hash, em, emLen, modulusBits - 1, hashAlg,
 1520|     75|                         maskHashAlg, saltLength);
 1521|       |
 1522|     75|    PORT_Free(buffer);
  ------------------
  |  |   60|     75|#define PORT_Free PORT_Free_Util
  ------------------
 1523|     75|    return rv;
 1524|     76|}
RSA_CheckSignRecover:
 1641|  2.68k|{
 1642|  2.68k|    SECStatus rv = SECFailure;
 1643|  2.68k|    unsigned int modulusLen = rsa_modulusLen(&key->modulus);
 1644|  2.68k|    unsigned int i;
 1645|  2.68k|    unsigned char *buffer = NULL;
 1646|  2.68k|    unsigned int padLen;
 1647|       |
 1648|  2.68k|    if (sigLen != modulusLen) {
  ------------------
  |  Branch (1648:9): [True: 2, False: 2.68k]
  ------------------
 1649|      2|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      2|#define PORT_SetError PORT_SetError_Util
  ------------------
 1650|      2|        goto done;
 1651|      2|    }
 1652|       |
 1653|  2.68k|    buffer = (unsigned char *)PORT_Alloc(modulusLen + 1);
  ------------------
  |  |   52|  2.68k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
 1654|  2.68k|    if (!buffer) {
  ------------------
  |  Branch (1654:9): [True: 0, False: 2.68k]
  ------------------
 1655|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1656|      0|        goto done;
 1657|      0|    }
 1658|       |
 1659|  2.68k|    if (RSA_PublicKeyOp(key, buffer, sig) != SECSuccess) {
  ------------------
  |  Branch (1659:9): [True: 8, False: 2.67k]
  ------------------
 1660|      8|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      8|#define PORT_SetError PORT_SetError_Util
  ------------------
 1661|      8|        goto done;
 1662|      8|    }
 1663|       |
 1664|  2.67k|    *outputLen = 0;
 1665|       |
 1666|       |    /*
 1667|       |     * check the padding that was used
 1668|       |     */
 1669|  2.67k|    if (buffer[0] != RSA_BLOCK_FIRST_OCTET ||
  ------------------
  |  |   20|  5.35k|#define RSA_BLOCK_FIRST_OCTET 0x00
  ------------------
  |  Branch (1669:9): [True: 2.34k, False: 337]
  ------------------
 1670|  2.67k|        buffer[1] != (unsigned char)RSA_BlockPrivate) {
  ------------------
  |  Branch (1670:9): [True: 203, False: 134]
  ------------------
 1671|  2.54k|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|  2.54k|#define PORT_SetError PORT_SetError_Util
  ------------------
 1672|  2.54k|        goto done;
 1673|  2.54k|    }
 1674|  21.5k|    for (i = 2; i < modulusLen; i++) {
  ------------------
  |  Branch (1674:17): [True: 21.5k, False: 1]
  ------------------
 1675|  21.5k|        if (buffer[i] == RSA_BLOCK_AFTER_PAD_OCTET) {
  ------------------
  |  |   22|  21.5k|#define RSA_BLOCK_AFTER_PAD_OCTET 0x00
  ------------------
  |  Branch (1675:13): [True: 118, False: 21.4k]
  ------------------
 1676|    118|            *outputLen = modulusLen - i - 1;
 1677|    118|            break;
 1678|    118|        }
 1679|  21.4k|        if (buffer[i] != RSA_BLOCK_PRIVATE_PAD_OCTET) {
  ------------------
  |  |   21|  21.4k|#define RSA_BLOCK_PRIVATE_PAD_OCTET 0xff
  ------------------
  |  Branch (1679:13): [True: 15, False: 21.3k]
  ------------------
 1680|     15|            PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|     15|#define PORT_SetError PORT_SetError_Util
  ------------------
 1681|     15|            goto done;
 1682|     15|        }
 1683|  21.4k|    }
 1684|    119|    padLen = i - 2;
 1685|    119|    if (padLen < RSA_BLOCK_MIN_PAD_LEN) {
  ------------------
  |  |   19|    119|#define RSA_BLOCK_MIN_PAD_LEN 8
  ------------------
  |  Branch (1685:9): [True: 3, False: 116]
  ------------------
 1686|      3|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      3|#define PORT_SetError PORT_SetError_Util
  ------------------
 1687|      3|        goto done;
 1688|      3|    }
 1689|    116|    if (*outputLen == 0) {
  ------------------
  |  Branch (1689:9): [True: 1, False: 115]
  ------------------
 1690|      1|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
 1691|      1|        goto done;
 1692|      1|    }
 1693|    115|    if (*outputLen > maxOutputLen) {
  ------------------
  |  Branch (1693:9): [True: 0, False: 115]
  ------------------
 1694|      0|        PORT_SetError(SEC_ERROR_OUTPUT_LEN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1695|      0|        goto done;
 1696|      0|    }
 1697|       |
 1698|    115|    PORT_Memcpy(output, buffer + modulusLen - *outputLen, *outputLen);
  ------------------
  |  |  180|    115|#define PORT_Memcpy memcpy
  ------------------
 1699|    115|    rv = SECSuccess;
 1700|       |
 1701|  2.68k|done:
 1702|  2.68k|    if (buffer) {
  ------------------
  |  Branch (1702:9): [True: 2.68k, False: 2]
  ------------------
 1703|  2.68k|        PORT_Free(buffer);
  ------------------
  |  |   60|  2.68k|#define PORT_Free PORT_Free_Util
  ------------------
 1704|  2.68k|    }
 1705|  2.68k|    return rv;
 1706|    115|}
rsapkcs.c:rsa_modulusLen:
   82|  2.76k|{
   83|  2.76k|    if (modulus->len == 0) {
  ------------------
  |  Branch (83:9): [True: 0, False: 2.76k]
  ------------------
   84|      0|        return 0;
   85|      0|    }
   86|       |
   87|  2.76k|    unsigned char byteZero = modulus->data[0];
   88|  2.76k|    unsigned int modLen = modulus->len - !byteZero;
   89|  2.76k|    return modLen;
   90|  2.76k|}
rsapkcs.c:MGF1:
  300|     59|{
  301|     59|    unsigned int digestLen;
  302|     59|    PRUint32 counter;
  303|     59|    PRUint32 rounds;
  304|     59|    unsigned char *tempHash;
  305|     59|    unsigned char *temp;
  306|     59|    const SECHashObject *hash;
  307|     59|    void *hashContext;
  308|     59|    unsigned char C[4];
  309|     59|    SECStatus rv = SECSuccess;
  310|       |
  311|     59|    hash = HASH_GetRawHashObject(hashAlg);
  312|     59|    if (hash == NULL) {
  ------------------
  |  Branch (312:9): [True: 0, False: 59]
  ------------------
  313|      0|        return SECFailure;
  314|      0|    }
  315|       |
  316|     59|    hashContext = (*hash->create)();
  317|     59|    rounds = (maskLen + hash->length - 1) / hash->length;
  318|    311|    for (counter = 0; counter < rounds; counter++) {
  ------------------
  |  Branch (318:23): [True: 252, False: 59]
  ------------------
  319|    252|        C[0] = (unsigned char)((counter >> 24) & 0xff);
  320|    252|        C[1] = (unsigned char)((counter >> 16) & 0xff);
  321|    252|        C[2] = (unsigned char)((counter >> 8) & 0xff);
  322|    252|        C[3] = (unsigned char)(counter & 0xff);
  323|       |
  324|       |        /* This could be optimized when the clone functions in
  325|       |         * rawhash.c are implemented. */
  326|    252|        (*hash->begin)(hashContext);
  327|    252|        (*hash->update)(hashContext, mgfSeed, mgfSeedLen);
  328|    252|        (*hash->update)(hashContext, C, sizeof C);
  329|       |
  330|    252|        tempHash = mask + counter * hash->length;
  331|    252|        if (counter != (rounds - 1)) {
  ------------------
  |  Branch (331:13): [True: 193, False: 59]
  ------------------
  332|    193|            (*hash->end)(hashContext, tempHash, &digestLen, hash->length);
  333|    193|        } else { /* we're in the last round and need to cut the hash */
  334|     59|            temp = (unsigned char *)PORT_Alloc(hash->length);
  ------------------
  |  |   52|     59|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  335|     59|            if (!temp) {
  ------------------
  |  Branch (335:17): [True: 0, False: 59]
  ------------------
  336|      0|                rv = SECFailure;
  337|      0|                goto done;
  338|      0|            }
  339|     59|            (*hash->end)(hashContext, temp, &digestLen, hash->length);
  340|     59|            PORT_Memcpy(tempHash, temp, maskLen - counter * hash->length);
  ------------------
  |  |  180|     59|#define PORT_Memcpy memcpy
  ------------------
  341|     59|            PORT_Free(temp);
  ------------------
  |  |   60|     59|#define PORT_Free PORT_Free_Util
  ------------------
  342|     59|        }
  343|    252|    }
  344|       |
  345|     59|done:
  346|     59|    (*hash->destroy)(hashContext, PR_TRUE);
  ------------------
  |  |  437|     59|#define PR_TRUE 1
  ------------------
  347|     59|    return rv;
  348|     59|}
rsapkcs.c:rsa_modulusBits:
   94|     76|{
   95|     76|    if (modulus->len == 0) {
  ------------------
  |  Branch (95:9): [True: 0, False: 76]
  ------------------
   96|      0|        return 0;
   97|      0|    }
   98|       |
   99|     76|    unsigned char byteZero = modulus->data[0];
  100|     76|    unsigned int numBits = (modulus->len - 1) * 8;
  101|       |
  102|     76|    if (byteZero == 0 && modulus->len == 1) {
  ------------------
  |  Branch (102:9): [True: 0, False: 76]
  |  Branch (102:26): [True: 0, False: 0]
  ------------------
  103|      0|        return 0;
  104|      0|    }
  105|       |
  106|     76|    if (byteZero == 0) {
  ------------------
  |  Branch (106:9): [True: 0, False: 76]
  ------------------
  107|      0|        numBits -= 8;
  108|      0|        byteZero = modulus->data[1];
  109|      0|    }
  110|       |
  111|    684|    while (byteZero > 0) {
  ------------------
  |  Branch (111:12): [True: 608, False: 76]
  ------------------
  112|    608|        numBits++;
  113|    608|        byteZero >>= 1;
  114|    608|    }
  115|       |
  116|     76|    return numBits;
  117|     76|}
rsapkcs.c:emsa_pss_verify:
 1328|     75|{
 1329|     75|    const SECHashObject *hash;
 1330|     75|    void *hash_context;
 1331|     75|    unsigned char *db;
 1332|     75|    unsigned char *H_; /* H' from the RFC */
 1333|     75|    unsigned int i;
 1334|     75|    unsigned int dbMaskLen;
 1335|     75|    unsigned int zeroBits;
 1336|     75|    SECStatus rv;
 1337|       |
 1338|     75|    hash = HASH_GetRawHashObject(hashAlg);
 1339|     75|    dbMaskLen = emLen - hash->length - 1;
 1340|       |
 1341|       |    /* Step 3 + 4 */
 1342|     75|    if ((emLen < (hash->length + saltLen + 2)) ||
  ------------------
  |  Branch (1342:9): [True: 1, False: 74]
  ------------------
 1343|     75|        (em[emLen - 1] != 0xbc)) {
  ------------------
  |  Branch (1343:9): [True: 14, False: 60]
  ------------------
 1344|     15|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|     15|#define PORT_SetError PORT_SetError_Util
  ------------------
 1345|     15|        return SECFailure;
 1346|     15|    }
 1347|       |
 1348|       |    /* Step 6 */
 1349|     60|    zeroBits = 8 * emLen - emBits;
 1350|     60|    if (em[0] >> (8 - zeroBits)) {
  ------------------
  |  Branch (1350:9): [True: 1, False: 59]
  ------------------
 1351|      1|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
 1352|      1|        return SECFailure;
 1353|      1|    }
 1354|       |
 1355|       |    /* Step 7 */
 1356|     59|    db = (unsigned char *)PORT_Alloc(dbMaskLen);
  ------------------
  |  |   52|     59|#define PORT_Alloc PORT_Alloc_Util
  ------------------
 1357|     59|    if (db == NULL) {
  ------------------
  |  Branch (1357:9): [True: 0, False: 59]
  ------------------
 1358|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1359|      0|        return SECFailure;
 1360|      0|    }
 1361|       |    /* &em[dbMaskLen] points to H, used as mgfSeed */
 1362|     59|    MGF1(maskHashAlg, db, dbMaskLen, &em[dbMaskLen], hash->length);
 1363|       |
 1364|       |    /* Step 8 */
 1365|  9.20k|    for (i = 0; i < dbMaskLen; i++) {
  ------------------
  |  Branch (1365:17): [True: 9.14k, False: 59]
  ------------------
 1366|  9.14k|        db[i] ^= em[i];
 1367|  9.14k|    }
 1368|       |
 1369|       |    /* Step 9 */
 1370|     59|    db[0] &= 0xff >> zeroBits;
 1371|       |
 1372|       |    /* Step 10 */
 1373|  4.78k|    for (i = 0; i < (dbMaskLen - saltLen - 1); i++) {
  ------------------
  |  Branch (1373:17): [True: 4.73k, False: 43]
  ------------------
 1374|  4.73k|        if (db[i] != 0) {
  ------------------
  |  Branch (1374:13): [True: 16, False: 4.72k]
  ------------------
 1375|     16|            PORT_Free(db);
  ------------------
  |  |   60|     16|#define PORT_Free PORT_Free_Util
  ------------------
 1376|     16|            PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|     16|#define PORT_SetError PORT_SetError_Util
  ------------------
 1377|     16|            return SECFailure;
 1378|     16|        }
 1379|  4.73k|    }
 1380|     43|    if (db[dbMaskLen - saltLen - 1] != 0x01) {
  ------------------
  |  Branch (1380:9): [True: 1, False: 42]
  ------------------
 1381|      1|        PORT_Free(db);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
 1382|      1|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
 1383|      1|        return SECFailure;
 1384|      1|    }
 1385|       |
 1386|       |    /* Step 12 + 13 */
 1387|     42|    H_ = (unsigned char *)PORT_Alloc(hash->length);
  ------------------
  |  |   52|     42|#define PORT_Alloc PORT_Alloc_Util
  ------------------
 1388|     42|    if (H_ == NULL) {
  ------------------
  |  Branch (1388:9): [True: 0, False: 42]
  ------------------
 1389|      0|        PORT_Free(db);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1390|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1391|      0|        return SECFailure;
 1392|      0|    }
 1393|     42|    hash_context = (*hash->create)();
 1394|     42|    if (hash_context == NULL) {
  ------------------
  |  Branch (1394:9): [True: 0, False: 42]
  ------------------
 1395|      0|        PORT_Free(db);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1396|      0|        PORT_Free(H_);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1397|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1398|      0|        return SECFailure;
 1399|      0|    }
 1400|     42|    (*hash->begin)(hash_context);
 1401|     42|    (*hash->update)(hash_context, eightZeros, 8);
 1402|     42|    (*hash->update)(hash_context, mHash, hash->length);
 1403|     42|    (*hash->update)(hash_context, &db[dbMaskLen - saltLen], saltLen);
 1404|     42|    (*hash->end)(hash_context, H_, &i, hash->length);
 1405|     42|    (*hash->destroy)(hash_context, PR_TRUE);
  ------------------
  |  |  437|     42|#define PR_TRUE 1
  ------------------
 1406|       |
 1407|     42|    PORT_Free(db);
  ------------------
  |  |   60|     42|#define PORT_Free PORT_Free_Util
  ------------------
 1408|       |
 1409|       |    /* Step 14 */
 1410|     42|    if (PORT_Memcmp(H_, &em[dbMaskLen], hash->length) != 0) {
  ------------------
  |  |  179|     42|#define PORT_Memcmp memcmp
  ------------------
  |  Branch (1410:9): [True: 13, False: 29]
  ------------------
 1411|     13|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|     13|#define PORT_SetError PORT_SetError_Util
  ------------------
 1412|     13|        rv = SECFailure;
 1413|     29|    } else {
 1414|     29|        rv = SECSuccess;
 1415|     29|    }
 1416|       |
 1417|     42|    PORT_Free(H_);
  ------------------
  |  |   60|     42|#define PORT_Free PORT_Free_Util
  ------------------
 1418|     42|    return rv;
 1419|     42|}

SHA256_Compress_Native:
   55|  5.88k|{
   56|  5.88k|    __m128i h0, h1, th;
   57|  5.88k|    __m128i a, b, c, d;
   58|  5.88k|    __m128i w0, w1;
   59|  5.88k|    const __m128i shuffle = _mm_set_epi8(12, 13, 14, 15, 8, 9, 10, 11, 4, 5, 6, 7, 0, 1, 2, 3);
   60|       |
   61|  5.88k|    const __m128i *K = (__m128i *)K256;
   62|  5.88k|    const __m128i k0 = _mm_load_si128(K);
   63|  5.88k|    const __m128i k1 = _mm_load_si128(K + 1);
   64|  5.88k|    const __m128i k2 = _mm_load_si128(K + 2);
   65|  5.88k|    const __m128i k3 = _mm_load_si128(K + 3);
   66|  5.88k|    const __m128i k4 = _mm_load_si128(K + 4);
   67|  5.88k|    const __m128i k5 = _mm_load_si128(K + 5);
   68|  5.88k|    const __m128i k6 = _mm_load_si128(K + 6);
   69|  5.88k|    const __m128i k7 = _mm_load_si128(K + 7);
   70|  5.88k|    const __m128i k8 = _mm_load_si128(K + 8);
   71|  5.88k|    const __m128i k9 = _mm_load_si128(K + 9);
   72|  5.88k|    const __m128i k10 = _mm_load_si128(K + 10);
   73|  5.88k|    const __m128i k11 = _mm_load_si128(K + 11);
   74|  5.88k|    const __m128i k12 = _mm_load_si128(K + 12);
   75|  5.88k|    const __m128i k13 = _mm_load_si128(K + 13);
   76|  5.88k|    const __m128i k14 = _mm_load_si128(K + 14);
   77|  5.88k|    const __m128i k15 = _mm_load_si128(K + 15);
   78|       |
   79|  5.88k|    const __m128i *input = (__m128i *)ctx->u.b;
   80|       |
   81|  5.88k|    h0 = _mm_loadu_si128((__m128i *)(ctx->h));
   82|  5.88k|    h1 = _mm_loadu_si128((__m128i *)(ctx->h + 4));
   83|       |
   84|       |    /* H0123:4567 -> H01256:H2367 */
   85|  5.88k|    th = _mm_shuffle_epi32(h0, 0xb1);
   86|  5.88k|    h1 = _mm_shuffle_epi32(h1, 0x1b);
   87|  5.88k|    h0 = _mm_alignr_epi8(th, h1, 8);
   88|  5.88k|    h1 = _mm_blend_epi16(h1, th, 0xf0);
   89|       |
   90|  5.88k|    a = _mm_shuffle_epi8(_mm_loadu_si128(input), shuffle);
   91|  5.88k|    b = _mm_shuffle_epi8(_mm_loadu_si128(input + 1), shuffle);
   92|  5.88k|    c = _mm_shuffle_epi8(_mm_loadu_si128(input + 2), shuffle);
   93|  5.88k|    d = _mm_shuffle_epi8(_mm_loadu_si128(input + 3), shuffle);
   94|       |
   95|  5.88k|    w0 = h0;
   96|  5.88k|    w1 = h1;
   97|       |
   98|  5.88k|    ROUND(0, a, b, c, d)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  5.88k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  5.88k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  5.88k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  5.88k|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
   99|  5.88k|    ROUND(1, b, c, d, a)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  5.88k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  5.88k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  5.88k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  5.88k|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  100|  5.88k|    ROUND(2, c, d, a, b)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  5.88k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  5.88k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  5.88k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  5.88k|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  101|  5.88k|    ROUND(3, d, a, b, c)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  5.88k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  5.88k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  5.88k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  5.88k|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  102|  5.88k|    ROUND(4, a, b, c, d)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  5.88k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  5.88k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  5.88k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  5.88k|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  103|  5.88k|    ROUND(5, b, c, d, a)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  5.88k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  5.88k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  5.88k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  5.88k|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  104|  5.88k|    ROUND(6, c, d, a, b)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  5.88k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  5.88k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  5.88k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  5.88k|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  105|  5.88k|    ROUND(7, d, a, b, c)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  5.88k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  5.88k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  5.88k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  5.88k|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  106|  5.88k|    ROUND(8, a, b, c, d)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  5.88k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  5.88k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  5.88k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  5.88k|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  107|  5.88k|    ROUND(9, b, c, d, a)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  5.88k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  5.88k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  5.88k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  5.88k|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  108|  5.88k|    ROUND(10, c, d, a, b)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  5.88k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  5.88k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  5.88k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  5.88k|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  109|  5.88k|    ROUND(11, d, a, b, c)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  5.88k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  5.88k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  5.88k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  5.88k|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  110|  5.88k|    ROUND(12, a, b, c, d)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|      0|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|      0|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|      0|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|      0|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  111|  5.88k|    ROUND(13, b, c, d, a)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|      0|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|      0|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|      0|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|      0|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  112|  5.88k|    ROUND(14, c, d, a, b)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|      0|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|      0|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|      0|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|      0|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  113|  5.88k|    ROUND(15, d, a, b, c)
  ------------------
  |  |   41|  5.88k|    {                                                       \
  |  |   42|  5.88k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  5.88k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  5.88k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  5.88k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  5.88k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|      0|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|      0|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|      0|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|      0|        }                                                   \
  |  |   51|  5.88k|    }
  ------------------
  114|       |
  115|  5.88k|    h0 = _mm_add_epi32(h0, w0);
  116|  5.88k|    h1 = _mm_add_epi32(h1, w1);
  117|       |
  118|       |    /* H0145:2367 -> H0123:4567 */
  119|  5.88k|    th = _mm_shuffle_epi32(h0, 0x1b);
  120|  5.88k|    h1 = _mm_shuffle_epi32(h1, 0xb1);
  121|  5.88k|    h0 = _mm_blend_epi16(th, h1, 0xf0);
  122|  5.88k|    h1 = _mm_alignr_epi8(h1, th, 8);
  123|       |
  124|  5.88k|    _mm_storeu_si128((__m128i *)ctx->h, h0);
  125|  5.88k|    _mm_storeu_si128((__m128i *)(ctx->h + 4), h1);
  126|  5.88k|}
SHA256_Update_Native:
  131|  9.24k|{
  132|  9.24k|    __m128i h0, h1, th;
  133|  9.24k|    const __m128i shuffle = _mm_set_epi8(12, 13, 14, 15, 8, 9, 10, 11, 4, 5, 6, 7, 0, 1, 2, 3);
  134|       |
  135|  9.24k|    const __m128i *K = (__m128i *)K256;
  136|  9.24k|    const __m128i k0 = _mm_load_si128(K);
  137|  9.24k|    const __m128i k1 = _mm_load_si128(K + 1);
  138|  9.24k|    const __m128i k2 = _mm_load_si128(K + 2);
  139|  9.24k|    const __m128i k3 = _mm_load_si128(K + 3);
  140|  9.24k|    const __m128i k4 = _mm_load_si128(K + 4);
  141|  9.24k|    const __m128i k5 = _mm_load_si128(K + 5);
  142|  9.24k|    const __m128i k6 = _mm_load_si128(K + 6);
  143|  9.24k|    const __m128i k7 = _mm_load_si128(K + 7);
  144|  9.24k|    const __m128i k8 = _mm_load_si128(K + 8);
  145|  9.24k|    const __m128i k9 = _mm_load_si128(K + 9);
  146|  9.24k|    const __m128i k10 = _mm_load_si128(K + 10);
  147|  9.24k|    const __m128i k11 = _mm_load_si128(K + 11);
  148|  9.24k|    const __m128i k12 = _mm_load_si128(K + 12);
  149|  9.24k|    const __m128i k13 = _mm_load_si128(K + 13);
  150|  9.24k|    const __m128i k14 = _mm_load_si128(K + 14);
  151|  9.24k|    const __m128i k15 = _mm_load_si128(K + 15);
  152|       |
  153|  9.24k|    unsigned int inBuf = ctx->sizeLo & 0x3f;
  154|  9.24k|    if (!inputLen) {
  ------------------
  |  Branch (154:9): [True: 0, False: 9.24k]
  ------------------
  155|      0|        return;
  156|      0|    }
  157|       |
  158|       |    /* Add inputLen into the count of bytes processed, before processing */
  159|  9.24k|    if ((ctx->sizeLo += inputLen) < inputLen) {
  ------------------
  |  Branch (159:9): [True: 0, False: 9.24k]
  ------------------
  160|      0|        ctx->sizeHi++;
  161|      0|    }
  162|       |
  163|       |    /* if data already in buffer, attempt to fill rest of buffer */
  164|  9.24k|    if (inBuf) {
  ------------------
  |  Branch (164:9): [True: 4.72k, False: 4.51k]
  ------------------
  165|  4.72k|        unsigned int todo = SHA256_BLOCK_LENGTH - inBuf;
  ------------------
  |  |  120|  4.72k|#define SHA256_BLOCK_LENGTH 64    /* bytes */
  ------------------
  166|  4.72k|        if (inputLen < todo) {
  ------------------
  |  Branch (166:13): [True: 3.35k, False: 1.37k]
  ------------------
  167|  3.35k|            todo = inputLen;
  168|  3.35k|        }
  169|  4.72k|        memcpy(ctx->u.b + inBuf, input, todo);
  170|  4.72k|        input += todo;
  171|  4.72k|        inputLen -= todo;
  172|  4.72k|        if (inBuf + todo == SHA256_BLOCK_LENGTH) {
  ------------------
  |  |  120|  4.72k|#define SHA256_BLOCK_LENGTH 64    /* bytes */
  ------------------
  |  Branch (172:13): [True: 1.37k, False: 3.35k]
  ------------------
  173|  1.37k|            SHA256_Compress_Native(ctx);
  174|  1.37k|        }
  175|  4.72k|    }
  176|       |
  177|  9.24k|    h0 = _mm_loadu_si128((__m128i *)(ctx->h));
  178|  9.24k|    h1 = _mm_loadu_si128((__m128i *)(ctx->h + 4));
  179|       |
  180|       |    /* H0123:4567 -> H01256:H2367 */
  181|  9.24k|    th = _mm_shuffle_epi32(h0, 0xb1);
  182|  9.24k|    h1 = _mm_shuffle_epi32(h1, 0x1b);
  183|  9.24k|    h0 = _mm_alignr_epi8(th, h1, 8);
  184|  9.24k|    h1 = _mm_blend_epi16(h1, th, 0xf0);
  185|       |
  186|       |    /* if enough data to fill one or more whole buffers, process them. */
  187|  41.1k|    while (inputLen >= SHA256_BLOCK_LENGTH) {
  ------------------
  |  |  120|  41.1k|#define SHA256_BLOCK_LENGTH 64    /* bytes */
  ------------------
  |  Branch (187:12): [True: 31.8k, False: 9.24k]
  ------------------
  188|  31.8k|        __m128i a, b, c, d;
  189|  31.8k|        __m128i w0, w1;
  190|  31.8k|        a = _mm_shuffle_epi8(_mm_loadu_si128((__m128i *)input), shuffle);
  191|  31.8k|        b = _mm_shuffle_epi8(_mm_loadu_si128((__m128i *)(input + 16)), shuffle);
  192|  31.8k|        c = _mm_shuffle_epi8(_mm_loadu_si128((__m128i *)(input + 32)), shuffle);
  193|  31.8k|        d = _mm_shuffle_epi8(_mm_loadu_si128((__m128i *)(input + 48)), shuffle);
  194|  31.8k|        input += SHA256_BLOCK_LENGTH;
  ------------------
  |  |  120|  31.8k|#define SHA256_BLOCK_LENGTH 64    /* bytes */
  ------------------
  195|  31.8k|        inputLen -= SHA256_BLOCK_LENGTH;
  ------------------
  |  |  120|  31.8k|#define SHA256_BLOCK_LENGTH 64    /* bytes */
  ------------------
  196|       |
  197|  31.8k|        w0 = h0;
  198|  31.8k|        w1 = h1;
  199|       |
  200|  31.8k|        ROUND(0, a, b, c, d)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  31.8k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  31.8k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  31.8k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  31.8k|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  201|  31.8k|        ROUND(1, b, c, d, a)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  31.8k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  31.8k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  31.8k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  31.8k|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  202|  31.8k|        ROUND(2, c, d, a, b)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  31.8k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  31.8k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  31.8k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  31.8k|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  203|  31.8k|        ROUND(3, d, a, b, c)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  31.8k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  31.8k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  31.8k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  31.8k|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  204|  31.8k|        ROUND(4, a, b, c, d)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  31.8k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  31.8k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  31.8k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  31.8k|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  205|  31.8k|        ROUND(5, b, c, d, a)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  31.8k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  31.8k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  31.8k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  31.8k|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  206|  31.8k|        ROUND(6, c, d, a, b)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  31.8k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  31.8k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  31.8k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  31.8k|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  207|  31.8k|        ROUND(7, d, a, b, c)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  31.8k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  31.8k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  31.8k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  31.8k|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  208|  31.8k|        ROUND(8, a, b, c, d)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  31.8k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  31.8k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  31.8k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  31.8k|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  209|  31.8k|        ROUND(9, b, c, d, a)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  31.8k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  31.8k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  31.8k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  31.8k|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  210|  31.8k|        ROUND(10, c, d, a, b)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  31.8k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  31.8k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  31.8k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  31.8k|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  211|  31.8k|        ROUND(11, d, a, b, c)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|  31.8k|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|  31.8k|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|  31.8k|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|  31.8k|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  212|  31.8k|        ROUND(12, a, b, c, d)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|      0|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|      0|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|      0|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|      0|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  213|  31.8k|        ROUND(13, b, c, d, a)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|      0|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|      0|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|      0|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|      0|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  214|  31.8k|        ROUND(14, c, d, a, b)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|      0|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|      0|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|      0|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|      0|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  215|  31.8k|        ROUND(15, d, a, b, c)
  ------------------
  |  |   41|  31.8k|    {                                                       \
  |  |   42|  31.8k|        __m128i t = _mm_add_epi32(a, k##n);                 \
  |  |   43|  31.8k|        w1 = _mm_sha256rnds2_epu32(w1, w0, t);              \
  |  |   44|  31.8k|        t = _mm_shuffle_epi32(t, 0x0e);                     \
  |  |   45|  31.8k|        w0 = _mm_sha256rnds2_epu32(w0, w1, t);              \
  |  |   46|  31.8k|        if (n < 12) {                                       \
  |  |  ------------------
  |  |  |  Branch (46:13): [Folded - Ignored]
  |  |  ------------------
  |  |   47|      0|            a = _mm_sha256msg1_epu32(a, b);                 \
  |  |   48|      0|            a = _mm_add_epi32(a, _mm_alignr_epi8(d, c, 4)); \
  |  |   49|      0|            a = _mm_sha256msg2_epu32(a, d);                 \
  |  |   50|      0|        }                                                   \
  |  |   51|  31.8k|    }
  ------------------
  216|       |
  217|  31.8k|        h0 = _mm_add_epi32(h0, w0);
  218|  31.8k|        h1 = _mm_add_epi32(h1, w1);
  219|  31.8k|    }
  220|       |
  221|       |    // H01234567 -> H01256 and H2367
  222|  9.24k|    th = _mm_shuffle_epi32(h0, 0x1b);
  223|  9.24k|    h1 = _mm_shuffle_epi32(h1, 0xb1);
  224|  9.24k|    h0 = _mm_blend_epi16(th, h1, 0xf0);
  225|  9.24k|    h1 = _mm_alignr_epi8(h1, th, 8);
  226|       |
  227|  9.24k|    _mm_storeu_si128((__m128i *)ctx->h, h0);
  228|  9.24k|    _mm_storeu_si128((__m128i *)(ctx->h + 4), h1);
  229|       |
  230|       |    /* if data left over, fill it into buffer */
  231|  9.24k|    if (inputLen) {
  ------------------
  |  Branch (231:9): [True: 5.88k, False: 3.36k]
  ------------------
  232|  5.88k|        memcpy(ctx->u.b, input, inputLen);
  233|  5.88k|    }
  234|  9.24k|}

SHA256_NewContext:
  186|  4.37k|{
  187|  4.37k|    SHA256Context *ctx = PORT_New(SHA256Context);
  ------------------
  |  |  151|  4.37k|#define PORT_New(type) (type *)PORT_Alloc(sizeof(type))
  |  |  ------------------
  |  |  |  |   52|  4.37k|#define PORT_Alloc PORT_Alloc_Util
  |  |  ------------------
  ------------------
  188|  4.37k|    return ctx;
  189|  4.37k|}
SHA256_DestroyContext:
  193|  4.37k|{
  194|  4.37k|    memset(ctx, 0, sizeof *ctx);
  195|  4.37k|    if (freeit) {
  ------------------
  |  Branch (195:9): [True: 4.37k, False: 0]
  ------------------
  196|  4.37k|        PORT_Free(ctx);
  ------------------
  |  |   60|  4.37k|#define PORT_Free PORT_Free_Util
  ------------------
  197|  4.37k|    }
  198|  4.37k|}
SHA256_Begin:
  202|  4.49k|{
  203|  4.49k|    PRBool use_hw_sha2 = PR_FALSE;
  ------------------
  |  |  438|  4.49k|#define PR_FALSE 0
  ------------------
  204|       |
  205|  4.49k|    memset(ctx, 0, sizeof *ctx);
  206|  4.49k|    memcpy(H, H256, sizeof H256);
  ------------------
  |  |   31|  4.49k|#define H ctx->h
  ------------------
  207|       |
  208|  4.49k|#if defined(USE_HW_SHA2) && defined(IS_LITTLE_ENDIAN)
  209|       |    /* arm's implementation is tested on little endian only */
  210|  4.49k|    use_hw_sha2 = arm_sha2_support() || (sha_support() && ssse3_support() && sse4_1_support());
  ------------------
  |  Branch (210:19): [True: 0, False: 4.49k]
  |  Branch (210:42): [True: 4.49k, False: 0]
  |  Branch (210:59): [True: 4.49k, False: 0]
  |  Branch (210:78): [True: 4.49k, False: 0]
  ------------------
  211|  4.49k|#endif
  212|       |
  213|  4.49k|    if (use_hw_sha2) {
  ------------------
  |  Branch (213:9): [True: 4.49k, False: 0]
  ------------------
  214|  4.49k|        ctx->compress = SHA256_Compress_Native;
  215|  4.49k|        ctx->update = SHA256_Update_Native;
  216|  4.49k|    } else {
  217|      0|        ctx->compress = SHA256_Compress_Generic;
  218|      0|        ctx->update = SHA256_Update_Generic;
  219|      0|    }
  220|  4.49k|}
SHA256_Update:
  517|  4.71k|{
  518|  4.71k|    ctx->update(ctx, input, inputLen);
  519|  4.71k|}
SHA256_End:
  560|  4.50k|{
  561|  4.50k|    unsigned int inBuf = ctx->sizeLo & 0x3f;
  562|  4.50k|    unsigned int padLen = (inBuf < 56) ? (56 - inBuf) : (56 + 64 - inBuf);
  ------------------
  |  Branch (562:27): [True: 3.16k, False: 1.34k]
  ------------------
  563|  4.50k|    PRUint32 hi, lo;
  564|       |
  565|  4.50k|    hi = (ctx->sizeHi << 3) | (ctx->sizeLo >> 29);
  566|  4.50k|    lo = (ctx->sizeLo << 3);
  567|       |
  568|  4.50k|    ctx->update(ctx, pad, padLen);
  569|       |
  570|  4.50k|#if defined(IS_LITTLE_ENDIAN)
  571|  4.50k|    W[14] = SHA_HTONL(hi);
  ------------------
  |  |   29|  4.50k|#define W ctx->u.w
  ------------------
                  W[14] = SHA_HTONL(hi);
  ------------------
  |  |  108|  4.50k|#define SHA_HTONL(x) swap4b(x)
  ------------------
  572|  4.50k|    W[15] = SHA_HTONL(lo);
  ------------------
  |  |   29|  4.50k|#define W ctx->u.w
  ------------------
                  W[15] = SHA_HTONL(lo);
  ------------------
  |  |  108|  4.50k|#define SHA_HTONL(x) swap4b(x)
  ------------------
  573|       |#else
  574|       |    W[14] = hi;
  575|       |    W[15] = lo;
  576|       |#endif
  577|  4.50k|    ctx->compress(ctx);
  578|       |
  579|       |/* now output the answer */
  580|  4.50k|#if defined(IS_LITTLE_ENDIAN)
  581|  4.50k|    BYTESWAP4(H[0]);
  ------------------
  |  |  142|  4.50k|#define BYTESWAP4(x) x = SHA_HTONL(x)
  |  |  ------------------
  |  |  |  |  108|  4.50k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  582|  4.50k|    BYTESWAP4(H[1]);
  ------------------
  |  |  142|  4.50k|#define BYTESWAP4(x) x = SHA_HTONL(x)
  |  |  ------------------
  |  |  |  |  108|  4.50k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  583|  4.50k|    BYTESWAP4(H[2]);
  ------------------
  |  |  142|  4.50k|#define BYTESWAP4(x) x = SHA_HTONL(x)
  |  |  ------------------
  |  |  |  |  108|  4.50k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  584|  4.50k|    BYTESWAP4(H[3]);
  ------------------
  |  |  142|  4.50k|#define BYTESWAP4(x) x = SHA_HTONL(x)
  |  |  ------------------
  |  |  |  |  108|  4.50k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  585|  4.50k|    BYTESWAP4(H[4]);
  ------------------
  |  |  142|  4.50k|#define BYTESWAP4(x) x = SHA_HTONL(x)
  |  |  ------------------
  |  |  |  |  108|  4.50k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  586|  4.50k|    BYTESWAP4(H[5]);
  ------------------
  |  |  142|  4.50k|#define BYTESWAP4(x) x = SHA_HTONL(x)
  |  |  ------------------
  |  |  |  |  108|  4.50k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  587|  4.50k|    BYTESWAP4(H[6]);
  ------------------
  |  |  142|  4.50k|#define BYTESWAP4(x) x = SHA_HTONL(x)
  |  |  ------------------
  |  |  |  |  108|  4.50k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  588|  4.50k|    BYTESWAP4(H[7]);
  ------------------
  |  |  142|  4.50k|#define BYTESWAP4(x) x = SHA_HTONL(x)
  |  |  ------------------
  |  |  |  |  108|  4.50k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  589|  4.50k|#endif
  590|  4.50k|    padLen = PR_MIN(SHA256_LENGTH, maxDigestLen);
  ------------------
  |  |  158|  4.50k|#define PR_MIN(x,y)     ((x)<(y)?(x):(y))
  |  |  ------------------
  |  |  |  Branch (158:26): [True: 4.30k, False: 201]
  |  |  ------------------
  ------------------
  591|  4.50k|    memcpy(digest, H, padLen);
  ------------------
  |  |   31|  4.50k|#define H ctx->h
  ------------------
  592|  4.50k|    if (digestLen)
  ------------------
  |  Branch (592:9): [True: 4.50k, False: 0]
  ------------------
  593|  4.50k|        *digestLen = padLen;
  594|  4.50k|}
SHA256_FlattenSize:
  650|     36|{
  651|     36|    return sizeof *ctx;
  652|     36|}
SHA224_NewContext:
  686|      5|{
  687|      5|    return SHA256_NewContext();
  688|      5|}
SHA224_DestroyContext:
  692|      5|{
  693|      5|    SHA256_DestroyContext(ctx, freeit);
  694|      5|}
SHA224_Begin:
  698|     11|{
  699|     11|    PRBool use_hw_sha2;
  700|       |
  701|     11|    memset(ctx, 0, sizeof *ctx);
  702|     11|    memcpy(H, H224, sizeof H224);
  ------------------
  |  |   31|     11|#define H ctx->h
  ------------------
  703|       |
  704|     11|#if defined(USE_HW_SHA2) && defined(IS_LITTLE_ENDIAN)
  705|       |    /* arm's implementation is tested on little endian only */
  706|     11|    use_hw_sha2 = arm_sha2_support() || (sha_support() && ssse3_support() && sse4_1_support());
  ------------------
  |  Branch (706:19): [True: 0, False: 11]
  |  Branch (706:42): [True: 11, False: 0]
  |  Branch (706:59): [True: 11, False: 0]
  |  Branch (706:78): [True: 11, False: 0]
  ------------------
  707|       |#else
  708|       |    use_hw_sha2 = PR_FALSE;
  709|       |#endif
  710|       |
  711|     11|    if (use_hw_sha2) {
  ------------------
  |  Branch (711:9): [True: 11, False: 0]
  ------------------
  712|     11|        ctx->compress = SHA256_Compress_Native;
  713|     11|        ctx->update = SHA256_Update_Native;
  714|     11|    } else {
  715|      0|        ctx->compress = SHA256_Compress_Generic;
  716|      0|        ctx->update = SHA256_Update_Generic;
  717|      0|    }
  718|     11|}
SHA224_Update:
  723|     18|{
  724|     18|    ctx->update(ctx, input, inputLen);
  725|     18|}
SHA224_End:
  730|     11|{
  731|     11|    unsigned int maxLen = SHA_MIN(maxDigestLen, SHA224_LENGTH);
  ------------------
  |  |   37|     11|#define SHA_MIN(a, b) (a < b ? a : b)
  |  |  ------------------
  |  |  |  Branch (37:24): [True: 0, False: 11]
  |  |  ------------------
  ------------------
  732|     11|    SHA256_End(ctx, digest, digestLen, maxLen);
  733|     11|}
SHA224_FlattenSize:
  771|      1|{
  772|      1|    return SHA256_FlattenSize(ctx);
  773|      1|}
SHA512_NewContext:
  962|     67|{
  963|     67|    SHA512Context *ctx = PORT_New(SHA512Context);
  ------------------
  |  |  151|     67|#define PORT_New(type) (type *)PORT_Alloc(sizeof(type))
  |  |  ------------------
  |  |  |  |   52|     67|#define PORT_Alloc PORT_Alloc_Util
  |  |  ------------------
  ------------------
  964|     67|    return ctx;
  965|     67|}
SHA512_DestroyContext:
  969|     67|{
  970|     67|    memset(ctx, 0, sizeof *ctx);
  971|     67|    if (freeit) {
  ------------------
  |  Branch (971:9): [True: 67, False: 0]
  ------------------
  972|     67|        PORT_Free(ctx);
  ------------------
  |  |   60|     67|#define PORT_Free PORT_Free_Util
  ------------------
  973|     67|    }
  974|     67|}
SHA512_Begin:
  978|     68|{
  979|     68|    memset(ctx, 0, sizeof *ctx);
  980|     68|    memcpy(H, H512, sizeof H512);
  ------------------
  |  |   31|     68|#define H ctx->h
  ------------------
  981|     68|}
SHA512_Update:
 1340|    293|{
 1341|    293|    unsigned int inBuf;
 1342|    293|    if (!inputLen)
  ------------------
  |  Branch (1342:9): [True: 0, False: 293]
  ------------------
 1343|      0|        return;
 1344|       |
 1345|    293|#if defined(HAVE_LONG_LONG)
 1346|    293|    inBuf = (unsigned int)ctx->sizeLo & 0x7f;
 1347|       |    /* Add inputLen into the count of bytes processed, before processing */
 1348|    293|    ctx->sizeLo += inputLen;
 1349|       |#else
 1350|       |    inBuf = (unsigned int)ctx->sizeLo.lo & 0x7f;
 1351|       |    ctx->sizeLo.lo += inputLen;
 1352|       |    if (ctx->sizeLo.lo < inputLen)
 1353|       |        ctx->sizeLo.hi++;
 1354|       |#endif
 1355|       |
 1356|       |    /* if data already in buffer, attemp to fill rest of buffer */
 1357|    293|    if (inBuf) {
  ------------------
  |  Branch (1357:9): [True: 189, False: 104]
  ------------------
 1358|    189|        unsigned int todo = SHA512_BLOCK_LENGTH - inBuf;
  ------------------
  |  |  122|    189|#define SHA512_BLOCK_LENGTH 128   /* bytes */
  ------------------
 1359|    189|        if (inputLen < todo)
  ------------------
  |  Branch (1359:13): [True: 180, False: 9]
  ------------------
 1360|    180|            todo = inputLen;
 1361|    189|        memcpy(B + inBuf, input, todo);
  ------------------
  |  |   30|    189|#define B ctx->u.b
  ------------------
 1362|    189|        input += todo;
 1363|    189|        inputLen -= todo;
 1364|    189|        if (inBuf + todo == SHA512_BLOCK_LENGTH)
  ------------------
  |  |  122|    189|#define SHA512_BLOCK_LENGTH 128   /* bytes */
  ------------------
  |  Branch (1364:13): [True: 9, False: 180]
  ------------------
 1365|      9|            SHA512_Compress(ctx);
 1366|    189|    }
 1367|       |
 1368|       |    /* if enough data to fill one or more whole buffers, process them. */
 1369|    392|    while (inputLen >= SHA512_BLOCK_LENGTH) {
  ------------------
  |  |  122|    392|#define SHA512_BLOCK_LENGTH 128   /* bytes */
  ------------------
  |  Branch (1369:12): [True: 99, False: 293]
  ------------------
 1370|     99|        memcpy(B, input, SHA512_BLOCK_LENGTH);
  ------------------
  |  |   30|     99|#define B ctx->u.b
  ------------------
                      memcpy(B, input, SHA512_BLOCK_LENGTH);
  ------------------
  |  |  122|     99|#define SHA512_BLOCK_LENGTH 128   /* bytes */
  ------------------
 1371|     99|        input += SHA512_BLOCK_LENGTH;
  ------------------
  |  |  122|     99|#define SHA512_BLOCK_LENGTH 128   /* bytes */
  ------------------
 1372|     99|        inputLen -= SHA512_BLOCK_LENGTH;
  ------------------
  |  |  122|     99|#define SHA512_BLOCK_LENGTH 128   /* bytes */
  ------------------
 1373|     99|        SHA512_Compress(ctx);
 1374|     99|    }
 1375|       |    /* if data left over, fill it into buffer */
 1376|    293|    if (inputLen)
  ------------------
  |  Branch (1376:9): [True: 113, False: 180]
  ------------------
 1377|    113|        memcpy(B, input, inputLen);
  ------------------
  |  |   30|    113|#define B ctx->u.b
  ------------------
 1378|    293|}
SHA512_End:
 1383|    104|{
 1384|    104|#if defined(HAVE_LONG_LONG)
 1385|    104|    unsigned int inBuf = (unsigned int)ctx->sizeLo & 0x7f;
 1386|       |#else
 1387|       |    unsigned int inBuf = (unsigned int)ctx->sizeLo.lo & 0x7f;
 1388|       |#endif
 1389|    104|    unsigned int padLen = (inBuf < 112) ? (112 - inBuf) : (112 + 128 - inBuf);
  ------------------
  |  Branch (1389:27): [True: 102, False: 2]
  ------------------
 1390|    104|    PRUint64 lo;
 1391|    104|    LL_SHL(lo, ctx->sizeLo, 3);
  ------------------
  |  |  127|    104|#define LL_SHL(r, a, b)     ((r) = (PRInt64)(a) << (b))
  ------------------
 1392|       |
 1393|    104|    SHA512_Update(ctx, pad, padLen);
 1394|       |
 1395|    104|#if defined(HAVE_LONG_LONG)
 1396|    104|    W[14] = 0;
  ------------------
  |  |   29|    104|#define W ctx->u.w
  ------------------
 1397|       |#else
 1398|       |    W[14].lo = 0;
 1399|       |    W[14].hi = 0;
 1400|       |#endif
 1401|       |
 1402|    104|    W[15] = lo;
  ------------------
  |  |   29|    104|#define W ctx->u.w
  ------------------
 1403|    104|#if defined(IS_LITTLE_ENDIAN)
 1404|    104|    BYTESWAP8(W[15]);
  ------------------
  |  |  810|    104|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    104|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1405|    104|#endif
 1406|    104|    SHA512_Compress(ctx);
 1407|       |
 1408|       |/* now output the answer */
 1409|    104|#if defined(IS_LITTLE_ENDIAN)
 1410|    104|    BYTESWAP8(H[0]);
  ------------------
  |  |  810|    104|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    104|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1411|    104|    BYTESWAP8(H[1]);
  ------------------
  |  |  810|    104|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    104|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1412|    104|    BYTESWAP8(H[2]);
  ------------------
  |  |  810|    104|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    104|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1413|    104|    BYTESWAP8(H[3]);
  ------------------
  |  |  810|    104|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    104|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1414|    104|    BYTESWAP8(H[4]);
  ------------------
  |  |  810|    104|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    104|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1415|    104|    BYTESWAP8(H[5]);
  ------------------
  |  |  810|    104|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    104|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1416|    104|    BYTESWAP8(H[6]);
  ------------------
  |  |  810|    104|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    104|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1417|    104|    BYTESWAP8(H[7]);
  ------------------
  |  |  810|    104|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    104|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1418|    104|#endif
 1419|    104|    padLen = PR_MIN(SHA512_LENGTH, maxDigestLen);
  ------------------
  |  |  158|    104|#define PR_MIN(x,y)     ((x)<(y)?(x):(y))
  |  |  ------------------
  |  |  |  Branch (158:26): [True: 0, False: 104]
  |  |  ------------------
  ------------------
 1420|    104|    memcpy(digest, H, padLen);
  ------------------
  |  |   31|    104|#define H ctx->h
  ------------------
 1421|    104|    if (digestLen)
  ------------------
  |  Branch (1421:9): [True: 104, False: 0]
  ------------------
 1422|    104|        *digestLen = padLen;
 1423|    104|}
SHA512_FlattenSize:
 1478|      1|{
 1479|      1|    return sizeof *ctx;
 1480|      1|}
SHA384_NewContext:
 1528|     28|{
 1529|     28|    return SHA512_NewContext();
 1530|     28|}
SHA384_DestroyContext:
 1534|     28|{
 1535|     28|    SHA512_DestroyContext(ctx, freeit);
 1536|     28|}
SHA384_Begin:
 1540|     36|{
 1541|     36|    memset(ctx, 0, sizeof *ctx);
 1542|     36|    memcpy(H, H384, sizeof H384);
  ------------------
  |  |   31|     36|#define H ctx->h
  ------------------
 1543|     36|}
SHA384_Update:
 1548|     64|{
 1549|     64|    SHA512_Update(ctx, input, inputLen);
 1550|     64|}
SHA384_End:
 1555|     36|{
 1556|     36|    unsigned int maxLen = SHA_MIN(maxDigestLen, SHA384_LENGTH);
  ------------------
  |  |   37|     36|#define SHA_MIN(a, b) (a < b ? a : b)
  |  |  ------------------
  |  |  |  Branch (37:24): [True: 0, False: 36]
  |  |  ------------------
  ------------------
 1557|     36|    SHA512_End(ctx, digest, digestLen, maxLen);
 1558|     36|}
SHA384_FlattenSize:
 1596|      3|{
 1597|      3|    return sizeof(SHA384Context);
 1598|      3|}
sha512.c:swap4b:
  103|  45.0k|{
  104|  45.0k|    __asm__("bswap %0"
  105|  45.0k|            : "+r"(value));
  106|  45.0k|    return (value);
  107|  45.0k|}
sha512.c:SHA512_Compress:
 1086|    212|{
 1087|       |#if defined(USE_PPC_CRYPTO)
 1088|       |    sha512_block_p8(&H[0], &W[0], 1);
 1089|       |#else /* USE_PPC_CRYPTO */
 1090|       |
 1091|    212|#if defined(IS_LITTLE_ENDIAN)
 1092|    212|    {
 1093|    212|        BYTESWAP8(W[0]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1094|    212|        BYTESWAP8(W[1]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1095|    212|        BYTESWAP8(W[2]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1096|    212|        BYTESWAP8(W[3]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1097|    212|        BYTESWAP8(W[4]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1098|    212|        BYTESWAP8(W[5]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1099|    212|        BYTESWAP8(W[6]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1100|    212|        BYTESWAP8(W[7]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1101|    212|        BYTESWAP8(W[8]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1102|    212|        BYTESWAP8(W[9]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1103|    212|        BYTESWAP8(W[10]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1104|    212|        BYTESWAP8(W[11]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1105|    212|        BYTESWAP8(W[12]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1106|    212|        BYTESWAP8(W[13]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1107|    212|        BYTESWAP8(W[14]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1108|    212|        BYTESWAP8(W[15]);
  ------------------
  |  |  810|    212|#define BYTESWAP8(x) x = FREEBL_HTONLL(x)
  |  |  ------------------
  |  |  |  |   46|    212|#define FREEBL_HTONLL(x) __builtin_bswap64(x)
  |  |  ------------------
  ------------------
 1109|    212|    }
 1110|    212|#endif
 1111|       |
 1112|    212|    {
 1113|       |#ifdef NOUNROLL512
 1114|       |        {
 1115|       |            /* prepare the "message schedule"   */
 1116|       |            int t;
 1117|       |            for (t = 16; t < 80; ++t) {
 1118|       |                INITW(t);
 1119|       |            }
 1120|       |        }
 1121|       |#else
 1122|    212|        INITW(16);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1123|    212|        INITW(17);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1124|    212|        INITW(18);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1125|    212|        INITW(19);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1126|       |
 1127|    212|        INITW(20);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1128|    212|        INITW(21);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1129|    212|        INITW(22);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1130|    212|        INITW(23);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1131|    212|        INITW(24);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1132|    212|        INITW(25);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1133|    212|        INITW(26);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1134|    212|        INITW(27);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1135|    212|        INITW(28);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1136|    212|        INITW(29);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1137|       |
 1138|    212|        INITW(30);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1139|    212|        INITW(31);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1140|    212|        INITW(32);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1141|    212|        INITW(33);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1142|    212|        INITW(34);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1143|    212|        INITW(35);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1144|    212|        INITW(36);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1145|    212|        INITW(37);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1146|    212|        INITW(38);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1147|    212|        INITW(39);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1148|       |
 1149|    212|        INITW(40);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1150|    212|        INITW(41);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1151|    212|        INITW(42);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1152|    212|        INITW(43);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1153|    212|        INITW(44);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1154|    212|        INITW(45);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1155|    212|        INITW(46);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1156|    212|        INITW(47);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1157|    212|        INITW(48);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1158|    212|        INITW(49);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1159|       |
 1160|    212|        INITW(50);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1161|    212|        INITW(51);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1162|    212|        INITW(52);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1163|    212|        INITW(53);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1164|    212|        INITW(54);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1165|    212|        INITW(55);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1166|    212|        INITW(56);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1167|    212|        INITW(57);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1168|    212|        INITW(58);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1169|    212|        INITW(59);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1170|       |
 1171|    212|        INITW(60);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1172|    212|        INITW(61);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1173|    212|        INITW(62);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1174|    212|        INITW(63);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1175|    212|        INITW(64);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1176|    212|        INITW(65);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1177|    212|        INITW(66);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1178|    212|        INITW(67);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1179|    212|        INITW(68);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1180|    212|        INITW(69);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1181|       |
 1182|    212|        INITW(70);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1183|    212|        INITW(71);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1184|    212|        INITW(72);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1185|    212|        INITW(73);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1186|    212|        INITW(74);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1187|    212|        INITW(75);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1188|    212|        INITW(76);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1189|    212|        INITW(77);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1190|    212|        INITW(78);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1191|    212|        INITW(79);
  ------------------
  |  |  999|    212|#define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  800|    212|#define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s1(x) (ROTR64(x, 19) ^ ROTR64(x, 61) ^ SHR(x, 6))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |  799|    212|#define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define s0(x) (ROTR64(x, 1) ^ ROTR64(x, 8) ^ SHR(x, 7))
  |  |  |  |  ------------------
  |  |  |  |  |  |   33|    212|#define SHR(x, n) (x >> n)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define INITW(t) W[t] = (s1(W[t - 2]) + W[t - 7] + s0(W[t - 15]) + W[t - 16])
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  ------------------
 1192|    212|#endif
 1193|    212|    }
 1194|       |#ifdef SHA512_TRACE
 1195|       |    {
 1196|       |        int i;
 1197|       |        for (i = 0; i < 80; ++i) {
 1198|       |#ifdef HAVE_LONG_LONG
 1199|       |            printf("W[%2d] = %016lx\n", i, W[i]);
 1200|       |#else
 1201|       |            printf("W[%2d] = %08x%08x\n", i, W[i].hi, W[i].lo);
 1202|       |#endif
 1203|       |        }
 1204|       |    }
 1205|       |#endif
 1206|    212|    {
 1207|    212|        PRUint64 a, b, c, d, e, f, g, h;
 1208|       |
 1209|    212|        a = H[0];
  ------------------
  |  |   31|    212|#define H ctx->h
  ------------------
 1210|    212|        b = H[1];
  ------------------
  |  |   31|    212|#define H ctx->h
  ------------------
 1211|    212|        c = H[2];
  ------------------
  |  |   31|    212|#define H ctx->h
  ------------------
 1212|    212|        d = H[3];
  ------------------
  |  |   31|    212|#define H ctx->h
  ------------------
 1213|    212|        e = H[4];
  ------------------
  |  |   31|    212|#define H ctx->h
  ------------------
 1214|    212|        f = H[5];
  ------------------
  |  |   31|    212|#define H ctx->h
  ------------------
 1215|    212|        g = H[6];
  ------------------
  |  |   31|    212|#define H ctx->h
  ------------------
 1216|    212|        h = H[7];
  ------------------
  |  |   31|    212|#define H ctx->h
  ------------------
 1217|       |
 1218|       |#ifdef NOUNROLL512
 1219|       |        {
 1220|       |            int t;
 1221|       |            for (t = 0; t < 80; t += 8) {
 1222|       |                ROUND(t + 0, a, b, c, d, e, f, g, h)
 1223|       |                ROUND(t + 1, h, a, b, c, d, e, f, g)
 1224|       |                ROUND(t + 2, g, h, a, b, c, d, e, f)
 1225|       |                ROUND(t + 3, f, g, h, a, b, c, d, e)
 1226|       |                ROUND(t + 4, e, f, g, h, a, b, c, d)
 1227|       |                ROUND(t + 5, d, e, f, g, h, a, b, c)
 1228|       |                ROUND(t + 6, c, d, e, f, g, h, a, b)
 1229|       |                ROUND(t + 7, b, c, d, e, f, g, h, a)
 1230|       |            }
 1231|       |        }
 1232|       |#else
 1233|    212|        ROUND(0, a, b, c, d, e, f, g, h)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1234|    212|        ROUND(1, h, a, b, c, d, e, f, g)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1235|    212|        ROUND(2, g, h, a, b, c, d, e, f)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1236|    212|        ROUND(3, f, g, h, a, b, c, d, e)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1237|    212|        ROUND(4, e, f, g, h, a, b, c, d)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1238|    212|        ROUND(5, d, e, f, g, h, a, b, c)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1239|    212|        ROUND(6, c, d, e, f, g, h, a, b)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1240|    212|        ROUND(7, b, c, d, e, f, g, h, a)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1241|       |
 1242|    212|        ROUND(8, a, b, c, d, e, f, g, h)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1243|    212|        ROUND(9, h, a, b, c, d, e, f, g)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1244|    212|        ROUND(10, g, h, a, b, c, d, e, f)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1245|    212|        ROUND(11, f, g, h, a, b, c, d, e)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1246|    212|        ROUND(12, e, f, g, h, a, b, c, d)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1247|    212|        ROUND(13, d, e, f, g, h, a, b, c)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1248|    212|        ROUND(14, c, d, e, f, g, h, a, b)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1249|    212|        ROUND(15, b, c, d, e, f, g, h, a)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1250|       |
 1251|    212|        ROUND(16, a, b, c, d, e, f, g, h)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1252|    212|        ROUND(17, h, a, b, c, d, e, f, g)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1253|    212|        ROUND(18, g, h, a, b, c, d, e, f)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1254|    212|        ROUND(19, f, g, h, a, b, c, d, e)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1255|    212|        ROUND(20, e, f, g, h, a, b, c, d)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1256|    212|        ROUND(21, d, e, f, g, h, a, b, c)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1257|    212|        ROUND(22, c, d, e, f, g, h, a, b)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1258|    212|        ROUND(23, b, c, d, e, f, g, h, a)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1259|       |
 1260|    212|        ROUND(24, a, b, c, d, e, f, g, h)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1261|    212|        ROUND(25, h, a, b, c, d, e, f, g)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1262|    212|        ROUND(26, g, h, a, b, c, d, e, f)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1263|    212|        ROUND(27, f, g, h, a, b, c, d, e)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1264|    212|        ROUND(28, e, f, g, h, a, b, c, d)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1265|    212|        ROUND(29, d, e, f, g, h, a, b, c)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1266|    212|        ROUND(30, c, d, e, f, g, h, a, b)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1267|    212|        ROUND(31, b, c, d, e, f, g, h, a)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1268|       |
 1269|    212|        ROUND(32, a, b, c, d, e, f, g, h)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1270|    212|        ROUND(33, h, a, b, c, d, e, f, g)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1271|    212|        ROUND(34, g, h, a, b, c, d, e, f)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1272|    212|        ROUND(35, f, g, h, a, b, c, d, e)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1273|    212|        ROUND(36, e, f, g, h, a, b, c, d)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1274|    212|        ROUND(37, d, e, f, g, h, a, b, c)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1275|    212|        ROUND(38, c, d, e, f, g, h, a, b)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1276|    212|        ROUND(39, b, c, d, e, f, g, h, a)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1277|       |
 1278|    212|        ROUND(40, a, b, c, d, e, f, g, h)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1279|    212|        ROUND(41, h, a, b, c, d, e, f, g)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1280|    212|        ROUND(42, g, h, a, b, c, d, e, f)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1281|    212|        ROUND(43, f, g, h, a, b, c, d, e)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1282|    212|        ROUND(44, e, f, g, h, a, b, c, d)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1283|    212|        ROUND(45, d, e, f, g, h, a, b, c)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1284|    212|        ROUND(46, c, d, e, f, g, h, a, b)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1285|    212|        ROUND(47, b, c, d, e, f, g, h, a)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1286|       |
 1287|    212|        ROUND(48, a, b, c, d, e, f, g, h)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1288|    212|        ROUND(49, h, a, b, c, d, e, f, g)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1289|    212|        ROUND(50, g, h, a, b, c, d, e, f)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1290|    212|        ROUND(51, f, g, h, a, b, c, d, e)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1291|    212|        ROUND(52, e, f, g, h, a, b, c, d)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1292|    212|        ROUND(53, d, e, f, g, h, a, b, c)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1293|    212|        ROUND(54, c, d, e, f, g, h, a, b)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1294|    212|        ROUND(55, b, c, d, e, f, g, h, a)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1295|       |
 1296|    212|        ROUND(56, a, b, c, d, e, f, g, h)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1297|    212|        ROUND(57, h, a, b, c, d, e, f, g)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1298|    212|        ROUND(58, g, h, a, b, c, d, e, f)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1299|    212|        ROUND(59, f, g, h, a, b, c, d, e)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1300|    212|        ROUND(60, e, f, g, h, a, b, c, d)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1301|    212|        ROUND(61, d, e, f, g, h, a, b, c)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1302|    212|        ROUND(62, c, d, e, f, g, h, a, b)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1303|    212|        ROUND(63, b, c, d, e, f, g, h, a)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1304|       |
 1305|    212|        ROUND(64, a, b, c, d, e, f, g, h)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1306|    212|        ROUND(65, h, a, b, c, d, e, f, g)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1307|    212|        ROUND(66, g, h, a, b, c, d, e, f)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1308|    212|        ROUND(67, f, g, h, a, b, c, d, e)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1309|    212|        ROUND(68, e, f, g, h, a, b, c, d)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1310|    212|        ROUND(69, d, e, f, g, h, a, b, c)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1311|    212|        ROUND(70, c, d, e, f, g, h, a, b)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1312|    212|        ROUND(71, b, c, d, e, f, g, h, a)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1313|       |
 1314|    212|        ROUND(72, a, b, c, d, e, f, g, h)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1315|    212|        ROUND(73, h, a, b, c, d, e, f, g)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1316|    212|        ROUND(74, g, h, a, b, c, d, e, f)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1317|    212|        ROUND(75, f, g, h, a, b, c, d, e)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1318|    212|        ROUND(76, e, f, g, h, a, b, c, d)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1319|    212|        ROUND(77, d, e, f, g, h, a, b, c)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1320|    212|        ROUND(78, c, d, e, f, g, h, a, b)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1321|    212|        ROUND(79, b, c, d, e, f, g, h, a)
  ------------------
  |  | 1002|    212|    h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |  798|    212|#define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S1(x) (ROTR64(x, 14) ^ ROTR64(x, 18) ^ ROTR64(x, 41))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   35|    212|#define Ch(x, y, z) ((x & y) ^ (~x & z))
  |  |  ------------------
  |  |                   h += S1(e) + Ch(e, f, g) + K512[n] + W[n]; \
  |  |  ------------------
  |  |  |  |   29|    212|#define W ctx->u.w
  |  |  ------------------
  |  | 1003|    212|    d += h;                                    \
  |  | 1004|    212|    h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |  797|    212|#define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  |  |               #define S0(x) (ROTR64(x, 28) ^ ROTR64(x, 34) ^ ROTR64(x, 39))
  |  |  |  |  ------------------
  |  |  |  |  |  |   30|    212|#define ROTR64(x, n) (((x) >> (n)) | ((x) << (64 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   h += S0(a) + Maj(a, b, c);                 \
  |  |  ------------------
  |  |  |  |   36|    212|#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
  |  |  ------------------
  |  | 1005|    212|    DUMP(n, a, d, e, h)
  ------------------
 1322|    212|#endif
 1323|       |
 1324|    212|        ADDTO(a, H[0]);
  ------------------
  |  |  997|    212|#define ADDTO(x, y) y += x
  ------------------
 1325|    212|        ADDTO(b, H[1]);
  ------------------
  |  |  997|    212|#define ADDTO(x, y) y += x
  ------------------
 1326|    212|        ADDTO(c, H[2]);
  ------------------
  |  |  997|    212|#define ADDTO(x, y) y += x
  ------------------
 1327|    212|        ADDTO(d, H[3]);
  ------------------
  |  |  997|    212|#define ADDTO(x, y) y += x
  ------------------
 1328|    212|        ADDTO(e, H[4]);
  ------------------
  |  |  997|    212|#define ADDTO(x, y) y += x
  ------------------
 1329|    212|        ADDTO(f, H[5]);
  ------------------
  |  |  997|    212|#define ADDTO(x, y) y += x
  ------------------
 1330|    212|        ADDTO(g, H[6]);
  ------------------
  |  |  997|    212|#define ADDTO(x, y) y += x
  ------------------
 1331|    212|        ADDTO(h, H[7]);
  ------------------
  |  |  997|    212|#define ADDTO(x, y) y += x
  ------------------
 1332|    212|    }
 1333|       |
 1334|    212|#endif /* !USE_PPC_CRYPTO */
 1335|    212|}

SHA1_Begin:
   59|  5.64k|{
   60|  5.64k|    ctx->size = 0;
   61|       |    /*
   62|       |     *  Initialize H with constants from FIPS180-1.
   63|       |     */
   64|  5.64k|    ctx->H[0] = 0x67452301L;
   65|  5.64k|    ctx->H[1] = 0xefcdab89L;
   66|  5.64k|    ctx->H[2] = 0x98badcfeL;
   67|  5.64k|    ctx->H[3] = 0x10325476L;
   68|  5.64k|    ctx->H[4] = 0xc3d2e1f0L;
   69|       |
   70|       |#if defined(USE_HW_SHA1) && defined(IS_LITTLE_ENDIAN)
   71|       |    /* arm's implementation is tested on little endian only */
   72|       |    if (arm_sha1_support()) {
   73|       |        ctx->compress = SHA1_Compress_Native;
   74|       |        ctx->update = SHA1_Update_Native;
   75|       |    } else
   76|       |#endif
   77|  5.64k|    {
   78|  5.64k|        ctx->compress = SHA1_Compress_Generic;
   79|  5.64k|        ctx->update = SHA1_Update_Generic;
   80|  5.64k|    }
   81|  5.64k|}
SHA1_Update:
  126|  11.3k|{
  127|  11.3k|    ctx->update(ctx, dataIn, len);
  128|  11.3k|}
SHA1_End:
  187|  5.64k|{
  188|  5.64k|    register PRUint64 size;
  189|  5.64k|    register PRUint32 lenB;
  190|       |
  191|  5.64k|    static const unsigned char bulk_pad[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  192|  5.64k|                                                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  193|  5.64k|                                                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  194|  5.64k|#define tmp lenB
  195|       |
  196|  5.64k|    PORT_Assert(maxDigestLen >= SHA1_LENGTH);
  ------------------
  |  |  120|  5.64k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  5.64k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5.64k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|       |
  198|       |    /*
  199|       |     *  Pad with a binary 1 (e.g. 0x80), then zeroes, then length in bits
  200|       |     */
  201|  5.64k|    size = ctx->size;
  202|       |
  203|  5.64k|    lenB = (PRUint32)size & 63;
  204|  5.64k|    SHA1_Update(ctx, bulk_pad, (((55 + 64) - lenB) & 63) + 1);
  205|  5.64k|    PORT_Assert(((PRUint32)ctx->size & 63) == 56);
  ------------------
  |  |  120|  5.64k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  5.64k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5.64k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|       |    /* Convert size from bytes to bits. */
  207|  5.64k|    size <<= 3;
  208|  5.64k|    ctx->W[14] = SHA_HTONL((PRUint32)(size >> 32));
  ------------------
  |  |   22|  5.64k|#define W u.w
  ------------------
                  ctx->W[14] = SHA_HTONL((PRUint32)(size >> 32));
  ------------------
  |  |   97|  5.64k|#define SHA_HTONL(x) swap4b(x)
  ------------------
  209|  5.64k|    ctx->W[15] = SHA_HTONL((PRUint32)size);
  ------------------
  |  |   22|  5.64k|#define W u.w
  ------------------
                  ctx->W[15] = SHA_HTONL((PRUint32)size);
  ------------------
  |  |   97|  5.64k|#define SHA_HTONL(x) swap4b(x)
  ------------------
  210|  5.64k|    ctx->compress(ctx);
  211|       |
  212|       |    /*
  213|       |     *  Output hash
  214|       |     */
  215|  5.64k|    SHA_STORE_RESULT;
  ------------------
  |  |  149|  5.64k|    SHA_STORE(0);        \
  |  |  ------------------
  |  |  |  |  146|  5.64k|#define SHA_STORE(n) ((PRUint32 *)hashout)[n] = SHA_HTONL(ctx->H[n])
  |  |  |  |  ------------------
  |  |  |  |  |  |   97|  5.64k|#define SHA_HTONL(x) swap4b(x)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  150|  5.64k|    SHA_STORE(1);        \
  |  |  ------------------
  |  |  |  |  146|  5.64k|#define SHA_STORE(n) ((PRUint32 *)hashout)[n] = SHA_HTONL(ctx->H[n])
  |  |  |  |  ------------------
  |  |  |  |  |  |   97|  5.64k|#define SHA_HTONL(x) swap4b(x)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|  5.64k|    SHA_STORE(2);        \
  |  |  ------------------
  |  |  |  |  146|  5.64k|#define SHA_STORE(n) ((PRUint32 *)hashout)[n] = SHA_HTONL(ctx->H[n])
  |  |  |  |  ------------------
  |  |  |  |  |  |   97|  5.64k|#define SHA_HTONL(x) swap4b(x)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  152|  5.64k|    SHA_STORE(3);        \
  |  |  ------------------
  |  |  |  |  146|  5.64k|#define SHA_STORE(n) ((PRUint32 *)hashout)[n] = SHA_HTONL(ctx->H[n])
  |  |  |  |  ------------------
  |  |  |  |  |  |   97|  5.64k|#define SHA_HTONL(x) swap4b(x)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  153|  5.64k|    SHA_STORE(4);
  |  |  ------------------
  |  |  |  |  146|  5.64k|#define SHA_STORE(n) ((PRUint32 *)hashout)[n] = SHA_HTONL(ctx->H[n])
  |  |  |  |  ------------------
  |  |  |  |  |  |   97|  5.64k|#define SHA_HTONL(x) swap4b(x)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  216|  5.64k|    if (pDigestLen) {
  ------------------
  |  Branch (216:9): [True: 5.64k, False: 0]
  ------------------
  217|  5.64k|        *pDigestLen = SHA1_LENGTH;
  ------------------
  |  |   39|  5.64k|#define SHA1_LENGTH 20
  ------------------
  218|  5.64k|    }
  219|  5.64k|#undef tmp
  220|  5.64k|}
SHA1_NewContext:
  516|  5.62k|{
  517|  5.62k|    SHA1Context *cx;
  518|       |
  519|       |    /* no need to ZNew, SHA1_Begin will init the context */
  520|  5.62k|    cx = PORT_New(SHA1Context);
  ------------------
  |  |  151|  5.62k|#define PORT_New(type) (type *)PORT_Alloc(sizeof(type))
  |  |  ------------------
  |  |  |  |   52|  5.62k|#define PORT_Alloc PORT_Alloc_Util
  |  |  ------------------
  ------------------
  521|  5.62k|    return cx;
  522|  5.62k|}
SHA1_DestroyContext:
  527|  5.62k|{
  528|  5.62k|    memset(cx, 0, sizeof *cx);
  529|  5.62k|    if (freeit) {
  ------------------
  |  Branch (529:9): [True: 5.62k, False: 0]
  ------------------
  530|  5.62k|        PORT_Free(cx);
  ------------------
  |  |   60|  5.62k|#define PORT_Free PORT_Free_Util
  ------------------
  531|  5.62k|    }
  532|  5.62k|}
SHA1_FlattenSize:
  560|  5.61k|{
  561|  5.61k|    return sizeof(SHA1Context);
  562|  5.61k|}
sha_fast.c:SHA1_Update_Generic:
  132|  11.3k|{
  133|  11.3k|    register unsigned int lenB;
  134|  11.3k|    register unsigned int togo;
  135|       |
  136|  11.3k|    if (!len)
  ------------------
  |  Branch (136:9): [True: 0, False: 11.3k]
  ------------------
  137|      0|        return;
  138|       |
  139|       |    /* accumulate the byte count. */
  140|  11.3k|    lenB = (unsigned int)(ctx->size) & 63U;
  141|       |
  142|  11.3k|    ctx->size += len;
  143|       |
  144|       |    /*
  145|       |     *  Read the data into W and process blocks as they get full
  146|       |     */
  147|  11.3k|    if (lenB > 0) {
  ------------------
  |  Branch (147:9): [True: 5.67k, False: 5.64k]
  ------------------
  148|  5.67k|        togo = 64U - lenB;
  149|  5.67k|        if (len < togo)
  ------------------
  |  Branch (149:13): [True: 5.55k, False: 117]
  ------------------
  150|  5.55k|            togo = len;
  151|  5.67k|        memcpy(ctx->B + lenB, dataIn, togo);
  ------------------
  |  |   23|  5.67k|#define B u.b
  ------------------
  152|  5.67k|        len -= togo;
  153|  5.67k|        dataIn += togo;
  154|  5.67k|        lenB = (lenB + togo) & 63U;
  155|  5.67k|        if (!lenB) {
  ------------------
  |  Branch (155:13): [True: 117, False: 5.55k]
  ------------------
  156|    117|            shaCompress(&ctx->H[H2X], ctx->W);
  ------------------
  |  |  115|    117|#define H2X 11 /* X[0] is H[11], and H[0] is X[-11] */
  ------------------
                          shaCompress(&ctx->H[H2X], ctx->W);
  ------------------
  |  |   22|    117|#define W u.w
  ------------------
  157|    117|        }
  158|  5.67k|    }
  159|       |#if !defined(HAVE_UNALIGNED_ACCESS)
  160|       |    if ((ptrdiff_t)dataIn % sizeof(PRUint32)) {
  161|       |        while (len >= 64U) {
  162|       |            memcpy(ctx->B, dataIn, 64);
  163|       |            len -= 64U;
  164|       |            shaCompress(&ctx->H[H2X], ctx->W);
  165|       |            dataIn += 64U;
  166|       |        }
  167|       |    } else
  168|       |#endif
  169|  11.3k|    {
  170|  37.4k|        while (len >= 64U) {
  ------------------
  |  Branch (170:16): [True: 26.1k, False: 11.3k]
  ------------------
  171|  26.1k|            len -= 64U;
  172|  26.1k|            shaCompress(&ctx->H[H2X], (PRUint32 *)dataIn);
  ------------------
  |  |  115|  26.1k|#define H2X 11 /* X[0] is H[11], and H[0] is X[-11] */
  ------------------
  173|  26.1k|            dataIn += 64U;
  174|  26.1k|        }
  175|  11.3k|    }
  176|  11.3k|    if (len) {
  ------------------
  |  Branch (176:9): [True: 5.76k, False: 5.55k]
  ------------------
  177|  5.76k|        memcpy(ctx->B, dataIn, len);
  ------------------
  |  |   23|  5.76k|#define B u.b
  ------------------
  178|  5.76k|    }
  179|  11.3k|}
sha_fast.c:shaCompress:
  286|  31.9k|{
  287|  31.9k|    register SHA_HW_t A, B, C, D, E;
  288|       |
  289|       |#if defined(SHA_NEED_TMP_VARIABLE)
  290|       |    register PRUint32 tmp;
  291|       |#endif
  292|       |
  293|  31.9k|#if !defined(SHA_PUT_W_IN_STACK)
  294|  31.9k|#define XH(n) X[n - H2X]
  295|  31.9k|#define XW(n) X[n - W2X]
  296|       |#else
  297|       |    SHA_HW_t w_0, w_1, w_2, w_3, w_4, w_5, w_6, w_7,
  298|       |        w_8, w_9, w_10, w_11, w_12, w_13, w_14, w_15;
  299|       |#define XW(n) w_##n
  300|       |#define XH(n) X[n]
  301|       |#endif
  302|       |
  303|  31.9k|#define K0 0x5a827999L
  304|  31.9k|#define K1 0x6ed9eba1L
  305|  31.9k|#define K2 0x8f1bbcdcL
  306|  31.9k|#define K3 0xca62c1d6L
  307|       |
  308|  31.9k|#define SHA_RND1(a, b, c, d, e, n)                         \
  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  310|  31.9k|    c = SHA_ROTL(c, 30)
  311|  31.9k|#define SHA_RND2(a, b, c, d, e, n)                         \
  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  313|  31.9k|    c = SHA_ROTL(c, 30)
  314|  31.9k|#define SHA_RND3(a, b, c, d, e, n)                         \
  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  316|  31.9k|    c = SHA_ROTL(c, 30)
  317|  31.9k|#define SHA_RND4(a, b, c, d, e, n)                         \
  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  319|  31.9k|    c = SHA_ROTL(c, 30)
  320|       |
  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  322|       |
  323|  31.9k|    A = XH(0);
  ------------------
  |  |  294|  31.9k|#define XH(n) X[n - H2X]
  |  |  ------------------
  |  |  |  |  115|  31.9k|#define H2X 11 /* X[0] is H[11], and H[0] is X[-11] */
  |  |  ------------------
  ------------------
  324|  31.9k|    B = XH(1);
  ------------------
  |  |  294|  31.9k|#define XH(n) X[n - H2X]
  |  |  ------------------
  |  |  |  |  115|  31.9k|#define H2X 11 /* X[0] is H[11], and H[0] is X[-11] */
  |  |  ------------------
  ------------------
  325|  31.9k|    C = XH(2);
  ------------------
  |  |  294|  31.9k|#define XH(n) X[n - H2X]
  |  |  ------------------
  |  |  |  |  115|  31.9k|#define H2X 11 /* X[0] is H[11], and H[0] is X[-11] */
  |  |  ------------------
  ------------------
  326|  31.9k|    D = XH(3);
  ------------------
  |  |  294|  31.9k|#define XH(n) X[n - H2X]
  |  |  ------------------
  |  |  |  |  115|  31.9k|#define H2X 11 /* X[0] is H[11], and H[0] is X[-11] */
  |  |  ------------------
  ------------------
  327|  31.9k|    E = XH(4);
  ------------------
  |  |  294|  31.9k|#define XH(n) X[n - H2X]
  |  |  ------------------
  |  |  |  |  115|  31.9k|#define H2X 11 /* X[0] is H[11], and H[0] is X[-11] */
  |  |  ------------------
  ------------------
  328|       |
  329|  31.9k|    LOAD(0);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  330|  31.9k|    SHA_RND1(E, A, B, C, D, 0);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  331|  31.9k|    LOAD(1);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  332|  31.9k|    SHA_RND1(D, E, A, B, C, 1);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  333|  31.9k|    LOAD(2);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  334|  31.9k|    SHA_RND1(C, D, E, A, B, 2);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  335|  31.9k|    LOAD(3);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  336|  31.9k|    SHA_RND1(B, C, D, E, A, 3);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  337|  31.9k|    LOAD(4);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  338|  31.9k|    SHA_RND1(A, B, C, D, E, 4);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  339|  31.9k|    LOAD(5);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  340|  31.9k|    SHA_RND1(E, A, B, C, D, 5);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  341|  31.9k|    LOAD(6);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  342|  31.9k|    SHA_RND1(D, E, A, B, C, 6);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  343|  31.9k|    LOAD(7);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  344|  31.9k|    SHA_RND1(C, D, E, A, B, 7);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  345|  31.9k|    LOAD(8);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  346|  31.9k|    SHA_RND1(B, C, D, E, A, 8);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  347|  31.9k|    LOAD(9);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  348|  31.9k|    SHA_RND1(A, B, C, D, E, 9);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  349|  31.9k|    LOAD(10);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  350|  31.9k|    SHA_RND1(E, A, B, C, D, 10);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  351|  31.9k|    LOAD(11);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  352|  31.9k|    SHA_RND1(D, E, A, B, C, 11);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  353|  31.9k|    LOAD(12);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  354|  31.9k|    SHA_RND1(C, D, E, A, B, 12);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  355|  31.9k|    LOAD(13);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  356|  31.9k|    SHA_RND1(B, C, D, E, A, 13);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  357|  31.9k|    LOAD(14);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  358|  31.9k|    SHA_RND1(A, B, C, D, E, 14);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  359|  31.9k|    LOAD(15);
  ------------------
  |  |  321|  31.9k|#define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define LOAD(n) XW(n) = SHA_HTONL(inbuf[n])
  |  |  ------------------
  |  |  |  |   97|  31.9k|#define SHA_HTONL(x) swap4b(x)
  |  |  ------------------
  ------------------
  360|  31.9k|    SHA_RND1(E, A, B, C, D, 15);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  361|       |
  362|  31.9k|    SHA_MIX(0, 13, 8, 2);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  363|  31.9k|    SHA_RND1(D, E, A, B, C, 0);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  364|  31.9k|    SHA_MIX(1, 14, 9, 3);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  365|  31.9k|    SHA_RND1(C, D, E, A, B, 1);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  366|  31.9k|    SHA_MIX(2, 15, 10, 4);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  367|  31.9k|    SHA_RND1(B, C, D, E, A, 2);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  368|  31.9k|    SHA_MIX(3, 0, 11, 5);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  369|  31.9k|    SHA_RND1(A, B, C, D, E, 3);
  ------------------
  |  |  309|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |   25|  31.9k|#define SHA_F1(X, Y, Z) ((((Y) ^ (Z)) & (X)) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F1(c, d, e) + a + XW(n) + K0; \
  |  |  ------------------
  |  |  |  |  303|  31.9k|#define K0 0x5a827999L
  |  |  ------------------
  |  |  310|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  370|       |
  371|  31.9k|    SHA_MIX(4, 1, 12, 6);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  372|  31.9k|    SHA_RND2(E, A, B, C, D, 4);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  373|  31.9k|    SHA_MIX(5, 2, 13, 7);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  374|  31.9k|    SHA_RND2(D, E, A, B, C, 5);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  375|  31.9k|    SHA_MIX(6, 3, 14, 8);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  376|  31.9k|    SHA_RND2(C, D, E, A, B, 6);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  377|  31.9k|    SHA_MIX(7, 4, 15, 9);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  378|  31.9k|    SHA_RND2(B, C, D, E, A, 7);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  379|  31.9k|    SHA_MIX(8, 5, 0, 10);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  380|  31.9k|    SHA_RND2(A, B, C, D, E, 8);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  381|  31.9k|    SHA_MIX(9, 6, 1, 11);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  382|  31.9k|    SHA_RND2(E, A, B, C, D, 9);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  383|  31.9k|    SHA_MIX(10, 7, 2, 12);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  384|  31.9k|    SHA_RND2(D, E, A, B, C, 10);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  385|  31.9k|    SHA_MIX(11, 8, 3, 13);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  386|  31.9k|    SHA_RND2(C, D, E, A, B, 11);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  387|  31.9k|    SHA_MIX(12, 9, 4, 14);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  388|  31.9k|    SHA_RND2(B, C, D, E, A, 12);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  389|  31.9k|    SHA_MIX(13, 10, 5, 15);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  390|  31.9k|    SHA_RND2(A, B, C, D, E, 13);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  391|  31.9k|    SHA_MIX(14, 11, 6, 0);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  392|  31.9k|    SHA_RND2(E, A, B, C, D, 14);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  393|  31.9k|    SHA_MIX(15, 12, 7, 1);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  394|  31.9k|    SHA_RND2(D, E, A, B, C, 15);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  395|       |
  396|  31.9k|    SHA_MIX(0, 13, 8, 2);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  397|  31.9k|    SHA_RND2(C, D, E, A, B, 0);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  398|  31.9k|    SHA_MIX(1, 14, 9, 3);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  399|  31.9k|    SHA_RND2(B, C, D, E, A, 1);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  400|  31.9k|    SHA_MIX(2, 15, 10, 4);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  401|  31.9k|    SHA_RND2(A, B, C, D, E, 2);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  402|  31.9k|    SHA_MIX(3, 0, 11, 5);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  403|  31.9k|    SHA_RND2(E, A, B, C, D, 3);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  404|  31.9k|    SHA_MIX(4, 1, 12, 6);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  405|  31.9k|    SHA_RND2(D, E, A, B, C, 4);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  406|  31.9k|    SHA_MIX(5, 2, 13, 7);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  407|  31.9k|    SHA_RND2(C, D, E, A, B, 5);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  408|  31.9k|    SHA_MIX(6, 3, 14, 8);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  409|  31.9k|    SHA_RND2(B, C, D, E, A, 6);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  410|  31.9k|    SHA_MIX(7, 4, 15, 9);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  411|  31.9k|    SHA_RND2(A, B, C, D, E, 7);
  ------------------
  |  |  312|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |   26|  31.9k|#define SHA_F2(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F2(c, d, e) + a + XW(n) + K1; \
  |  |  ------------------
  |  |  |  |  304|  31.9k|#define K1 0x6ed9eba1L
  |  |  ------------------
  |  |  313|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  412|       |
  413|  31.9k|    SHA_MIX(8, 5, 0, 10);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  414|  31.9k|    SHA_RND3(E, A, B, C, D, 8);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  415|  31.9k|    SHA_MIX(9, 6, 1, 11);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  416|  31.9k|    SHA_RND3(D, E, A, B, C, 9);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  417|  31.9k|    SHA_MIX(10, 7, 2, 12);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  418|  31.9k|    SHA_RND3(C, D, E, A, B, 10);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  419|  31.9k|    SHA_MIX(11, 8, 3, 13);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  420|  31.9k|    SHA_RND3(B, C, D, E, A, 11);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  421|  31.9k|    SHA_MIX(12, 9, 4, 14);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  422|  31.9k|    SHA_RND3(A, B, C, D, E, 12);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  423|  31.9k|    SHA_MIX(13, 10, 5, 15);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  424|  31.9k|    SHA_RND3(E, A, B, C, D, 13);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  425|  31.9k|    SHA_MIX(14, 11, 6, 0);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  426|  31.9k|    SHA_RND3(D, E, A, B, C, 14);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  427|  31.9k|    SHA_MIX(15, 12, 7, 1);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  428|  31.9k|    SHA_RND3(C, D, E, A, B, 15);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  429|       |
  430|  31.9k|    SHA_MIX(0, 13, 8, 2);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  431|  31.9k|    SHA_RND3(B, C, D, E, A, 0);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  432|  31.9k|    SHA_MIX(1, 14, 9, 3);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|  31.9k|    SHA_RND3(A, B, C, D, E, 1);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  434|  31.9k|    SHA_MIX(2, 15, 10, 4);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  435|  31.9k|    SHA_RND3(E, A, B, C, D, 2);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  436|  31.9k|    SHA_MIX(3, 0, 11, 5);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  437|  31.9k|    SHA_RND3(D, E, A, B, C, 3);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  438|  31.9k|    SHA_MIX(4, 1, 12, 6);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  439|  31.9k|    SHA_RND3(C, D, E, A, B, 4);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  440|  31.9k|    SHA_MIX(5, 2, 13, 7);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  441|  31.9k|    SHA_RND3(B, C, D, E, A, 5);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  442|  31.9k|    SHA_MIX(6, 3, 14, 8);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  443|  31.9k|    SHA_RND3(A, B, C, D, E, 6);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  444|  31.9k|    SHA_MIX(7, 4, 15, 9);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  445|  31.9k|    SHA_RND3(E, A, B, C, D, 7);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  446|  31.9k|    SHA_MIX(8, 5, 0, 10);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  447|  31.9k|    SHA_RND3(D, E, A, B, C, 8);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  448|  31.9k|    SHA_MIX(9, 6, 1, 11);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  449|  31.9k|    SHA_RND3(C, D, E, A, B, 9);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  450|  31.9k|    SHA_MIX(10, 7, 2, 12);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  451|  31.9k|    SHA_RND3(B, C, D, E, A, 10);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  452|  31.9k|    SHA_MIX(11, 8, 3, 13);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  453|  31.9k|    SHA_RND3(A, B, C, D, E, 11);
  ------------------
  |  |  315|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |   27|  31.9k|#define SHA_F3(X, Y, Z) (((X) & (Y)) | ((Z) & ((X) | (Y))))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F3(c, d, e) + a + XW(n) + K2; \
  |  |  ------------------
  |  |  |  |  305|  31.9k|#define K2 0x8f1bbcdcL
  |  |  ------------------
  |  |  316|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  454|       |
  455|  31.9k|    SHA_MIX(12, 9, 4, 14);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  456|  31.9k|    SHA_RND4(E, A, B, C, D, 12);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  457|  31.9k|    SHA_MIX(13, 10, 5, 15);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  458|  31.9k|    SHA_RND4(D, E, A, B, C, 13);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  459|  31.9k|    SHA_MIX(14, 11, 6, 0);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  460|  31.9k|    SHA_RND4(C, D, E, A, B, 14);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  461|  31.9k|    SHA_MIX(15, 12, 7, 1);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  462|  31.9k|    SHA_RND4(B, C, D, E, A, 15);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  463|       |
  464|  31.9k|    SHA_MIX(0, 13, 8, 2);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  465|  31.9k|    SHA_RND4(A, B, C, D, E, 0);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  466|  31.9k|    SHA_MIX(1, 14, 9, 3);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  467|  31.9k|    SHA_RND4(E, A, B, C, D, 1);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  468|  31.9k|    SHA_MIX(2, 15, 10, 4);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  469|  31.9k|    SHA_RND4(D, E, A, B, C, 2);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  470|  31.9k|    SHA_MIX(3, 0, 11, 5);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  471|  31.9k|    SHA_RND4(C, D, E, A, B, 3);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  472|  31.9k|    SHA_MIX(4, 1, 12, 6);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  473|  31.9k|    SHA_RND4(B, C, D, E, A, 4);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  474|  31.9k|    SHA_MIX(5, 2, 13, 7);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  475|  31.9k|    SHA_RND4(A, B, C, D, E, 5);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  476|  31.9k|    SHA_MIX(6, 3, 14, 8);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  477|  31.9k|    SHA_RND4(E, A, B, C, D, 6);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  478|  31.9k|    SHA_MIX(7, 4, 15, 9);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  479|  31.9k|    SHA_RND4(D, E, A, B, C, 7);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  480|  31.9k|    SHA_MIX(8, 5, 0, 10);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|  31.9k|    SHA_RND4(C, D, E, A, B, 8);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  482|  31.9k|    SHA_MIX(9, 6, 1, 11);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|  31.9k|    SHA_RND4(B, C, D, E, A, 9);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  484|  31.9k|    SHA_MIX(10, 7, 2, 12);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  485|  31.9k|    SHA_RND4(A, B, C, D, E, 10);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  486|  31.9k|    SHA_MIX(11, 8, 3, 13);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  487|  31.9k|    SHA_RND4(E, A, B, C, D, 11);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  488|  31.9k|    SHA_MIX(12, 9, 4, 14);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  489|  31.9k|    SHA_RND4(D, E, A, B, C, 12);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  490|  31.9k|    SHA_MIX(13, 10, 5, 15);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  491|  31.9k|    SHA_RND4(C, D, E, A, B, 13);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  492|  31.9k|    SHA_MIX(14, 11, 6, 0);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  493|  31.9k|    SHA_RND4(B, C, D, E, A, 14);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  494|  31.9k|    SHA_MIX(15, 12, 7, 1);
  ------------------
  |  |   30|  31.9k|#define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |               #define SHA_MIX(n, a, b, c) XW(n) = SHA_ROTL(XW(a) ^ XW(b) ^ XW(c) ^ XW(n), 1)
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  495|  31.9k|    SHA_RND4(A, B, C, D, E, 15);
  ------------------
  |  |  318|  31.9k|    a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |   28|  31.9k|#define SHA_F4(X, Y, Z) ((X) ^ (Y) ^ (Z))
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  295|  31.9k|#define XW(n) X[n - W2X]
  |  |  |  |  ------------------
  |  |  |  |  |  |  116|  31.9k|#define W2X 6  /* X[0] is W[6],  and W[0] is X[-6]  */
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                   a = SHA_ROTL(b, 5) + SHA_F4(c, d, e) + a + XW(n) + K3; \
  |  |  ------------------
  |  |  |  |  306|  31.9k|#define K3 0xca62c1d6L
  |  |  ------------------
  |  |  319|  31.9k|    c = SHA_ROTL(c, 30)
  ------------------
  496|       |
  497|  31.9k|    XH(0) += A;
  ------------------
  |  |  294|  31.9k|#define XH(n) X[n - H2X]
  |  |  ------------------
  |  |  |  |  115|  31.9k|#define H2X 11 /* X[0] is H[11], and H[0] is X[-11] */
  |  |  ------------------
  ------------------
  498|  31.9k|    XH(1) += B;
  ------------------
  |  |  294|  31.9k|#define XH(n) X[n - H2X]
  |  |  ------------------
  |  |  |  |  115|  31.9k|#define H2X 11 /* X[0] is H[11], and H[0] is X[-11] */
  |  |  ------------------
  ------------------
  499|  31.9k|    XH(2) += C;
  ------------------
  |  |  294|  31.9k|#define XH(n) X[n - H2X]
  |  |  ------------------
  |  |  |  |  115|  31.9k|#define H2X 11 /* X[0] is H[11], and H[0] is X[-11] */
  |  |  ------------------
  ------------------
  500|  31.9k|    XH(3) += D;
  ------------------
  |  |  294|  31.9k|#define XH(n) X[n - H2X]
  |  |  ------------------
  |  |  |  |  115|  31.9k|#define H2X 11 /* X[0] is H[11], and H[0] is X[-11] */
  |  |  ------------------
  ------------------
  501|  31.9k|    XH(4) += E;
  ------------------
  |  |  294|  31.9k|#define XH(n) X[n - H2X]
  |  |  ------------------
  |  |  |  |  115|  31.9k|#define H2X 11 /* X[0] is H[11], and H[0] is X[-11] */
  |  |  ------------------
  ------------------
  502|  31.9k|}
sha_fast.c:SHA1_Compress_Generic:
  506|  5.64k|{
  507|  5.64k|    shaCompress(&ctx->H[H2X], ctx->u.w);
  ------------------
  |  |  115|  5.64k|#define H2X 11 /* X[0] is H[11], and H[0] is X[-11] */
  ------------------
  508|  5.64k|}

sha_fast.c:SHA_ROTL:
   76|  7.15M|{
   77|  7.15M|    PRUint32 t = (PRUint32)x;
   78|  7.15M|    return ((t << n) | (t >> (32 - n)));
   79|  7.15M|}
sha_fast.c:swap4b:
   92|   550k|{
   93|   550k|    __asm__("bswap %0"
   94|   550k|            : "+r"(value));
   95|   550k|    return (value);
   96|   550k|}

Hacl_P256_ecdsa_verif_without_hash:
 1643|    126|{
 1644|    126|    uint64_t m_q[4U] = { 0U };
 1645|    126|    uint8_t mHash[32U] = { 0U };
 1646|    126|    memcpy(mHash, msg, (uint32_t)32U * sizeof(uint8_t));
 1647|    126|    KRML_HOST_IGNORE(msg_len);
  ------------------
  |  |   56|    126|#define KRML_HOST_IGNORE(x) (void)(x)
  ------------------
 1648|    126|    uint8_t *mHash32 = mHash;
 1649|    126|    bn_from_bytes_be4(m_q, mHash32);
 1650|    126|    qmod_short(m_q, m_q);
 1651|    126|    bool res = ecdsa_verify_msg_as_qelem(m_q, public_key, signature_r, signature_s);
 1652|    126|    return res;
 1653|    126|}
Hacl_P256_validate_public_key:
 1675|    166|{
 1676|    166|    uint64_t point_jac[12U] = { 0U };
 1677|    166|    bool res = load_point_vartime(point_jac, public_key);
 1678|    166|    return res;
 1679|    166|}
Hacl_P256.c:bn_from_bytes_be4:
  316|    962|{
  317|    962|    KRML_MAYBE_FOR4(i,
  ------------------
  |  |  330|    962|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|    962|    do {                               \
  |  |  |  |  289|    962|        uint32_t i = z;                \
  |  |  |  |  290|    962|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    962|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  318|    962|                    (uint32_t)0U,
  319|    962|                    (uint32_t)4U,
  320|    962|                    (uint32_t)1U,
  321|    962|                    uint64_t *os = res;
  322|    962|                    uint64_t u = load64_be(b + ((uint32_t)4U - i - (uint32_t)1U) * (uint32_t)8U);
  323|    962|                    uint64_t x = u;
  324|    962|                    os[i] = x;);
  325|    962|}
Hacl_P256.c:bn_is_lt_order_and_gt_zero_mask4:
 1170|    252|{
 1171|    252|    uint64_t is_lt_order = bn_is_lt_order_mask4(f);
 1172|    252|    uint64_t is_eq_zero = bn_is_zero_mask4(f);
 1173|    252|    return is_lt_order & ~is_eq_zero;
 1174|    252|}
Hacl_P256.c:bn_is_lt_order_mask4:
 1161|    252|{
 1162|    252|    uint64_t tmp[4U] = { 0U };
 1163|    252|    make_order(tmp);
 1164|    252|    uint64_t c = bn_sub4(tmp, f, tmp);
 1165|    252|    return (uint64_t)0U - c;
 1166|    252|}
Hacl_P256.c:make_order:
  345|  36.6k|{
  346|  36.6k|    n[0U] = (uint64_t)0xf3b9cac2fc632551U;
  347|  36.6k|    n[1U] = (uint64_t)0xbce6faada7179e84U;
  348|  36.6k|    n[2U] = (uint64_t)0xffffffffffffffffU;
  349|  36.6k|    n[3U] = (uint64_t)0xffffffff00000000U;
  350|  36.6k|}
Hacl_P256.c:bn_sub4:
  146|  1.08k|{
  147|  1.08k|    uint64_t c = (uint64_t)0U;
  148|  1.08k|    {
  149|  1.08k|        uint64_t t1 = x[(uint32_t)4U * (uint32_t)0U];
  150|  1.08k|        uint64_t t20 = y[(uint32_t)4U * (uint32_t)0U];
  151|  1.08k|        uint64_t *res_i0 = res + (uint32_t)4U * (uint32_t)0U;
  152|  1.08k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t1, t20, res_i0);
  ------------------
  |  |   89|  1.08k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  153|  1.08k|        uint64_t t10 = x[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
  154|  1.08k|        uint64_t t21 = y[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
  155|  1.08k|        uint64_t *res_i1 = res + (uint32_t)4U * (uint32_t)0U + (uint32_t)1U;
  156|  1.08k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t10, t21, res_i1);
  ------------------
  |  |   89|  1.08k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  157|  1.08k|        uint64_t t11 = x[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
  158|  1.08k|        uint64_t t22 = y[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
  159|  1.08k|        uint64_t *res_i2 = res + (uint32_t)4U * (uint32_t)0U + (uint32_t)2U;
  160|  1.08k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t11, t22, res_i2);
  ------------------
  |  |   89|  1.08k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  161|  1.08k|        uint64_t t12 = x[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
  162|  1.08k|        uint64_t t2 = y[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
  163|  1.08k|        uint64_t *res_i = res + (uint32_t)4U * (uint32_t)0U + (uint32_t)3U;
  164|  1.08k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t12, t2, res_i);
  ------------------
  |  |   89|  1.08k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  165|  1.08k|    }
  166|  1.08k|    uint64_t c0 = c;
  167|  1.08k|    return c0;
  168|  1.08k|}
Hacl_P256.c:bn_is_zero_mask4:
   34|    374|{
   35|    374|    uint64_t bn_zero[4U] = { 0U };
   36|    374|    uint64_t mask = (uint64_t)0xFFFFFFFFFFFFFFFFU;
   37|    374|    KRML_MAYBE_FOR4(i,
  ------------------
  |  |  330|    374|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|    374|    do {                               \
  |  |  |  |  289|    374|        uint32_t i = z;                \
  |  |  |  |  290|    374|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    374|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   38|    374|                    (uint32_t)0U,
   39|    374|                    (uint32_t)4U,
   40|    374|                    (uint32_t)1U,
   41|    374|                    uint64_t uu____0 = FStar_UInt64_eq_mask(f[i], bn_zero[i]);
   42|    374|                    mask = uu____0 & mask;);
   43|    374|    uint64_t mask1 = mask;
   44|    374|    uint64_t res = mask1;
   45|    374|    return res;
   46|    374|}
Hacl_P256.c:make_base_point:
  663|    122|{
  664|    122|    uint64_t *x = p;
  665|    122|    uint64_t *y = p + (uint32_t)4U;
  666|    122|    uint64_t *z = p + (uint32_t)8U;
  667|    122|    make_g_x(x);
  668|    122|    make_g_y(y);
  669|    122|    make_fone(z);
  670|    122|}
Hacl_P256.c:make_g_x:
  372|    122|{
  373|    122|    n[0U] = (uint64_t)0x79e730d418a9143cU;
  374|    122|    n[1U] = (uint64_t)0x75ba95fc5fedb601U;
  375|    122|    n[2U] = (uint64_t)0x79fb732b77622510U;
  376|    122|    n[3U] = (uint64_t)0x18905f76a53755c6U;
  377|    122|}
Hacl_P256.c:make_g_y:
  381|    122|{
  382|    122|    n[0U] = (uint64_t)0xddf25357ce95560aU;
  383|    122|    n[1U] = (uint64_t)0x8b4ab8e4ba19e45cU;
  384|    122|    n[2U] = (uint64_t)0xd2e88688dd21f325U;
  385|    122|    n[3U] = (uint64_t)0x8571ff1825885d85U;
  386|    122|}
Hacl_P256.c:make_fone:
  408|    498|{
  409|    498|    n[0U] = (uint64_t)0x1U;
  410|    498|    n[1U] = (uint64_t)0xffffffff00000000U;
  411|    498|    n[2U] = (uint64_t)0xffffffffffffffffU;
  412|    498|    n[3U] = (uint64_t)0xfffffffeU;
  413|    498|}
Hacl_P256.c:make_point_at_inf:
  674|    122|{
  675|    122|    uint64_t *x = p;
  676|    122|    uint64_t *y = p + (uint32_t)4U;
  677|    122|    uint64_t *z = p + (uint32_t)8U;
  678|    122|    make_fzero(x);
  679|    122|    make_fone(y);
  680|    122|    make_fzero(z);
  681|    122|}
Hacl_P256.c:make_fzero:
  399|    244|{
  400|    244|    n[0U] = (uint64_t)0U;
  401|    244|    n[1U] = (uint64_t)0U;
  402|    244|    n[2U] = (uint64_t)0U;
  403|    244|    n[3U] = (uint64_t)0U;
  404|    244|}
Hacl_P256.c:point_double:
  845|  32.9k|{
  846|  32.9k|    uint64_t tmp[20U] = { 0U };
  847|  32.9k|    uint64_t *x = p;
  848|  32.9k|    uint64_t *z = p + (uint32_t)8U;
  849|  32.9k|    uint64_t *x3 = res;
  850|  32.9k|    uint64_t *y3 = res + (uint32_t)4U;
  851|  32.9k|    uint64_t *z3 = res + (uint32_t)8U;
  852|  32.9k|    uint64_t *t0 = tmp;
  853|  32.9k|    uint64_t *t1 = tmp + (uint32_t)4U;
  854|  32.9k|    uint64_t *t2 = tmp + (uint32_t)8U;
  855|  32.9k|    uint64_t *t3 = tmp + (uint32_t)12U;
  856|  32.9k|    uint64_t *t4 = tmp + (uint32_t)16U;
  857|  32.9k|    uint64_t *x1 = p;
  858|  32.9k|    uint64_t *y = p + (uint32_t)4U;
  859|  32.9k|    uint64_t *z1 = p + (uint32_t)8U;
  860|  32.9k|    fsqr0(t0, x1);
  861|  32.9k|    fsqr0(t1, y);
  862|  32.9k|    fsqr0(t2, z1);
  863|  32.9k|    fmul0(t3, x1, y);
  864|  32.9k|    fadd0(t3, t3, t3);
  865|  32.9k|    fmul0(t4, y, z1);
  866|  32.9k|    fmul0(z3, x, z);
  867|  32.9k|    fadd0(z3, z3, z3);
  868|  32.9k|    fmul_by_b_coeff(y3, t2);
  869|  32.9k|    fsub0(y3, y3, z3);
  870|  32.9k|    fadd0(x3, y3, y3);
  871|  32.9k|    fadd0(y3, x3, y3);
  872|  32.9k|    fsub0(x3, t1, y3);
  873|  32.9k|    fadd0(y3, t1, y3);
  874|  32.9k|    fmul0(y3, x3, y3);
  875|  32.9k|    fmul0(x3, x3, t3);
  876|  32.9k|    fadd0(t3, t2, t2);
  877|  32.9k|    fadd0(t2, t2, t3);
  878|  32.9k|    fmul_by_b_coeff(z3, z3);
  879|  32.9k|    fsub0(z3, z3, t2);
  880|  32.9k|    fsub0(z3, z3, t0);
  881|  32.9k|    fadd0(t3, z3, z3);
  882|  32.9k|    fadd0(z3, z3, t3);
  883|  32.9k|    fadd0(t3, t0, t0);
  884|  32.9k|    fadd0(t0, t3, t0);
  885|  32.9k|    fsub0(t0, t0, t2);
  886|  32.9k|    fmul0(t0, t0, z3);
  887|  32.9k|    fadd0(y3, y3, t0);
  888|  32.9k|    fadd0(t0, t4, t4);
  889|  32.9k|    fmul0(z3, t0, z3);
  890|  32.9k|    fsub0(x3, x3, z3);
  891|  32.9k|    fmul0(z3, t0, t1);
  892|  32.9k|    fadd0(z3, z3, z3);
  893|  32.9k|    fadd0(z3, z3, z3);
  894|  32.9k|}
Hacl_P256.c:fsqr0:
  531|   130k|{
  532|   130k|    uint64_t tmp[8U] = { 0U };
  533|   130k|    bn_sqr4(tmp, x);
  534|   130k|    mont_reduction(res, tmp);
  535|   130k|}
Hacl_P256.c:bn_sqr4:
  256|   161k|{
  257|   161k|    memset(res, 0U, (uint32_t)8U * sizeof(uint64_t));
  258|   161k|    KRML_MAYBE_FOR4(
  ------------------
  |  |  330|   161k|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|   161k|    do {                               \
  |  |  |  |  289|   161k|        uint32_t i = z;                \
  |  |  |  |  290|   161k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   161k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|   161k|        i0,
  260|   161k|        (uint32_t)0U,
  261|   161k|        (uint32_t)4U,
  262|   161k|        (uint32_t)1U,
  263|   161k|        uint64_t *ab = x;
  264|   161k|        uint64_t a_j = x[i0];
  265|   161k|        uint64_t *res_j = res + i0;
  266|   161k|        uint64_t c = (uint64_t)0U;
  267|   161k|        for (uint32_t i = (uint32_t)0U; i < i0 / (uint32_t)4U; i++) {
  268|   161k|            uint64_t a_i = ab[(uint32_t)4U * i];
  269|   161k|            uint64_t *res_i0 = res_j + (uint32_t)4U * i;
  270|   161k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, a_j, c, res_i0);
  271|   161k|            uint64_t a_i0 = ab[(uint32_t)4U * i + (uint32_t)1U];
  272|   161k|            uint64_t *res_i1 = res_j + (uint32_t)4U * i + (uint32_t)1U;
  273|   161k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i0, a_j, c, res_i1);
  274|   161k|            uint64_t a_i1 = ab[(uint32_t)4U * i + (uint32_t)2U];
  275|   161k|            uint64_t *res_i2 = res_j + (uint32_t)4U * i + (uint32_t)2U;
  276|   161k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i1, a_j, c, res_i2);
  277|   161k|            uint64_t a_i2 = ab[(uint32_t)4U * i + (uint32_t)3U];
  278|   161k|            uint64_t *res_i = res_j + (uint32_t)4U * i + (uint32_t)3U;
  279|   161k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i2, a_j, c, res_i);
  280|   161k|        } for (uint32_t i = i0 / (uint32_t)4U * (uint32_t)4U; i < i0; i++) {
  281|   161k|            uint64_t a_i = ab[i];
  282|   161k|            uint64_t *res_i = res_j + i;
  283|   161k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, a_j, c, res_i);
  284|   161k|        } uint64_t r = c;
  285|   161k|        res[i0 + i0] = r;);
  286|   161k|    uint64_t c0 = Hacl_Bignum_Addition_bn_add_eq_len_u64((uint32_t)8U, res, res, res);
  287|   161k|    KRML_HOST_IGNORE(c0);
  ------------------
  |  |   56|   161k|#define KRML_HOST_IGNORE(x) (void)(x)
  ------------------
  288|   161k|    uint64_t tmp[8U] = { 0U };
  289|   161k|    KRML_MAYBE_FOR4(i,
  ------------------
  |  |  330|   161k|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|   161k|    do {                               \
  |  |  |  |  289|   161k|        uint32_t i = z;                \
  |  |  |  |  290|   161k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   161k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  290|   161k|                    (uint32_t)0U,
  291|   161k|                    (uint32_t)4U,
  292|   161k|                    (uint32_t)1U,
  293|   161k|                    FStar_UInt128_uint128 res1 = FStar_UInt128_mul_wide(x[i], x[i]);
  294|   161k|                    uint64_t hi = FStar_UInt128_uint128_to_uint64(FStar_UInt128_shift_right(res1, (uint32_t)64U));
  295|   161k|                    uint64_t lo = FStar_UInt128_uint128_to_uint64(res1);
  296|   161k|                    tmp[(uint32_t)2U * i] = lo;
  297|   161k|                    tmp[(uint32_t)2U * i + (uint32_t)1U] = hi;);
  298|   161k|    uint64_t c1 = Hacl_Bignum_Addition_bn_add_eq_len_u64((uint32_t)8U, res, tmp, res);
  299|   161k|    KRML_HOST_IGNORE(c1);
  ------------------
  |  |   56|   161k|#define KRML_HOST_IGNORE(x) (void)(x)
  ------------------
  300|   161k|}
Hacl_P256.c:mont_reduction:
  458|   664k|{
  459|   664k|    uint64_t n[4U] = { 0U };
  460|   664k|    make_prime(n);
  461|   664k|    uint64_t c0 = (uint64_t)0U;
  462|   664k|    KRML_MAYBE_FOR4(
  ------------------
  |  |  330|   664k|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|   664k|    do {                               \
  |  |  |  |  289|   664k|        uint32_t i = z;                \
  |  |  |  |  290|   664k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   664k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  463|   664k|        i0,
  464|   664k|        (uint32_t)0U,
  465|   664k|        (uint32_t)4U,
  466|   664k|        (uint32_t)1U,
  467|   664k|        uint64_t qj = (uint64_t)1U * x[i0];
  468|   664k|        uint64_t *res_j0 = x + i0;
  469|   664k|        uint64_t c = (uint64_t)0U;
  470|   664k|        {
  471|   664k|            uint64_t a_i = n[(uint32_t)4U * (uint32_t)0U];
  472|   664k|            uint64_t *res_i0 = res_j0 + (uint32_t)4U * (uint32_t)0U;
  473|   664k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, qj, c, res_i0);
  474|   664k|            uint64_t a_i0 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
  475|   664k|            uint64_t *res_i1 = res_j0 + (uint32_t)4U * (uint32_t)0U + (uint32_t)1U;
  476|   664k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i0, qj, c, res_i1);
  477|   664k|            uint64_t a_i1 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
  478|   664k|            uint64_t *res_i2 = res_j0 + (uint32_t)4U * (uint32_t)0U + (uint32_t)2U;
  479|   664k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i1, qj, c, res_i2);
  480|   664k|            uint64_t a_i2 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
  481|   664k|            uint64_t *res_i = res_j0 + (uint32_t)4U * (uint32_t)0U + (uint32_t)3U;
  482|   664k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i2, qj, c, res_i);
  483|   664k|        } uint64_t r = c;
  484|   664k|        uint64_t c1 = r;
  485|   664k|        uint64_t *resb = x + (uint32_t)4U + i0;
  486|   664k|        uint64_t res_j = x[(uint32_t)4U + i0];
  487|   664k|        c0 = Lib_IntTypes_Intrinsics_add_carry_u64(c0, c1, res_j, resb););
  488|   664k|    memcpy(res, x + (uint32_t)4U, (uint32_t)4U * sizeof(uint64_t));
  489|   664k|    uint64_t c00 = c0;
  490|   664k|    uint64_t tmp[4U] = { 0U };
  491|   664k|    uint64_t c = (uint64_t)0U;
  492|   664k|    {
  493|   664k|        uint64_t t1 = res[(uint32_t)4U * (uint32_t)0U];
  494|   664k|        uint64_t t20 = n[(uint32_t)4U * (uint32_t)0U];
  495|   664k|        uint64_t *res_i0 = tmp + (uint32_t)4U * (uint32_t)0U;
  496|   664k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t1, t20, res_i0);
  ------------------
  |  |   89|   664k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  497|   664k|        uint64_t t10 = res[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
  498|   664k|        uint64_t t21 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
  499|   664k|        uint64_t *res_i1 = tmp + (uint32_t)4U * (uint32_t)0U + (uint32_t)1U;
  500|   664k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t10, t21, res_i1);
  ------------------
  |  |   89|   664k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  501|   664k|        uint64_t t11 = res[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
  502|   664k|        uint64_t t22 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
  503|   664k|        uint64_t *res_i2 = tmp + (uint32_t)4U * (uint32_t)0U + (uint32_t)2U;
  504|   664k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t11, t22, res_i2);
  ------------------
  |  |   89|   664k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  505|   664k|        uint64_t t12 = res[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
  506|   664k|        uint64_t t2 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
  507|   664k|        uint64_t *res_i = tmp + (uint32_t)4U * (uint32_t)0U + (uint32_t)3U;
  508|   664k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t12, t2, res_i);
  ------------------
  |  |   89|   664k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  509|   664k|    }
  510|   664k|    uint64_t c1 = c;
  511|   664k|    uint64_t c2 = c00 - c1;
  512|   664k|    KRML_MAYBE_FOR4(i,
  ------------------
  |  |  330|   664k|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|   664k|    do {                               \
  |  |  |  |  289|   664k|        uint32_t i = z;                \
  |  |  |  |  290|   664k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   664k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  513|   664k|                    (uint32_t)0U,
  514|   664k|                    (uint32_t)4U,
  515|   664k|                    (uint32_t)1U,
  516|   664k|                    uint64_t *os = res;
  517|   664k|                    uint64_t x1 = (c2 & res[i]) | (~c2 & tmp[i]);
  518|   664k|                    os[i] = x1;);
  519|   664k|}
Hacl_P256.c:make_prime:
  336|  1.77M|{
  337|  1.77M|    n[0U] = (uint64_t)0xffffffffffffffffU;
  338|  1.77M|    n[1U] = (uint64_t)0xffffffffU;
  339|  1.77M|    n[2U] = (uint64_t)0x0U;
  340|  1.77M|    n[3U] = (uint64_t)0xffffffff00000001U;
  341|  1.77M|}
Hacl_P256.c:fmul0:
  523|   534k|{
  524|   534k|    uint64_t tmp[8U] = { 0U };
  525|   534k|    bn_mul4(tmp, x, y);
  526|   534k|    mont_reduction(res, tmp);
  527|   534k|}
Hacl_P256.c:bn_mul4:
  227|   539k|{
  228|   539k|    memset(res, 0U, (uint32_t)8U * sizeof(uint64_t));
  229|   539k|    KRML_MAYBE_FOR4(
  ------------------
  |  |  330|   539k|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|   539k|    do {                               \
  |  |  |  |  289|   539k|        uint32_t i = z;                \
  |  |  |  |  290|   539k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   539k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  230|   539k|        i0,
  231|   539k|        (uint32_t)0U,
  232|   539k|        (uint32_t)4U,
  233|   539k|        (uint32_t)1U,
  234|   539k|        uint64_t bj = y[i0];
  235|   539k|        uint64_t *res_j = res + i0;
  236|   539k|        uint64_t c = (uint64_t)0U;
  237|   539k|        {
  238|   539k|            uint64_t a_i = x[(uint32_t)4U * (uint32_t)0U];
  239|   539k|            uint64_t *res_i0 = res_j + (uint32_t)4U * (uint32_t)0U;
  240|   539k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, bj, c, res_i0);
  241|   539k|            uint64_t a_i0 = x[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
  242|   539k|            uint64_t *res_i1 = res_j + (uint32_t)4U * (uint32_t)0U + (uint32_t)1U;
  243|   539k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i0, bj, c, res_i1);
  244|   539k|            uint64_t a_i1 = x[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
  245|   539k|            uint64_t *res_i2 = res_j + (uint32_t)4U * (uint32_t)0U + (uint32_t)2U;
  246|   539k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i1, bj, c, res_i2);
  247|   539k|            uint64_t a_i2 = x[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
  248|   539k|            uint64_t *res_i = res_j + (uint32_t)4U * (uint32_t)0U + (uint32_t)3U;
  249|   539k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i2, bj, c, res_i);
  250|   539k|        } uint64_t r = c;
  251|   539k|        res[(uint32_t)4U + i0] = r;);
  252|   539k|}
Hacl_P256.c:fadd0:
  433|   782k|{
  434|   782k|    uint64_t n[4U] = { 0U };
  435|   782k|    make_prime(n);
  436|   782k|    bn_add_mod4(res, n, x, y);
  437|   782k|}
Hacl_P256.c:bn_add_mod4:
   92|   782k|{
   93|   782k|    uint64_t c0 = (uint64_t)0U;
   94|   782k|    {
   95|   782k|        uint64_t t1 = x[(uint32_t)4U * (uint32_t)0U];
   96|   782k|        uint64_t t20 = y[(uint32_t)4U * (uint32_t)0U];
   97|   782k|        uint64_t *res_i0 = res + (uint32_t)4U * (uint32_t)0U;
   98|   782k|        c0 = Lib_IntTypes_Intrinsics_add_carry_u64(c0, t1, t20, res_i0);
  ------------------
  |  |   66|   782k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
   99|   782k|        uint64_t t10 = x[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
  100|   782k|        uint64_t t21 = y[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
  101|   782k|        uint64_t *res_i1 = res + (uint32_t)4U * (uint32_t)0U + (uint32_t)1U;
  102|   782k|        c0 = Lib_IntTypes_Intrinsics_add_carry_u64(c0, t10, t21, res_i1);
  ------------------
  |  |   66|   782k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  103|   782k|        uint64_t t11 = x[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
  104|   782k|        uint64_t t22 = y[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
  105|   782k|        uint64_t *res_i2 = res + (uint32_t)4U * (uint32_t)0U + (uint32_t)2U;
  106|   782k|        c0 = Lib_IntTypes_Intrinsics_add_carry_u64(c0, t11, t22, res_i2);
  ------------------
  |  |   66|   782k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  107|   782k|        uint64_t t12 = x[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
  108|   782k|        uint64_t t2 = y[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
  109|   782k|        uint64_t *res_i = res + (uint32_t)4U * (uint32_t)0U + (uint32_t)3U;
  110|   782k|        c0 = Lib_IntTypes_Intrinsics_add_carry_u64(c0, t12, t2, res_i);
  ------------------
  |  |   66|   782k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  111|   782k|    }
  112|   782k|    uint64_t c00 = c0;
  113|   782k|    uint64_t tmp[4U] = { 0U };
  114|   782k|    uint64_t c = (uint64_t)0U;
  115|   782k|    {
  116|   782k|        uint64_t t1 = res[(uint32_t)4U * (uint32_t)0U];
  117|   782k|        uint64_t t20 = n[(uint32_t)4U * (uint32_t)0U];
  118|   782k|        uint64_t *res_i0 = tmp + (uint32_t)4U * (uint32_t)0U;
  119|   782k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t1, t20, res_i0);
  ------------------
  |  |   89|   782k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  120|   782k|        uint64_t t10 = res[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
  121|   782k|        uint64_t t21 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
  122|   782k|        uint64_t *res_i1 = tmp + (uint32_t)4U * (uint32_t)0U + (uint32_t)1U;
  123|   782k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t10, t21, res_i1);
  ------------------
  |  |   89|   782k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  124|   782k|        uint64_t t11 = res[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
  125|   782k|        uint64_t t22 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
  126|   782k|        uint64_t *res_i2 = tmp + (uint32_t)4U * (uint32_t)0U + (uint32_t)2U;
  127|   782k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t11, t22, res_i2);
  ------------------
  |  |   89|   782k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  128|   782k|        uint64_t t12 = res[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
  129|   782k|        uint64_t t2 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
  130|   782k|        uint64_t *res_i = tmp + (uint32_t)4U * (uint32_t)0U + (uint32_t)3U;
  131|   782k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t12, t2, res_i);
  ------------------
  |  |   89|   782k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  132|   782k|    }
  133|   782k|    uint64_t c1 = c;
  134|   782k|    uint64_t c2 = c00 - c1;
  135|   782k|    KRML_MAYBE_FOR4(i,
  ------------------
  |  |  330|   782k|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|   782k|    do {                               \
  |  |  |  |  289|   782k|        uint32_t i = z;                \
  |  |  |  |  290|   782k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   782k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  136|   782k|                    (uint32_t)0U,
  137|   782k|                    (uint32_t)4U,
  138|   782k|                    (uint32_t)1U,
  139|   782k|                    uint64_t *os = res;
  140|   782k|                    uint64_t x1 = (c2 & res[i]) | (~c2 & tmp[i]);
  141|   782k|                    os[i] = x1;);
  142|   782k|}
Hacl_P256.c:fmul_by_b_coeff:
  555|  94.6k|{
  556|  94.6k|    uint64_t b_coeff[4U] = { 0U };
  557|  94.6k|    make_b_coeff(b_coeff);
  558|  94.6k|    fmul0(res, b_coeff, x);
  559|  94.6k|}
Hacl_P256.c:make_b_coeff:
  363|  94.9k|{
  364|  94.9k|    b[0U] = (uint64_t)0xd89cdf6229c4bddfU;
  365|  94.9k|    b[1U] = (uint64_t)0xacf005cd78843090U;
  366|  94.9k|    b[2U] = (uint64_t)0xe5a220abf7212ed6U;
  367|  94.9k|    b[3U] = (uint64_t)0xdc30061d04874834U;
  368|  94.9k|}
Hacl_P256.c:fsub0:
  441|   327k|{
  442|   327k|    uint64_t n[4U] = { 0U };
  443|   327k|    make_prime(n);
  444|   327k|    bn_sub_mod4(res, n, x, y);
  445|   327k|}
Hacl_P256.c:bn_sub_mod4:
  172|   327k|{
  173|   327k|    uint64_t c0 = (uint64_t)0U;
  174|   327k|    {
  175|   327k|        uint64_t t1 = x[(uint32_t)4U * (uint32_t)0U];
  176|   327k|        uint64_t t20 = y[(uint32_t)4U * (uint32_t)0U];
  177|   327k|        uint64_t *res_i0 = res + (uint32_t)4U * (uint32_t)0U;
  178|   327k|        c0 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c0, t1, t20, res_i0);
  ------------------
  |  |   89|   327k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  179|   327k|        uint64_t t10 = x[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
  180|   327k|        uint64_t t21 = y[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
  181|   327k|        uint64_t *res_i1 = res + (uint32_t)4U * (uint32_t)0U + (uint32_t)1U;
  182|   327k|        c0 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c0, t10, t21, res_i1);
  ------------------
  |  |   89|   327k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  183|   327k|        uint64_t t11 = x[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
  184|   327k|        uint64_t t22 = y[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
  185|   327k|        uint64_t *res_i2 = res + (uint32_t)4U * (uint32_t)0U + (uint32_t)2U;
  186|   327k|        c0 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c0, t11, t22, res_i2);
  ------------------
  |  |   89|   327k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  187|   327k|        uint64_t t12 = x[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
  188|   327k|        uint64_t t2 = y[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
  189|   327k|        uint64_t *res_i = res + (uint32_t)4U * (uint32_t)0U + (uint32_t)3U;
  190|   327k|        c0 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c0, t12, t2, res_i);
  ------------------
  |  |   89|   327k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  191|   327k|    }
  192|   327k|    uint64_t c00 = c0;
  193|   327k|    uint64_t tmp[4U] = { 0U };
  194|   327k|    uint64_t c = (uint64_t)0U;
  195|   327k|    {
  196|   327k|        uint64_t t1 = res[(uint32_t)4U * (uint32_t)0U];
  197|   327k|        uint64_t t20 = n[(uint32_t)4U * (uint32_t)0U];
  198|   327k|        uint64_t *res_i0 = tmp + (uint32_t)4U * (uint32_t)0U;
  199|   327k|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t1, t20, res_i0);
  ------------------
  |  |   66|   327k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  200|   327k|        uint64_t t10 = res[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
  201|   327k|        uint64_t t21 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
  202|   327k|        uint64_t *res_i1 = tmp + (uint32_t)4U * (uint32_t)0U + (uint32_t)1U;
  203|   327k|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t10, t21, res_i1);
  ------------------
  |  |   66|   327k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  204|   327k|        uint64_t t11 = res[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
  205|   327k|        uint64_t t22 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
  206|   327k|        uint64_t *res_i2 = tmp + (uint32_t)4U * (uint32_t)0U + (uint32_t)2U;
  207|   327k|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t11, t22, res_i2);
  ------------------
  |  |   66|   327k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  208|   327k|        uint64_t t12 = res[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
  209|   327k|        uint64_t t2 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
  210|   327k|        uint64_t *res_i = tmp + (uint32_t)4U * (uint32_t)0U + (uint32_t)3U;
  211|   327k|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t12, t2, res_i);
  ------------------
  |  |   66|   327k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  212|   327k|    }
  213|   327k|    uint64_t c1 = c;
  214|   327k|    KRML_HOST_IGNORE(c1);
  ------------------
  |  |   56|   327k|#define KRML_HOST_IGNORE(x) (void)(x)
  ------------------
  215|   327k|    uint64_t c2 = (uint64_t)0U - c00;
  216|   327k|    KRML_MAYBE_FOR4(i,
  ------------------
  |  |  330|   327k|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|   327k|    do {                               \
  |  |  |  |  289|   327k|        uint32_t i = z;                \
  |  |  |  |  290|   327k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   327k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  217|   327k|                    (uint32_t)0U,
  218|   327k|                    (uint32_t)4U,
  219|   327k|                    (uint32_t)1U,
  220|   327k|                    uint64_t *os = res;
  221|   327k|                    uint64_t x1 = (c2 & tmp[i]) | (~c2 & res[i]);
  222|   327k|                    os[i] = x1;);
  223|   327k|}
Hacl_P256.c:point_add:
  898|  14.3k|{
  899|  14.3k|    uint64_t tmp[36U] = { 0U };
  900|  14.3k|    uint64_t *t0 = tmp;
  901|  14.3k|    uint64_t *t1 = tmp + (uint32_t)24U;
  902|  14.3k|    uint64_t *x3 = t1;
  903|  14.3k|    uint64_t *y3 = t1 + (uint32_t)4U;
  904|  14.3k|    uint64_t *z3 = t1 + (uint32_t)8U;
  905|  14.3k|    uint64_t *t01 = t0;
  906|  14.3k|    uint64_t *t11 = t0 + (uint32_t)4U;
  907|  14.3k|    uint64_t *t2 = t0 + (uint32_t)8U;
  908|  14.3k|    uint64_t *t3 = t0 + (uint32_t)12U;
  909|  14.3k|    uint64_t *t4 = t0 + (uint32_t)16U;
  910|  14.3k|    uint64_t *t5 = t0 + (uint32_t)20U;
  911|  14.3k|    uint64_t *x1 = p;
  912|  14.3k|    uint64_t *y1 = p + (uint32_t)4U;
  913|  14.3k|    uint64_t *z10 = p + (uint32_t)8U;
  914|  14.3k|    uint64_t *x20 = q;
  915|  14.3k|    uint64_t *y20 = q + (uint32_t)4U;
  916|  14.3k|    uint64_t *z20 = q + (uint32_t)8U;
  917|  14.3k|    fmul0(t01, x1, x20);
  918|  14.3k|    fmul0(t11, y1, y20);
  919|  14.3k|    fmul0(t2, z10, z20);
  920|  14.3k|    fadd0(t3, x1, y1);
  921|  14.3k|    fadd0(t4, x20, y20);
  922|  14.3k|    fmul0(t3, t3, t4);
  923|  14.3k|    fadd0(t4, t01, t11);
  924|  14.3k|    uint64_t *y10 = p + (uint32_t)4U;
  925|  14.3k|    uint64_t *z11 = p + (uint32_t)8U;
  926|  14.3k|    uint64_t *y2 = q + (uint32_t)4U;
  927|  14.3k|    uint64_t *z21 = q + (uint32_t)8U;
  928|  14.3k|    fsub0(t3, t3, t4);
  929|  14.3k|    fadd0(t4, y10, z11);
  930|  14.3k|    fadd0(t5, y2, z21);
  931|  14.3k|    fmul0(t4, t4, t5);
  932|  14.3k|    fadd0(t5, t11, t2);
  933|  14.3k|    fsub0(t4, t4, t5);
  934|  14.3k|    uint64_t *x10 = p;
  935|  14.3k|    uint64_t *z1 = p + (uint32_t)8U;
  936|  14.3k|    uint64_t *x2 = q;
  937|  14.3k|    uint64_t *z2 = q + (uint32_t)8U;
  938|  14.3k|    fadd0(x3, x10, z1);
  939|  14.3k|    fadd0(y3, x2, z2);
  940|  14.3k|    fmul0(x3, x3, y3);
  941|  14.3k|    fadd0(y3, t01, t2);
  942|  14.3k|    fsub0(y3, x3, y3);
  943|  14.3k|    fmul_by_b_coeff(z3, t2);
  944|  14.3k|    fsub0(x3, y3, z3);
  945|  14.3k|    fadd0(z3, x3, x3);
  946|  14.3k|    fadd0(x3, x3, z3);
  947|  14.3k|    fsub0(z3, t11, x3);
  948|  14.3k|    fadd0(x3, t11, x3);
  949|  14.3k|    fmul_by_b_coeff(y3, y3);
  950|  14.3k|    fadd0(t11, t2, t2);
  951|  14.3k|    fadd0(t2, t11, t2);
  952|  14.3k|    fsub0(y3, y3, t2);
  953|  14.3k|    fsub0(y3, y3, t01);
  954|  14.3k|    fadd0(t11, y3, y3);
  955|  14.3k|    fadd0(y3, t11, y3);
  956|  14.3k|    fadd0(t11, t01, t01);
  957|  14.3k|    fadd0(t01, t11, t01);
  958|  14.3k|    fsub0(t01, t01, t2);
  959|  14.3k|    fmul0(t11, t4, y3);
  960|  14.3k|    fmul0(t2, t01, y3);
  961|  14.3k|    fmul0(y3, x3, z3);
  962|  14.3k|    fadd0(y3, y3, t2);
  963|  14.3k|    fmul0(x3, t3, x3);
  964|  14.3k|    fsub0(x3, x3, t11);
  965|  14.3k|    fmul0(z3, t4, z3);
  966|  14.3k|    fmul0(t11, t3, t01);
  967|  14.3k|    fadd0(z3, z3, t11);
  968|  14.3k|    memcpy(res, t1, (uint32_t)12U * sizeof(uint64_t));
  969|  14.3k|}
Hacl_P256.c:finv:
  570|    122|{
  571|    122|    uint64_t tmp[16U] = { 0U };
  572|    122|    uint64_t *x30 = tmp;
  573|    122|    uint64_t *x2 = tmp + (uint32_t)4U;
  574|    122|    uint64_t *tmp1 = tmp + (uint32_t)8U;
  575|    122|    uint64_t *tmp2 = tmp + (uint32_t)12U;
  576|    122|    memcpy(x2, a, (uint32_t)4U * sizeof(uint64_t));
  577|    122|    {
  578|    122|        fsqr0(x2, x2);
  579|    122|    }
  580|    122|    fmul0(x2, x2, a);
  581|    122|    memcpy(x30, x2, (uint32_t)4U * sizeof(uint64_t));
  582|    122|    {
  583|    122|        fsqr0(x30, x30);
  584|    122|    }
  585|    122|    fmul0(x30, x30, a);
  586|    122|    memcpy(tmp1, x30, (uint32_t)4U * sizeof(uint64_t));
  587|    122|    KRML_MAYBE_FOR3(i, (uint32_t)0U, (uint32_t)3U, (uint32_t)1U, fsqr0(tmp1, tmp1););
  ------------------
  |  |  324|    122|#define KRML_MAYBE_FOR3(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 3, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  588|    122|    fmul0(tmp1, tmp1, x30);
  589|    122|    memcpy(tmp2, tmp1, (uint32_t)4U * sizeof(uint64_t));
  590|    122|    KRML_MAYBE_FOR6(i, (uint32_t)0U, (uint32_t)6U, (uint32_t)1U, fsqr0(tmp2, tmp2););
  ------------------
  |  |  342|    122|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  591|    122|    fmul0(tmp2, tmp2, tmp1);
  592|    122|    memcpy(tmp1, tmp2, (uint32_t)4U * sizeof(uint64_t));
  593|    122|    KRML_MAYBE_FOR3(i, (uint32_t)0U, (uint32_t)3U, (uint32_t)1U, fsqr0(tmp1, tmp1););
  ------------------
  |  |  324|    122|#define KRML_MAYBE_FOR3(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 3, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  594|    122|    fmul0(tmp1, tmp1, x30);
  595|    122|    memcpy(x30, tmp1, (uint32_t)4U * sizeof(uint64_t));
  596|    122|    KRML_MAYBE_FOR15(i, (uint32_t)0U, (uint32_t)15U, (uint32_t)1U, fsqr0(x30, x30););
  ------------------
  |  |  396|    122|#define KRML_MAYBE_FOR15(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 15, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  597|    122|    fmul0(x30, x30, tmp1);
  598|    122|    memcpy(tmp1, x30, (uint32_t)4U * sizeof(uint64_t));
  599|    122|    KRML_MAYBE_FOR2(i, (uint32_t)0U, (uint32_t)2U, (uint32_t)1U, fsqr0(tmp1, tmp1););
  ------------------
  |  |  318|    122|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  600|    122|    fmul0(tmp1, tmp1, x2);
  601|    122|    memcpy(x2, tmp1, (uint32_t)4U * sizeof(uint64_t));
  602|  4.02k|    for (uint32_t i = (uint32_t)0U; i < (uint32_t)32U; i++) {
  ------------------
  |  Branch (602:37): [True: 3.90k, False: 122]
  ------------------
  603|  3.90k|        fsqr0(x2, x2);
  604|  3.90k|    }
  605|    122|    fmul0(x2, x2, a);
  606|  15.7k|    for (uint32_t i = (uint32_t)0U; i < (uint32_t)128U; i++) {
  ------------------
  |  Branch (606:37): [True: 15.6k, False: 122]
  ------------------
  607|  15.6k|        fsqr0(x2, x2);
  608|  15.6k|    }
  609|    122|    fmul0(x2, x2, tmp1);
  610|  4.02k|    for (uint32_t i = (uint32_t)0U; i < (uint32_t)32U; i++) {
  ------------------
  |  Branch (610:37): [True: 3.90k, False: 122]
  ------------------
  611|  3.90k|        fsqr0(x2, x2);
  612|  3.90k|    }
  613|    122|    fmul0(x2, x2, tmp1);
  614|  3.78k|    for (uint32_t i = (uint32_t)0U; i < (uint32_t)30U; i++) {
  ------------------
  |  Branch (614:37): [True: 3.66k, False: 122]
  ------------------
  615|  3.66k|        fsqr0(x2, x2);
  616|  3.66k|    }
  617|    122|    fmul0(x2, x2, x30);
  618|    122|    KRML_MAYBE_FOR2(i, (uint32_t)0U, (uint32_t)2U, (uint32_t)1U, fsqr0(x2, x2););
  ------------------
  |  |  318|    122|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  619|    122|    fmul0(tmp1, x2, a);
  620|    122|    memcpy(res, tmp1, (uint32_t)4U * sizeof(uint64_t));
  621|    122|}
Hacl_P256.c:from_mont:
  539|    122|{
  540|    122|    uint64_t tmp[8U] = { 0U };
  541|    122|    memcpy(tmp, a, (uint32_t)4U * sizeof(uint64_t));
  542|    122|    mont_reduction(res, tmp);
  543|    122|}
Hacl_P256.c:load_point_vartime:
  792|    292|{
  793|    292|    uint64_t p_aff[8U] = { 0U };
  794|    292|    bool res = aff_point_load_vartime(p_aff, b);
  795|    292|    if (res) {
  ------------------
  |  Branch (795:9): [True: 254, False: 38]
  ------------------
  796|    254|        to_proj_point(p, p_aff);
  797|    254|    }
  798|    292|    return res;
  799|    292|}
Hacl_P256.c:aff_point_load_vartime:
  771|    292|{
  772|    292|    uint8_t *p_x = b;
  773|    292|    uint8_t *p_y = b + (uint32_t)32U;
  774|    292|    uint64_t *bn_p_x = p;
  775|    292|    uint64_t *bn_p_y = p + (uint32_t)4U;
  776|    292|    bn_from_bytes_be4(bn_p_x, p_x);
  777|    292|    bn_from_bytes_be4(bn_p_y, p_y);
  778|    292|    uint64_t *px = p;
  779|    292|    uint64_t *py = p + (uint32_t)4U;
  780|    292|    uint64_t lessX = bn_is_lt_prime_mask4(px);
  781|    292|    uint64_t lessY = bn_is_lt_prime_mask4(py);
  782|    292|    uint64_t res = lessX & lessY;
  783|    292|    bool is_xy_valid = res == (uint64_t)0xFFFFFFFFFFFFFFFFU;
  784|    292|    if (!is_xy_valid) {
  ------------------
  |  Branch (784:9): [True: 5, False: 287]
  ------------------
  785|      5|        return false;
  786|      5|    }
  787|    287|    return is_on_curve_vartime(p);
  788|    292|}
Hacl_P256.c:bn_is_lt_prime_mask4:
  417|    584|{
  418|    584|    uint64_t tmp[4U] = { 0U };
  419|    584|    make_prime(tmp);
  420|    584|    uint64_t c = bn_sub4(tmp, f, tmp);
  421|    584|    return (uint64_t)0U - c;
  422|    584|}
Hacl_P256.c:is_on_curve_vartime:
  732|    287|{
  733|    287|    uint64_t rp[4U] = { 0U };
  734|    287|    uint64_t tx[4U] = { 0U };
  735|    287|    uint64_t ty[4U] = { 0U };
  736|    287|    uint64_t *px = p;
  737|    287|    uint64_t *py = p + (uint32_t)4U;
  738|    287|    to_mont(tx, px);
  739|    287|    to_mont(ty, py);
  740|    287|    uint64_t tmp[4U] = { 0U };
  741|    287|    fcube(rp, tx);
  742|    287|    make_a_coeff(tmp);
  743|    287|    fmul0(tmp, tmp, tx);
  744|    287|    fadd0(rp, tmp, rp);
  745|    287|    make_b_coeff(tmp);
  746|    287|    fadd0(rp, tmp, rp);
  747|    287|    fsqr0(ty, ty);
  748|    287|    uint64_t r = feq_mask(ty, rp);
  749|    287|    bool r0 = r == (uint64_t)0xFFFFFFFFFFFFFFFFU;
  750|    287|    return r0;
  751|    287|}
Hacl_P256.c:to_mont:
  547|  1.08k|{
  548|  1.08k|    uint64_t r2modn[4U] = { 0U };
  549|  1.08k|    make_fmont_R2(r2modn);
  550|  1.08k|    fmul0(res, a, r2modn);
  551|  1.08k|}
Hacl_P256.c:make_fmont_R2:
  390|  1.08k|{
  391|  1.08k|    n[0U] = (uint64_t)0x3U;
  392|  1.08k|    n[1U] = (uint64_t)0xfffffffbffffffffU;
  393|  1.08k|    n[2U] = (uint64_t)0xfffffffffffffffeU;
  394|  1.08k|    n[3U] = (uint64_t)0x4fffffffdU;
  395|  1.08k|}
Hacl_P256.c:fcube:
  563|    287|{
  564|    287|    fsqr0(res, x);
  565|    287|    fmul0(res, res, x);
  566|    287|}
Hacl_P256.c:make_a_coeff:
  354|    287|{
  355|    287|    a[0U] = (uint64_t)0xfffffffffffffffcU;
  356|    287|    a[1U] = (uint64_t)0x3ffffffffU;
  357|    287|    a[2U] = (uint64_t)0x0U;
  358|    287|    a[3U] = (uint64_t)0xfffffffc00000004U;
  359|    287|}
Hacl_P256.c:feq_mask:
  426|    287|{
  427|    287|    uint64_t r = bn_is_eq_mask4(a, b);
  428|    287|    return r;
  429|    287|}
Hacl_P256.c:bn_is_eq_mask4:
   57|    409|{
   58|    409|    uint64_t mask = (uint64_t)0xFFFFFFFFFFFFFFFFU;
   59|    409|    KRML_MAYBE_FOR4(i,
  ------------------
  |  |  330|    409|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|    409|    do {                               \
  |  |  |  |  289|    409|        uint32_t i = z;                \
  |  |  |  |  290|    409|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    409|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   60|    409|                    (uint32_t)0U,
   61|    409|                    (uint32_t)4U,
   62|    409|                    (uint32_t)1U,
   63|    409|                    uint64_t uu____0 = FStar_UInt64_eq_mask(a[i], b[i]);
   64|    409|                    mask = uu____0 & mask;);
   65|    409|    uint64_t mask1 = mask;
   66|    409|    return mask1;
   67|    409|}
Hacl_P256.c:to_proj_point:
  719|    254|{
  720|    254|    uint64_t *px = p;
  721|    254|    uint64_t *py = p + (uint32_t)4U;
  722|    254|    uint64_t *rx = res;
  723|    254|    uint64_t *ry = res + (uint32_t)4U;
  724|    254|    uint64_t *rz = res + (uint32_t)8U;
  725|    254|    to_mont(rx, px);
  726|    254|    to_mont(ry, py);
  727|    254|    make_fone(rz);
  728|    254|}
Hacl_P256.c:qmod_short:
 1178|    248|{
 1179|    248|    uint64_t tmp[4U] = { 0U };
 1180|    248|    make_order(tmp);
 1181|    248|    uint64_t c = bn_sub4(tmp, x, tmp);
 1182|    248|    bn_cmovznz4(res, c, tmp, x);
 1183|    248|}
Hacl_P256.c:bn_cmovznz4:
   78|    248|{
   79|    248|    uint64_t mask = ~FStar_UInt64_eq_mask(cin, (uint64_t)0U);
   80|    248|    KRML_MAYBE_FOR4(i,
  ------------------
  |  |  330|    248|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|    248|    do {                               \
  |  |  |  |  289|    248|        uint32_t i = z;                \
  |  |  |  |  290|    248|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    248|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   81|    248|                    (uint32_t)0U,
   82|    248|                    (uint32_t)4U,
   83|    248|                    (uint32_t)1U,
   84|    248|                    uint64_t *os = res;
   85|    248|                    uint64_t uu____0 = x[i];
   86|    248|                    uint64_t x1 = uu____0 ^ (mask & (y[i] ^ uu____0));
   87|    248|                    os[i] = x1;);
   88|    248|}
Hacl_P256.c:to_aff_point_x:
  708|    122|{
  709|    122|    uint64_t zinv[4U] = { 0U };
  710|    122|    uint64_t *px = p;
  711|    122|    uint64_t *pz = p + (uint32_t)8U;
  712|    122|    finv(zinv, pz);
  713|    122|    fmul0(res, px, zinv);
  714|    122|    from_mont(res, res);
  715|    122|}
Hacl_P256.c:qinv:
 1345|    122|{
 1346|    122|    uint64_t tmp[28U] = { 0U };
 1347|    122|    uint64_t *x6 = tmp;
 1348|    122|    uint64_t *x_11 = tmp + (uint32_t)4U;
 1349|    122|    uint64_t *x_101 = tmp + (uint32_t)8U;
 1350|    122|    uint64_t *x_111 = tmp + (uint32_t)12U;
 1351|    122|    uint64_t *x_1111 = tmp + (uint32_t)16U;
 1352|    122|    uint64_t *x_10101 = tmp + (uint32_t)20U;
 1353|    122|    uint64_t *x_101111 = tmp + (uint32_t)24U;
 1354|    122|    memcpy(x6, r, (uint32_t)4U * sizeof(uint64_t));
 1355|    122|    {
 1356|    122|        qsqr(x6, x6);
 1357|    122|    }
 1358|    122|    qmul(x_11, x6, r);
 1359|    122|    qmul(x_101, x6, x_11);
 1360|    122|    qmul(x_111, x6, x_101);
 1361|    122|    memcpy(x6, x_101, (uint32_t)4U * sizeof(uint64_t));
 1362|    122|    {
 1363|    122|        qsqr(x6, x6);
 1364|    122|    }
 1365|    122|    qmul(x_1111, x_101, x6);
 1366|    122|    {
 1367|    122|        qsqr(x6, x6);
 1368|    122|    }
 1369|    122|    qmul(x_10101, x6, r);
 1370|    122|    memcpy(x6, x_10101, (uint32_t)4U * sizeof(uint64_t));
 1371|    122|    {
 1372|    122|        qsqr(x6, x6);
 1373|    122|    }
 1374|    122|    qmul(x_101111, x_101, x6);
 1375|    122|    qmul(x6, x_10101, x6);
 1376|    122|    uint64_t tmp1[4U] = { 0U };
 1377|    122|    KRML_MAYBE_FOR2(i, (uint32_t)0U, (uint32_t)2U, (uint32_t)1U, qsqr(x6, x6););
  ------------------
  |  |  318|    122|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1378|    122|    qmul(x6, x6, x_11);
 1379|    122|    memcpy(tmp1, x6, (uint32_t)4U * sizeof(uint64_t));
 1380|    122|    KRML_MAYBE_FOR8(i, (uint32_t)0U, (uint32_t)8U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  354|    122|#define KRML_MAYBE_FOR8(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 8, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1381|    122|    qmul(tmp1, tmp1, x6);
 1382|    122|    memcpy(x6, tmp1, (uint32_t)4U * sizeof(uint64_t));
 1383|    122|    KRML_MAYBE_FOR16(i, (uint32_t)0U, (uint32_t)16U, (uint32_t)1U, qsqr(x6, x6););
  ------------------
  |  |  402|    122|#define KRML_MAYBE_FOR16(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 16, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1384|    122|    qmul(x6, x6, tmp1);
 1385|    122|    memcpy(tmp1, x6, (uint32_t)4U * sizeof(uint64_t));
 1386|  7.93k|    for (uint32_t i = (uint32_t)0U; i < (uint32_t)64U; i++) {
  ------------------
  |  Branch (1386:37): [True: 7.80k, False: 122]
  ------------------
 1387|  7.80k|        qsqr(tmp1, tmp1);
 1388|  7.80k|    }
 1389|    122|    qmul(tmp1, tmp1, x6);
 1390|  4.02k|    for (uint32_t i = (uint32_t)0U; i < (uint32_t)32U; i++) {
  ------------------
  |  Branch (1390:37): [True: 3.90k, False: 122]
  ------------------
 1391|  3.90k|        qsqr(tmp1, tmp1);
 1392|  3.90k|    }
 1393|    122|    qmul(tmp1, tmp1, x6);
 1394|    122|    KRML_MAYBE_FOR6(i, (uint32_t)0U, (uint32_t)6U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  342|    122|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1395|    122|    qmul(tmp1, tmp1, x_101111);
 1396|    122|    KRML_MAYBE_FOR5(i, (uint32_t)0U, (uint32_t)5U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  336|    122|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1397|    122|    qmul(tmp1, tmp1, x_111);
 1398|    122|    KRML_MAYBE_FOR4(i, (uint32_t)0U, (uint32_t)4U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  330|    122|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1399|    122|    qmul(tmp1, tmp1, x_11);
 1400|    122|    KRML_MAYBE_FOR5(i, (uint32_t)0U, (uint32_t)5U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  336|    122|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1401|    122|    qmul(tmp1, tmp1, x_1111);
 1402|    122|    KRML_MAYBE_FOR5(i, (uint32_t)0U, (uint32_t)5U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  336|    122|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1403|    122|    qmul(tmp1, tmp1, x_10101);
 1404|    122|    KRML_MAYBE_FOR4(i, (uint32_t)0U, (uint32_t)4U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  330|    122|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1405|    122|    qmul(tmp1, tmp1, x_101);
 1406|    122|    KRML_MAYBE_FOR3(i, (uint32_t)0U, (uint32_t)3U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  324|    122|#define KRML_MAYBE_FOR3(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 3, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1407|    122|    qmul(tmp1, tmp1, x_101);
 1408|    122|    KRML_MAYBE_FOR3(i, (uint32_t)0U, (uint32_t)3U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  324|    122|#define KRML_MAYBE_FOR3(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 3, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1409|    122|    qmul(tmp1, tmp1, x_101);
 1410|    122|    KRML_MAYBE_FOR5(i, (uint32_t)0U, (uint32_t)5U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  336|    122|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1411|    122|    qmul(tmp1, tmp1, x_111);
 1412|    122|    KRML_MAYBE_FOR9(i, (uint32_t)0U, (uint32_t)9U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  360|    122|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1413|    122|    qmul(tmp1, tmp1, x_101111);
 1414|    122|    KRML_MAYBE_FOR6(i, (uint32_t)0U, (uint32_t)6U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  342|    122|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1415|    122|    qmul(tmp1, tmp1, x_1111);
 1416|    122|    KRML_MAYBE_FOR2(i, (uint32_t)0U, (uint32_t)2U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  318|    122|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1417|    122|    qmul(tmp1, tmp1, r);
 1418|    122|    KRML_MAYBE_FOR5(i, (uint32_t)0U, (uint32_t)5U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  336|    122|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1419|    122|    qmul(tmp1, tmp1, r);
 1420|    122|    KRML_MAYBE_FOR6(i, (uint32_t)0U, (uint32_t)6U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  342|    122|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1421|    122|    qmul(tmp1, tmp1, x_1111);
 1422|    122|    KRML_MAYBE_FOR5(i, (uint32_t)0U, (uint32_t)5U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  336|    122|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1423|    122|    qmul(tmp1, tmp1, x_111);
 1424|    122|    KRML_MAYBE_FOR4(i, (uint32_t)0U, (uint32_t)4U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  330|    122|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1425|    122|    qmul(tmp1, tmp1, x_111);
 1426|    122|    KRML_MAYBE_FOR5(i, (uint32_t)0U, (uint32_t)5U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  336|    122|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1427|    122|    qmul(tmp1, tmp1, x_111);
 1428|    122|    KRML_MAYBE_FOR5(i, (uint32_t)0U, (uint32_t)5U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  336|    122|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1429|    122|    qmul(tmp1, tmp1, x_101);
 1430|    122|    KRML_MAYBE_FOR3(i, (uint32_t)0U, (uint32_t)3U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  324|    122|#define KRML_MAYBE_FOR3(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 3, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1431|    122|    qmul(tmp1, tmp1, x_11);
 1432|    122|    KRML_MAYBE_FOR10(i, (uint32_t)0U, (uint32_t)10U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  366|    122|#define KRML_MAYBE_FOR10(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 10, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1433|    122|    qmul(tmp1, tmp1, x_101111);
 1434|    122|    KRML_MAYBE_FOR2(i, (uint32_t)0U, (uint32_t)2U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  318|    122|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1435|    122|    qmul(tmp1, tmp1, x_11);
 1436|    122|    KRML_MAYBE_FOR5(i, (uint32_t)0U, (uint32_t)5U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  336|    122|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1437|    122|    qmul(tmp1, tmp1, x_11);
 1438|    122|    KRML_MAYBE_FOR5(i, (uint32_t)0U, (uint32_t)5U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  336|    122|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1439|    122|    qmul(tmp1, tmp1, x_11);
 1440|    122|    KRML_MAYBE_FOR3(i, (uint32_t)0U, (uint32_t)3U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  324|    122|#define KRML_MAYBE_FOR3(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 3, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1441|    122|    qmul(tmp1, tmp1, r);
 1442|    122|    KRML_MAYBE_FOR7(i, (uint32_t)0U, (uint32_t)7U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  348|    122|#define KRML_MAYBE_FOR7(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 7, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1443|    122|    qmul(tmp1, tmp1, x_10101);
 1444|    122|    KRML_MAYBE_FOR6(i, (uint32_t)0U, (uint32_t)6U, (uint32_t)1U, qsqr(tmp1, tmp1););
  ------------------
  |  |  342|    122|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1445|    122|    qmul(tmp1, tmp1, x_1111);
 1446|    122|    memcpy(x6, tmp1, (uint32_t)4U * sizeof(uint64_t));
 1447|    122|    memcpy(res, x6, (uint32_t)4U * sizeof(uint64_t));
 1448|    122|}
Hacl_P256.c:qsqr:
 1276|  30.9k|{
 1277|  30.9k|    uint64_t tmp[8U] = { 0U };
 1278|  30.9k|    bn_sqr4(tmp, x);
 1279|  30.9k|    qmont_reduction(res, tmp);
 1280|  30.9k|}
Hacl_P256.c:qmont_reduction:
 1195|  36.1k|{
 1196|  36.1k|    uint64_t n[4U] = { 0U };
 1197|  36.1k|    make_order(n);
 1198|  36.1k|    uint64_t c0 = (uint64_t)0U;
 1199|  36.1k|    KRML_MAYBE_FOR4(
  ------------------
  |  |  330|  36.1k|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|  36.1k|    do {                               \
  |  |  |  |  289|  36.1k|        uint32_t i = z;                \
  |  |  |  |  290|  36.1k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  36.1k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1200|  36.1k|        i0,
 1201|  36.1k|        (uint32_t)0U,
 1202|  36.1k|        (uint32_t)4U,
 1203|  36.1k|        (uint32_t)1U,
 1204|  36.1k|        uint64_t qj = (uint64_t)0xccd1c8aaee00bc4fU * x[i0];
 1205|  36.1k|        uint64_t *res_j0 = x + i0;
 1206|  36.1k|        uint64_t c = (uint64_t)0U;
 1207|  36.1k|        {
 1208|  36.1k|            uint64_t a_i = n[(uint32_t)4U * (uint32_t)0U];
 1209|  36.1k|            uint64_t *res_i0 = res_j0 + (uint32_t)4U * (uint32_t)0U;
 1210|  36.1k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, qj, c, res_i0);
 1211|  36.1k|            uint64_t a_i0 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
 1212|  36.1k|            uint64_t *res_i1 = res_j0 + (uint32_t)4U * (uint32_t)0U + (uint32_t)1U;
 1213|  36.1k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i0, qj, c, res_i1);
 1214|  36.1k|            uint64_t a_i1 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
 1215|  36.1k|            uint64_t *res_i2 = res_j0 + (uint32_t)4U * (uint32_t)0U + (uint32_t)2U;
 1216|  36.1k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i1, qj, c, res_i2);
 1217|  36.1k|            uint64_t a_i2 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
 1218|  36.1k|            uint64_t *res_i = res_j0 + (uint32_t)4U * (uint32_t)0U + (uint32_t)3U;
 1219|  36.1k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i2, qj, c, res_i);
 1220|  36.1k|        } uint64_t r = c;
 1221|  36.1k|        uint64_t c1 = r;
 1222|  36.1k|        uint64_t *resb = x + (uint32_t)4U + i0;
 1223|  36.1k|        uint64_t res_j = x[(uint32_t)4U + i0];
 1224|  36.1k|        c0 = Lib_IntTypes_Intrinsics_add_carry_u64(c0, c1, res_j, resb););
 1225|  36.1k|    memcpy(res, x + (uint32_t)4U, (uint32_t)4U * sizeof(uint64_t));
 1226|  36.1k|    uint64_t c00 = c0;
 1227|  36.1k|    uint64_t tmp[4U] = { 0U };
 1228|  36.1k|    uint64_t c = (uint64_t)0U;
 1229|  36.1k|    {
 1230|  36.1k|        uint64_t t1 = res[(uint32_t)4U * (uint32_t)0U];
 1231|  36.1k|        uint64_t t20 = n[(uint32_t)4U * (uint32_t)0U];
 1232|  36.1k|        uint64_t *res_i0 = tmp + (uint32_t)4U * (uint32_t)0U;
 1233|  36.1k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t1, t20, res_i0);
  ------------------
  |  |   89|  36.1k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
 1234|  36.1k|        uint64_t t10 = res[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
 1235|  36.1k|        uint64_t t21 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)1U];
 1236|  36.1k|        uint64_t *res_i1 = tmp + (uint32_t)4U * (uint32_t)0U + (uint32_t)1U;
 1237|  36.1k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t10, t21, res_i1);
  ------------------
  |  |   89|  36.1k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
 1238|  36.1k|        uint64_t t11 = res[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
 1239|  36.1k|        uint64_t t22 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)2U];
 1240|  36.1k|        uint64_t *res_i2 = tmp + (uint32_t)4U * (uint32_t)0U + (uint32_t)2U;
 1241|  36.1k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t11, t22, res_i2);
  ------------------
  |  |   89|  36.1k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
 1242|  36.1k|        uint64_t t12 = res[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
 1243|  36.1k|        uint64_t t2 = n[(uint32_t)4U * (uint32_t)0U + (uint32_t)3U];
 1244|  36.1k|        uint64_t *res_i = tmp + (uint32_t)4U * (uint32_t)0U + (uint32_t)3U;
 1245|  36.1k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t12, t2, res_i);
  ------------------
  |  |   89|  36.1k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
 1246|  36.1k|    }
 1247|  36.1k|    uint64_t c1 = c;
 1248|  36.1k|    uint64_t c2 = c00 - c1;
 1249|  36.1k|    KRML_MAYBE_FOR4(i,
  ------------------
  |  |  330|  36.1k|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|  36.1k|    do {                               \
  |  |  |  |  289|  36.1k|        uint32_t i = z;                \
  |  |  |  |  290|  36.1k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  36.1k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1250|  36.1k|                    (uint32_t)0U,
 1251|  36.1k|                    (uint32_t)4U,
 1252|  36.1k|                    (uint32_t)1U,
 1253|  36.1k|                    uint64_t *os = res;
 1254|  36.1k|                    uint64_t x1 = (c2 & res[i]) | (~c2 & tmp[i]);
 1255|  36.1k|                    os[i] = x1;);
 1256|  36.1k|}
Hacl_P256.c:qmul:
 1268|  4.88k|{
 1269|  4.88k|    uint64_t tmp[8U] = { 0U };
 1270|  4.88k|    bn_mul4(tmp, x, y);
 1271|  4.88k|    qmont_reduction(res, tmp);
 1272|  4.88k|}
Hacl_P256.c:from_qmont:
 1260|    244|{
 1261|    244|    uint64_t tmp[8U] = { 0U };
 1262|    244|    memcpy(tmp, x, (uint32_t)4U * sizeof(uint64_t));
 1263|    244|    qmont_reduction(res, tmp);
 1264|    244|}
Hacl_P256.c:ecdsa_verify_msg_as_qelem:
 1464|    126|{
 1465|    126|    uint64_t tmp[28U] = { 0U };
 1466|    126|    uint64_t *pk = tmp;
 1467|    126|    uint64_t *r_q = tmp + (uint32_t)12U;
 1468|    126|    uint64_t *s_q = tmp + (uint32_t)16U;
 1469|    126|    uint64_t *u1 = tmp + (uint32_t)20U;
 1470|    126|    uint64_t *u2 = tmp + (uint32_t)24U;
 1471|    126|    bool is_pk_valid = load_point_vartime(pk, public_key);
 1472|    126|    bn_from_bytes_be4(r_q, signature_r);
 1473|    126|    bn_from_bytes_be4(s_q, signature_s);
 1474|    126|    uint64_t is_r_valid = bn_is_lt_order_and_gt_zero_mask4(r_q);
 1475|    126|    uint64_t is_s_valid = bn_is_lt_order_and_gt_zero_mask4(s_q);
 1476|    126|    bool
 1477|    126|        is_rs_valid =
 1478|    126|            is_r_valid == (uint64_t)0xFFFFFFFFFFFFFFFFU && is_s_valid == (uint64_t)0xFFFFFFFFFFFFFFFFU;
  ------------------
  |  Branch (1478:13): [True: 124, False: 2]
  |  Branch (1478:60): [True: 122, False: 2]
  ------------------
 1479|    126|    if (!(is_pk_valid && is_rs_valid)) {
  ------------------
  |  Branch (1479:11): [True: 126, False: 0]
  |  Branch (1479:26): [True: 122, False: 4]
  ------------------
 1480|      4|        return false;
 1481|      4|    }
 1482|    122|    uint64_t sinv[4U] = { 0U };
 1483|    122|    qinv(sinv, s_q);
 1484|    122|    qmul_mont(sinv, m_q, u1);
 1485|    122|    qmul_mont(sinv, r_q, u2);
 1486|    122|    uint64_t res[12U] = { 0U };
 1487|    122|    point_mul_double_g(res, u1, u2, pk);
 1488|    122|    if (is_point_at_inf_vartime(res)) {
  ------------------
  |  Branch (1488:9): [True: 0, False: 122]
  ------------------
 1489|      0|        return false;
 1490|      0|    }
 1491|    122|    uint64_t x[4U] = { 0U };
 1492|    122|    to_aff_point_x(x, res);
 1493|    122|    qmod_short(x, x);
 1494|    122|    bool res1 = bn_is_eq_vartime4(x, r_q);
 1495|    122|    return res1;
 1496|    122|}
Hacl_P256.c:qmul_mont:
 1452|    244|{
 1453|    244|    uint64_t tmp[4U] = { 0U };
 1454|    244|    from_qmont(tmp, b);
 1455|    244|    qmul(res, sinv, tmp);
 1456|    244|}
Hacl_P256.c:point_mul_double_g:
 1104|    122|{
 1105|    122|    uint64_t q1[12U] = { 0U };
 1106|    122|    make_base_point(q1);
 1107|    122|    uint64_t table2[384U] = { 0U };
 1108|    122|    uint64_t tmp[12U] = { 0U };
 1109|    122|    uint64_t *t0 = table2;
 1110|    122|    uint64_t *t1 = table2 + (uint32_t)12U;
 1111|    122|    make_point_at_inf(t0);
 1112|    122|    memcpy(t1, q2, (uint32_t)12U * sizeof(uint64_t));
 1113|    122|    KRML_MAYBE_FOR15(i,
  ------------------
  |  |  396|    122|#define KRML_MAYBE_FOR15(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 15, k, x)
  |  |  ------------------
  |  |  |  |  288|    122|    do {                               \
  |  |  |  |  289|    122|        uint32_t i = z;                \
  |  |  |  |  290|    122|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    122|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1114|    122|                     (uint32_t)0U,
 1115|    122|                     (uint32_t)15U,
 1116|    122|                     (uint32_t)1U,
 1117|    122|                     uint64_t *t11 = table2 + (i + (uint32_t)1U) * (uint32_t)12U;
 1118|    122|                     point_double(tmp, t11);
 1119|    122|                     memcpy(table2 + ((uint32_t)2U * i + (uint32_t)2U) * (uint32_t)12U,
 1120|    122|                            tmp,
 1121|    122|                            (uint32_t)12U * sizeof(uint64_t));
 1122|    122|                     uint64_t *t2 = table2 + ((uint32_t)2U * i + (uint32_t)2U) * (uint32_t)12U;
 1123|    122|                     point_add(tmp, q2, t2);
 1124|    122|                     memcpy(table2 + ((uint32_t)2U * i + (uint32_t)3U) * (uint32_t)12U,
 1125|    122|                            tmp,
 1126|    122|                            (uint32_t)12U * sizeof(uint64_t)););
 1127|    122|    uint64_t tmp0[12U] = { 0U };
 1128|    122|    uint32_t i0 = (uint32_t)255U;
 1129|    122|    uint64_t bits_c = Hacl_Bignum_Lib_bn_get_bits_u64((uint32_t)4U, scalar1, i0, (uint32_t)5U);
 1130|    122|    uint32_t bits_l32 = (uint32_t)bits_c;
 1131|    122|    const uint64_t
 1132|    122|        *a_bits_l = Hacl_P256_PrecompTable_precomp_basepoint_table_w5 + bits_l32 * (uint32_t)12U;
 1133|    122|    memcpy(res, (uint64_t *)a_bits_l, (uint32_t)12U * sizeof(uint64_t));
 1134|    122|    uint32_t i1 = (uint32_t)255U;
 1135|    122|    uint64_t bits_c0 = Hacl_Bignum_Lib_bn_get_bits_u64((uint32_t)4U, scalar2, i1, (uint32_t)5U);
 1136|    122|    uint32_t bits_l320 = (uint32_t)bits_c0;
 1137|    122|    const uint64_t *a_bits_l0 = table2 + bits_l320 * (uint32_t)12U;
 1138|    122|    memcpy(tmp0, (uint64_t *)a_bits_l0, (uint32_t)12U * sizeof(uint64_t));
 1139|    122|    point_add(res, res, tmp0);
 1140|    122|    uint64_t tmp1[12U] = { 0U };
 1141|  6.34k|    for (uint32_t i = (uint32_t)0U; i < (uint32_t)51U; i++) {
  ------------------
  |  Branch (1141:37): [True: 6.22k, False: 122]
  ------------------
 1142|  6.22k|        KRML_MAYBE_FOR5(i2, (uint32_t)0U, (uint32_t)5U, (uint32_t)1U, point_double(res, res););
  ------------------
  |  |  336|  6.22k|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|  6.22k|    do {                               \
  |  |  |  |  289|  6.22k|        uint32_t i = z;                \
  |  |  |  |  290|  6.22k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  6.22k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1143|  6.22k|        uint32_t k = (uint32_t)255U - (uint32_t)5U * i - (uint32_t)5U;
 1144|  6.22k|        uint64_t bits_l = Hacl_Bignum_Lib_bn_get_bits_u64((uint32_t)4U, scalar2, k, (uint32_t)5U);
 1145|  6.22k|        uint32_t bits_l321 = (uint32_t)bits_l;
 1146|  6.22k|        const uint64_t *a_bits_l1 = table2 + bits_l321 * (uint32_t)12U;
 1147|  6.22k|        memcpy(tmp1, (uint64_t *)a_bits_l1, (uint32_t)12U * sizeof(uint64_t));
 1148|  6.22k|        point_add(res, res, tmp1);
 1149|  6.22k|        uint32_t k0 = (uint32_t)255U - (uint32_t)5U * i - (uint32_t)5U;
 1150|  6.22k|        uint64_t bits_l0 = Hacl_Bignum_Lib_bn_get_bits_u64((uint32_t)4U, scalar1, k0, (uint32_t)5U);
 1151|  6.22k|        uint32_t bits_l322 = (uint32_t)bits_l0;
 1152|  6.22k|        const uint64_t
 1153|  6.22k|            *a_bits_l2 = Hacl_P256_PrecompTable_precomp_basepoint_table_w5 + bits_l322 * (uint32_t)12U;
 1154|  6.22k|        memcpy(tmp1, (uint64_t *)a_bits_l2, (uint32_t)12U * sizeof(uint64_t));
 1155|  6.22k|        point_add(res, res, tmp1);
 1156|  6.22k|    }
 1157|    122|}
Hacl_P256.c:is_point_at_inf_vartime:
  685|    122|{
  686|    122|    uint64_t *pz = p + (uint32_t)8U;
  687|    122|    return bn_is_zero_vartime4(pz);
  688|    122|}
Hacl_P256.c:bn_is_zero_vartime4:
   50|    122|{
   51|    122|    uint64_t m = bn_is_zero_mask4(f);
   52|    122|    return m == (uint64_t)0xFFFFFFFFFFFFFFFFU;
   53|    122|}
Hacl_P256.c:bn_is_eq_vartime4:
   71|    122|{
   72|    122|    uint64_t m = bn_is_eq_mask4(a, b);
   73|    122|    return m == (uint64_t)0xFFFFFFFFFFFFFFFFU;
   74|    122|}

Hacl_P384_ecdsa_verif_without_hash:
 1328|     50|{
 1329|     50|    uint64_t m_q[6U] = { 0U };
 1330|     50|    uint8_t mHash[48U] = { 0U };
 1331|     50|    memcpy(mHash, msg, 48U * sizeof(uint8_t));
 1332|     50|    KRML_MAYBE_UNUSED_VAR(msg_len);
  ------------------
  |  |   60|     50|#define KRML_MAYBE_UNUSED_VAR(x) KRML_HOST_IGNORE(x)
  |  |  ------------------
  |  |  |  |   56|     50|#define KRML_HOST_IGNORE(x) (void)(x)
  |  |  ------------------
  ------------------
 1333|     50|    uint8_t *mHash48 = mHash;
 1334|     50|    bn_from_bytes_be(m_q, mHash48);
 1335|     50|    qmod_short(m_q, m_q);
 1336|     50|    bool res = ecdsa_verify_msg_as_qelem(m_q, public_key, signature_r, signature_s);
 1337|     50|    return res;
 1338|     50|}
Hacl_P384_validate_public_key:
 1360|     57|{
 1361|     57|    uint64_t point_jac[18U] = { 0U };
 1362|     57|    uint64_t p_aff[12U] = { 0U };
 1363|     57|    uint8_t *p_x = public_key;
 1364|     57|    uint8_t *p_y = public_key + 48U;
 1365|     57|    uint64_t *bn_p_x = p_aff;
 1366|     57|    uint64_t *bn_p_y = p_aff + 6U;
 1367|     57|    bn_from_bytes_be(bn_p_x, p_x);
 1368|     57|    bn_from_bytes_be(bn_p_y, p_y);
 1369|     57|    uint64_t *px0 = p_aff;
 1370|     57|    uint64_t *py0 = p_aff + 6U;
 1371|     57|    uint64_t lessX = bn_is_lt_prime_mask(px0);
 1372|     57|    uint64_t lessY = bn_is_lt_prime_mask(py0);
 1373|     57|    uint64_t res0 = lessX & lessY;
 1374|     57|    bool is_xy_valid = res0 == 0xFFFFFFFFFFFFFFFFULL;
 1375|     57|    bool res;
 1376|     57|    if (!is_xy_valid) {
  ------------------
  |  Branch (1376:9): [True: 3, False: 54]
  ------------------
 1377|      3|        res = false;
 1378|     54|    } else {
 1379|     54|        uint64_t rp[6U] = { 0U };
 1380|     54|        uint64_t tx[6U] = { 0U };
 1381|     54|        uint64_t ty[6U] = { 0U };
 1382|     54|        uint64_t *px = p_aff;
 1383|     54|        uint64_t *py = p_aff + 6U;
 1384|     54|        to_mont(tx, px);
 1385|     54|        to_mont(ty, py);
 1386|     54|        uint64_t tmp[6U] = { 0U };
 1387|     54|        fsqr0(rp, tx);
 1388|     54|        fmul0(rp, rp, tx);
 1389|     54|        p384_make_a_coeff(tmp);
 1390|     54|        fmul0(tmp, tmp, tx);
 1391|     54|        fadd0(rp, tmp, rp);
 1392|     54|        p384_make_b_coeff(tmp);
 1393|     54|        fadd0(rp, tmp, rp);
 1394|     54|        fsqr0(ty, ty);
 1395|     54|        uint64_t r = bn_is_eq_mask(ty, rp);
 1396|     54|        uint64_t r0 = r;
 1397|     54|        bool r1 = r0 == 0xFFFFFFFFFFFFFFFFULL;
 1398|     54|        res = r1;
 1399|     54|    }
 1400|     57|    if (res) {
  ------------------
  |  Branch (1400:9): [True: 51, False: 6]
  ------------------
 1401|     51|        uint64_t *px = p_aff;
 1402|     51|        uint64_t *py = p_aff + 6U;
 1403|     51|        uint64_t *rx = point_jac;
 1404|     51|        uint64_t *ry = point_jac + 6U;
 1405|     51|        uint64_t *rz = point_jac + 12U;
 1406|     51|        to_mont(rx, px);
 1407|     51|        to_mont(ry, py);
 1408|     51|        p384_make_fone(rz);
 1409|     51|    }
 1410|     57|    bool res1 = res;
 1411|     57|    return res1;
 1412|     57|}
Hacl_P384.c:bn_from_bytes_be:
  327|    364|{
  328|    364|    KRML_MAYBE_FOR6(i,
  ------------------
  |  |  342|    364|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|    364|    do {                               \
  |  |  |  |  289|    364|        uint32_t i = z;                \
  |  |  |  |  290|    364|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    364|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|    364|                    0U,
  330|    364|                    6U,
  331|    364|                    1U,
  332|    364|                    uint64_t *os = a;
  333|    364|                    uint64_t u = load64_be(b + (6U - i - 1U) * 8U);
  334|    364|                    uint64_t x = u;
  335|    364|                    os[i] = x;);
  336|    364|}
Hacl_P384.c:qmod_short:
  772|     98|{
  773|     98|    uint64_t tmp[6U] = { 0U };
  774|     98|    p384_make_order(tmp);
  775|     98|    uint64_t c = bn_sub(tmp, b, tmp);
  776|     98|    bn_cmovznz(a, c, tmp, b);
  777|     98|}
Hacl_P384.c:bn_cmovznz:
   46|     98|{
   47|     98|    uint64_t mask = ~FStar_UInt64_eq_mask(b, 0ULL);
   48|     98|    KRML_MAYBE_FOR6(i,
  ------------------
  |  |  342|     98|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|     98|    do {                               \
  |  |  |  |  289|     98|        uint32_t i = z;                \
  |  |  |  |  290|     98|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|     98|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   49|     98|                    0U,
   50|     98|                    6U,
   51|     98|                    1U,
   52|     98|                    uint64_t *os = a;
   53|     98|                    uint64_t uu____0 = c[i];
   54|     98|                    uint64_t x = uu____0 ^ (mask & (d[i] ^ uu____0));
   55|     98|                    os[i] = x;);
   56|     98|}
Hacl_P384.c:p384_qinv:
  867|     48|{
  868|     48|    uint64_t b[6U] = { 0U };
  869|     48|    b[0U] = 0xecec196accc52971ULL;
  870|     48|    b[1U] = 0x581a0db248b0a77aULL;
  871|     48|    b[2U] = 0xc7634d81f4372ddfULL;
  872|     48|    b[3U] = 0xffffffffffffffffULL;
  873|     48|    b[4U] = 0xffffffffffffffffULL;
  874|     48|    b[5U] = 0xffffffffffffffffULL;
  875|     48|    qexp_consttime(res, a, b);
  876|     48|}
Hacl_P384.c:qexp_consttime:
  813|     48|{
  814|     48|    uint64_t table[192U] = { 0U };
  815|     48|    uint64_t tmp[6U] = { 0U };
  816|     48|    uint64_t *t0 = table;
  817|     48|    uint64_t *t1 = table + 6U;
  818|     48|    p384_make_qone(t0);
  819|     48|    memcpy(t1, a, 6U * sizeof(uint64_t));
  820|     48|    KRML_MAYBE_FOR15(i,
  ------------------
  |  |  396|     48|#define KRML_MAYBE_FOR15(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 15, k, x)
  |  |  ------------------
  |  |  |  |  288|     48|    do {                               \
  |  |  |  |  289|     48|        uint32_t i = z;                \
  |  |  |  |  290|     48|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|     48|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  821|     48|                     0U,
  822|     48|                     15U,
  823|     48|                     1U,
  824|     48|                     uint64_t *t11 = table + (i + 1U) * 6U;
  825|     48|                     qsqr(tmp, t11);
  826|     48|                     memcpy(table + (2U * i + 2U) * 6U, tmp, 6U * sizeof(uint64_t));
  827|     48|                     uint64_t *t2 = table + (2U * i + 2U) * 6U;
  828|     48|                     qmul(tmp, a, t2);
  829|     48|                     memcpy(table + (2U * i + 3U) * 6U, tmp, 6U * sizeof(uint64_t)););
  830|     48|    uint32_t i0 = 380U;
  831|     48|    uint64_t bits_c = Hacl_Bignum_Lib_bn_get_bits_u64(6U, b, i0, 5U);
  832|     48|    memcpy(out, (uint64_t *)table, 6U * sizeof(uint64_t));
  833|  1.53k|    for (uint32_t i1 = 0U; i1 < 31U; i1++) {
  ------------------
  |  Branch (833:28): [True: 1.48k, False: 48]
  ------------------
  834|  1.48k|        uint64_t c = FStar_UInt64_eq_mask(bits_c, (uint64_t)(i1 + 1U));
  835|  1.48k|        const uint64_t *res_j = table + (i1 + 1U) * 6U;
  836|  1.48k|        KRML_MAYBE_FOR6(i,
  ------------------
  |  |  342|  1.48k|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|  1.48k|    do {                               \
  |  |  |  |  289|  1.48k|        uint32_t i = z;                \
  |  |  |  |  290|  1.48k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  837|  1.48k|                        0U,
  838|  1.48k|                        6U,
  839|  1.48k|                        1U,
  840|  1.48k|                        uint64_t *os = out;
  841|  1.48k|                        uint64_t x = (c & res_j[i]) | (~c & out[i]);
  842|  1.48k|                        os[i] = x;);
  843|  1.48k|    }
  844|     48|    uint64_t tmp0[6U] = { 0U };
  845|  3.69k|    for (uint32_t i1 = 0U; i1 < 76U; i1++) {
  ------------------
  |  Branch (845:28): [True: 3.64k, False: 48]
  ------------------
  846|  3.64k|        KRML_MAYBE_FOR5(i, 0U, 5U, 1U, qsqr(out, out););
  ------------------
  |  |  336|  3.64k|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|  3.64k|    do {                               \
  |  |  |  |  289|  3.64k|        uint32_t i = z;                \
  |  |  |  |  290|  3.64k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  3.64k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  847|  3.64k|        uint32_t k = 380U - 5U * i1 - 5U;
  848|  3.64k|        uint64_t bits_l = Hacl_Bignum_Lib_bn_get_bits_u64(6U, b, k, 5U);
  849|  3.64k|        memcpy(tmp0, (uint64_t *)table, 6U * sizeof(uint64_t));
  850|   116k|        for (uint32_t i2 = 0U; i2 < 31U; i2++) {
  ------------------
  |  Branch (850:32): [True: 113k, False: 3.64k]
  ------------------
  851|   113k|            uint64_t c = FStar_UInt64_eq_mask(bits_l, (uint64_t)(i2 + 1U));
  852|   113k|            const uint64_t *res_j = table + (i2 + 1U) * 6U;
  853|   113k|            KRML_MAYBE_FOR6(i,
  ------------------
  |  |  342|   113k|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|   113k|    do {                               \
  |  |  |  |  289|   113k|        uint32_t i = z;                \
  |  |  |  |  290|   113k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   113k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  854|   113k|                            0U,
  855|   113k|                            6U,
  856|   113k|                            1U,
  857|   113k|                            uint64_t *os = tmp0;
  858|   113k|                            uint64_t x = (c & res_j[i]) | (~c & tmp0[i]);
  859|   113k|                            os[i] = x;);
  860|   113k|        }
  861|  3.64k|        qmul(out, out, tmp0);
  862|  3.64k|    }
  863|     48|}
Hacl_P384.c:p384_make_qone:
  435|     48|{
  436|     48|    f[0U] = 0x1313e695333ad68dULL;
  437|     48|    f[1U] = 0xa7e5f24db74f5885ULL;
  438|     48|    f[2U] = 0x389cb27e0bc8d220ULL;
  439|     48|    f[3U] = 0x0ULL;
  440|     48|    f[4U] = 0x0ULL;
  441|     48|    f[5U] = 0x0ULL;
  442|     48|}
Hacl_P384.c:qsqr:
  797|  18.9k|{
  798|  18.9k|    uint64_t tmp[12U] = { 0U };
  799|  18.9k|    bn_sqr(tmp, b);
  800|  18.9k|    qmont_reduction(a, tmp);
  801|  18.9k|}
Hacl_P384.c:bn_sqr:
  271|   150k|{
  272|   150k|    memset(a, 0U, 12U * sizeof(uint64_t));
  273|   150k|    KRML_MAYBE_FOR6(
  ------------------
  |  |  342|   150k|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|   150k|    do {                               \
  |  |  |  |  289|   150k|        uint32_t i = z;                \
  |  |  |  |  290|   150k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   150k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|   150k|        i0,
  275|   150k|        0U,
  276|   150k|        6U,
  277|   150k|        1U,
  278|   150k|        uint64_t *ab = b;
  279|   150k|        uint64_t a_j = b[i0];
  280|   150k|        uint64_t *res_j = a + i0;
  281|   150k|        uint64_t c = 0ULL;
  282|   150k|        for (uint32_t i = 0U; i < i0 / 4U; i++) {
  283|   150k|            uint64_t a_i = ab[4U * i];
  284|   150k|            uint64_t *res_i0 = res_j + 4U * i;
  285|   150k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, a_j, c, res_i0);
  286|   150k|            uint64_t a_i0 = ab[4U * i + 1U];
  287|   150k|            uint64_t *res_i1 = res_j + 4U * i + 1U;
  288|   150k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i0, a_j, c, res_i1);
  289|   150k|            uint64_t a_i1 = ab[4U * i + 2U];
  290|   150k|            uint64_t *res_i2 = res_j + 4U * i + 2U;
  291|   150k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i1, a_j, c, res_i2);
  292|   150k|            uint64_t a_i2 = ab[4U * i + 3U];
  293|   150k|            uint64_t *res_i = res_j + 4U * i + 3U;
  294|   150k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i2, a_j, c, res_i);
  295|   150k|        } for (uint32_t i = i0 / 4U * 4U; i < i0; i++) {
  296|   150k|            uint64_t a_i = ab[i];
  297|   150k|            uint64_t *res_i = res_j + i;
  298|   150k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, a_j, c, res_i);
  299|   150k|        } uint64_t r = c;
  300|   150k|        a[i0 + i0] = r;);
  301|   150k|    uint64_t c0 = Hacl_Bignum_Addition_bn_add_eq_len_u64(12U, a, a, a);
  302|   150k|    KRML_MAYBE_UNUSED_VAR(c0);
  ------------------
  |  |   60|   150k|#define KRML_MAYBE_UNUSED_VAR(x) KRML_HOST_IGNORE(x)
  |  |  ------------------
  |  |  |  |   56|   150k|#define KRML_HOST_IGNORE(x) (void)(x)
  |  |  ------------------
  ------------------
  303|   150k|    uint64_t tmp[12U] = { 0U };
  304|   150k|    KRML_MAYBE_FOR6(i,
  ------------------
  |  |  342|   150k|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|   150k|    do {                               \
  |  |  |  |  289|   150k|        uint32_t i = z;                \
  |  |  |  |  290|   150k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   150k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  305|   150k|                    0U,
  306|   150k|                    6U,
  307|   150k|                    1U,
  308|   150k|                    FStar_UInt128_uint128 res = FStar_UInt128_mul_wide(b[i], b[i]);
  309|   150k|                    uint64_t hi = FStar_UInt128_uint128_to_uint64(FStar_UInt128_shift_right(res, 64U));
  310|   150k|                    uint64_t lo = FStar_UInt128_uint128_to_uint64(res);
  311|   150k|                    tmp[2U * i] = lo;
  312|   150k|                    tmp[2U * i + 1U] = hi;);
  313|   150k|    uint64_t c1 = Hacl_Bignum_Addition_bn_add_eq_len_u64(12U, a, tmp, a);
  314|   150k|    KRML_MAYBE_UNUSED_VAR(c1);
  ------------------
  |  |   60|   150k|#define KRML_MAYBE_UNUSED_VAR(x) KRML_HOST_IGNORE(x)
  |  |  ------------------
  |  |  |  |   56|   150k|#define KRML_HOST_IGNORE(x) (void)(x)
  |  |  ------------------
  ------------------
  315|   150k|}
Hacl_P384.c:qmont_reduction:
  526|  23.5k|{
  527|  23.5k|    uint64_t n[6U] = { 0U };
  528|  23.5k|    p384_make_order(n);
  529|  23.5k|    uint64_t c0 = 0ULL;
  530|  23.5k|    KRML_MAYBE_FOR6(
  ------------------
  |  |  342|  23.5k|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|  23.5k|    do {                               \
  |  |  |  |  289|  23.5k|        uint32_t i = z;                \
  |  |  |  |  290|  23.5k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  23.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  531|  23.5k|        i0,
  532|  23.5k|        0U,
  533|  23.5k|        6U,
  534|  23.5k|        1U,
  535|  23.5k|        uint64_t qj = 7986114184663260229ULL * x[i0];
  536|  23.5k|        uint64_t *res_j0 = x + i0;
  537|  23.5k|        uint64_t c = 0ULL;
  538|  23.5k|        {
  539|  23.5k|            uint64_t a_i = n[4U * 0U];
  540|  23.5k|            uint64_t *res_i0 = res_j0 + 4U * 0U;
  541|  23.5k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, qj, c, res_i0);
  542|  23.5k|            uint64_t a_i0 = n[4U * 0U + 1U];
  543|  23.5k|            uint64_t *res_i1 = res_j0 + 4U * 0U + 1U;
  544|  23.5k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i0, qj, c, res_i1);
  545|  23.5k|            uint64_t a_i1 = n[4U * 0U + 2U];
  546|  23.5k|            uint64_t *res_i2 = res_j0 + 4U * 0U + 2U;
  547|  23.5k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i1, qj, c, res_i2);
  548|  23.5k|            uint64_t a_i2 = n[4U * 0U + 3U];
  549|  23.5k|            uint64_t *res_i = res_j0 + 4U * 0U + 3U;
  550|  23.5k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i2, qj, c, res_i);
  551|  23.5k|        } KRML_MAYBE_FOR2(i,
  552|  23.5k|                          4U,
  553|  23.5k|                          6U,
  554|  23.5k|                          1U,
  555|  23.5k|                          uint64_t a_i = n[i];
  556|  23.5k|                          uint64_t *res_i = res_j0 + i;
  557|  23.5k|                          c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, qj, c, res_i););
  558|  23.5k|        uint64_t r = c;
  559|  23.5k|        uint64_t c1 = r;
  560|  23.5k|        uint64_t *resb = x + 6U + i0;
  561|  23.5k|        uint64_t res_j = x[6U + i0];
  562|  23.5k|        c0 = Lib_IntTypes_Intrinsics_add_carry_u64(c0, c1, res_j, resb););
  563|  23.5k|    memcpy(res, x + 6U, 6U * sizeof(uint64_t));
  564|  23.5k|    uint64_t c00 = c0;
  565|  23.5k|    uint64_t tmp[6U] = { 0U };
  566|  23.5k|    uint64_t c = 0ULL;
  567|  23.5k|    {
  568|  23.5k|        uint64_t t1 = res[4U * 0U];
  569|  23.5k|        uint64_t t20 = n[4U * 0U];
  570|  23.5k|        uint64_t *res_i0 = tmp + 4U * 0U;
  571|  23.5k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t1, t20, res_i0);
  ------------------
  |  |   89|  23.5k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  572|  23.5k|        uint64_t t10 = res[4U * 0U + 1U];
  573|  23.5k|        uint64_t t21 = n[4U * 0U + 1U];
  574|  23.5k|        uint64_t *res_i1 = tmp + 4U * 0U + 1U;
  575|  23.5k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t10, t21, res_i1);
  ------------------
  |  |   89|  23.5k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  576|  23.5k|        uint64_t t11 = res[4U * 0U + 2U];
  577|  23.5k|        uint64_t t22 = n[4U * 0U + 2U];
  578|  23.5k|        uint64_t *res_i2 = tmp + 4U * 0U + 2U;
  579|  23.5k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t11, t22, res_i2);
  ------------------
  |  |   89|  23.5k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  580|  23.5k|        uint64_t t12 = res[4U * 0U + 3U];
  581|  23.5k|        uint64_t t2 = n[4U * 0U + 3U];
  582|  23.5k|        uint64_t *res_i = tmp + 4U * 0U + 3U;
  583|  23.5k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t12, t2, res_i);
  ------------------
  |  |   89|  23.5k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  584|  23.5k|    }
  585|  23.5k|    KRML_MAYBE_FOR2(i,
  ------------------
  |  |  318|  23.5k|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|  23.5k|    do {                               \
  |  |  |  |  289|  23.5k|        uint32_t i = z;                \
  |  |  |  |  290|  23.5k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  23.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  586|  23.5k|                    4U,
  587|  23.5k|                    6U,
  588|  23.5k|                    1U,
  589|  23.5k|                    uint64_t t1 = res[i];
  590|  23.5k|                    uint64_t t2 = n[i];
  591|  23.5k|                    uint64_t *res_i = tmp + i;
  592|  23.5k|                    c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t1, t2, res_i););
  593|  23.5k|    uint64_t c1 = c;
  594|  23.5k|    uint64_t c2 = c00 - c1;
  595|  23.5k|    KRML_MAYBE_FOR6(i,
  ------------------
  |  |  342|  23.5k|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|  23.5k|    do {                               \
  |  |  |  |  289|  23.5k|        uint32_t i = z;                \
  |  |  |  |  290|  23.5k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  23.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  596|  23.5k|                    0U,
  597|  23.5k|                    6U,
  598|  23.5k|                    1U,
  599|  23.5k|                    uint64_t *os = res;
  600|  23.5k|                    uint64_t x1 = (c2 & res[i]) | (~c2 & tmp[i]);
  601|  23.5k|                    os[i] = x1;);
  602|  23.5k|}
Hacl_P384.c:qmul:
  789|  4.46k|{
  790|  4.46k|    uint64_t tmp[12U] = { 0U };
  791|  4.46k|    bn_mul(tmp, b, c);
  792|  4.46k|    qmont_reduction(a, tmp);
  793|  4.46k|}
Hacl_P384.c:bn_mul:
  235|   523k|{
  236|   523k|    memset(a, 0U, 12U * sizeof(uint64_t));
  237|   523k|    KRML_MAYBE_FOR6(
  ------------------
  |  |  342|   523k|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|   523k|    do {                               \
  |  |  |  |  289|   523k|        uint32_t i = z;                \
  |  |  |  |  290|   523k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   523k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  238|   523k|        i0,
  239|   523k|        0U,
  240|   523k|        6U,
  241|   523k|        1U,
  242|   523k|        uint64_t bj = c[i0];
  243|   523k|        uint64_t *res_j = a + i0;
  244|   523k|        uint64_t c1 = 0ULL;
  245|   523k|        {
  246|   523k|            uint64_t a_i = b[4U * 0U];
  247|   523k|            uint64_t *res_i0 = res_j + 4U * 0U;
  248|   523k|            c1 = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, bj, c1, res_i0);
  249|   523k|            uint64_t a_i0 = b[4U * 0U + 1U];
  250|   523k|            uint64_t *res_i1 = res_j + 4U * 0U + 1U;
  251|   523k|            c1 = Hacl_Bignum_Base_mul_wide_add2_u64(a_i0, bj, c1, res_i1);
  252|   523k|            uint64_t a_i1 = b[4U * 0U + 2U];
  253|   523k|            uint64_t *res_i2 = res_j + 4U * 0U + 2U;
  254|   523k|            c1 = Hacl_Bignum_Base_mul_wide_add2_u64(a_i1, bj, c1, res_i2);
  255|   523k|            uint64_t a_i2 = b[4U * 0U + 3U];
  256|   523k|            uint64_t *res_i = res_j + 4U * 0U + 3U;
  257|   523k|            c1 = Hacl_Bignum_Base_mul_wide_add2_u64(a_i2, bj, c1, res_i);
  258|   523k|        } KRML_MAYBE_FOR2(i,
  259|   523k|                          4U,
  260|   523k|                          6U,
  261|   523k|                          1U,
  262|   523k|                          uint64_t a_i = b[i];
  263|   523k|                          uint64_t *res_i = res_j + i;
  264|   523k|                          c1 = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, bj, c1, res_i););
  265|   523k|        uint64_t r = c1;
  266|   523k|        a[6U + i0] = r;);
  267|   523k|}
Hacl_P384.c:from_qmont:
  805|     96|{
  806|     96|    uint64_t tmp[12U] = { 0U };
  807|     96|    memcpy(tmp, b, 6U * sizeof(uint64_t));
  808|     96|    qmont_reduction(a, tmp);
  809|     96|}
Hacl_P384.c:bn_add_mod:
   60|   761k|{
   61|   761k|    uint64_t c10 = 0ULL;
   62|   761k|    {
   63|   761k|        uint64_t t1 = c[4U * 0U];
   64|   761k|        uint64_t t20 = d[4U * 0U];
   65|   761k|        uint64_t *res_i0 = a + 4U * 0U;
   66|   761k|        c10 = Lib_IntTypes_Intrinsics_add_carry_u64(c10, t1, t20, res_i0);
  ------------------
  |  |   66|   761k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
   67|   761k|        uint64_t t10 = c[4U * 0U + 1U];
   68|   761k|        uint64_t t21 = d[4U * 0U + 1U];
   69|   761k|        uint64_t *res_i1 = a + 4U * 0U + 1U;
   70|   761k|        c10 = Lib_IntTypes_Intrinsics_add_carry_u64(c10, t10, t21, res_i1);
  ------------------
  |  |   66|   761k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
   71|   761k|        uint64_t t11 = c[4U * 0U + 2U];
   72|   761k|        uint64_t t22 = d[4U * 0U + 2U];
   73|   761k|        uint64_t *res_i2 = a + 4U * 0U + 2U;
   74|   761k|        c10 = Lib_IntTypes_Intrinsics_add_carry_u64(c10, t11, t22, res_i2);
  ------------------
  |  |   66|   761k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
   75|   761k|        uint64_t t12 = c[4U * 0U + 3U];
   76|   761k|        uint64_t t2 = d[4U * 0U + 3U];
   77|   761k|        uint64_t *res_i = a + 4U * 0U + 3U;
   78|   761k|        c10 = Lib_IntTypes_Intrinsics_add_carry_u64(c10, t12, t2, res_i);
  ------------------
  |  |   66|   761k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
   79|   761k|    }
   80|   761k|    KRML_MAYBE_FOR2(i,
  ------------------
  |  |  318|   761k|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|   761k|    do {                               \
  |  |  |  |  289|   761k|        uint32_t i = z;                \
  |  |  |  |  290|   761k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   761k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   81|   761k|                    4U,
   82|   761k|                    6U,
   83|   761k|                    1U,
   84|   761k|                    uint64_t t1 = c[i];
   85|   761k|                    uint64_t t2 = d[i];
   86|   761k|                    uint64_t *res_i = a + i;
   87|   761k|                    c10 = Lib_IntTypes_Intrinsics_add_carry_u64(c10, t1, t2, res_i););
   88|   761k|    uint64_t c0 = c10;
   89|   761k|    uint64_t tmp[6U] = { 0U };
   90|   761k|    uint64_t c1 = 0ULL;
   91|   761k|    {
   92|   761k|        uint64_t t1 = a[4U * 0U];
   93|   761k|        uint64_t t20 = b[4U * 0U];
   94|   761k|        uint64_t *res_i0 = tmp + 4U * 0U;
   95|   761k|        c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t1, t20, res_i0);
  ------------------
  |  |   89|   761k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
   96|   761k|        uint64_t t10 = a[4U * 0U + 1U];
   97|   761k|        uint64_t t21 = b[4U * 0U + 1U];
   98|   761k|        uint64_t *res_i1 = tmp + 4U * 0U + 1U;
   99|   761k|        c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t10, t21, res_i1);
  ------------------
  |  |   89|   761k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  100|   761k|        uint64_t t11 = a[4U * 0U + 2U];
  101|   761k|        uint64_t t22 = b[4U * 0U + 2U];
  102|   761k|        uint64_t *res_i2 = tmp + 4U * 0U + 2U;
  103|   761k|        c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t11, t22, res_i2);
  ------------------
  |  |   89|   761k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  104|   761k|        uint64_t t12 = a[4U * 0U + 3U];
  105|   761k|        uint64_t t2 = b[4U * 0U + 3U];
  106|   761k|        uint64_t *res_i = tmp + 4U * 0U + 3U;
  107|   761k|        c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t12, t2, res_i);
  ------------------
  |  |   89|   761k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  108|   761k|    }
  109|   761k|    KRML_MAYBE_FOR2(i,
  ------------------
  |  |  318|   761k|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|   761k|    do {                               \
  |  |  |  |  289|   761k|        uint32_t i = z;                \
  |  |  |  |  290|   761k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   761k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  110|   761k|                    4U,
  111|   761k|                    6U,
  112|   761k|                    1U,
  113|   761k|                    uint64_t t1 = a[i];
  114|   761k|                    uint64_t t2 = b[i];
  115|   761k|                    uint64_t *res_i = tmp + i;
  116|   761k|                    c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t1, t2, res_i););
  117|   761k|    uint64_t c11 = c1;
  118|   761k|    uint64_t c2 = c0 - c11;
  119|   761k|    KRML_MAYBE_FOR6(i,
  ------------------
  |  |  342|   761k|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|   761k|    do {                               \
  |  |  |  |  289|   761k|        uint32_t i = z;                \
  |  |  |  |  290|   761k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   761k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  120|   761k|                    0U,
  121|   761k|                    6U,
  122|   761k|                    1U,
  123|   761k|                    uint64_t *os = a;
  124|   761k|                    uint64_t x = (c2 & a[i]) | (~c2 & tmp[i]);
  125|   761k|                    os[i] = x;);
  126|   761k|}
Hacl_P384.c:ecdsa_verify_msg_as_qelem:
 1138|     50|{
 1139|     50|    uint64_t tmp[42U] = { 0U };
 1140|     50|    uint64_t *pk = tmp;
 1141|     50|    uint64_t *r_q = tmp + 18U;
 1142|     50|    uint64_t *s_q = tmp + 24U;
 1143|     50|    uint64_t *u1 = tmp + 30U;
 1144|     50|    uint64_t *u2 = tmp + 36U;
 1145|     50|    uint64_t p_aff[12U] = { 0U };
 1146|     50|    uint8_t *p_x = public_key;
 1147|     50|    uint8_t *p_y = public_key + 48U;
 1148|     50|    uint64_t *bn_p_x = p_aff;
 1149|     50|    uint64_t *bn_p_y = p_aff + 6U;
 1150|     50|    bn_from_bytes_be(bn_p_x, p_x);
 1151|     50|    bn_from_bytes_be(bn_p_y, p_y);
 1152|     50|    uint64_t *px0 = p_aff;
 1153|     50|    uint64_t *py0 = p_aff + 6U;
 1154|     50|    uint64_t lessX = bn_is_lt_prime_mask(px0);
 1155|     50|    uint64_t lessY = bn_is_lt_prime_mask(py0);
 1156|     50|    uint64_t res0 = lessX & lessY;
 1157|     50|    bool is_xy_valid = res0 == 0xFFFFFFFFFFFFFFFFULL;
 1158|     50|    bool res;
 1159|     50|    if (!is_xy_valid) {
  ------------------
  |  Branch (1159:9): [True: 0, False: 50]
  ------------------
 1160|      0|        res = false;
 1161|     50|    } else {
 1162|     50|        uint64_t rp[6U] = { 0U };
 1163|     50|        uint64_t tx[6U] = { 0U };
 1164|     50|        uint64_t ty[6U] = { 0U };
 1165|     50|        uint64_t *px = p_aff;
 1166|     50|        uint64_t *py = p_aff + 6U;
 1167|     50|        to_mont(tx, px);
 1168|     50|        to_mont(ty, py);
 1169|     50|        uint64_t tmp1[6U] = { 0U };
 1170|     50|        fsqr0(rp, tx);
 1171|     50|        fmul0(rp, rp, tx);
 1172|     50|        p384_make_a_coeff(tmp1);
 1173|     50|        fmul0(tmp1, tmp1, tx);
 1174|     50|        fadd0(rp, tmp1, rp);
 1175|     50|        p384_make_b_coeff(tmp1);
 1176|     50|        fadd0(rp, tmp1, rp);
 1177|     50|        fsqr0(ty, ty);
 1178|     50|        uint64_t r = bn_is_eq_mask(ty, rp);
 1179|     50|        uint64_t r0 = r;
 1180|     50|        bool r1 = r0 == 0xFFFFFFFFFFFFFFFFULL;
 1181|     50|        res = r1;
 1182|     50|    }
 1183|     50|    if (res) {
  ------------------
  |  Branch (1183:9): [True: 50, False: 0]
  ------------------
 1184|     50|        uint64_t *px = p_aff;
 1185|     50|        uint64_t *py = p_aff + 6U;
 1186|     50|        uint64_t *rx = pk;
 1187|     50|        uint64_t *ry = pk + 6U;
 1188|     50|        uint64_t *rz = pk + 12U;
 1189|     50|        to_mont(rx, px);
 1190|     50|        to_mont(ry, py);
 1191|     50|        p384_make_fone(rz);
 1192|     50|    }
 1193|     50|    bool is_pk_valid = res;
 1194|     50|    bn_from_bytes_be(r_q, signature_r);
 1195|     50|    bn_from_bytes_be(s_q, signature_s);
 1196|     50|    uint64_t tmp10[6U] = { 0U };
 1197|     50|    p384_make_order(tmp10);
 1198|     50|    uint64_t c = bn_sub(tmp10, r_q, tmp10);
 1199|     50|    uint64_t is_lt_order = FStar_UInt64_gte_mask(c, 0ULL) & ~FStar_UInt64_eq_mask(c, 0ULL);
 1200|     50|    uint64_t bn_zero0[6U] = { 0U };
 1201|     50|    uint64_t res1 = bn_is_eq_mask(r_q, bn_zero0);
 1202|     50|    uint64_t is_eq_zero = res1;
 1203|     50|    uint64_t is_r_valid = is_lt_order & ~is_eq_zero;
 1204|     50|    uint64_t tmp11[6U] = { 0U };
 1205|     50|    p384_make_order(tmp11);
 1206|     50|    uint64_t c0 = bn_sub(tmp11, s_q, tmp11);
 1207|     50|    uint64_t is_lt_order0 = FStar_UInt64_gte_mask(c0, 0ULL) & ~FStar_UInt64_eq_mask(c0, 0ULL);
 1208|     50|    uint64_t bn_zero1[6U] = { 0U };
 1209|     50|    uint64_t res2 = bn_is_eq_mask(s_q, bn_zero1);
 1210|     50|    uint64_t is_eq_zero0 = res2;
 1211|     50|    uint64_t is_s_valid = is_lt_order0 & ~is_eq_zero0;
 1212|     50|    bool is_rs_valid = is_r_valid == 0xFFFFFFFFFFFFFFFFULL && is_s_valid == 0xFFFFFFFFFFFFFFFFULL;
  ------------------
  |  Branch (1212:24): [True: 49, False: 1]
  |  Branch (1212:63): [True: 48, False: 1]
  ------------------
 1213|     50|    if (!(is_pk_valid && is_rs_valid)) {
  ------------------
  |  Branch (1213:11): [True: 50, False: 0]
  |  Branch (1213:26): [True: 48, False: 2]
  ------------------
 1214|      2|        return false;
 1215|      2|    }
 1216|     48|    uint64_t sinv[6U] = { 0U };
 1217|     48|    p384_qinv(sinv, s_q);
 1218|     48|    uint64_t tmp1[6U] = { 0U };
 1219|     48|    from_qmont(tmp1, m_q);
 1220|     48|    qmul(u1, sinv, tmp1);
 1221|     48|    uint64_t tmp12[6U] = { 0U };
 1222|     48|    from_qmont(tmp12, r_q);
 1223|     48|    qmul(u2, sinv, tmp12);
 1224|     48|    uint64_t res3[18U] = { 0U };
 1225|     48|    point_mul_double_g(res3, u1, u2, pk);
 1226|     48|    uint64_t *pz0 = res3 + 12U;
 1227|     48|    uint64_t bn_zero[6U] = { 0U };
 1228|     48|    uint64_t res10 = bn_is_eq_mask(pz0, bn_zero);
 1229|     48|    uint64_t m = res10;
 1230|     48|    if (m == 0xFFFFFFFFFFFFFFFFULL) {
  ------------------
  |  Branch (1230:9): [True: 0, False: 48]
  ------------------
 1231|      0|        return false;
 1232|      0|    }
 1233|     48|    uint64_t x[6U] = { 0U };
 1234|     48|    uint64_t zinv[6U] = { 0U };
 1235|     48|    uint64_t *px = res3;
 1236|     48|    uint64_t *pz = res3 + 12U;
 1237|     48|    p384_finv(zinv, pz);
 1238|     48|    fmul0(x, px, zinv);
 1239|     48|    from_mont(x, x);
 1240|     48|    qmod_short(x, x);
 1241|     48|    uint64_t m0 = bn_is_eq_mask(x, r_q);
 1242|     48|    bool res11 = m0 == 0xFFFFFFFFFFFFFFFFULL;
 1243|     48|    return res11;
 1244|     48|}
Hacl_P384.c:point_mul_double_g:
 1082|     48|{
 1083|     48|    uint64_t tmp[18U] = { 0U };
 1084|     48|    point_mul_g(tmp, scalar1);
 1085|     48|    point_mul(res, scalar2, p);
 1086|     48|    point_add(res, tmp, res);
 1087|     48|}
Hacl_P384.c:point_add:
  880|  9.93k|{
  881|  9.93k|    uint64_t tmp[54U] = { 0U };
  882|  9.93k|    uint64_t *t0 = tmp;
  883|  9.93k|    uint64_t *t1 = tmp + 36U;
  884|  9.93k|    uint64_t *x3 = t1;
  885|  9.93k|    uint64_t *y3 = t1 + 6U;
  886|  9.93k|    uint64_t *z3 = t1 + 12U;
  887|  9.93k|    uint64_t *t01 = t0;
  888|  9.93k|    uint64_t *t11 = t0 + 6U;
  889|  9.93k|    uint64_t *t2 = t0 + 12U;
  890|  9.93k|    uint64_t *t3 = t0 + 18U;
  891|  9.93k|    uint64_t *t4 = t0 + 24U;
  892|  9.93k|    uint64_t *t5 = t0 + 30U;
  893|  9.93k|    uint64_t *x1 = x;
  894|  9.93k|    uint64_t *y1 = x + 6U;
  895|  9.93k|    uint64_t *z10 = x + 12U;
  896|  9.93k|    uint64_t *x20 = y;
  897|  9.93k|    uint64_t *y20 = y + 6U;
  898|  9.93k|    uint64_t *z20 = y + 12U;
  899|  9.93k|    fmul0(t01, x1, x20);
  900|  9.93k|    fmul0(t11, y1, y20);
  901|  9.93k|    fmul0(t2, z10, z20);
  902|  9.93k|    fadd0(t3, x1, y1);
  903|  9.93k|    fadd0(t4, x20, y20);
  904|  9.93k|    fmul0(t3, t3, t4);
  905|  9.93k|    fadd0(t4, t01, t11);
  906|  9.93k|    uint64_t *y10 = x + 6U;
  907|  9.93k|    uint64_t *z11 = x + 12U;
  908|  9.93k|    uint64_t *y2 = y + 6U;
  909|  9.93k|    uint64_t *z21 = y + 12U;
  910|  9.93k|    fsub0(t3, t3, t4);
  911|  9.93k|    fadd0(t4, y10, z11);
  912|  9.93k|    fadd0(t5, y2, z21);
  913|  9.93k|    fmul0(t4, t4, t5);
  914|  9.93k|    fadd0(t5, t11, t2);
  915|  9.93k|    fsub0(t4, t4, t5);
  916|  9.93k|    uint64_t *x10 = x;
  917|  9.93k|    uint64_t *z1 = x + 12U;
  918|  9.93k|    uint64_t *x2 = y;
  919|  9.93k|    uint64_t *z2 = y + 12U;
  920|  9.93k|    fadd0(x3, x10, z1);
  921|  9.93k|    fadd0(y3, x2, z2);
  922|  9.93k|    fmul0(x3, x3, y3);
  923|  9.93k|    fadd0(y3, t01, t2);
  924|  9.93k|    fsub0(y3, x3, y3);
  925|  9.93k|    uint64_t b_coeff[6U] = { 0U };
  926|  9.93k|    p384_make_b_coeff(b_coeff);
  927|  9.93k|    fmul0(z3, b_coeff, t2);
  928|  9.93k|    fsub0(x3, y3, z3);
  929|  9.93k|    fadd0(z3, x3, x3);
  930|  9.93k|    fadd0(x3, x3, z3);
  931|  9.93k|    fsub0(z3, t11, x3);
  932|  9.93k|    fadd0(x3, t11, x3);
  933|  9.93k|    uint64_t b_coeff0[6U] = { 0U };
  934|  9.93k|    p384_make_b_coeff(b_coeff0);
  935|  9.93k|    fmul0(y3, b_coeff0, y3);
  936|  9.93k|    fadd0(t11, t2, t2);
  937|  9.93k|    fadd0(t2, t11, t2);
  938|  9.93k|    fsub0(y3, y3, t2);
  939|  9.93k|    fsub0(y3, y3, t01);
  940|  9.93k|    fadd0(t11, y3, y3);
  941|  9.93k|    fadd0(y3, t11, y3);
  942|  9.93k|    fadd0(t11, t01, t01);
  943|  9.93k|    fadd0(t01, t11, t01);
  944|  9.93k|    fsub0(t01, t01, t2);
  945|  9.93k|    fmul0(t11, t4, y3);
  946|  9.93k|    fmul0(t2, t01, y3);
  947|  9.93k|    fmul0(y3, x3, z3);
  948|  9.93k|    fadd0(y3, y3, t2);
  949|  9.93k|    fmul0(x3, t3, x3);
  950|  9.93k|    fsub0(x3, x3, t11);
  951|  9.93k|    fmul0(z3, t4, z3);
  952|  9.93k|    fmul0(t11, t3, t01);
  953|  9.93k|    fadd0(z3, z3, t11);
  954|  9.93k|    memcpy(xy, t1, 18U * sizeof(uint64_t));
  955|  9.93k|}
Hacl_P384.c:bn_is_lt_prime_mask:
  606|    214|{
  607|    214|    uint64_t tmp[6U] = { 0U };
  608|    214|    p384_make_prime(tmp);
  609|    214|    uint64_t c = bn_sub(tmp, f, tmp);
  610|    214|    uint64_t m = FStar_UInt64_gte_mask(c, 0ULL) & ~FStar_UInt64_eq_mask(c, 0ULL);
  611|    214|    return m;
  612|    214|}
Hacl_P384.c:p384_make_prime:
  340|  1.72M|{
  341|  1.72M|    n[0U] = 0x00000000ffffffffULL;
  342|  1.72M|    n[1U] = 0xffffffff00000000ULL;
  343|  1.72M|    n[2U] = 0xfffffffffffffffeULL;
  344|  1.72M|    n[3U] = 0xffffffffffffffffULL;
  345|  1.72M|    n[4U] = 0xffffffffffffffffULL;
  346|  1.72M|    n[5U] = 0xffffffffffffffffULL;
  347|  1.72M|}
Hacl_P384.c:to_mont:
  656|    410|{
  657|    410|    uint64_t r2modn[6U] = { 0U };
  658|    410|    p384_make_fmont_R2(r2modn);
  659|    410|    uint64_t tmp[12U] = { 0U };
  660|    410|    bn_mul(tmp, b, r2modn);
  661|    410|    fmont_reduction(a, tmp);
  662|    410|}
Hacl_P384.c:p384_make_fmont_R2:
  406|    410|{
  407|    410|    n[0U] = 0xfffffffe00000001ULL;
  408|    410|    n[1U] = 0x0000000200000000ULL;
  409|    410|    n[2U] = 0xfffffffe00000000ULL;
  410|    410|    n[3U] = 0x0000000200000000ULL;
  411|    410|    n[4U] = 0x0000000000000001ULL;
  412|    410|    n[5U] = 0x0ULL;
  413|    410|}
Hacl_P384.c:fmont_reduction:
  446|   651k|{
  447|   651k|    uint64_t n[6U] = { 0U };
  448|   651k|    p384_make_prime(n);
  449|   651k|    uint64_t c0 = 0ULL;
  450|   651k|    KRML_MAYBE_FOR6(
  ------------------
  |  |  342|   651k|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|   651k|    do {                               \
  |  |  |  |  289|   651k|        uint32_t i = z;                \
  |  |  |  |  290|   651k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   651k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  451|   651k|        i0,
  452|   651k|        0U,
  453|   651k|        6U,
  454|   651k|        1U,
  455|   651k|        uint64_t qj = 4294967297ULL * x[i0];
  456|   651k|        uint64_t *res_j0 = x + i0;
  457|   651k|        uint64_t c = 0ULL;
  458|   651k|        {
  459|   651k|            uint64_t a_i = n[4U * 0U];
  460|   651k|            uint64_t *res_i0 = res_j0 + 4U * 0U;
  461|   651k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, qj, c, res_i0);
  462|   651k|            uint64_t a_i0 = n[4U * 0U + 1U];
  463|   651k|            uint64_t *res_i1 = res_j0 + 4U * 0U + 1U;
  464|   651k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i0, qj, c, res_i1);
  465|   651k|            uint64_t a_i1 = n[4U * 0U + 2U];
  466|   651k|            uint64_t *res_i2 = res_j0 + 4U * 0U + 2U;
  467|   651k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i1, qj, c, res_i2);
  468|   651k|            uint64_t a_i2 = n[4U * 0U + 3U];
  469|   651k|            uint64_t *res_i = res_j0 + 4U * 0U + 3U;
  470|   651k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i2, qj, c, res_i);
  471|   651k|        } KRML_MAYBE_FOR2(i,
  472|   651k|                          4U,
  473|   651k|                          6U,
  474|   651k|                          1U,
  475|   651k|                          uint64_t a_i = n[i];
  476|   651k|                          uint64_t *res_i = res_j0 + i;
  477|   651k|                          c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, qj, c, res_i););
  478|   651k|        uint64_t r = c;
  479|   651k|        uint64_t c1 = r;
  480|   651k|        uint64_t *resb = x + 6U + i0;
  481|   651k|        uint64_t res_j = x[6U + i0];
  482|   651k|        c0 = Lib_IntTypes_Intrinsics_add_carry_u64(c0, c1, res_j, resb););
  483|   651k|    memcpy(res, x + 6U, 6U * sizeof(uint64_t));
  484|   651k|    uint64_t c00 = c0;
  485|   651k|    uint64_t tmp[6U] = { 0U };
  486|   651k|    uint64_t c = 0ULL;
  487|   651k|    {
  488|   651k|        uint64_t t1 = res[4U * 0U];
  489|   651k|        uint64_t t20 = n[4U * 0U];
  490|   651k|        uint64_t *res_i0 = tmp + 4U * 0U;
  491|   651k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t1, t20, res_i0);
  ------------------
  |  |   89|   651k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  492|   651k|        uint64_t t10 = res[4U * 0U + 1U];
  493|   651k|        uint64_t t21 = n[4U * 0U + 1U];
  494|   651k|        uint64_t *res_i1 = tmp + 4U * 0U + 1U;
  495|   651k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t10, t21, res_i1);
  ------------------
  |  |   89|   651k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  496|   651k|        uint64_t t11 = res[4U * 0U + 2U];
  497|   651k|        uint64_t t22 = n[4U * 0U + 2U];
  498|   651k|        uint64_t *res_i2 = tmp + 4U * 0U + 2U;
  499|   651k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t11, t22, res_i2);
  ------------------
  |  |   89|   651k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  500|   651k|        uint64_t t12 = res[4U * 0U + 3U];
  501|   651k|        uint64_t t2 = n[4U * 0U + 3U];
  502|   651k|        uint64_t *res_i = tmp + 4U * 0U + 3U;
  503|   651k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t12, t2, res_i);
  ------------------
  |  |   89|   651k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  504|   651k|    }
  505|   651k|    KRML_MAYBE_FOR2(i,
  ------------------
  |  |  318|   651k|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|   651k|    do {                               \
  |  |  |  |  289|   651k|        uint32_t i = z;                \
  |  |  |  |  290|   651k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   651k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  506|   651k|                    4U,
  507|   651k|                    6U,
  508|   651k|                    1U,
  509|   651k|                    uint64_t t1 = res[i];
  510|   651k|                    uint64_t t2 = n[i];
  511|   651k|                    uint64_t *res_i = tmp + i;
  512|   651k|                    c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t1, t2, res_i););
  513|   651k|    uint64_t c1 = c;
  514|   651k|    uint64_t c2 = c00 - c1;
  515|   651k|    KRML_MAYBE_FOR6(i,
  ------------------
  |  |  342|   651k|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|   651k|    do {                               \
  |  |  |  |  289|   651k|        uint32_t i = z;                \
  |  |  |  |  290|   651k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   651k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  516|   651k|                    0U,
  517|   651k|                    6U,
  518|   651k|                    1U,
  519|   651k|                    uint64_t *os = res;
  520|   651k|                    uint64_t x1 = (c2 & res[i]) | (~c2 & tmp[i]);
  521|   651k|                    os[i] = x1;);
  522|   651k|}
Hacl_P384.c:fsqr0:
  640|   131k|{
  641|   131k|    uint64_t tmp[12U] = { 0U };
  642|   131k|    bn_sqr(tmp, b);
  643|   131k|    fmont_reduction(a, tmp);
  644|   131k|}
Hacl_P384.c:fmul0:
  632|   519k|{
  633|   519k|    uint64_t tmp[12U] = { 0U };
  634|   519k|    bn_mul(tmp, b, c);
  635|   519k|    fmont_reduction(a, tmp);
  636|   519k|}
Hacl_P384.c:p384_make_a_coeff:
  362|    104|{
  363|    104|    a[0U] = 0x00000003fffffffcULL;
  364|    104|    a[1U] = 0xfffffffc00000000ULL;
  365|    104|    a[2U] = 0xfffffffffffffffbULL;
  366|    104|    a[3U] = 0xffffffffffffffffULL;
  367|    104|    a[4U] = 0xffffffffffffffffULL;
  368|    104|    a[5U] = 0xffffffffffffffffULL;
  369|    104|}
Hacl_P384.c:fadd0:
  616|   761k|{
  617|   761k|    uint64_t n[6U] = { 0U };
  618|   761k|    p384_make_prime(n);
  619|   761k|    bn_add_mod(a, n, b, c);
  620|   761k|}
Hacl_P384.c:p384_make_b_coeff:
  373|  95.0k|{
  374|  95.0k|    b[0U] = 0x081188719d412dccULL;
  375|  95.0k|    b[1U] = 0xf729add87a4c32ecULL;
  376|  95.0k|    b[2U] = 0x77f2209b1920022eULL;
  377|  95.0k|    b[3U] = 0xe3374bee94938ae2ULL;
  378|  95.0k|    b[4U] = 0xb62b21f41f022094ULL;
  379|  95.0k|    b[5U] = 0xcd08114b604fbff9ULL;
  380|  95.0k|}
Hacl_P384.c:bn_is_eq_mask:
   32|    300|{
   33|    300|    uint64_t mask = 0xFFFFFFFFFFFFFFFFULL;
   34|    300|    KRML_MAYBE_FOR6(i,
  ------------------
  |  |  342|    300|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|    300|    do {                               \
  |  |  |  |  289|    300|        uint32_t i = z;                \
  |  |  |  |  290|    300|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    300|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   35|    300|                    0U,
   36|    300|                    6U,
   37|    300|                    1U,
   38|    300|                    uint64_t uu____0 = FStar_UInt64_eq_mask(x[i], y[i]);
   39|    300|                    mask = uu____0 & mask;);
   40|    300|    uint64_t mask1 = mask;
   41|    300|    return mask1;
   42|    300|}
Hacl_P384.c:p384_make_fone:
  424|    389|{
  425|    389|    n[0U] = 0xffffffff00000001ULL;
  426|    389|    n[1U] = 0x00000000ffffffffULL;
  427|    389|    n[2U] = 0x1ULL;
  428|    389|    n[3U] = 0x0ULL;
  429|    389|    n[4U] = 0x0ULL;
  430|    389|    n[5U] = 0x0ULL;
  431|    389|}
Hacl_P384.c:p384_make_order:
  351|  23.7k|{
  352|  23.7k|    n[0U] = 0xecec196accc52973ULL;
  353|  23.7k|    n[1U] = 0x581a0db248b0a77aULL;
  354|  23.7k|    n[2U] = 0xc7634d81f4372ddfULL;
  355|  23.7k|    n[3U] = 0xffffffffffffffffULL;
  356|  23.7k|    n[4U] = 0xffffffffffffffffULL;
  357|  23.7k|    n[5U] = 0xffffffffffffffffULL;
  358|  23.7k|}
Hacl_P384.c:bn_sub:
  130|    412|{
  131|    412|    uint64_t c1 = 0ULL;
  132|    412|    {
  133|    412|        uint64_t t1 = b[4U * 0U];
  134|    412|        uint64_t t20 = c[4U * 0U];
  135|    412|        uint64_t *res_i0 = a + 4U * 0U;
  136|    412|        c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t1, t20, res_i0);
  ------------------
  |  |   89|    412|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  137|    412|        uint64_t t10 = b[4U * 0U + 1U];
  138|    412|        uint64_t t21 = c[4U * 0U + 1U];
  139|    412|        uint64_t *res_i1 = a + 4U * 0U + 1U;
  140|    412|        c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t10, t21, res_i1);
  ------------------
  |  |   89|    412|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  141|    412|        uint64_t t11 = b[4U * 0U + 2U];
  142|    412|        uint64_t t22 = c[4U * 0U + 2U];
  143|    412|        uint64_t *res_i2 = a + 4U * 0U + 2U;
  144|    412|        c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t11, t22, res_i2);
  ------------------
  |  |   89|    412|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  145|    412|        uint64_t t12 = b[4U * 0U + 3U];
  146|    412|        uint64_t t2 = c[4U * 0U + 3U];
  147|    412|        uint64_t *res_i = a + 4U * 0U + 3U;
  148|    412|        c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t12, t2, res_i);
  ------------------
  |  |   89|    412|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  149|    412|    }
  150|    412|    KRML_MAYBE_FOR2(i,
  ------------------
  |  |  318|    412|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|    412|    do {                               \
  |  |  |  |  289|    412|        uint32_t i = z;                \
  |  |  |  |  290|    412|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    412|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  151|    412|                    4U,
  152|    412|                    6U,
  153|    412|                    1U,
  154|    412|                    uint64_t t1 = b[i];
  155|    412|                    uint64_t t2 = c[i];
  156|    412|                    uint64_t *res_i = a + i;
  157|    412|                    c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t1, t2, res_i););
  158|    412|    uint64_t c10 = c1;
  159|    412|    return c10;
  160|    412|}
Hacl_P384.c:fexp_consttime:
  666|     48|{
  667|     48|    uint64_t table[192U] = { 0U };
  668|     48|    uint64_t tmp[6U] = { 0U };
  669|     48|    uint64_t *t0 = table;
  670|     48|    uint64_t *t1 = table + 6U;
  671|     48|    p384_make_fone(t0);
  672|     48|    memcpy(t1, a, 6U * sizeof(uint64_t));
  673|     48|    KRML_MAYBE_FOR15(i,
  ------------------
  |  |  396|     48|#define KRML_MAYBE_FOR15(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 15, k, x)
  |  |  ------------------
  |  |  |  |  288|     48|    do {                               \
  |  |  |  |  289|     48|        uint32_t i = z;                \
  |  |  |  |  290|     48|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|     48|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  674|     48|                     0U,
  675|     48|                     15U,
  676|     48|                     1U,
  677|     48|                     uint64_t *t11 = table + (i + 1U) * 6U;
  678|     48|                     fsqr0(tmp, t11);
  679|     48|                     memcpy(table + (2U * i + 2U) * 6U, tmp, 6U * sizeof(uint64_t));
  680|     48|                     uint64_t *t2 = table + (2U * i + 2U) * 6U;
  681|     48|                     fmul0(tmp, a, t2);
  682|     48|                     memcpy(table + (2U * i + 3U) * 6U, tmp, 6U * sizeof(uint64_t)););
  683|     48|    uint32_t i0 = 380U;
  684|     48|    uint64_t bits_c = Hacl_Bignum_Lib_bn_get_bits_u64(6U, b, i0, 5U);
  685|     48|    memcpy(out, (uint64_t *)table, 6U * sizeof(uint64_t));
  686|  1.53k|    for (uint32_t i1 = 0U; i1 < 31U; i1++) {
  ------------------
  |  Branch (686:28): [True: 1.48k, False: 48]
  ------------------
  687|  1.48k|        uint64_t c = FStar_UInt64_eq_mask(bits_c, (uint64_t)(i1 + 1U));
  688|  1.48k|        const uint64_t *res_j = table + (i1 + 1U) * 6U;
  689|  1.48k|        KRML_MAYBE_FOR6(i,
  ------------------
  |  |  342|  1.48k|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|  1.48k|    do {                               \
  |  |  |  |  289|  1.48k|        uint32_t i = z;                \
  |  |  |  |  290|  1.48k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  690|  1.48k|                        0U,
  691|  1.48k|                        6U,
  692|  1.48k|                        1U,
  693|  1.48k|                        uint64_t *os = out;
  694|  1.48k|                        uint64_t x = (c & res_j[i]) | (~c & out[i]);
  695|  1.48k|                        os[i] = x;);
  696|  1.48k|    }
  697|     48|    uint64_t tmp0[6U] = { 0U };
  698|  3.69k|    for (uint32_t i1 = 0U; i1 < 76U; i1++) {
  ------------------
  |  Branch (698:28): [True: 3.64k, False: 48]
  ------------------
  699|  3.64k|        KRML_MAYBE_FOR5(i, 0U, 5U, 1U, fsqr0(out, out););
  ------------------
  |  |  336|  3.64k|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|  3.64k|    do {                               \
  |  |  |  |  289|  3.64k|        uint32_t i = z;                \
  |  |  |  |  290|  3.64k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  3.64k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  700|  3.64k|        uint32_t k = 380U - 5U * i1 - 5U;
  701|  3.64k|        uint64_t bits_l = Hacl_Bignum_Lib_bn_get_bits_u64(6U, b, k, 5U);
  702|  3.64k|        memcpy(tmp0, (uint64_t *)table, 6U * sizeof(uint64_t));
  703|   116k|        for (uint32_t i2 = 0U; i2 < 31U; i2++) {
  ------------------
  |  Branch (703:32): [True: 113k, False: 3.64k]
  ------------------
  704|   113k|            uint64_t c = FStar_UInt64_eq_mask(bits_l, (uint64_t)(i2 + 1U));
  705|   113k|            const uint64_t *res_j = table + (i2 + 1U) * 6U;
  706|   113k|            KRML_MAYBE_FOR6(i,
  ------------------
  |  |  342|   113k|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|   113k|    do {                               \
  |  |  |  |  289|   113k|        uint32_t i = z;                \
  |  |  |  |  290|   113k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   113k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  707|   113k|                            0U,
  708|   113k|                            6U,
  709|   113k|                            1U,
  710|   113k|                            uint64_t *os = tmp0;
  711|   113k|                            uint64_t x = (c & res_j[i]) | (~c & tmp0[i]);
  712|   113k|                            os[i] = x;);
  713|   113k|        }
  714|  3.64k|        fmul0(out, out, tmp0);
  715|  3.64k|    }
  716|     48|}
Hacl_P384.c:from_mont:
  648|     48|{
  649|     48|    uint64_t tmp[12U] = { 0U };
  650|     48|    memcpy(tmp, b, 6U * sizeof(uint64_t));
  651|     48|    fmont_reduction(a, tmp);
  652|     48|}
Hacl_P384.c:fsub0:
  624|   314k|{
  625|   314k|    uint64_t n[6U] = { 0U };
  626|   314k|    p384_make_prime(n);
  627|   314k|    bn_sub_mod(a, n, b, c);
  628|   314k|}
Hacl_P384.c:bn_sub_mod:
  164|   314k|{
  165|   314k|    uint64_t c10 = 0ULL;
  166|   314k|    {
  167|   314k|        uint64_t t1 = c[4U * 0U];
  168|   314k|        uint64_t t20 = d[4U * 0U];
  169|   314k|        uint64_t *res_i0 = a + 4U * 0U;
  170|   314k|        c10 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c10, t1, t20, res_i0);
  ------------------
  |  |   89|   314k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  171|   314k|        uint64_t t10 = c[4U * 0U + 1U];
  172|   314k|        uint64_t t21 = d[4U * 0U + 1U];
  173|   314k|        uint64_t *res_i1 = a + 4U * 0U + 1U;
  174|   314k|        c10 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c10, t10, t21, res_i1);
  ------------------
  |  |   89|   314k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  175|   314k|        uint64_t t11 = c[4U * 0U + 2U];
  176|   314k|        uint64_t t22 = d[4U * 0U + 2U];
  177|   314k|        uint64_t *res_i2 = a + 4U * 0U + 2U;
  178|   314k|        c10 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c10, t11, t22, res_i2);
  ------------------
  |  |   89|   314k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  179|   314k|        uint64_t t12 = c[4U * 0U + 3U];
  180|   314k|        uint64_t t2 = d[4U * 0U + 3U];
  181|   314k|        uint64_t *res_i = a + 4U * 0U + 3U;
  182|   314k|        c10 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c10, t12, t2, res_i);
  ------------------
  |  |   89|   314k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  183|   314k|    }
  184|   314k|    KRML_MAYBE_FOR2(i,
  ------------------
  |  |  318|   314k|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|   314k|    do {                               \
  |  |  |  |  289|   314k|        uint32_t i = z;                \
  |  |  |  |  290|   314k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   314k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  185|   314k|                    4U,
  186|   314k|                    6U,
  187|   314k|                    1U,
  188|   314k|                    uint64_t t1 = c[i];
  189|   314k|                    uint64_t t2 = d[i];
  190|   314k|                    uint64_t *res_i = a + i;
  191|   314k|                    c10 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c10, t1, t2, res_i););
  192|   314k|    uint64_t c0 = c10;
  193|   314k|    uint64_t tmp[6U] = { 0U };
  194|   314k|    uint64_t c1 = 0ULL;
  195|   314k|    {
  196|   314k|        uint64_t t1 = a[4U * 0U];
  197|   314k|        uint64_t t20 = b[4U * 0U];
  198|   314k|        uint64_t *res_i0 = tmp + 4U * 0U;
  199|   314k|        c1 = Lib_IntTypes_Intrinsics_add_carry_u64(c1, t1, t20, res_i0);
  ------------------
  |  |   66|   314k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  200|   314k|        uint64_t t10 = a[4U * 0U + 1U];
  201|   314k|        uint64_t t21 = b[4U * 0U + 1U];
  202|   314k|        uint64_t *res_i1 = tmp + 4U * 0U + 1U;
  203|   314k|        c1 = Lib_IntTypes_Intrinsics_add_carry_u64(c1, t10, t21, res_i1);
  ------------------
  |  |   66|   314k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  204|   314k|        uint64_t t11 = a[4U * 0U + 2U];
  205|   314k|        uint64_t t22 = b[4U * 0U + 2U];
  206|   314k|        uint64_t *res_i2 = tmp + 4U * 0U + 2U;
  207|   314k|        c1 = Lib_IntTypes_Intrinsics_add_carry_u64(c1, t11, t22, res_i2);
  ------------------
  |  |   66|   314k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  208|   314k|        uint64_t t12 = a[4U * 0U + 3U];
  209|   314k|        uint64_t t2 = b[4U * 0U + 3U];
  210|   314k|        uint64_t *res_i = tmp + 4U * 0U + 3U;
  211|   314k|        c1 = Lib_IntTypes_Intrinsics_add_carry_u64(c1, t12, t2, res_i);
  ------------------
  |  |   66|   314k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  212|   314k|    }
  213|   314k|    KRML_MAYBE_FOR2(i,
  ------------------
  |  |  318|   314k|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|   314k|    do {                               \
  |  |  |  |  289|   314k|        uint32_t i = z;                \
  |  |  |  |  290|   314k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   314k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  214|   314k|                    4U,
  215|   314k|                    6U,
  216|   314k|                    1U,
  217|   314k|                    uint64_t t1 = a[i];
  218|   314k|                    uint64_t t2 = b[i];
  219|   314k|                    uint64_t *res_i = tmp + i;
  220|   314k|                    c1 = Lib_IntTypes_Intrinsics_add_carry_u64(c1, t1, t2, res_i););
  221|   314k|    uint64_t c11 = c1;
  222|   314k|    KRML_MAYBE_UNUSED_VAR(c11);
  ------------------
  |  |   60|   314k|#define KRML_MAYBE_UNUSED_VAR(x) KRML_HOST_IGNORE(x)
  |  |  ------------------
  |  |  |  |   56|   314k|#define KRML_HOST_IGNORE(x) (void)(x)
  |  |  ------------------
  ------------------
  223|   314k|    uint64_t c2 = 0ULL - c0;
  224|   314k|    KRML_MAYBE_FOR6(i,
  ------------------
  |  |  342|   314k|#define KRML_MAYBE_FOR6(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 6, k, x)
  |  |  ------------------
  |  |  |  |  288|   314k|    do {                               \
  |  |  |  |  289|   314k|        uint32_t i = z;                \
  |  |  |  |  290|   314k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   314k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  225|   314k|                    0U,
  226|   314k|                    6U,
  227|   314k|                    1U,
  228|   314k|                    uint64_t *os = a;
  229|   314k|                    uint64_t x = (c2 & tmp[i]) | (~c2 & a[i]);
  230|   314k|                    os[i] = x;);
  231|   314k|}
Hacl_P384.c:point_mul_g:
 1069|     48|{
 1070|     48|    uint64_t g[18U] = { 0U };
 1071|     48|    uint64_t *x = g;
 1072|     48|    uint64_t *y = g + 6U;
 1073|     48|    uint64_t *z = g + 12U;
 1074|     48|    p384_make_g_x(x);
 1075|     48|    p384_make_g_y(y);
 1076|     48|    p384_make_fone(z);
 1077|     48|    point_mul(res, scalar, g);
 1078|     48|}
Hacl_P384.c:p384_make_g_x:
  384|     48|{
  385|     48|    n[0U] = 0x3dd0756649c0b528ULL;
  386|     48|    n[1U] = 0x20e378e2a0d6ce38ULL;
  387|     48|    n[2U] = 0x879c3afc541b4d6eULL;
  388|     48|    n[3U] = 0x6454868459a30effULL;
  389|     48|    n[4U] = 0x812ff723614ede2bULL;
  390|     48|    n[5U] = 0x4d3aadc2299e1513ULL;
  391|     48|}
Hacl_P384.c:p384_make_g_y:
  395|     48|{
  396|     48|    n[0U] = 0x23043dad4b03a4feULL;
  397|     48|    n[1U] = 0xa1bfa8bf7bb4a9acULL;
  398|     48|    n[2U] = 0x8bade7562e83b050ULL;
  399|     48|    n[3U] = 0xc6c3521968f4ffd9ULL;
  400|     48|    n[4U] = 0xdd8002263969a840ULL;
  401|     48|    n[5U] = 0x2b78abc25a15c5e9ULL;
  402|     48|}
Hacl_P384.c:p384_finv:
  720|     48|{
  721|     48|    uint64_t b[6U] = { 0U };
  722|     48|    b[0U] = 0x00000000fffffffdULL;
  723|     48|    b[1U] = 0xffffffff00000000ULL;
  724|     48|    b[2U] = 0xfffffffffffffffeULL;
  725|     48|    b[3U] = 0xffffffffffffffffULL;
  726|     48|    b[4U] = 0xffffffffffffffffULL;
  727|     48|    b[5U] = 0xffffffffffffffffULL;
  728|     48|    fexp_consttime(res, a, b);
  729|     48|}
Hacl_P384.c:point_mul:
 1027|     96|{
 1028|     96|    uint64_t table[288U] = { 0U };
 1029|     96|    uint64_t tmp[18U] = { 0U };
 1030|     96|    uint64_t *t0 = table;
 1031|     96|    uint64_t *t1 = table + 18U;
 1032|     96|    point_zero(t0);
 1033|     96|    memcpy(t1, p, 18U * sizeof(uint64_t));
 1034|     96|    KRML_MAYBE_FOR7(i,
  ------------------
  |  |  348|     96|#define KRML_MAYBE_FOR7(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 7, k, x)
  |  |  ------------------
  |  |  |  |  288|     96|    do {                               \
  |  |  |  |  289|     96|        uint32_t i = z;                \
  |  |  |  |  290|     96|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|     96|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1035|     96|                    0U,
 1036|     96|                    7U,
 1037|     96|                    1U,
 1038|     96|                    uint64_t *t11 = table + (i + 1U) * 18U;
 1039|     96|                    point_double(t11, tmp);
 1040|     96|                    memcpy(table + (2U * i + 2U) * 18U, tmp, 18U * sizeof(uint64_t));
 1041|     96|                    uint64_t *t2 = table + (2U * i + 2U) * 18U;
 1042|     96|                    point_add(p, t2, tmp);
 1043|     96|                    memcpy(table + (2U * i + 3U) * 18U, tmp, 18U * sizeof(uint64_t)););
 1044|     96|    point_zero(res);
 1045|     96|    uint64_t tmp0[18U] = { 0U };
 1046|  9.31k|    for (uint32_t i0 = 0U; i0 < 96U; i0++) {
  ------------------
  |  Branch (1046:28): [True: 9.21k, False: 96]
  ------------------
 1047|  9.21k|        KRML_MAYBE_FOR4(i, 0U, 4U, 1U, point_double(res, res););
  ------------------
  |  |  330|  9.21k|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|  9.21k|    do {                               \
  |  |  |  |  289|  9.21k|        uint32_t i = z;                \
  |  |  |  |  290|  9.21k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  9.21k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1048|  9.21k|        uint32_t k = 384U - 4U * i0 - 4U;
 1049|  9.21k|        uint64_t bits_l = Hacl_Bignum_Lib_bn_get_bits_u64(6U, scalar, k, 4U);
 1050|  9.21k|        memcpy(tmp0, (uint64_t *)table, 18U * sizeof(uint64_t));
 1051|  9.21k|        KRML_MAYBE_FOR15(
  ------------------
  |  |  396|  9.21k|#define KRML_MAYBE_FOR15(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 15, k, x)
  |  |  ------------------
  |  |  |  |  288|  9.21k|    do {                               \
  |  |  |  |  289|  9.21k|        uint32_t i = z;                \
  |  |  |  |  290|  9.21k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  9.21k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1052|  9.21k|            i1,
 1053|  9.21k|            0U,
 1054|  9.21k|            15U,
 1055|  9.21k|            1U,
 1056|  9.21k|            uint64_t c = FStar_UInt64_eq_mask(bits_l, (uint64_t)(i1 + 1U));
 1057|  9.21k|            const uint64_t *res_j = table + (i1 + 1U) * 18U;
 1058|  9.21k|            for (uint32_t i = 0U; i < 18U; i++) {
 1059|  9.21k|                uint64_t *os = tmp0;
 1060|  9.21k|                uint64_t x = (c & res_j[i]) | (~c & tmp0[i]);
 1061|  9.21k|                os[i] = x;
 1062|  9.21k|            });
 1063|  9.21k|        point_add(res, tmp0, res);
 1064|  9.21k|    }
 1065|     96|}
Hacl_P384.c:point_zero:
 1016|    192|{
 1017|    192|    uint64_t *x = one;
 1018|    192|    uint64_t *y = one + 6U;
 1019|    192|    uint64_t *z = one + 12U;
 1020|    192|    p384_make_fzero(x);
 1021|    192|    p384_make_fone(y);
 1022|    192|    p384_make_fzero(z);
 1023|    192|}
Hacl_P384.c:p384_make_fzero:
  417|    384|{
  418|    384|    memset(n, 0U, 6U * sizeof(uint64_t));
  419|    384|    n[0U] = 0ULL;
  420|    384|}
Hacl_P384.c:point_double:
  959|  37.5k|{
  960|  37.5k|    uint64_t tmp[30U] = { 0U };
  961|  37.5k|    uint64_t *x1 = x;
  962|  37.5k|    uint64_t *z = x + 12U;
  963|  37.5k|    uint64_t *x3 = xx;
  964|  37.5k|    uint64_t *y3 = xx + 6U;
  965|  37.5k|    uint64_t *z3 = xx + 12U;
  966|  37.5k|    uint64_t *t0 = tmp;
  967|  37.5k|    uint64_t *t1 = tmp + 6U;
  968|  37.5k|    uint64_t *t2 = tmp + 12U;
  969|  37.5k|    uint64_t *t3 = tmp + 18U;
  970|  37.5k|    uint64_t *t4 = tmp + 24U;
  971|  37.5k|    uint64_t *x2 = x;
  972|  37.5k|    uint64_t *y = x + 6U;
  973|  37.5k|    uint64_t *z1 = x + 12U;
  974|  37.5k|    fsqr0(t0, x2);
  975|  37.5k|    fsqr0(t1, y);
  976|  37.5k|    fsqr0(t2, z1);
  977|  37.5k|    fmul0(t3, x2, y);
  978|  37.5k|    fadd0(t3, t3, t3);
  979|  37.5k|    fmul0(t4, y, z1);
  980|  37.5k|    fmul0(z3, x1, z);
  981|  37.5k|    fadd0(z3, z3, z3);
  982|  37.5k|    uint64_t b_coeff[6U] = { 0U };
  983|  37.5k|    p384_make_b_coeff(b_coeff);
  984|  37.5k|    fmul0(y3, b_coeff, t2);
  985|  37.5k|    fsub0(y3, y3, z3);
  986|  37.5k|    fadd0(x3, y3, y3);
  987|  37.5k|    fadd0(y3, x3, y3);
  988|  37.5k|    fsub0(x3, t1, y3);
  989|  37.5k|    fadd0(y3, t1, y3);
  990|  37.5k|    fmul0(y3, x3, y3);
  991|  37.5k|    fmul0(x3, x3, t3);
  992|  37.5k|    fadd0(t3, t2, t2);
  993|  37.5k|    fadd0(t2, t2, t3);
  994|  37.5k|    uint64_t b_coeff0[6U] = { 0U };
  995|  37.5k|    p384_make_b_coeff(b_coeff0);
  996|  37.5k|    fmul0(z3, b_coeff0, z3);
  997|  37.5k|    fsub0(z3, z3, t2);
  998|  37.5k|    fsub0(z3, z3, t0);
  999|  37.5k|    fadd0(t3, z3, z3);
 1000|  37.5k|    fadd0(z3, z3, t3);
 1001|  37.5k|    fadd0(t3, t0, t0);
 1002|  37.5k|    fadd0(t0, t3, t0);
 1003|  37.5k|    fsub0(t0, t0, t2);
 1004|  37.5k|    fmul0(t0, t0, z3);
 1005|  37.5k|    fadd0(y3, y3, t0);
 1006|  37.5k|    fadd0(t0, t4, t4);
 1007|  37.5k|    fmul0(z3, t0, z3);
 1008|  37.5k|    fsub0(x3, x3, z3);
 1009|  37.5k|    fmul0(z3, t0, t1);
 1010|  37.5k|    fadd0(z3, z3, z3);
 1011|  37.5k|    fadd0(z3, z3, z3);
 1012|  37.5k|}

Hacl_P521_ecdsa_verif_without_hash:
 1421|     42|{
 1422|     42|    uint64_t m_q[9U] = { 0U };
 1423|     42|    uint8_t mHash[66U] = { 0U };
 1424|     42|    memcpy(mHash, msg, 66U * sizeof(uint8_t));
 1425|     42|    KRML_MAYBE_UNUSED_VAR(msg_len);
  ------------------
  |  |   60|     42|#define KRML_MAYBE_UNUSED_VAR(x) KRML_HOST_IGNORE(x)
  |  |  ------------------
  |  |  |  |   56|     42|#define KRML_HOST_IGNORE(x) (void)(x)
  |  |  ------------------
  ------------------
 1426|     42|    bn_from_bytes_be(m_q, mHash);
 1427|     42|    qmod_short(m_q, m_q);
 1428|     42|    bool res = ecdsa_verify_msg_as_qelem(m_q, public_key, signature_r, signature_s);
 1429|     42|    return res;
 1430|     42|}
Hacl_P521_validate_public_key:
 1452|     58|{
 1453|     58|    uint64_t point_jac[27U] = { 0U };
 1454|     58|    uint64_t p_aff[18U] = { 0U };
 1455|     58|    uint8_t *p_x = public_key;
 1456|     58|    uint8_t *p_y = public_key + 66U;
 1457|     58|    uint64_t *bn_p_x = p_aff;
 1458|     58|    uint64_t *bn_p_y = p_aff + 9U;
 1459|     58|    bn_from_bytes_be(bn_p_x, p_x);
 1460|     58|    bn_from_bytes_be(bn_p_y, p_y);
 1461|     58|    uint64_t *px0 = p_aff;
 1462|     58|    uint64_t *py0 = p_aff + 9U;
 1463|     58|    uint64_t lessX = bn_is_lt_prime_mask(px0);
 1464|     58|    uint64_t lessY = bn_is_lt_prime_mask(py0);
 1465|     58|    uint64_t res0 = lessX & lessY;
 1466|     58|    bool is_xy_valid = res0 == 0xFFFFFFFFFFFFFFFFULL;
 1467|     58|    bool res;
 1468|     58|    if (!is_xy_valid) {
  ------------------
  |  Branch (1468:9): [True: 8, False: 50]
  ------------------
 1469|      8|        res = false;
 1470|     50|    } else {
 1471|     50|        uint64_t rp[9U] = { 0U };
 1472|     50|        uint64_t tx[9U] = { 0U };
 1473|     50|        uint64_t ty[9U] = { 0U };
 1474|     50|        uint64_t *px = p_aff;
 1475|     50|        uint64_t *py = p_aff + 9U;
 1476|     50|        to_mont(tx, px);
 1477|     50|        to_mont(ty, py);
 1478|     50|        uint64_t tmp[9U] = { 0U };
 1479|     50|        fsqr0(rp, tx);
 1480|     50|        fmul0(rp, rp, tx);
 1481|     50|        p521_make_a_coeff(tmp);
 1482|     50|        fmul0(tmp, tmp, tx);
 1483|     50|        fadd0(rp, tmp, rp);
 1484|     50|        p521_make_b_coeff(tmp);
 1485|     50|        fadd0(rp, tmp, rp);
 1486|     50|        fsqr0(ty, ty);
 1487|     50|        uint64_t r = bn_is_eq_mask(ty, rp);
 1488|     50|        uint64_t r0 = r;
 1489|     50|        bool r1 = r0 == 0xFFFFFFFFFFFFFFFFULL;
 1490|     50|        res = r1;
 1491|     50|    }
 1492|     58|    if (res) {
  ------------------
  |  Branch (1492:9): [True: 42, False: 16]
  ------------------
 1493|     42|        uint64_t *px = p_aff;
 1494|     42|        uint64_t *py = p_aff + 9U;
 1495|     42|        uint64_t *rx = point_jac;
 1496|     42|        uint64_t *ry = point_jac + 9U;
 1497|     42|        uint64_t *rz = point_jac + 18U;
 1498|     42|        to_mont(rx, px);
 1499|     42|        to_mont(ry, py);
 1500|     42|        p521_make_fone(rz);
 1501|     42|    }
 1502|     58|    bool res1 = res;
 1503|     58|    return res1;
 1504|     58|}
Hacl_P521.c:bn_from_bytes_be:
  327|    326|{
  328|    326|    uint8_t tmp[72U] = { 0U };
  329|    326|    memcpy(tmp + 6U, b, 66U * sizeof(uint8_t));
  330|    326|    KRML_MAYBE_FOR9(i,
  ------------------
  |  |  360|    326|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|    326|    do {                               \
  |  |  |  |  289|    326|        uint32_t i = z;                \
  |  |  |  |  290|    326|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    326|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  331|    326|                    0U,
  332|    326|                    9U,
  333|    326|                    1U,
  334|    326|                    uint64_t *os = a;
  335|    326|                    uint64_t u = load64_be(tmp + (9U - i - 1U) * 8U);
  336|    326|                    uint64_t x = u;
  337|    326|                    os[i] = x;);
  338|    326|}
Hacl_P521.c:qmod_short:
  853|     82|{
  854|     82|    uint64_t tmp[9U] = { 0U };
  855|     82|    p521_make_order(tmp);
  856|     82|    uint64_t c = bn_sub(tmp, b, tmp);
  857|     82|    bn_cmovznz(a, c, tmp, b);
  858|     82|}
Hacl_P521.c:bn_cmovznz:
   46|     82|{
   47|     82|    uint64_t mask = ~FStar_UInt64_eq_mask(b, 0ULL);
   48|     82|    KRML_MAYBE_FOR9(i,
  ------------------
  |  |  360|     82|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|     82|    do {                               \
  |  |  |  |  289|     82|        uint32_t i = z;                \
  |  |  |  |  290|     82|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|     82|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   49|     82|                    0U,
   50|     82|                    9U,
   51|     82|                    1U,
   52|     82|                    uint64_t *os = a;
   53|     82|                    uint64_t uu____0 = c[i];
   54|     82|                    uint64_t x = uu____0 ^ (mask & (d[i] ^ uu____0));
   55|     82|                    os[i] = x;);
   56|     82|}
Hacl_P521.c:p521_qinv:
  894|     40|{
  895|     40|    uint64_t b[9U] = { 0U };
  896|     40|    b[0U] = 0xbb6fb71e91386407ULL;
  897|     40|    b[1U] = 0x3bb5c9b8899c47aeULL;
  898|     40|    b[2U] = 0x7fcc0148f709a5d0ULL;
  899|     40|    b[3U] = 0x51868783bf2f966bULL;
  900|     40|    b[4U] = 0xfffffffffffffffaULL;
  901|     40|    b[5U] = 0xffffffffffffffffULL;
  902|     40|    b[6U] = 0xffffffffffffffffULL;
  903|     40|    b[7U] = 0xffffffffffffffffULL;
  904|     40|    b[8U] = 0x1ffULL;
  905|     40|    uint64_t tmp[9U] = { 0U };
  906|     40|    memcpy(tmp, a, 9U * sizeof(uint64_t));
  907|     40|    uint64_t table[288U] = { 0U };
  908|     40|    uint64_t tmp1[9U] = { 0U };
  909|     40|    uint64_t *t0 = table;
  910|     40|    uint64_t *t1 = table + 9U;
  911|     40|    p521_make_qone(t0);
  912|     40|    memcpy(t1, tmp, 9U * sizeof(uint64_t));
  913|     40|    KRML_MAYBE_FOR15(i,
  ------------------
  |  |  396|     40|#define KRML_MAYBE_FOR15(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 15, k, x)
  |  |  ------------------
  |  |  |  |  288|     40|    do {                               \
  |  |  |  |  289|     40|        uint32_t i = z;                \
  |  |  |  |  290|     40|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|     40|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  914|     40|                     0U,
  915|     40|                     15U,
  916|     40|                     1U,
  917|     40|                     uint64_t *t11 = table + (i + 1U) * 9U;
  918|     40|                     qsqr(tmp1, t11);
  919|     40|                     memcpy(table + (2U * i + 2U) * 9U, tmp1, 9U * sizeof(uint64_t));
  920|     40|                     uint64_t *t2 = table + (2U * i + 2U) * 9U;
  921|     40|                     qmul(tmp1, tmp, t2);
  922|     40|                     memcpy(table + (2U * i + 3U) * 9U, tmp1, 9U * sizeof(uint64_t)););
  923|     40|    uint32_t i0 = 520U;
  924|     40|    uint64_t bits_c = Hacl_Bignum_Lib_bn_get_bits_u64(9U, b, i0, 5U);
  925|     40|    memcpy(res, (uint64_t *)table, 9U * sizeof(uint64_t));
  926|  1.28k|    for (uint32_t i1 = 0U; i1 < 31U; i1++) {
  ------------------
  |  Branch (926:28): [True: 1.24k, False: 40]
  ------------------
  927|  1.24k|        uint64_t c = FStar_UInt64_eq_mask(bits_c, (uint64_t)(i1 + 1U));
  928|  1.24k|        const uint64_t *res_j = table + (i1 + 1U) * 9U;
  929|  1.24k|        KRML_MAYBE_FOR9(i,
  ------------------
  |  |  360|  1.24k|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|  1.24k|    do {                               \
  |  |  |  |  289|  1.24k|        uint32_t i = z;                \
  |  |  |  |  290|  1.24k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  1.24k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  930|  1.24k|                        0U,
  931|  1.24k|                        9U,
  932|  1.24k|                        1U,
  933|  1.24k|                        uint64_t *os = res;
  934|  1.24k|                        uint64_t x = (c & res_j[i]) | (~c & res[i]);
  935|  1.24k|                        os[i] = x;);
  936|  1.24k|    }
  937|     40|    uint64_t tmp10[9U] = { 0U };
  938|  4.20k|    for (uint32_t i1 = 0U; i1 < 104U; i1++) {
  ------------------
  |  Branch (938:28): [True: 4.16k, False: 40]
  ------------------
  939|  4.16k|        KRML_MAYBE_FOR5(i, 0U, 5U, 1U, qsqr(res, res););
  ------------------
  |  |  336|  4.16k|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|  4.16k|    do {                               \
  |  |  |  |  289|  4.16k|        uint32_t i = z;                \
  |  |  |  |  290|  4.16k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  4.16k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  940|  4.16k|        uint32_t k = 520U - 5U * i1 - 5U;
  941|  4.16k|        uint64_t bits_l = Hacl_Bignum_Lib_bn_get_bits_u64(9U, b, k, 5U);
  942|  4.16k|        memcpy(tmp10, (uint64_t *)table, 9U * sizeof(uint64_t));
  943|   133k|        for (uint32_t i2 = 0U; i2 < 31U; i2++) {
  ------------------
  |  Branch (943:32): [True: 128k, False: 4.16k]
  ------------------
  944|   128k|            uint64_t c = FStar_UInt64_eq_mask(bits_l, (uint64_t)(i2 + 1U));
  945|   128k|            const uint64_t *res_j = table + (i2 + 1U) * 9U;
  946|   128k|            KRML_MAYBE_FOR9(i,
  ------------------
  |  |  360|   128k|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|   128k|    do {                               \
  |  |  |  |  289|   128k|        uint32_t i = z;                \
  |  |  |  |  290|   128k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   128k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  947|   128k|                            0U,
  948|   128k|                            9U,
  949|   128k|                            1U,
  950|   128k|                            uint64_t *os = tmp10;
  951|   128k|                            uint64_t x = (c & res_j[i]) | (~c & tmp10[i]);
  952|   128k|                            os[i] = x;);
  953|   128k|        }
  954|  4.16k|        qmul(res, res, tmp10);
  955|  4.16k|    }
  956|     40|}
Hacl_P521.c:p521_make_qone:
  461|     40|{
  462|     40|    f[0U] = 0xfb80000000000000ULL;
  463|     40|    f[1U] = 0x28a2482470b763cdULL;
  464|     40|    f[2U] = 0x17e2251b23bb31dcULL;
  465|     40|    f[3U] = 0xca4019ff5b847b2dULL;
  466|     40|    f[4U] = 0x2d73cbc3e206834ULL;
  467|     40|    f[5U] = 0x0ULL;
  468|     40|    f[6U] = 0x0ULL;
  469|     40|    f[7U] = 0x0ULL;
  470|     40|    f[8U] = 0x0ULL;
  471|     40|}
Hacl_P521.c:qsqr:
  878|  21.4k|{
  879|  21.4k|    uint64_t tmp[18U] = { 0U };
  880|  21.4k|    bn_sqr(tmp, b);
  881|  21.4k|    qmont_reduction(a, tmp);
  882|  21.4k|}
Hacl_P521.c:bn_sqr:
  271|   169k|{
  272|   169k|    memset(a, 0U, 18U * sizeof(uint64_t));
  273|   169k|    KRML_MAYBE_FOR9(
  ------------------
  |  |  360|   169k|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|   169k|    do {                               \
  |  |  |  |  289|   169k|        uint32_t i = z;                \
  |  |  |  |  290|   169k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   169k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|   169k|        i0,
  275|   169k|        0U,
  276|   169k|        9U,
  277|   169k|        1U,
  278|   169k|        uint64_t *ab = b;
  279|   169k|        uint64_t a_j = b[i0];
  280|   169k|        uint64_t *res_j = a + i0;
  281|   169k|        uint64_t c = 0ULL;
  282|   169k|        for (uint32_t i = 0U; i < i0 / 4U; i++) {
  283|   169k|            uint64_t a_i = ab[4U * i];
  284|   169k|            uint64_t *res_i0 = res_j + 4U * i;
  285|   169k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, a_j, c, res_i0);
  286|   169k|            uint64_t a_i0 = ab[4U * i + 1U];
  287|   169k|            uint64_t *res_i1 = res_j + 4U * i + 1U;
  288|   169k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i0, a_j, c, res_i1);
  289|   169k|            uint64_t a_i1 = ab[4U * i + 2U];
  290|   169k|            uint64_t *res_i2 = res_j + 4U * i + 2U;
  291|   169k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i1, a_j, c, res_i2);
  292|   169k|            uint64_t a_i2 = ab[4U * i + 3U];
  293|   169k|            uint64_t *res_i = res_j + 4U * i + 3U;
  294|   169k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i2, a_j, c, res_i);
  295|   169k|        } for (uint32_t i = i0 / 4U * 4U; i < i0; i++) {
  296|   169k|            uint64_t a_i = ab[i];
  297|   169k|            uint64_t *res_i = res_j + i;
  298|   169k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, a_j, c, res_i);
  299|   169k|        } uint64_t r = c;
  300|   169k|        a[i0 + i0] = r;);
  301|   169k|    uint64_t c0 = Hacl_Bignum_Addition_bn_add_eq_len_u64(18U, a, a, a);
  302|   169k|    KRML_MAYBE_UNUSED_VAR(c0);
  ------------------
  |  |   60|   169k|#define KRML_MAYBE_UNUSED_VAR(x) KRML_HOST_IGNORE(x)
  |  |  ------------------
  |  |  |  |   56|   169k|#define KRML_HOST_IGNORE(x) (void)(x)
  |  |  ------------------
  ------------------
  303|   169k|    uint64_t tmp[18U] = { 0U };
  304|   169k|    KRML_MAYBE_FOR9(i,
  ------------------
  |  |  360|   169k|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|   169k|    do {                               \
  |  |  |  |  289|   169k|        uint32_t i = z;                \
  |  |  |  |  290|   169k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   169k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  305|   169k|                    0U,
  306|   169k|                    9U,
  307|   169k|                    1U,
  308|   169k|                    FStar_UInt128_uint128 res = FStar_UInt128_mul_wide(b[i], b[i]);
  309|   169k|                    uint64_t hi = FStar_UInt128_uint128_to_uint64(FStar_UInt128_shift_right(res, 64U));
  310|   169k|                    uint64_t lo = FStar_UInt128_uint128_to_uint64(res);
  311|   169k|                    tmp[2U * i] = lo;
  312|   169k|                    tmp[2U * i + 1U] = hi;);
  313|   169k|    uint64_t c1 = Hacl_Bignum_Addition_bn_add_eq_len_u64(18U, a, tmp, a);
  314|   169k|    KRML_MAYBE_UNUSED_VAR(c1);
  ------------------
  |  |   60|   169k|#define KRML_MAYBE_UNUSED_VAR(x) KRML_HOST_IGNORE(x)
  |  |  ------------------
  |  |  |  |   56|   169k|#define KRML_HOST_IGNORE(x) (void)(x)
  |  |  ------------------
  ------------------
  315|   169k|}
Hacl_P521.c:qmont_reduction:
  555|  26.3k|{
  556|  26.3k|    uint64_t n[9U] = { 0U };
  557|  26.3k|    p521_make_order(n);
  558|  26.3k|    uint64_t c0 = 0ULL;
  559|  26.3k|    KRML_MAYBE_FOR9(
  ------------------
  |  |  360|  26.3k|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|  26.3k|    do {                               \
  |  |  |  |  289|  26.3k|        uint32_t i = z;                \
  |  |  |  |  290|  26.3k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  26.3k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  560|  26.3k|        i0,
  561|  26.3k|        0U,
  562|  26.3k|        9U,
  563|  26.3k|        1U,
  564|  26.3k|        uint64_t qj = 2103001588584519111ULL * x[i0];
  565|  26.3k|        uint64_t *res_j0 = x + i0;
  566|  26.3k|        uint64_t c = 0ULL;
  567|  26.3k|        KRML_MAYBE_FOR2(i,
  568|  26.3k|                        0U,
  569|  26.3k|                        2U,
  570|  26.3k|                        1U,
  571|  26.3k|                        uint64_t a_i = n[4U * i];
  572|  26.3k|                        uint64_t *res_i0 = res_j0 + 4U * i;
  573|  26.3k|                        c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, qj, c, res_i0);
  574|  26.3k|                        uint64_t a_i0 = n[4U * i + 1U];
  575|  26.3k|                        uint64_t *res_i1 = res_j0 + 4U * i + 1U;
  576|  26.3k|                        c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i0, qj, c, res_i1);
  577|  26.3k|                        uint64_t a_i1 = n[4U * i + 2U];
  578|  26.3k|                        uint64_t *res_i2 = res_j0 + 4U * i + 2U;
  579|  26.3k|                        c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i1, qj, c, res_i2);
  580|  26.3k|                        uint64_t a_i2 = n[4U * i + 3U];
  581|  26.3k|                        uint64_t *res_i = res_j0 + 4U * i + 3U;
  582|  26.3k|                        c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i2, qj, c, res_i););
  583|  26.3k|        {
  584|  26.3k|            uint64_t a_i = n[8U];
  585|  26.3k|            uint64_t *res_i = res_j0 + 8U;
  586|  26.3k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, qj, c, res_i);
  587|  26.3k|        } uint64_t r = c;
  588|  26.3k|        uint64_t c1 = r;
  589|  26.3k|        uint64_t *resb = x + 9U + i0;
  590|  26.3k|        uint64_t res_j = x[9U + i0];
  591|  26.3k|        c0 = Lib_IntTypes_Intrinsics_add_carry_u64(c0, c1, res_j, resb););
  592|  26.3k|    memcpy(res, x + 9U, 9U * sizeof(uint64_t));
  593|  26.3k|    uint64_t c00 = c0;
  594|  26.3k|    uint64_t tmp[9U] = { 0U };
  595|  26.3k|    uint64_t c = 0ULL;
  596|  26.3k|    KRML_MAYBE_FOR2(i,
  ------------------
  |  |  318|  26.3k|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|  26.3k|    do {                               \
  |  |  |  |  289|  26.3k|        uint32_t i = z;                \
  |  |  |  |  290|  26.3k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  26.3k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  597|  26.3k|                    0U,
  598|  26.3k|                    2U,
  599|  26.3k|                    1U,
  600|  26.3k|                    uint64_t t1 = res[4U * i];
  601|  26.3k|                    uint64_t t20 = n[4U * i];
  602|  26.3k|                    uint64_t *res_i0 = tmp + 4U * i;
  603|  26.3k|                    c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t1, t20, res_i0);
  604|  26.3k|                    uint64_t t10 = res[4U * i + 1U];
  605|  26.3k|                    uint64_t t21 = n[4U * i + 1U];
  606|  26.3k|                    uint64_t *res_i1 = tmp + 4U * i + 1U;
  607|  26.3k|                    c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t10, t21, res_i1);
  608|  26.3k|                    uint64_t t11 = res[4U * i + 2U];
  609|  26.3k|                    uint64_t t22 = n[4U * i + 2U];
  610|  26.3k|                    uint64_t *res_i2 = tmp + 4U * i + 2U;
  611|  26.3k|                    c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t11, t22, res_i2);
  612|  26.3k|                    uint64_t t12 = res[4U * i + 3U];
  613|  26.3k|                    uint64_t t2 = n[4U * i + 3U];
  614|  26.3k|                    uint64_t *res_i = tmp + 4U * i + 3U;
  615|  26.3k|                    c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t12, t2, res_i););
  616|  26.3k|    {
  617|  26.3k|        uint64_t t1 = res[8U];
  618|  26.3k|        uint64_t t2 = n[8U];
  619|  26.3k|        uint64_t *res_i = tmp + 8U;
  620|  26.3k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t1, t2, res_i);
  ------------------
  |  |   89|  26.3k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  621|  26.3k|    }
  622|  26.3k|    uint64_t c1 = c;
  623|  26.3k|    uint64_t c2 = c00 - c1;
  624|  26.3k|    KRML_MAYBE_FOR9(i,
  ------------------
  |  |  360|  26.3k|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|  26.3k|    do {                               \
  |  |  |  |  289|  26.3k|        uint32_t i = z;                \
  |  |  |  |  290|  26.3k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  26.3k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  625|  26.3k|                    0U,
  626|  26.3k|                    9U,
  627|  26.3k|                    1U,
  628|  26.3k|                    uint64_t *os = res;
  629|  26.3k|                    uint64_t x1 = (c2 & res[i]) | (~c2 & tmp[i]);
  630|  26.3k|                    os[i] = x1;);
  631|  26.3k|}
Hacl_P521.c:qmul:
  870|  4.84k|{
  871|  4.84k|    uint64_t tmp[18U] = { 0U };
  872|  4.84k|    bn_mul(tmp, b, c);
  873|  4.84k|    qmont_reduction(a, tmp);
  874|  4.84k|}
Hacl_P521.c:bn_mul:
  235|   585k|{
  236|   585k|    memset(a, 0U, 18U * sizeof(uint64_t));
  237|   585k|    KRML_MAYBE_FOR9(
  ------------------
  |  |  360|   585k|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|   585k|    do {                               \
  |  |  |  |  289|   585k|        uint32_t i = z;                \
  |  |  |  |  290|   585k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   585k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  238|   585k|        i0,
  239|   585k|        0U,
  240|   585k|        9U,
  241|   585k|        1U,
  242|   585k|        uint64_t bj = c[i0];
  243|   585k|        uint64_t *res_j = a + i0;
  244|   585k|        uint64_t c1 = 0ULL;
  245|   585k|        KRML_MAYBE_FOR2(i,
  246|   585k|                        0U,
  247|   585k|                        2U,
  248|   585k|                        1U,
  249|   585k|                        uint64_t a_i = b[4U * i];
  250|   585k|                        uint64_t *res_i0 = res_j + 4U * i;
  251|   585k|                        c1 = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, bj, c1, res_i0);
  252|   585k|                        uint64_t a_i0 = b[4U * i + 1U];
  253|   585k|                        uint64_t *res_i1 = res_j + 4U * i + 1U;
  254|   585k|                        c1 = Hacl_Bignum_Base_mul_wide_add2_u64(a_i0, bj, c1, res_i1);
  255|   585k|                        uint64_t a_i1 = b[4U * i + 2U];
  256|   585k|                        uint64_t *res_i2 = res_j + 4U * i + 2U;
  257|   585k|                        c1 = Hacl_Bignum_Base_mul_wide_add2_u64(a_i1, bj, c1, res_i2);
  258|   585k|                        uint64_t a_i2 = b[4U * i + 3U];
  259|   585k|                        uint64_t *res_i = res_j + 4U * i + 3U;
  260|   585k|                        c1 = Hacl_Bignum_Base_mul_wide_add2_u64(a_i2, bj, c1, res_i););
  261|   585k|        {
  262|   585k|            uint64_t a_i = b[8U];
  263|   585k|            uint64_t *res_i = res_j + 8U;
  264|   585k|            c1 = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, bj, c1, res_i);
  265|   585k|        } uint64_t r = c1;
  266|   585k|        a[9U + i0] = r;);
  267|   585k|}
Hacl_P521.c:from_qmont:
  886|     80|{
  887|     80|    uint64_t tmp[18U] = { 0U };
  888|     80|    memcpy(tmp, b, 9U * sizeof(uint64_t));
  889|     80|    qmont_reduction(a, tmp);
  890|     80|}
Hacl_P521.c:bn_add_mod:
   60|   852k|{
   61|   852k|    uint64_t c10 = 0ULL;
   62|   852k|    KRML_MAYBE_FOR2(i,
  ------------------
  |  |  318|   852k|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|   852k|    do {                               \
  |  |  |  |  289|   852k|        uint32_t i = z;                \
  |  |  |  |  290|   852k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   852k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   63|   852k|                    0U,
   64|   852k|                    2U,
   65|   852k|                    1U,
   66|   852k|                    uint64_t t1 = c[4U * i];
   67|   852k|                    uint64_t t20 = d[4U * i];
   68|   852k|                    uint64_t *res_i0 = a + 4U * i;
   69|   852k|                    c10 = Lib_IntTypes_Intrinsics_add_carry_u64(c10, t1, t20, res_i0);
   70|   852k|                    uint64_t t10 = c[4U * i + 1U];
   71|   852k|                    uint64_t t21 = d[4U * i + 1U];
   72|   852k|                    uint64_t *res_i1 = a + 4U * i + 1U;
   73|   852k|                    c10 = Lib_IntTypes_Intrinsics_add_carry_u64(c10, t10, t21, res_i1);
   74|   852k|                    uint64_t t11 = c[4U * i + 2U];
   75|   852k|                    uint64_t t22 = d[4U * i + 2U];
   76|   852k|                    uint64_t *res_i2 = a + 4U * i + 2U;
   77|   852k|                    c10 = Lib_IntTypes_Intrinsics_add_carry_u64(c10, t11, t22, res_i2);
   78|   852k|                    uint64_t t12 = c[4U * i + 3U];
   79|   852k|                    uint64_t t2 = d[4U * i + 3U];
   80|   852k|                    uint64_t *res_i = a + 4U * i + 3U;
   81|   852k|                    c10 = Lib_IntTypes_Intrinsics_add_carry_u64(c10, t12, t2, res_i););
   82|   852k|    {
   83|   852k|        uint64_t t1 = c[8U];
   84|   852k|        uint64_t t2 = d[8U];
   85|   852k|        uint64_t *res_i = a + 8U;
   86|   852k|        c10 = Lib_IntTypes_Intrinsics_add_carry_u64(c10, t1, t2, res_i);
  ------------------
  |  |   66|   852k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
   87|   852k|    }
   88|   852k|    uint64_t c0 = c10;
   89|   852k|    uint64_t tmp[9U] = { 0U };
   90|   852k|    uint64_t c1 = 0ULL;
   91|   852k|    KRML_MAYBE_FOR2(i,
  ------------------
  |  |  318|   852k|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|   852k|    do {                               \
  |  |  |  |  289|   852k|        uint32_t i = z;                \
  |  |  |  |  290|   852k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   852k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   92|   852k|                    0U,
   93|   852k|                    2U,
   94|   852k|                    1U,
   95|   852k|                    uint64_t t1 = a[4U * i];
   96|   852k|                    uint64_t t20 = b[4U * i];
   97|   852k|                    uint64_t *res_i0 = tmp + 4U * i;
   98|   852k|                    c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t1, t20, res_i0);
   99|   852k|                    uint64_t t10 = a[4U * i + 1U];
  100|   852k|                    uint64_t t21 = b[4U * i + 1U];
  101|   852k|                    uint64_t *res_i1 = tmp + 4U * i + 1U;
  102|   852k|                    c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t10, t21, res_i1);
  103|   852k|                    uint64_t t11 = a[4U * i + 2U];
  104|   852k|                    uint64_t t22 = b[4U * i + 2U];
  105|   852k|                    uint64_t *res_i2 = tmp + 4U * i + 2U;
  106|   852k|                    c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t11, t22, res_i2);
  107|   852k|                    uint64_t t12 = a[4U * i + 3U];
  108|   852k|                    uint64_t t2 = b[4U * i + 3U];
  109|   852k|                    uint64_t *res_i = tmp + 4U * i + 3U;
  110|   852k|                    c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t12, t2, res_i););
  111|   852k|    {
  112|   852k|        uint64_t t1 = a[8U];
  113|   852k|        uint64_t t2 = b[8U];
  114|   852k|        uint64_t *res_i = tmp + 8U;
  115|   852k|        c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t1, t2, res_i);
  ------------------
  |  |   89|   852k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  116|   852k|    }
  117|   852k|    uint64_t c11 = c1;
  118|   852k|    uint64_t c2 = c0 - c11;
  119|   852k|    KRML_MAYBE_FOR9(i,
  ------------------
  |  |  360|   852k|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|   852k|    do {                               \
  |  |  |  |  289|   852k|        uint32_t i = z;                \
  |  |  |  |  290|   852k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   852k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  120|   852k|                    0U,
  121|   852k|                    9U,
  122|   852k|                    1U,
  123|   852k|                    uint64_t *os = a;
  124|   852k|                    uint64_t x = (c2 & a[i]) | (~c2 & tmp[i]);
  125|   852k|                    os[i] = x;);
  126|   852k|}
Hacl_P521.c:ecdsa_verify_msg_as_qelem:
 1232|     42|{
 1233|     42|    uint64_t tmp[63U] = { 0U };
 1234|     42|    uint64_t *pk = tmp;
 1235|     42|    uint64_t *r_q = tmp + 27U;
 1236|     42|    uint64_t *s_q = tmp + 36U;
 1237|     42|    uint64_t *u1 = tmp + 45U;
 1238|     42|    uint64_t *u2 = tmp + 54U;
 1239|     42|    uint64_t p_aff[18U] = { 0U };
 1240|     42|    uint8_t *p_x = public_key;
 1241|     42|    uint8_t *p_y = public_key + 66U;
 1242|     42|    uint64_t *bn_p_x = p_aff;
 1243|     42|    uint64_t *bn_p_y = p_aff + 9U;
 1244|     42|    bn_from_bytes_be(bn_p_x, p_x);
 1245|     42|    bn_from_bytes_be(bn_p_y, p_y);
 1246|     42|    uint64_t *px0 = p_aff;
 1247|     42|    uint64_t *py0 = p_aff + 9U;
 1248|     42|    uint64_t lessX = bn_is_lt_prime_mask(px0);
 1249|     42|    uint64_t lessY = bn_is_lt_prime_mask(py0);
 1250|     42|    uint64_t res0 = lessX & lessY;
 1251|     42|    bool is_xy_valid = res0 == 0xFFFFFFFFFFFFFFFFULL;
 1252|     42|    bool res;
 1253|     42|    if (!is_xy_valid) {
  ------------------
  |  Branch (1253:9): [True: 0, False: 42]
  ------------------
 1254|      0|        res = false;
 1255|     42|    } else {
 1256|     42|        uint64_t rp[9U] = { 0U };
 1257|     42|        uint64_t tx[9U] = { 0U };
 1258|     42|        uint64_t ty[9U] = { 0U };
 1259|     42|        uint64_t *px = p_aff;
 1260|     42|        uint64_t *py = p_aff + 9U;
 1261|     42|        to_mont(tx, px);
 1262|     42|        to_mont(ty, py);
 1263|     42|        uint64_t tmp1[9U] = { 0U };
 1264|     42|        fsqr0(rp, tx);
 1265|     42|        fmul0(rp, rp, tx);
 1266|     42|        p521_make_a_coeff(tmp1);
 1267|     42|        fmul0(tmp1, tmp1, tx);
 1268|     42|        fadd0(rp, tmp1, rp);
 1269|     42|        p521_make_b_coeff(tmp1);
 1270|     42|        fadd0(rp, tmp1, rp);
 1271|     42|        fsqr0(ty, ty);
 1272|     42|        uint64_t r = bn_is_eq_mask(ty, rp);
 1273|     42|        uint64_t r0 = r;
 1274|     42|        bool r1 = r0 == 0xFFFFFFFFFFFFFFFFULL;
 1275|     42|        res = r1;
 1276|     42|    }
 1277|     42|    if (res) {
  ------------------
  |  Branch (1277:9): [True: 42, False: 0]
  ------------------
 1278|     42|        uint64_t *px = p_aff;
 1279|     42|        uint64_t *py = p_aff + 9U;
 1280|     42|        uint64_t *rx = pk;
 1281|     42|        uint64_t *ry = pk + 9U;
 1282|     42|        uint64_t *rz = pk + 18U;
 1283|     42|        to_mont(rx, px);
 1284|     42|        to_mont(ry, py);
 1285|     42|        p521_make_fone(rz);
 1286|     42|    }
 1287|     42|    bool is_pk_valid = res;
 1288|     42|    bn_from_bytes_be(r_q, signature_r);
 1289|     42|    bn_from_bytes_be(s_q, signature_s);
 1290|     42|    uint64_t tmp10[9U] = { 0U };
 1291|     42|    p521_make_order(tmp10);
 1292|     42|    uint64_t c = bn_sub(tmp10, r_q, tmp10);
 1293|     42|    uint64_t is_lt_order = FStar_UInt64_gte_mask(c, 0ULL) & ~FStar_UInt64_eq_mask(c, 0ULL);
 1294|     42|    uint64_t bn_zero0[9U] = { 0U };
 1295|     42|    uint64_t res1 = bn_is_eq_mask(r_q, bn_zero0);
 1296|     42|    uint64_t is_eq_zero = res1;
 1297|     42|    uint64_t is_r_valid = is_lt_order & ~is_eq_zero;
 1298|     42|    uint64_t tmp11[9U] = { 0U };
 1299|     42|    p521_make_order(tmp11);
 1300|     42|    uint64_t c0 = bn_sub(tmp11, s_q, tmp11);
 1301|     42|    uint64_t is_lt_order0 = FStar_UInt64_gte_mask(c0, 0ULL) & ~FStar_UInt64_eq_mask(c0, 0ULL);
 1302|     42|    uint64_t bn_zero1[9U] = { 0U };
 1303|     42|    uint64_t res2 = bn_is_eq_mask(s_q, bn_zero1);
 1304|     42|    uint64_t is_eq_zero0 = res2;
 1305|     42|    uint64_t is_s_valid = is_lt_order0 & ~is_eq_zero0;
 1306|     42|    bool is_rs_valid = is_r_valid == 0xFFFFFFFFFFFFFFFFULL && is_s_valid == 0xFFFFFFFFFFFFFFFFULL;
  ------------------
  |  Branch (1306:24): [True: 41, False: 1]
  |  Branch (1306:63): [True: 40, False: 1]
  ------------------
 1307|     42|    if (!(is_pk_valid && is_rs_valid)) {
  ------------------
  |  Branch (1307:11): [True: 42, False: 0]
  |  Branch (1307:26): [True: 40, False: 2]
  ------------------
 1308|      2|        return false;
 1309|      2|    }
 1310|     40|    uint64_t sinv[9U] = { 0U };
 1311|     40|    p521_qinv(sinv, s_q);
 1312|     40|    uint64_t tmp1[9U] = { 0U };
 1313|     40|    from_qmont(tmp1, m_q);
 1314|     40|    qmul(u1, sinv, tmp1);
 1315|     40|    uint64_t tmp12[9U] = { 0U };
 1316|     40|    from_qmont(tmp12, r_q);
 1317|     40|    qmul(u2, sinv, tmp12);
 1318|     40|    uint64_t res3[27U] = { 0U };
 1319|     40|    point_mul_double_g(res3, u1, u2, pk);
 1320|     40|    uint64_t *pz0 = res3 + 18U;
 1321|     40|    uint64_t bn_zero[9U] = { 0U };
 1322|     40|    uint64_t res10 = bn_is_eq_mask(pz0, bn_zero);
 1323|     40|    uint64_t m = res10;
 1324|     40|    if (m == 0xFFFFFFFFFFFFFFFFULL) {
  ------------------
  |  Branch (1324:9): [True: 0, False: 40]
  ------------------
 1325|      0|        return false;
 1326|      0|    }
 1327|     40|    uint64_t x[9U] = { 0U };
 1328|     40|    uint64_t zinv[9U] = { 0U };
 1329|     40|    uint64_t *px = res3;
 1330|     40|    uint64_t *pz = res3 + 18U;
 1331|     40|    p521_finv(zinv, pz);
 1332|     40|    fmul0(x, px, zinv);
 1333|     40|    from_mont(x, x);
 1334|     40|    qmod_short(x, x);
 1335|     40|    uint64_t m0 = bn_is_eq_mask(x, r_q);
 1336|     40|    bool res11 = m0 == 0xFFFFFFFFFFFFFFFFULL;
 1337|     40|    return res11;
 1338|     40|}
Hacl_P521.c:point_mul_double_g:
 1176|     40|{
 1177|     40|    uint64_t tmp[27U] = { 0U };
 1178|     40|    point_mul_g(tmp, scalar1);
 1179|     40|    point_mul(res, scalar2, p);
 1180|     40|    point_add(res, tmp, res);
 1181|     40|}
Hacl_P521.c:point_add:
  960|  11.0k|{
  961|  11.0k|    uint64_t tmp[81U] = { 0U };
  962|  11.0k|    uint64_t *t0 = tmp;
  963|  11.0k|    uint64_t *t1 = tmp + 54U;
  964|  11.0k|    uint64_t *x3 = t1;
  965|  11.0k|    uint64_t *y3 = t1 + 9U;
  966|  11.0k|    uint64_t *z3 = t1 + 18U;
  967|  11.0k|    uint64_t *t01 = t0;
  968|  11.0k|    uint64_t *t11 = t0 + 9U;
  969|  11.0k|    uint64_t *t2 = t0 + 18U;
  970|  11.0k|    uint64_t *t3 = t0 + 27U;
  971|  11.0k|    uint64_t *t4 = t0 + 36U;
  972|  11.0k|    uint64_t *t5 = t0 + 45U;
  973|  11.0k|    uint64_t *x1 = x;
  974|  11.0k|    uint64_t *y1 = x + 9U;
  975|  11.0k|    uint64_t *z10 = x + 18U;
  976|  11.0k|    uint64_t *x20 = y;
  977|  11.0k|    uint64_t *y20 = y + 9U;
  978|  11.0k|    uint64_t *z20 = y + 18U;
  979|  11.0k|    fmul0(t01, x1, x20);
  980|  11.0k|    fmul0(t11, y1, y20);
  981|  11.0k|    fmul0(t2, z10, z20);
  982|  11.0k|    fadd0(t3, x1, y1);
  983|  11.0k|    fadd0(t4, x20, y20);
  984|  11.0k|    fmul0(t3, t3, t4);
  985|  11.0k|    fadd0(t4, t01, t11);
  986|  11.0k|    uint64_t *y10 = x + 9U;
  987|  11.0k|    uint64_t *z11 = x + 18U;
  988|  11.0k|    uint64_t *y2 = y + 9U;
  989|  11.0k|    uint64_t *z21 = y + 18U;
  990|  11.0k|    fsub0(t3, t3, t4);
  991|  11.0k|    fadd0(t4, y10, z11);
  992|  11.0k|    fadd0(t5, y2, z21);
  993|  11.0k|    fmul0(t4, t4, t5);
  994|  11.0k|    fadd0(t5, t11, t2);
  995|  11.0k|    fsub0(t4, t4, t5);
  996|  11.0k|    uint64_t *x10 = x;
  997|  11.0k|    uint64_t *z1 = x + 18U;
  998|  11.0k|    uint64_t *x2 = y;
  999|  11.0k|    uint64_t *z2 = y + 18U;
 1000|  11.0k|    fadd0(x3, x10, z1);
 1001|  11.0k|    fadd0(y3, x2, z2);
 1002|  11.0k|    fmul0(x3, x3, y3);
 1003|  11.0k|    fadd0(y3, t01, t2);
 1004|  11.0k|    fsub0(y3, x3, y3);
 1005|  11.0k|    uint64_t b_coeff[9U] = { 0U };
 1006|  11.0k|    p521_make_b_coeff(b_coeff);
 1007|  11.0k|    fmul0(z3, b_coeff, t2);
 1008|  11.0k|    fsub0(x3, y3, z3);
 1009|  11.0k|    fadd0(z3, x3, x3);
 1010|  11.0k|    fadd0(x3, x3, z3);
 1011|  11.0k|    fsub0(z3, t11, x3);
 1012|  11.0k|    fadd0(x3, t11, x3);
 1013|  11.0k|    uint64_t b_coeff0[9U] = { 0U };
 1014|  11.0k|    p521_make_b_coeff(b_coeff0);
 1015|  11.0k|    fmul0(y3, b_coeff0, y3);
 1016|  11.0k|    fadd0(t11, t2, t2);
 1017|  11.0k|    fadd0(t2, t11, t2);
 1018|  11.0k|    fsub0(y3, y3, t2);
 1019|  11.0k|    fsub0(y3, y3, t01);
 1020|  11.0k|    fadd0(t11, y3, y3);
 1021|  11.0k|    fadd0(y3, t11, y3);
 1022|  11.0k|    fadd0(t11, t01, t01);
 1023|  11.0k|    fadd0(t01, t11, t01);
 1024|  11.0k|    fsub0(t01, t01, t2);
 1025|  11.0k|    fmul0(t11, t4, y3);
 1026|  11.0k|    fmul0(t2, t01, y3);
 1027|  11.0k|    fmul0(y3, x3, z3);
 1028|  11.0k|    fadd0(y3, y3, t2);
 1029|  11.0k|    fmul0(x3, t3, x3);
 1030|  11.0k|    fsub0(x3, x3, t11);
 1031|  11.0k|    fmul0(z3, t4, z3);
 1032|  11.0k|    fmul0(t11, t3, t01);
 1033|  11.0k|    fadd0(z3, z3, t11);
 1034|  11.0k|    memcpy(xy, t1, 27U * sizeof(uint64_t));
 1035|  11.0k|}
Hacl_P521.c:bn_is_lt_prime_mask:
  635|    200|{
  636|    200|    uint64_t tmp[9U] = { 0U };
  637|    200|    p521_make_prime(tmp);
  638|    200|    uint64_t c = bn_sub(tmp, f, tmp);
  639|    200|    uint64_t m = FStar_UInt64_gte_mask(c, 0ULL) & ~FStar_UInt64_eq_mask(c, 0ULL);
  640|    200|    return m;
  641|    200|}
Hacl_P521.c:p521_make_prime:
  342|  1.93M|{
  343|  1.93M|    n[0U] = 0xffffffffffffffffULL;
  344|  1.93M|    n[1U] = 0xffffffffffffffffULL;
  345|  1.93M|    n[2U] = 0xffffffffffffffffULL;
  346|  1.93M|    n[3U] = 0xffffffffffffffffULL;
  347|  1.93M|    n[4U] = 0xffffffffffffffffULL;
  348|  1.93M|    n[5U] = 0xffffffffffffffffULL;
  349|  1.93M|    n[6U] = 0xffffffffffffffffULL;
  350|  1.93M|    n[7U] = 0xffffffffffffffffULL;
  351|  1.93M|    n[8U] = 0x1ffULL;
  352|  1.93M|}
Hacl_P521.c:to_mont:
  685|    352|{
  686|    352|    uint64_t r2modn[9U] = { 0U };
  687|    352|    p521_make_fmont_R2(r2modn);
  688|    352|    uint64_t tmp[18U] = { 0U };
  689|    352|    bn_mul(tmp, b, r2modn);
  690|    352|    fmont_reduction(a, tmp);
  691|    352|}
Hacl_P521.c:p521_make_fmont_R2:
  426|    352|{
  427|    352|    n[0U] = 0x0ULL;
  428|    352|    n[1U] = 0x400000000000ULL;
  429|    352|    n[2U] = 0x0ULL;
  430|    352|    n[3U] = 0x0ULL;
  431|    352|    n[4U] = 0x0ULL;
  432|    352|    n[5U] = 0x0ULL;
  433|    352|    n[6U] = 0x0ULL;
  434|    352|    n[7U] = 0x0ULL;
  435|    352|    n[8U] = 0x0ULL;
  436|    352|}
Hacl_P521.c:fmont_reduction:
  475|   729k|{
  476|   729k|    uint64_t n[9U] = { 0U };
  477|   729k|    p521_make_prime(n);
  478|   729k|    uint64_t c0 = 0ULL;
  479|   729k|    KRML_MAYBE_FOR9(
  ------------------
  |  |  360|   729k|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|   729k|    do {                               \
  |  |  |  |  289|   729k|        uint32_t i = z;                \
  |  |  |  |  290|   729k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   729k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  480|   729k|        i0,
  481|   729k|        0U,
  482|   729k|        9U,
  483|   729k|        1U,
  484|   729k|        uint64_t qj = 1ULL * x[i0];
  485|   729k|        uint64_t *res_j0 = x + i0;
  486|   729k|        uint64_t c = 0ULL;
  487|   729k|        KRML_MAYBE_FOR2(i,
  488|   729k|                        0U,
  489|   729k|                        2U,
  490|   729k|                        1U,
  491|   729k|                        uint64_t a_i = n[4U * i];
  492|   729k|                        uint64_t *res_i0 = res_j0 + 4U * i;
  493|   729k|                        c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, qj, c, res_i0);
  494|   729k|                        uint64_t a_i0 = n[4U * i + 1U];
  495|   729k|                        uint64_t *res_i1 = res_j0 + 4U * i + 1U;
  496|   729k|                        c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i0, qj, c, res_i1);
  497|   729k|                        uint64_t a_i1 = n[4U * i + 2U];
  498|   729k|                        uint64_t *res_i2 = res_j0 + 4U * i + 2U;
  499|   729k|                        c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i1, qj, c, res_i2);
  500|   729k|                        uint64_t a_i2 = n[4U * i + 3U];
  501|   729k|                        uint64_t *res_i = res_j0 + 4U * i + 3U;
  502|   729k|                        c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i2, qj, c, res_i););
  503|   729k|        {
  504|   729k|            uint64_t a_i = n[8U];
  505|   729k|            uint64_t *res_i = res_j0 + 8U;
  506|   729k|            c = Hacl_Bignum_Base_mul_wide_add2_u64(a_i, qj, c, res_i);
  507|   729k|        } uint64_t r = c;
  508|   729k|        uint64_t c1 = r;
  509|   729k|        uint64_t *resb = x + 9U + i0;
  510|   729k|        uint64_t res_j = x[9U + i0];
  511|   729k|        c0 = Lib_IntTypes_Intrinsics_add_carry_u64(c0, c1, res_j, resb););
  512|   729k|    memcpy(res, x + 9U, 9U * sizeof(uint64_t));
  513|   729k|    uint64_t c00 = c0;
  514|   729k|    uint64_t tmp[9U] = { 0U };
  515|   729k|    uint64_t c = 0ULL;
  516|   729k|    KRML_MAYBE_FOR2(i,
  ------------------
  |  |  318|   729k|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|   729k|    do {                               \
  |  |  |  |  289|   729k|        uint32_t i = z;                \
  |  |  |  |  290|   729k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   729k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|   729k|                    0U,
  518|   729k|                    2U,
  519|   729k|                    1U,
  520|   729k|                    uint64_t t1 = res[4U * i];
  521|   729k|                    uint64_t t20 = n[4U * i];
  522|   729k|                    uint64_t *res_i0 = tmp + 4U * i;
  523|   729k|                    c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t1, t20, res_i0);
  524|   729k|                    uint64_t t10 = res[4U * i + 1U];
  525|   729k|                    uint64_t t21 = n[4U * i + 1U];
  526|   729k|                    uint64_t *res_i1 = tmp + 4U * i + 1U;
  527|   729k|                    c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t10, t21, res_i1);
  528|   729k|                    uint64_t t11 = res[4U * i + 2U];
  529|   729k|                    uint64_t t22 = n[4U * i + 2U];
  530|   729k|                    uint64_t *res_i2 = tmp + 4U * i + 2U;
  531|   729k|                    c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t11, t22, res_i2);
  532|   729k|                    uint64_t t12 = res[4U * i + 3U];
  533|   729k|                    uint64_t t2 = n[4U * i + 3U];
  534|   729k|                    uint64_t *res_i = tmp + 4U * i + 3U;
  535|   729k|                    c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t12, t2, res_i););
  536|   729k|    {
  537|   729k|        uint64_t t1 = res[8U];
  538|   729k|        uint64_t t2 = n[8U];
  539|   729k|        uint64_t *res_i = tmp + 8U;
  540|   729k|        c = Lib_IntTypes_Intrinsics_sub_borrow_u64(c, t1, t2, res_i);
  ------------------
  |  |   89|   729k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  541|   729k|    }
  542|   729k|    uint64_t c1 = c;
  543|   729k|    uint64_t c2 = c00 - c1;
  544|   729k|    KRML_MAYBE_FOR9(i,
  ------------------
  |  |  360|   729k|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|   729k|    do {                               \
  |  |  |  |  289|   729k|        uint32_t i = z;                \
  |  |  |  |  290|   729k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   729k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  545|   729k|                    0U,
  546|   729k|                    9U,
  547|   729k|                    1U,
  548|   729k|                    uint64_t *os = res;
  549|   729k|                    uint64_t x1 = (c2 & res[i]) | (~c2 & tmp[i]);
  550|   729k|                    os[i] = x1;);
  551|   729k|}
Hacl_P521.c:fsqr0:
  669|   148k|{
  670|   148k|    uint64_t tmp[18U] = { 0U };
  671|   148k|    bn_sqr(tmp, b);
  672|   148k|    fmont_reduction(a, tmp);
  673|   148k|}
Hacl_P521.c:fmul0:
  661|   580k|{
  662|   580k|    uint64_t tmp[18U] = { 0U };
  663|   580k|    bn_mul(tmp, b, c);
  664|   580k|    fmont_reduction(a, tmp);
  665|   580k|}
Hacl_P521.c:p521_make_a_coeff:
  370|     92|{
  371|     92|    a[0U] = 0xfe7fffffffffffffULL;
  372|     92|    a[1U] = 0xffffffffffffffffULL;
  373|     92|    a[2U] = 0xffffffffffffffffULL;
  374|     92|    a[3U] = 0xffffffffffffffffULL;
  375|     92|    a[4U] = 0xffffffffffffffffULL;
  376|     92|    a[5U] = 0xffffffffffffffffULL;
  377|     92|    a[6U] = 0xffffffffffffffffULL;
  378|     92|    a[7U] = 0xffffffffffffffffULL;
  379|     92|    a[8U] = 0x01ffULL;
  380|     92|}
Hacl_P521.c:fadd0:
  645|   852k|{
  646|   852k|    uint64_t n[9U] = { 0U };
  647|   852k|    p521_make_prime(n);
  648|   852k|    bn_add_mod(a, n, b, c);
  649|   852k|}
Hacl_P521.c:p521_make_b_coeff:
  384|   106k|{
  385|   106k|    b[0U] = 0x8014654fae586387ULL;
  386|   106k|    b[1U] = 0x78f7a28fea35a81fULL;
  387|   106k|    b[2U] = 0x839ab9efc41e961aULL;
  388|   106k|    b[3U] = 0xbd8b29605e9dd8dfULL;
  389|   106k|    b[4U] = 0xf0ab0c9ca8f63f49ULL;
  390|   106k|    b[5U] = 0xf9dc5a44c8c77884ULL;
  391|   106k|    b[6U] = 0x77516d392dccd98aULL;
  392|   106k|    b[7U] = 0x0fc94d10d05b42a0ULL;
  393|   106k|    b[8U] = 0x4dULL;
  394|   106k|}
Hacl_P521.c:bn_is_eq_mask:
   32|    256|{
   33|    256|    uint64_t mask = 0xFFFFFFFFFFFFFFFFULL;
   34|    256|    KRML_MAYBE_FOR9(i,
  ------------------
  |  |  360|    256|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|    256|    do {                               \
  |  |  |  |  289|    256|        uint32_t i = z;                \
  |  |  |  |  290|    256|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    256|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   35|    256|                    0U,
   36|    256|                    9U,
   37|    256|                    1U,
   38|    256|                    uint64_t uu____0 = FStar_UInt64_eq_mask(x[i], y[i]);
   39|    256|                    mask = uu____0 & mask;);
   40|    256|    uint64_t mask1 = mask;
   41|    256|    return mask1;
   42|    256|}
Hacl_P521.c:p521_make_fone:
  447|    244|{
  448|    244|    n[0U] = 0x80000000000000ULL;
  449|    244|    n[1U] = 0x0ULL;
  450|    244|    n[2U] = 0x0ULL;
  451|    244|    n[3U] = 0x0ULL;
  452|    244|    n[4U] = 0x0ULL;
  453|    244|    n[5U] = 0x0ULL;
  454|    244|    n[6U] = 0x0ULL;
  455|    244|    n[7U] = 0x0ULL;
  456|    244|    n[8U] = 0x0ULL;
  457|    244|}
Hacl_P521.c:p521_make_order:
  356|  26.4k|{
  357|  26.4k|    n[0U] = 0xbb6fb71e91386409ULL;
  358|  26.4k|    n[1U] = 0x3bb5c9b8899c47aeULL;
  359|  26.4k|    n[2U] = 0x7fcc0148f709a5d0ULL;
  360|  26.4k|    n[3U] = 0x51868783bf2f966bULL;
  361|  26.4k|    n[4U] = 0xfffffffffffffffaULL;
  362|  26.4k|    n[5U] = 0xffffffffffffffffULL;
  363|  26.4k|    n[6U] = 0xffffffffffffffffULL;
  364|  26.4k|    n[7U] = 0xffffffffffffffffULL;
  365|  26.4k|    n[8U] = 0x1ffULL;
  366|  26.4k|}
Hacl_P521.c:bn_sub:
  130|    366|{
  131|    366|    uint64_t c1 = 0ULL;
  132|    366|    KRML_MAYBE_FOR2(i,
  ------------------
  |  |  318|    366|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|    366|    do {                               \
  |  |  |  |  289|    366|        uint32_t i = z;                \
  |  |  |  |  290|    366|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|    366|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  133|    366|                    0U,
  134|    366|                    2U,
  135|    366|                    1U,
  136|    366|                    uint64_t t1 = b[4U * i];
  137|    366|                    uint64_t t20 = c[4U * i];
  138|    366|                    uint64_t *res_i0 = a + 4U * i;
  139|    366|                    c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t1, t20, res_i0);
  140|    366|                    uint64_t t10 = b[4U * i + 1U];
  141|    366|                    uint64_t t21 = c[4U * i + 1U];
  142|    366|                    uint64_t *res_i1 = a + 4U * i + 1U;
  143|    366|                    c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t10, t21, res_i1);
  144|    366|                    uint64_t t11 = b[4U * i + 2U];
  145|    366|                    uint64_t t22 = c[4U * i + 2U];
  146|    366|                    uint64_t *res_i2 = a + 4U * i + 2U;
  147|    366|                    c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t11, t22, res_i2);
  148|    366|                    uint64_t t12 = b[4U * i + 3U];
  149|    366|                    uint64_t t2 = c[4U * i + 3U];
  150|    366|                    uint64_t *res_i = a + 4U * i + 3U;
  151|    366|                    c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t12, t2, res_i););
  152|    366|    {
  153|    366|        uint64_t t1 = b[8U];
  154|    366|        uint64_t t2 = c[8U];
  155|    366|        uint64_t *res_i = a + 8U;
  156|    366|        c1 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c1, t1, t2, res_i);
  ------------------
  |  |   89|    366|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  157|    366|    }
  158|    366|    uint64_t c10 = c1;
  159|    366|    return c10;
  160|    366|}
Hacl_P521.c:from_mont:
  677|     40|{
  678|     40|    uint64_t tmp[18U] = { 0U };
  679|     40|    memcpy(tmp, b, 9U * sizeof(uint64_t));
  680|     40|    fmont_reduction(a, tmp);
  681|     40|}
Hacl_P521.c:fsub0:
  653|   351k|{
  654|   351k|    uint64_t n[9U] = { 0U };
  655|   351k|    p521_make_prime(n);
  656|   351k|    bn_sub_mod(a, n, b, c);
  657|   351k|}
Hacl_P521.c:bn_sub_mod:
  164|   351k|{
  165|   351k|    uint64_t c10 = 0ULL;
  166|   351k|    KRML_MAYBE_FOR2(i,
  ------------------
  |  |  318|   351k|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|   351k|    do {                               \
  |  |  |  |  289|   351k|        uint32_t i = z;                \
  |  |  |  |  290|   351k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   351k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|   351k|                    0U,
  168|   351k|                    2U,
  169|   351k|                    1U,
  170|   351k|                    uint64_t t1 = c[4U * i];
  171|   351k|                    uint64_t t20 = d[4U * i];
  172|   351k|                    uint64_t *res_i0 = a + 4U * i;
  173|   351k|                    c10 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c10, t1, t20, res_i0);
  174|   351k|                    uint64_t t10 = c[4U * i + 1U];
  175|   351k|                    uint64_t t21 = d[4U * i + 1U];
  176|   351k|                    uint64_t *res_i1 = a + 4U * i + 1U;
  177|   351k|                    c10 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c10, t10, t21, res_i1);
  178|   351k|                    uint64_t t11 = c[4U * i + 2U];
  179|   351k|                    uint64_t t22 = d[4U * i + 2U];
  180|   351k|                    uint64_t *res_i2 = a + 4U * i + 2U;
  181|   351k|                    c10 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c10, t11, t22, res_i2);
  182|   351k|                    uint64_t t12 = c[4U * i + 3U];
  183|   351k|                    uint64_t t2 = d[4U * i + 3U];
  184|   351k|                    uint64_t *res_i = a + 4U * i + 3U;
  185|   351k|                    c10 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c10, t12, t2, res_i););
  186|   351k|    {
  187|   351k|        uint64_t t1 = c[8U];
  188|   351k|        uint64_t t2 = d[8U];
  189|   351k|        uint64_t *res_i = a + 8U;
  190|   351k|        c10 = Lib_IntTypes_Intrinsics_sub_borrow_u64(c10, t1, t2, res_i);
  ------------------
  |  |   89|   351k|    (_subborrow_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  191|   351k|    }
  192|   351k|    uint64_t c0 = c10;
  193|   351k|    uint64_t tmp[9U] = { 0U };
  194|   351k|    uint64_t c1 = 0ULL;
  195|   351k|    KRML_MAYBE_FOR2(i,
  ------------------
  |  |  318|   351k|#define KRML_MAYBE_FOR2(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 2, k, x)
  |  |  ------------------
  |  |  |  |  288|   351k|    do {                               \
  |  |  |  |  289|   351k|        uint32_t i = z;                \
  |  |  |  |  290|   351k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   351k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  196|   351k|                    0U,
  197|   351k|                    2U,
  198|   351k|                    1U,
  199|   351k|                    uint64_t t1 = a[4U * i];
  200|   351k|                    uint64_t t20 = b[4U * i];
  201|   351k|                    uint64_t *res_i0 = tmp + 4U * i;
  202|   351k|                    c1 = Lib_IntTypes_Intrinsics_add_carry_u64(c1, t1, t20, res_i0);
  203|   351k|                    uint64_t t10 = a[4U * i + 1U];
  204|   351k|                    uint64_t t21 = b[4U * i + 1U];
  205|   351k|                    uint64_t *res_i1 = tmp + 4U * i + 1U;
  206|   351k|                    c1 = Lib_IntTypes_Intrinsics_add_carry_u64(c1, t10, t21, res_i1);
  207|   351k|                    uint64_t t11 = a[4U * i + 2U];
  208|   351k|                    uint64_t t22 = b[4U * i + 2U];
  209|   351k|                    uint64_t *res_i2 = tmp + 4U * i + 2U;
  210|   351k|                    c1 = Lib_IntTypes_Intrinsics_add_carry_u64(c1, t11, t22, res_i2);
  211|   351k|                    uint64_t t12 = a[4U * i + 3U];
  212|   351k|                    uint64_t t2 = b[4U * i + 3U];
  213|   351k|                    uint64_t *res_i = tmp + 4U * i + 3U;
  214|   351k|                    c1 = Lib_IntTypes_Intrinsics_add_carry_u64(c1, t12, t2, res_i););
  215|   351k|    {
  216|   351k|        uint64_t t1 = a[8U];
  217|   351k|        uint64_t t2 = b[8U];
  218|   351k|        uint64_t *res_i = tmp + 8U;
  219|   351k|        c1 = Lib_IntTypes_Intrinsics_add_carry_u64(c1, t1, t2, res_i);
  ------------------
  |  |   66|   351k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  220|   351k|    }
  221|   351k|    uint64_t c11 = c1;
  222|   351k|    KRML_MAYBE_UNUSED_VAR(c11);
  ------------------
  |  |   60|   351k|#define KRML_MAYBE_UNUSED_VAR(x) KRML_HOST_IGNORE(x)
  |  |  ------------------
  |  |  |  |   56|   351k|#define KRML_HOST_IGNORE(x) (void)(x)
  |  |  ------------------
  ------------------
  223|   351k|    uint64_t c2 = 0ULL - c0;
  224|   351k|    KRML_MAYBE_FOR9(i,
  ------------------
  |  |  360|   351k|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|   351k|    do {                               \
  |  |  |  |  289|   351k|        uint32_t i = z;                \
  |  |  |  |  290|   351k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   351k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  225|   351k|                    0U,
  226|   351k|                    9U,
  227|   351k|                    1U,
  228|   351k|                    uint64_t *os = a;
  229|   351k|                    uint64_t x = (c2 & tmp[i]) | (~c2 & a[i]);
  230|   351k|                    os[i] = x;);
  231|   351k|}
Hacl_P521.c:point_mul_g:
 1163|     40|{
 1164|     40|    uint64_t g[27U] = { 0U };
 1165|     40|    uint64_t *x = g;
 1166|     40|    uint64_t *y = g + 9U;
 1167|     40|    uint64_t *z = g + 18U;
 1168|     40|    p521_make_g_x(x);
 1169|     40|    p521_make_g_y(y);
 1170|     40|    p521_make_fone(z);
 1171|     40|    point_mul(res, scalar, g);
 1172|     40|}
Hacl_P521.c:p521_make_g_x:
  398|     40|{
  399|     40|    n[0U] = 0xb331a16381adc101ULL;
  400|     40|    n[1U] = 0x4dfcbf3f18e172deULL;
  401|     40|    n[2U] = 0x6f19a459e0c2b521ULL;
  402|     40|    n[3U] = 0x947f0ee093d17fd4ULL;
  403|     40|    n[4U] = 0xdd50a5af3bf7f3acULL;
  404|     40|    n[5U] = 0x90fc1457b035a69eULL;
  405|     40|    n[6U] = 0x214e32409c829fdaULL;
  406|     40|    n[7U] = 0xe6cf1f65b311cadaULL;
  407|     40|    n[8U] = 0x74ULL;
  408|     40|}
Hacl_P521.c:p521_make_g_y:
  412|     40|{
  413|     40|    n[0U] = 0x28460e4a5a9e268eULL;
  414|     40|    n[1U] = 0x20445f4a3b4fe8b3ULL;
  415|     40|    n[2U] = 0xb09a9e3843513961ULL;
  416|     40|    n[3U] = 0x2062a85c809fd683ULL;
  417|     40|    n[4U] = 0x164bf7394caf7a13ULL;
  418|     40|    n[5U] = 0x340bd7de8b939f33ULL;
  419|     40|    n[6U] = 0xeccc7aa224abcda2ULL;
  420|     40|    n[7U] = 0x022e452fda163e8dULL;
  421|     40|    n[8U] = 0x1e0ULL;
  422|     40|}
Hacl_P521.c:p521_finv:
  695|     40|{
  696|     40|    uint64_t b[9U] = { 0U };
  697|     40|    b[0U] = 0xfffffffffffffffdULL;
  698|     40|    b[1U] = 0xffffffffffffffffULL;
  699|     40|    b[2U] = 0xffffffffffffffffULL;
  700|     40|    b[3U] = 0xffffffffffffffffULL;
  701|     40|    b[4U] = 0xffffffffffffffffULL;
  702|     40|    b[5U] = 0xffffffffffffffffULL;
  703|     40|    b[6U] = 0xffffffffffffffffULL;
  704|     40|    b[7U] = 0xffffffffffffffffULL;
  705|     40|    b[8U] = 0x1ffULL;
  706|     40|    uint64_t tmp[9U] = { 0U };
  707|     40|    memcpy(tmp, a, 9U * sizeof(uint64_t));
  708|     40|    uint64_t table[288U] = { 0U };
  709|     40|    uint64_t tmp1[9U] = { 0U };
  710|     40|    uint64_t *t0 = table;
  711|     40|    uint64_t *t1 = table + 9U;
  712|     40|    p521_make_fone(t0);
  713|     40|    memcpy(t1, tmp, 9U * sizeof(uint64_t));
  714|     40|    KRML_MAYBE_FOR15(i,
  ------------------
  |  |  396|     40|#define KRML_MAYBE_FOR15(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 15, k, x)
  |  |  ------------------
  |  |  |  |  288|     40|    do {                               \
  |  |  |  |  289|     40|        uint32_t i = z;                \
  |  |  |  |  290|     40|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|     40|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  715|     40|                     0U,
  716|     40|                     15U,
  717|     40|                     1U,
  718|     40|                     uint64_t *t11 = table + (i + 1U) * 9U;
  719|     40|                     fsqr0(tmp1, t11);
  720|     40|                     memcpy(table + (2U * i + 2U) * 9U, tmp1, 9U * sizeof(uint64_t));
  721|     40|                     uint64_t *t2 = table + (2U * i + 2U) * 9U;
  722|     40|                     fmul0(tmp1, tmp, t2);
  723|     40|                     memcpy(table + (2U * i + 3U) * 9U, tmp1, 9U * sizeof(uint64_t)););
  724|     40|    uint32_t i0 = 520U;
  725|     40|    uint64_t bits_c = Hacl_Bignum_Lib_bn_get_bits_u64(9U, b, i0, 5U);
  726|     40|    memcpy(res, (uint64_t *)table, 9U * sizeof(uint64_t));
  727|  1.28k|    for (uint32_t i1 = 0U; i1 < 31U; i1++) {
  ------------------
  |  Branch (727:28): [True: 1.24k, False: 40]
  ------------------
  728|  1.24k|        uint64_t c = FStar_UInt64_eq_mask(bits_c, (uint64_t)(i1 + 1U));
  729|  1.24k|        const uint64_t *res_j = table + (i1 + 1U) * 9U;
  730|  1.24k|        KRML_MAYBE_FOR9(i,
  ------------------
  |  |  360|  1.24k|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|  1.24k|    do {                               \
  |  |  |  |  289|  1.24k|        uint32_t i = z;                \
  |  |  |  |  290|  1.24k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  1.24k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  731|  1.24k|                        0U,
  732|  1.24k|                        9U,
  733|  1.24k|                        1U,
  734|  1.24k|                        uint64_t *os = res;
  735|  1.24k|                        uint64_t x = (c & res_j[i]) | (~c & res[i]);
  736|  1.24k|                        os[i] = x;);
  737|  1.24k|    }
  738|     40|    uint64_t tmp10[9U] = { 0U };
  739|  4.20k|    for (uint32_t i1 = 0U; i1 < 104U; i1++) {
  ------------------
  |  Branch (739:28): [True: 4.16k, False: 40]
  ------------------
  740|  4.16k|        KRML_MAYBE_FOR5(i, 0U, 5U, 1U, fsqr0(res, res););
  ------------------
  |  |  336|  4.16k|#define KRML_MAYBE_FOR5(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 5, k, x)
  |  |  ------------------
  |  |  |  |  288|  4.16k|    do {                               \
  |  |  |  |  289|  4.16k|        uint32_t i = z;                \
  |  |  |  |  290|  4.16k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  4.16k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  741|  4.16k|        uint32_t k = 520U - 5U * i1 - 5U;
  742|  4.16k|        uint64_t bits_l = Hacl_Bignum_Lib_bn_get_bits_u64(9U, b, k, 5U);
  743|  4.16k|        memcpy(tmp10, (uint64_t *)table, 9U * sizeof(uint64_t));
  744|   133k|        for (uint32_t i2 = 0U; i2 < 31U; i2++) {
  ------------------
  |  Branch (744:32): [True: 128k, False: 4.16k]
  ------------------
  745|   128k|            uint64_t c = FStar_UInt64_eq_mask(bits_l, (uint64_t)(i2 + 1U));
  746|   128k|            const uint64_t *res_j = table + (i2 + 1U) * 9U;
  747|   128k|            KRML_MAYBE_FOR9(i,
  ------------------
  |  |  360|   128k|#define KRML_MAYBE_FOR9(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 9, k, x)
  |  |  ------------------
  |  |  |  |  288|   128k|    do {                               \
  |  |  |  |  289|   128k|        uint32_t i = z;                \
  |  |  |  |  290|   128k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|   128k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  748|   128k|                            0U,
  749|   128k|                            9U,
  750|   128k|                            1U,
  751|   128k|                            uint64_t *os = tmp10;
  752|   128k|                            uint64_t x = (c & res_j[i]) | (~c & tmp10[i]);
  753|   128k|                            os[i] = x;);
  754|   128k|        }
  755|  4.16k|        fmul0(res, res, tmp10);
  756|  4.16k|    }
  757|     40|}
Hacl_P521.c:point_mul:
 1107|     80|{
 1108|     80|    uint64_t table[432U] = { 0U };
 1109|     80|    uint64_t tmp[27U] = { 0U };
 1110|     80|    uint64_t *t0 = table;
 1111|     80|    uint64_t *t1 = table + 27U;
 1112|     80|    point_zero(t0);
 1113|     80|    memcpy(t1, p, 27U * sizeof(uint64_t));
 1114|     80|    KRML_MAYBE_FOR7(i,
  ------------------
  |  |  348|     80|#define KRML_MAYBE_FOR7(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 7, k, x)
  |  |  ------------------
  |  |  |  |  288|     80|    do {                               \
  |  |  |  |  289|     80|        uint32_t i = z;                \
  |  |  |  |  290|     80|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|     80|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1115|     80|                    0U,
 1116|     80|                    7U,
 1117|     80|                    1U,
 1118|     80|                    uint64_t *t11 = table + (i + 1U) * 27U;
 1119|     80|                    point_double(t11, tmp);
 1120|     80|                    memcpy(table + (2U * i + 2U) * 27U, tmp, 27U * sizeof(uint64_t));
 1121|     80|                    uint64_t *t2 = table + (2U * i + 2U) * 27U;
 1122|     80|                    point_add(p, t2, tmp);
 1123|     80|                    memcpy(table + (2U * i + 3U) * 27U, tmp, 27U * sizeof(uint64_t)););
 1124|     80|    uint32_t i0 = 520U;
 1125|     80|    uint64_t bits_c = Hacl_Bignum_Lib_bn_get_bits_u64(9U, scalar, i0, 4U);
 1126|     80|    memcpy(res, (uint64_t *)table, 27U * sizeof(uint64_t));
 1127|     80|    KRML_MAYBE_FOR15(
  ------------------
  |  |  396|     80|#define KRML_MAYBE_FOR15(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 15, k, x)
  |  |  ------------------
  |  |  |  |  288|     80|    do {                               \
  |  |  |  |  289|     80|        uint32_t i = z;                \
  |  |  |  |  290|     80|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|     80|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1128|     80|        i1,
 1129|     80|        0U,
 1130|     80|        15U,
 1131|     80|        1U,
 1132|     80|        uint64_t c = FStar_UInt64_eq_mask(bits_c, (uint64_t)(i1 + 1U));
 1133|     80|        const uint64_t *res_j = table + (i1 + 1U) * 27U;
 1134|     80|        for (uint32_t i = 0U; i < 27U; i++) {
 1135|     80|            uint64_t *os = res;
 1136|     80|            uint64_t x = (c & res_j[i]) | (~c & res[i]);
 1137|     80|            os[i] = x;
 1138|     80|        });
 1139|     80|    uint64_t tmp0[27U] = { 0U };
 1140|  10.4k|    for (uint32_t i1 = 0U; i1 < 130U; i1++) {
  ------------------
  |  Branch (1140:28): [True: 10.4k, False: 80]
  ------------------
 1141|  10.4k|        KRML_MAYBE_FOR4(i, 0U, 4U, 1U, point_double(res, res););
  ------------------
  |  |  330|  10.4k|#define KRML_MAYBE_FOR4(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 4, k, x)
  |  |  ------------------
  |  |  |  |  288|  10.4k|    do {                               \
  |  |  |  |  289|  10.4k|        uint32_t i = z;                \
  |  |  |  |  290|  10.4k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  10.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1142|  10.4k|        uint32_t k = 520U - 4U * i1 - 4U;
 1143|  10.4k|        uint64_t bits_l = Hacl_Bignum_Lib_bn_get_bits_u64(9U, scalar, k, 4U);
 1144|  10.4k|        memcpy(tmp0, (uint64_t *)table, 27U * sizeof(uint64_t));
 1145|  10.4k|        KRML_MAYBE_FOR15(
  ------------------
  |  |  396|  10.4k|#define KRML_MAYBE_FOR15(i, z, n, k, x) KRML_UNROLL_FOR(i, z, 15, k, x)
  |  |  ------------------
  |  |  |  |  288|  10.4k|    do {                               \
  |  |  |  |  289|  10.4k|        uint32_t i = z;                \
  |  |  |  |  290|  10.4k|        KRML_LOOP##n(i, k, x)          \
  |  |  |  |  291|  10.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1146|  10.4k|            i2,
 1147|  10.4k|            0U,
 1148|  10.4k|            15U,
 1149|  10.4k|            1U,
 1150|  10.4k|            uint64_t c = FStar_UInt64_eq_mask(bits_l, (uint64_t)(i2 + 1U));
 1151|  10.4k|            const uint64_t *res_j = table + (i2 + 1U) * 27U;
 1152|  10.4k|            for (uint32_t i = 0U; i < 27U; i++) {
 1153|  10.4k|                uint64_t *os = tmp0;
 1154|  10.4k|                uint64_t x = (c & res_j[i]) | (~c & tmp0[i]);
 1155|  10.4k|                os[i] = x;
 1156|  10.4k|            });
 1157|  10.4k|        point_add(res, tmp0, res);
 1158|  10.4k|    }
 1159|     80|}
Hacl_P521.c:point_zero:
 1096|     80|{
 1097|     80|    uint64_t *x = one;
 1098|     80|    uint64_t *y = one + 9U;
 1099|     80|    uint64_t *z = one + 18U;
 1100|     80|    p521_make_fzero(x);
 1101|     80|    p521_make_fone(y);
 1102|     80|    p521_make_fzero(z);
 1103|     80|}
Hacl_P521.c:p521_make_fzero:
  440|    160|{
  441|    160|    memset(n, 0U, 9U * sizeof(uint64_t));
  442|    160|    n[0U] = 0ULL;
  443|    160|}
Hacl_P521.c:point_double:
 1039|  42.1k|{
 1040|  42.1k|    uint64_t tmp[45U] = { 0U };
 1041|  42.1k|    uint64_t *x1 = x;
 1042|  42.1k|    uint64_t *z = x + 18U;
 1043|  42.1k|    uint64_t *x3 = xx;
 1044|  42.1k|    uint64_t *y3 = xx + 9U;
 1045|  42.1k|    uint64_t *z3 = xx + 18U;
 1046|  42.1k|    uint64_t *t0 = tmp;
 1047|  42.1k|    uint64_t *t1 = tmp + 9U;
 1048|  42.1k|    uint64_t *t2 = tmp + 18U;
 1049|  42.1k|    uint64_t *t3 = tmp + 27U;
 1050|  42.1k|    uint64_t *t4 = tmp + 36U;
 1051|  42.1k|    uint64_t *x2 = x;
 1052|  42.1k|    uint64_t *y = x + 9U;
 1053|  42.1k|    uint64_t *z1 = x + 18U;
 1054|  42.1k|    fsqr0(t0, x2);
 1055|  42.1k|    fsqr0(t1, y);
 1056|  42.1k|    fsqr0(t2, z1);
 1057|  42.1k|    fmul0(t3, x2, y);
 1058|  42.1k|    fadd0(t3, t3, t3);
 1059|  42.1k|    fmul0(t4, y, z1);
 1060|  42.1k|    fmul0(z3, x1, z);
 1061|  42.1k|    fadd0(z3, z3, z3);
 1062|  42.1k|    uint64_t b_coeff[9U] = { 0U };
 1063|  42.1k|    p521_make_b_coeff(b_coeff);
 1064|  42.1k|    fmul0(y3, b_coeff, t2);
 1065|  42.1k|    fsub0(y3, y3, z3);
 1066|  42.1k|    fadd0(x3, y3, y3);
 1067|  42.1k|    fadd0(y3, x3, y3);
 1068|  42.1k|    fsub0(x3, t1, y3);
 1069|  42.1k|    fadd0(y3, t1, y3);
 1070|  42.1k|    fmul0(y3, x3, y3);
 1071|  42.1k|    fmul0(x3, x3, t3);
 1072|  42.1k|    fadd0(t3, t2, t2);
 1073|  42.1k|    fadd0(t2, t2, t3);
 1074|  42.1k|    uint64_t b_coeff0[9U] = { 0U };
 1075|  42.1k|    p521_make_b_coeff(b_coeff0);
 1076|  42.1k|    fmul0(z3, b_coeff0, z3);
 1077|  42.1k|    fsub0(z3, z3, t2);
 1078|  42.1k|    fsub0(z3, z3, t0);
 1079|  42.1k|    fadd0(t3, z3, z3);
 1080|  42.1k|    fadd0(z3, z3, t3);
 1081|  42.1k|    fadd0(t3, t0, t0);
 1082|  42.1k|    fadd0(t0, t3, t0);
 1083|  42.1k|    fsub0(t0, t0, t2);
 1084|  42.1k|    fmul0(t0, t0, z3);
 1085|  42.1k|    fadd0(y3, y3, t0);
 1086|  42.1k|    fadd0(t0, t4, t4);
 1087|  42.1k|    fmul0(z3, t0, z3);
 1088|  42.1k|    fsub0(x3, x3, z3);
 1089|  42.1k|    fmul0(z3, t0, t1);
 1090|  42.1k|    fadd0(z3, z3, z3);
 1091|  42.1k|    fadd0(z3, z3, z3);
 1092|  42.1k|}

Hacl_P256.c:Hacl_Bignum_Base_mul_wide_add2_u64:
   53|  20.8M|{
   54|  20.8M|    uint64_t out0 = out[0U];
   55|  20.8M|    FStar_UInt128_uint128
   56|  20.8M|        res =
   57|  20.8M|            FStar_UInt128_add(FStar_UInt128_add(FStar_UInt128_mul_wide(a, b),
   58|  20.8M|                                                FStar_UInt128_uint64_to_uint128(c_in)),
   59|  20.8M|                              FStar_UInt128_uint64_to_uint128(out0));
   60|  20.8M|    out[0U] = FStar_UInt128_uint128_to_uint64(res);
   61|  20.8M|    return FStar_UInt128_uint128_to_uint64(FStar_UInt128_shift_right(res, (uint32_t)64U));
   62|  20.8M|}
Hacl_P256.c:Hacl_Bignum_Addition_bn_add_eq_len_u64:
  242|   322k|{
  243|   322k|    uint64_t c = (uint64_t)0U;
  244|   968k|    for (uint32_t i = (uint32_t)0U; i < aLen / (uint32_t)4U; i++) {
  ------------------
  |  Branch (244:37): [True: 645k, False: 322k]
  ------------------
  245|   645k|        uint64_t t1 = a[(uint32_t)4U * i];
  246|   645k|        uint64_t t20 = b[(uint32_t)4U * i];
  247|   645k|        uint64_t *res_i0 = res + (uint32_t)4U * i;
  248|   645k|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t1, t20, res_i0);
  ------------------
  |  |   66|   645k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  249|   645k|        uint64_t t10 = a[(uint32_t)4U * i + (uint32_t)1U];
  250|   645k|        uint64_t t21 = b[(uint32_t)4U * i + (uint32_t)1U];
  251|   645k|        uint64_t *res_i1 = res + (uint32_t)4U * i + (uint32_t)1U;
  252|   645k|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t10, t21, res_i1);
  ------------------
  |  |   66|   645k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  253|   645k|        uint64_t t11 = a[(uint32_t)4U * i + (uint32_t)2U];
  254|   645k|        uint64_t t22 = b[(uint32_t)4U * i + (uint32_t)2U];
  255|   645k|        uint64_t *res_i2 = res + (uint32_t)4U * i + (uint32_t)2U;
  256|   645k|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t11, t22, res_i2);
  ------------------
  |  |   66|   645k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  257|   645k|        uint64_t t12 = a[(uint32_t)4U * i + (uint32_t)3U];
  258|   645k|        uint64_t t2 = b[(uint32_t)4U * i + (uint32_t)3U];
  259|   645k|        uint64_t *res_i = res + (uint32_t)4U * i + (uint32_t)3U;
  260|   645k|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t12, t2, res_i);
  ------------------
  |  |   66|   645k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  261|   645k|    }
  262|   322k|    for (uint32_t i = aLen / (uint32_t)4U * (uint32_t)4U; i < aLen; i++) {
  ------------------
  |  Branch (262:59): [True: 0, False: 322k]
  ------------------
  263|      0|        uint64_t t1 = a[i];
  264|      0|        uint64_t t2 = b[i];
  265|      0|        uint64_t *res_i = res + i;
  266|      0|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t1, t2, res_i);
  ------------------
  |  |   66|      0|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  267|      0|    }
  268|   322k|    return c;
  269|   322k|}
Hacl_P256.c:Hacl_Bignum_Lib_bn_get_bits_u64:
  134|  12.6k|{
  135|  12.6k|    uint32_t i1 = i / (uint32_t)64U;
  136|  12.6k|    uint32_t j = i % (uint32_t)64U;
  137|  12.6k|    uint64_t p1 = b[i1] >> j;
  138|  12.6k|    uint64_t ite;
  139|  12.6k|    if (i1 + (uint32_t)1U < len && (uint32_t)0U < j) {
  ------------------
  |  Branch (139:9): [True: 9.51k, False: 3.17k]
  |  Branch (139:36): [True: 9.27k, False: 244]
  ------------------
  140|  9.27k|        ite = p1 | b[i1 + (uint32_t)1U] << ((uint32_t)64U - j);
  141|  9.27k|    } else {
  142|  3.41k|        ite = p1;
  143|  3.41k|    }
  144|  12.6k|    return ite & (((uint64_t)1U << l) - (uint64_t)1U);
  145|  12.6k|}
Hacl_P384.c:Hacl_Bignum_Base_mul_wide_add2_u64:
   53|  45.4M|{
   54|  45.4M|    uint64_t out0 = out[0U];
   55|  45.4M|    FStar_UInt128_uint128
   56|  45.4M|        res =
   57|  45.4M|            FStar_UInt128_add(FStar_UInt128_add(FStar_UInt128_mul_wide(a, b),
   58|  45.4M|                                                FStar_UInt128_uint64_to_uint128(c_in)),
   59|  45.4M|                              FStar_UInt128_uint64_to_uint128(out0));
   60|  45.4M|    out[0U] = FStar_UInt128_uint128_to_uint64(res);
   61|  45.4M|    return FStar_UInt128_uint128_to_uint64(FStar_UInt128_shift_right(res, (uint32_t)64U));
   62|  45.4M|}
Hacl_P384.c:Hacl_Bignum_Addition_bn_add_eq_len_u64:
  242|   301k|{
  243|   301k|    uint64_t c = (uint64_t)0U;
  244|  1.20M|    for (uint32_t i = (uint32_t)0U; i < aLen / (uint32_t)4U; i++) {
  ------------------
  |  Branch (244:37): [True: 904k, False: 301k]
  ------------------
  245|   904k|        uint64_t t1 = a[(uint32_t)4U * i];
  246|   904k|        uint64_t t20 = b[(uint32_t)4U * i];
  247|   904k|        uint64_t *res_i0 = res + (uint32_t)4U * i;
  248|   904k|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t1, t20, res_i0);
  ------------------
  |  |   66|   904k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  249|   904k|        uint64_t t10 = a[(uint32_t)4U * i + (uint32_t)1U];
  250|   904k|        uint64_t t21 = b[(uint32_t)4U * i + (uint32_t)1U];
  251|   904k|        uint64_t *res_i1 = res + (uint32_t)4U * i + (uint32_t)1U;
  252|   904k|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t10, t21, res_i1);
  ------------------
  |  |   66|   904k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  253|   904k|        uint64_t t11 = a[(uint32_t)4U * i + (uint32_t)2U];
  254|   904k|        uint64_t t22 = b[(uint32_t)4U * i + (uint32_t)2U];
  255|   904k|        uint64_t *res_i2 = res + (uint32_t)4U * i + (uint32_t)2U;
  256|   904k|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t11, t22, res_i2);
  ------------------
  |  |   66|   904k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  257|   904k|        uint64_t t12 = a[(uint32_t)4U * i + (uint32_t)3U];
  258|   904k|        uint64_t t2 = b[(uint32_t)4U * i + (uint32_t)3U];
  259|   904k|        uint64_t *res_i = res + (uint32_t)4U * i + (uint32_t)3U;
  260|   904k|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t12, t2, res_i);
  ------------------
  |  |   66|   904k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  261|   904k|    }
  262|   301k|    for (uint32_t i = aLen / (uint32_t)4U * (uint32_t)4U; i < aLen; i++) {
  ------------------
  |  Branch (262:59): [True: 0, False: 301k]
  ------------------
  263|      0|        uint64_t t1 = a[i];
  264|      0|        uint64_t t2 = b[i];
  265|      0|        uint64_t *res_i = res + i;
  266|      0|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t1, t2, res_i);
  ------------------
  |  |   66|      0|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  267|      0|    }
  268|   301k|    return c;
  269|   301k|}
Hacl_P384.c:Hacl_Bignum_Lib_bn_get_bits_u64:
  134|  16.6k|{
  135|  16.6k|    uint32_t i1 = i / (uint32_t)64U;
  136|  16.6k|    uint32_t j = i % (uint32_t)64U;
  137|  16.6k|    uint64_t p1 = b[i1] >> j;
  138|  16.6k|    uint64_t ite;
  139|  16.6k|    if (i1 + (uint32_t)1U < len && (uint32_t)0U < j) {
  ------------------
  |  Branch (139:9): [True: 13.8k, False: 2.78k]
  |  Branch (139:36): [True: 13.2k, False: 576]
  ------------------
  140|  13.2k|        ite = p1 | b[i1 + (uint32_t)1U] << ((uint32_t)64U - j);
  141|  13.2k|    } else {
  142|  3.36k|        ite = p1;
  143|  3.36k|    }
  144|  16.6k|    return ite & (((uint64_t)1U << l) - (uint64_t)1U);
  145|  16.6k|}
Hacl_P521.c:Hacl_Bignum_Base_mul_wide_add2_u64:
   53|   114M|{
   54|   114M|    uint64_t out0 = out[0U];
   55|   114M|    FStar_UInt128_uint128
   56|   114M|        res =
   57|   114M|            FStar_UInt128_add(FStar_UInt128_add(FStar_UInt128_mul_wide(a, b),
   58|   114M|                                                FStar_UInt128_uint64_to_uint128(c_in)),
   59|   114M|                              FStar_UInt128_uint64_to_uint128(out0));
   60|   114M|    out[0U] = FStar_UInt128_uint128_to_uint64(res);
   61|   114M|    return FStar_UInt128_uint128_to_uint64(FStar_UInt128_shift_right(res, (uint32_t)64U));
   62|   114M|}
Hacl_P521.c:Hacl_Bignum_Addition_bn_add_eq_len_u64:
  242|   338k|{
  243|   338k|    uint64_t c = (uint64_t)0U;
  244|  1.69M|    for (uint32_t i = (uint32_t)0U; i < aLen / (uint32_t)4U; i++) {
  ------------------
  |  Branch (244:37): [True: 1.35M, False: 338k]
  ------------------
  245|  1.35M|        uint64_t t1 = a[(uint32_t)4U * i];
  246|  1.35M|        uint64_t t20 = b[(uint32_t)4U * i];
  247|  1.35M|        uint64_t *res_i0 = res + (uint32_t)4U * i;
  248|  1.35M|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t1, t20, res_i0);
  ------------------
  |  |   66|  1.35M|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  249|  1.35M|        uint64_t t10 = a[(uint32_t)4U * i + (uint32_t)1U];
  250|  1.35M|        uint64_t t21 = b[(uint32_t)4U * i + (uint32_t)1U];
  251|  1.35M|        uint64_t *res_i1 = res + (uint32_t)4U * i + (uint32_t)1U;
  252|  1.35M|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t10, t21, res_i1);
  ------------------
  |  |   66|  1.35M|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  253|  1.35M|        uint64_t t11 = a[(uint32_t)4U * i + (uint32_t)2U];
  254|  1.35M|        uint64_t t22 = b[(uint32_t)4U * i + (uint32_t)2U];
  255|  1.35M|        uint64_t *res_i2 = res + (uint32_t)4U * i + (uint32_t)2U;
  256|  1.35M|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t11, t22, res_i2);
  ------------------
  |  |   66|  1.35M|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  257|  1.35M|        uint64_t t12 = a[(uint32_t)4U * i + (uint32_t)3U];
  258|  1.35M|        uint64_t t2 = b[(uint32_t)4U * i + (uint32_t)3U];
  259|  1.35M|        uint64_t *res_i = res + (uint32_t)4U * i + (uint32_t)3U;
  260|  1.35M|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t12, t2, res_i);
  ------------------
  |  |   66|  1.35M|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  261|  1.35M|    }
  262|  1.01M|    for (uint32_t i = aLen / (uint32_t)4U * (uint32_t)4U; i < aLen; i++) {
  ------------------
  |  Branch (262:59): [True: 677k, False: 338k]
  ------------------
  263|   677k|        uint64_t t1 = a[i];
  264|   677k|        uint64_t t2 = b[i];
  265|   677k|        uint64_t *res_i = res + i;
  266|   677k|        c = Lib_IntTypes_Intrinsics_add_carry_u64(c, t1, t2, res_i);
  ------------------
  |  |   66|   677k|    (_addcarry_u64(x1, x2, x3, (long long unsigned int *)x4))
  ------------------
  267|   677k|    }
  268|   338k|    return c;
  269|   338k|}
Hacl_P521.c:Hacl_Bignum_Lib_bn_get_bits_u64:
  134|  18.8k|{
  135|  18.8k|    uint32_t i1 = i / (uint32_t)64U;
  136|  18.8k|    uint32_t j = i % (uint32_t)64U;
  137|  18.8k|    uint64_t p1 = b[i1] >> j;
  138|  18.8k|    uint64_t ite;
  139|  18.8k|    if (i1 + (uint32_t)1U < len && (uint32_t)0U < j) {
  ------------------
  |  Branch (139:9): [True: 18.4k, False: 400]
  |  Branch (139:36): [True: 17.6k, False: 800]
  ------------------
  140|  17.6k|        ite = p1 | b[i1 + (uint32_t)1U] << ((uint32_t)64U - j);
  141|  17.6k|    } else {
  142|  1.20k|        ite = p1;
  143|  1.20k|    }
  144|  18.8k|    return ite & (((uint64_t)1U << l) - (uint64_t)1U);
  145|  18.8k|}

Hacl_P256.c:load64:
  178|  3.84k|{
  179|  3.84k|    uint64_t x;
  180|  3.84k|    memcpy(&x, b, 8);
  181|  3.84k|    return x;
  182|  3.84k|}
Hacl_P384.c:load64:
  178|  2.18k|{
  179|  2.18k|    uint64_t x;
  180|  2.18k|    memcpy(&x, b, 8);
  181|  2.18k|    return x;
  182|  2.18k|}
Hacl_P521.c:load64:
  178|  2.93k|{
  179|  2.93k|    uint64_t x;
  180|  2.93k|    memcpy(&x, b, 8);
  181|  2.93k|    return x;
  182|  2.93k|}

Hacl_P256.c:FStar_UInt64_eq_mask:
   36|  3.38k|{
   37|  3.38k|    uint64_t x = a ^ b;
   38|  3.38k|    uint64_t minus_x = ~x + (uint64_t)1U;
   39|  3.38k|    uint64_t x_or_minus_x = x | minus_x;
   40|  3.38k|    uint64_t xnx = x_or_minus_x >> (uint32_t)63U;
   41|  3.38k|    return xnx - (uint64_t)1U;
   42|  3.38k|}
Hacl_P384.c:FStar_UInt64_gte_mask:
   46|    314|{
   47|    314|    uint64_t x = a;
   48|    314|    uint64_t y = b;
   49|    314|    uint64_t x_xor_y = x ^ y;
   50|    314|    uint64_t x_sub_y = x - y;
   51|    314|    uint64_t x_sub_y_xor_y = x_sub_y ^ y;
   52|    314|    uint64_t q = x_xor_y | x_sub_y_xor_y;
   53|    314|    uint64_t x_xor_q = x ^ q;
   54|    314|    uint64_t x_xor_q_ = x_xor_q >> (uint32_t)63U;
   55|    314|    return x_xor_q_ - (uint64_t)1U;
   56|    314|}
Hacl_P384.c:FStar_UInt64_eq_mask:
   36|   369k|{
   37|   369k|    uint64_t x = a ^ b;
   38|   369k|    uint64_t minus_x = ~x + (uint64_t)1U;
   39|   369k|    uint64_t x_or_minus_x = x | minus_x;
   40|   369k|    uint64_t xnx = x_or_minus_x >> (uint32_t)63U;
   41|   369k|    return xnx - (uint64_t)1U;
   42|   369k|}
Hacl_P521.c:FStar_UInt64_gte_mask:
   46|    284|{
   47|    284|    uint64_t x = a;
   48|    284|    uint64_t y = b;
   49|    284|    uint64_t x_xor_y = x ^ y;
   50|    284|    uint64_t x_sub_y = x - y;
   51|    284|    uint64_t x_sub_y_xor_y = x_sub_y ^ y;
   52|    284|    uint64_t q = x_xor_y | x_sub_y_xor_y;
   53|    284|    uint64_t x_xor_q = x ^ q;
   54|    284|    uint64_t x_xor_q_ = x_xor_q >> (uint32_t)63U;
   55|    284|    return x_xor_q_ - (uint64_t)1U;
   56|    284|}
Hacl_P521.c:FStar_UInt64_eq_mask:
   36|   420k|{
   37|   420k|    uint64_t x = a ^ b;
   38|   420k|    uint64_t minus_x = ~x + (uint64_t)1U;
   39|   420k|    uint64_t x_or_minus_x = x | minus_x;
   40|   420k|    uint64_t xnx = x_or_minus_x >> (uint32_t)63U;
   41|   420k|    return xnx - (uint64_t)1U;
   42|   420k|}

Hacl_P256.c:FStar_UInt128_add:
   64|  41.6M|{
   65|  41.6M|    return x + y;
   66|  41.6M|}
Hacl_P256.c:FStar_UInt128_uint64_to_uint128:
  130|  41.6M|{
  131|  41.6M|    return (uint128_t)x;
  132|  41.6M|}
Hacl_P256.c:FStar_UInt128_mul_wide:
  142|  21.4M|{
  143|  21.4M|    return ((uint128_t)x) * y;
  144|  21.4M|}
Hacl_P256.c:FStar_UInt128_uint128_to_uint64:
  136|  42.9M|{
  137|  42.9M|    return (uint64_t)x;
  138|  42.9M|}
Hacl_P256.c:FStar_UInt128_shift_right:
  124|  21.4M|{
  125|  21.4M|    return x >> y;
  126|  21.4M|}
Hacl_P384.c:FStar_UInt128_add:
   64|  90.8M|{
   65|  90.8M|    return x + y;
   66|  90.8M|}
Hacl_P384.c:FStar_UInt128_uint64_to_uint128:
  130|  90.8M|{
  131|  90.8M|    return (uint128_t)x;
  132|  90.8M|}
Hacl_P384.c:FStar_UInt128_mul_wide:
  142|  46.3M|{
  143|  46.3M|    return ((uint128_t)x) * y;
  144|  46.3M|}
Hacl_P384.c:FStar_UInt128_uint128_to_uint64:
  136|  92.6M|{
  137|  92.6M|    return (uint64_t)x;
  138|  92.6M|}
Hacl_P384.c:FStar_UInt128_shift_right:
  124|  46.3M|{
  125|  46.3M|    return x >> y;
  126|  46.3M|}
Hacl_P521.c:FStar_UInt128_add:
   64|   229M|{
   65|   229M|    return x + y;
   66|   229M|}
Hacl_P521.c:FStar_UInt128_uint64_to_uint128:
  130|   229M|{
  131|   229M|    return (uint128_t)x;
  132|   229M|}
Hacl_P521.c:FStar_UInt128_mul_wide:
  142|   116M|{
  143|   116M|    return ((uint128_t)x) * y;
  144|   116M|}
Hacl_P521.c:FStar_UInt128_uint128_to_uint64:
  136|   232M|{
  137|   232M|    return (uint64_t)x;
  138|   232M|}
Hacl_P521.c:FStar_UInt128_shift_right:
  124|   116M|{
  125|   116M|    return x >> y;
  126|   116M|}

NSS_NoDB_Init:
  949|      1|{
  950|      1|    return nss_Init("", "", "", "", "", "", "", "", "", NULL, NULL,
  951|      1|                    PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE,
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
                                  PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE,
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
                                  PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE,
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
                                  PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE,
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
                                  PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE,
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
                                  PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE, PR_TRUE,
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  952|      1|                    PR_FALSE, PR_FALSE, PR_FALSE);
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
                                  PR_FALSE, PR_FALSE, PR_FALSE);
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
                                  PR_FALSE, PR_FALSE, PR_FALSE);
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  953|      1|}
nss_Shutdown:
 1143|      1|{
 1144|      1|    SECStatus shutdownRV = SECSuccess;
 1145|      1|    SECStatus rv;
 1146|      1|    PRStatus status;
 1147|      1|    NSSInitContext *temp;
 1148|       |
 1149|      1|    rv = nss_ShutdownShutdownList();
 1150|      1|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1150:9): [True: 0, False: 1]
  ------------------
 1151|      0|        shutdownRV = SECFailure;
 1152|      0|    }
 1153|      1|    cert_DestroyLocks();
 1154|      1|    ShutdownCRLCache();
 1155|      1|    OCSP_ShutdownGlobal();
 1156|       |#ifndef NSS_DISABLE_LIBPKIX
 1157|       |    PKIX_Shutdown(plContext);
 1158|       |#endif /* NSS_DISABLE_LIBPKIX */
 1159|      1|    SECOID_Shutdown();
 1160|      1|    status = STAN_Shutdown();
 1161|      1|    cert_DestroySubjectKeyIDHashTable();
 1162|      1|    pk11_SetInternalKeySlot(NULL);
 1163|      1|    rv = SECMOD_Shutdown();
 1164|      1|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1164:9): [True: 0, False: 1]
  ------------------
 1165|      0|        shutdownRV = SECFailure;
 1166|      0|    }
 1167|      1|    pk11sdr_Shutdown();
 1168|      1|    nssArena_Shutdown();
 1169|      1|    if (status == PR_FAILURE) {
  ------------------
  |  Branch (1169:9): [True: 0, False: 1]
  ------------------
 1170|      0|        if (NSS_GetError() == NSS_ERROR_BUSY) {
  ------------------
  |  Branch (1170:13): [True: 0, False: 0]
  ------------------
 1171|      0|            PORT_SetError(SEC_ERROR_BUSY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1172|      0|        }
 1173|      0|        shutdownRV = SECFailure;
 1174|      0|    }
 1175|       |    /*
 1176|       |     * A thread's error stack is automatically destroyed when the thread
 1177|       |     * terminates, except for the primordial thread, whose error stack is
 1178|       |     * destroyed by PR_Cleanup.  Since NSS is usually shut down by the
 1179|       |     * primordial thread and many NSS-based apps don't call PR_Cleanup,
 1180|       |     * we destroy the calling thread's error stack here. This must be
 1181|       |     * done after any NSS_GetError call, otherwise NSS_GetError will
 1182|       |     * create the error stack again.
 1183|       |     */
 1184|      1|    nss_DestroyErrorStack();
 1185|      1|    nssIsInitted = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
 1186|      1|    temp = nssInitContextList;
 1187|      1|    nssInitContextList = NULL;
 1188|       |    /* free the old list. This is necessary when we are called from
 1189|       |     * NSS_Shutdown(). */
 1190|      1|    while (temp) {
  ------------------
  |  Branch (1190:12): [True: 0, False: 1]
  ------------------
 1191|      0|        NSSInitContext *next = temp->next;
 1192|      0|        temp->magic = 0;
 1193|      0|        PORT_Free(temp);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1194|      0|        temp = next;
 1195|      0|    }
 1196|      1|    return shutdownRV;
 1197|      1|}
NSS_Shutdown:
 1201|      1|{
 1202|      1|    SECStatus rv;
 1203|       |    /* make sure our lock and condition variable are initialized one and only
 1204|       |     * one time */
 1205|      1|    if (PR_CallOnce(&nssInitOnce, nss_doLockInit) != PR_SUCCESS) {
  ------------------
  |  Branch (1205:9): [True: 0, False: 1]
  ------------------
 1206|      0|        return SECFailure;
 1207|      0|    }
 1208|      1|    PZ_Lock(nssInitLock);
  ------------------
  |  |  245|      1|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 1209|       |
 1210|      1|    if (!nssIsInitted) {
  ------------------
  |  Branch (1210:9): [True: 0, False: 1]
  ------------------
 1211|      0|        PZ_Unlock(nssInitLock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1212|      0|        PORT_SetError(SEC_ERROR_NOT_INITIALIZED);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1213|      0|        return SECFailure;
 1214|      0|    }
 1215|       |
 1216|       |    /* If one or more threads are in the middle of init, wait for them
 1217|       |     * to complete */
 1218|      1|    while (nssIsInInit) {
  ------------------
  |  Branch (1218:12): [True: 0, False: 1]
  ------------------
 1219|      0|        PZ_WaitCondVar(nssInitCondition, PR_INTERVAL_NO_TIMEOUT);
  ------------------
  |  |  250|      0|#define PZ_WaitCondVar(v, t) PR_WaitCondVar((v), (t))
  ------------------
 1220|      0|    }
 1221|      1|    rv = nss_Shutdown();
 1222|      1|    PZ_Unlock(nssInitLock);
  ------------------
  |  |  246|      1|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1223|      1|    return rv;
 1224|      1|}
NSS_IsInitialized:
 1303|      1|{
 1304|      1|    return (nssIsInitted) || (nssInitContextList != NULL);
  ------------------
  |  Branch (1304:12): [True: 0, False: 1]
  |  Branch (1304:30): [True: 0, False: 1]
  ------------------
 1305|      1|}
nssinit.c:nss_Init:
  558|      1|{
  559|      1|    SECMODModule *parent = NULL;
  560|       |#ifndef NSS_DISABLE_LIBPKIX
  561|       |    PKIX_UInt32 actualMinorVersion = 0;
  562|       |    PKIX_Error *pkixError = NULL;
  563|       |#endif /* NSS_DISABLE_LIBPKIX */
  564|      1|    PRBool isReallyInitted;
  565|      1|    char *configStrings = NULL;
  566|      1|    char *configName = NULL;
  567|      1|    PRBool passwordRequired = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  568|       |#ifdef POLICY_FILE
  569|       |    char *ignoreVar;
  570|       |#endif
  571|       |
  572|       |    /* if we are trying to init with a traditional NSS_Init call, maintain
  573|       |     * the traditional idempotent behavior. */
  574|      1|    if (!initContextPtr && nssIsInitted) {
  ------------------
  |  Branch (574:9): [True: 1, False: 0]
  |  Branch (574:28): [True: 0, False: 1]
  ------------------
  575|      0|        return SECSuccess;
  576|      0|    }
  577|       |
  578|       |    /* make sure our lock and condition variable are initialized one and only
  579|       |     * one time */
  580|      1|    if (PR_CallOnce(&nssInitOnce, nss_doLockInit) != PR_SUCCESS) {
  ------------------
  |  Branch (580:9): [True: 0, False: 1]
  ------------------
  581|      0|        return SECFailure;
  582|      0|    }
  583|       |
  584|       |    /*
  585|       |     * if we haven't done basic initialization, single thread the
  586|       |     * initializations.
  587|       |     */
  588|      1|    PZ_Lock(nssInitLock);
  ------------------
  |  |  245|      1|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  589|      1|    isReallyInitted = NSS_IsInitialized();
  590|      1|    if (!isReallyInitted) {
  ------------------
  |  Branch (590:9): [True: 1, False: 0]
  ------------------
  591|      1|        while (!isReallyInitted && nssIsInInit) {
  ------------------
  |  Branch (591:16): [True: 1, False: 0]
  |  Branch (591:36): [True: 0, False: 1]
  ------------------
  592|      0|            PZ_WaitCondVar(nssInitCondition, PR_INTERVAL_NO_TIMEOUT);
  ------------------
  |  |  250|      0|#define PZ_WaitCondVar(v, t) PR_WaitCondVar((v), (t))
  ------------------
  593|      0|            isReallyInitted = NSS_IsInitialized();
  594|      0|        }
  595|       |        /* once we've completed basic initialization, we can allow more than
  596|       |         * one process initialize NSS at a time. */
  597|      1|    }
  598|      1|    nssIsInInit++;
  599|      1|    PZ_Unlock(nssInitLock);
  ------------------
  |  |  246|      1|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  600|       |
  601|       |    /* this tells us whether or not some library has already initialized us.
  602|       |     * if so, we don't want to double call some of the basic initialization
  603|       |     * functions */
  604|       |
  605|      1|    if (!isReallyInitted) {
  ------------------
  |  Branch (605:9): [True: 1, False: 0]
  ------------------
  606|      1|#ifdef DEBUG
  607|      1|        CERTCertificate dummyCert;
  608|       |        /* New option bits must not change the size of CERTCertificate. */
  609|      1|        PORT_Assert(sizeof(dummyCert.options) == sizeof(void *));
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  610|      1|#endif
  611|       |
  612|      1|        if (SECSuccess != cert_InitLocks()) {
  ------------------
  |  Branch (612:13): [True: 0, False: 1]
  ------------------
  613|      0|            goto loser;
  614|      0|        }
  615|       |
  616|      1|        if (SECSuccess != InitCRLCache()) {
  ------------------
  |  Branch (616:13): [True: 0, False: 1]
  ------------------
  617|      0|            goto loser;
  618|      0|        }
  619|       |
  620|      1|        if (SECSuccess != OCSP_InitGlobal()) {
  ------------------
  |  Branch (620:13): [True: 0, False: 1]
  ------------------
  621|      0|            goto loser;
  622|      0|        }
  623|      1|    }
  624|       |
  625|      1|    if (noSingleThreadedModules || allowAlreadyInitializedModules ||
  ------------------
  |  Branch (625:9): [True: 0, False: 1]
  |  Branch (625:36): [True: 0, False: 1]
  ------------------
  626|      1|        dontFinalizeModules) {
  ------------------
  |  Branch (626:9): [True: 0, False: 1]
  ------------------
  627|      0|        pk11_setGlobalOptions(noSingleThreadedModules,
  628|      0|                              allowAlreadyInitializedModules,
  629|      0|                              dontFinalizeModules);
  630|      0|    }
  631|       |
  632|      1|    if (initContextPtr) {
  ------------------
  |  Branch (632:9): [True: 0, False: 1]
  ------------------
  633|      0|        *initContextPtr = PORT_ZNew(NSSInitContext);
  ------------------
  |  |  148|      0|#define PORT_ZNew(type) (type *)PORT_ZAlloc(sizeof(type))
  |  |  ------------------
  |  |  |  |   72|      0|#define PORT_ZAlloc PORT_ZAlloc_Util
  |  |  ------------------
  ------------------
  634|      0|        if (*initContextPtr == NULL) {
  ------------------
  |  Branch (634:13): [True: 0, False: 0]
  ------------------
  635|      0|            goto loser;
  636|      0|        }
  637|       |        /*
  638|       |         * For traditional NSS_Init, we used the PK11_Configure() call to set
  639|       |         * globals. with InitContext, we pass those strings in as parameters.
  640|       |         *
  641|       |         * This allows old NSS_Init calls to work as before, while at the same
  642|       |         * time new calls and old calls will not interfere with each other.
  643|       |         */
  644|      0|        if (initParams) {
  ------------------
  |  Branch (644:13): [True: 0, False: 0]
  ------------------
  645|      0|            if (initParams->length < sizeof(NSSInitParameters)) {
  ------------------
  |  Branch (645:17): [True: 0, False: 0]
  ------------------
  646|      0|                PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  647|      0|                goto loser;
  648|      0|            }
  649|      0|            configStrings = nss_MkConfigString(initParams->manufactureID,
  650|      0|                                               initParams->libraryDescription,
  651|      0|                                               initParams->cryptoTokenDescription,
  652|      0|                                               initParams->dbTokenDescription,
  653|      0|                                               initParams->cryptoSlotDescription,
  654|      0|                                               initParams->dbSlotDescription,
  655|      0|                                               initParams->FIPSSlotDescription,
  656|      0|                                               initParams->FIPSTokenDescription,
  657|      0|                                               initParams->minPWLen);
  658|      0|            if (configStrings == NULL) {
  ------------------
  |  Branch (658:17): [True: 0, False: 0]
  ------------------
  659|      0|                PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  660|      0|                goto loser;
  661|      0|            }
  662|      0|            configName = initParams->libraryDescription;
  663|      0|            passwordRequired = initParams->passwordRequired;
  664|      0|        }
  665|       |
  666|       |        /* If we're NSS_ContextInit, we're probably a library. It could be
  667|       |         * possible that the application initialized NSS then forked(). The
  668|       |         * library would have no knowledge of that. If we call
  669|       |         * SECMOD_RestartModules() here, we will be able to continue on with
  670|       |         * NSS as normal. SECMOD_RestartModules() does have the side affect
  671|       |         * of losing all our PKCS #11 objects in the new process, but only if
  672|       |         * the module needs to be reinited. If it needs to be reinit those
  673|       |         * objects are inaccessible anyway, it's always save to call
  674|       |         * SECMOD_RestartModules(PR_FALSE).
  675|       |         */
  676|       |        /* NOTE: We could call SECMOD_Init() here, but if we aren't already
  677|       |         * inited, then there's no modules to restart, so SECMOD_RestartModules
  678|       |         * will return immediately */
  679|      0|        SECMOD_RestartModules(PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  680|      1|    } else {
  681|      1|        configStrings = pk11_config_strings;
  682|      1|        configName = pk11_config_name;
  683|      1|        passwordRequired = pk11_password_required;
  684|      1|    }
  685|       |
  686|       |    /* Skip the module init if we are already initted and we are trying
  687|       |     * to init with noCertDB and noModDB */
  688|      1|    if (!(isReallyInitted && noCertDB && noModDB)) {
  ------------------
  |  Branch (688:11): [True: 0, False: 1]
  |  Branch (688:30): [True: 0, False: 0]
  |  Branch (688:42): [True: 0, False: 0]
  ------------------
  689|      1|        parent = nss_InitModules(configdir, certPrefix, keyPrefix, secmodName,
  690|      1|                                 updateDir, updCertPrefix, updKeyPrefix, updateID,
  691|      1|                                 updateName, configName, configStrings, passwordRequired,
  692|      1|                                 readOnly, noCertDB, noModDB, forceOpen, optimizeSpace,
  693|      1|                                 (initContextPtr != NULL));
  694|       |
  695|      1|        if (parent == NULL) {
  ------------------
  |  Branch (695:13): [True: 0, False: 1]
  ------------------
  696|      0|            goto loser;
  697|      0|        }
  698|      1|    }
  699|       |
  700|       |    /* finish up initialization */
  701|      1|    if (!isReallyInitted) {
  ------------------
  |  Branch (701:9): [True: 1, False: 0]
  ------------------
  702|      1|        if (SECOID_Init() != SECSuccess) {
  ------------------
  |  Branch (702:13): [True: 0, False: 1]
  ------------------
  703|      0|            goto loser;
  704|      0|        }
  705|       |#ifdef POLICY_FILE
  706|       |        /* Load the system crypto policy file if it exists,
  707|       |         * unless the NSS_IGNORE_SYSTEM_POLICY environment
  708|       |         * variable has been set to 1. */
  709|       |        ignoreVar = PR_GetEnvSecure("NSS_IGNORE_SYSTEM_POLICY");
  710|       |        if (ignoreVar == NULL || strncmp(ignoreVar, "1", sizeof("1")) != 0) {
  711|       |            if (PR_Access(POLICY_PATH "/" POLICY_FILE, PR_ACCESS_READ_OK) == PR_SUCCESS) {
  712|       |                SECMODModule *module = SECMOD_LoadModule(
  713|       |                    "name=\"Policy File\" "
  714|       |                    "parameters=\"configdir='sql:" POLICY_PATH "' "
  715|       |                    "secmod='" POLICY_FILE "' "
  716|       |                    "flags=readOnly,noCertDB,forceSecmodChoice,forceOpen\" "
  717|       |                    "NSS=\"flags=internal,moduleDB,skipFirst,moduleDBOnly,critical\"",
  718|       |                    parent, PR_TRUE);
  719|       |                if (module) {
  720|       |                    PRBool isLoaded = module->loaded;
  721|       |                    SECMOD_DestroyModule(module);
  722|       |                    if (!isLoaded) {
  723|       |                        goto loser;
  724|       |                    }
  725|       |                }
  726|       |            }
  727|       |        }
  728|       |#endif
  729|      1|        if (STAN_LoadDefaultNSS3TrustDomain() != PR_SUCCESS) {
  ------------------
  |  Branch (729:13): [True: 0, False: 1]
  ------------------
  730|      0|            goto loser;
  731|      0|        }
  732|      1|        if (nss_InitShutdownList() != SECSuccess) {
  ------------------
  |  Branch (732:13): [True: 0, False: 1]
  ------------------
  733|      0|            goto loser;
  734|      0|        }
  735|      1|        CERT_SetDefaultCertDB((CERTCertDBHandle *)
  736|      1|                                  STAN_GetDefaultTrustDomain());
  737|      1|        if ((!noModDB) && (!noCertDB) && (!noRootInit)) {
  ------------------
  |  Branch (737:13): [True: 0, False: 1]
  |  Branch (737:27): [True: 0, False: 0]
  |  Branch (737:42): [True: 0, False: 0]
  ------------------
  738|      0|            if (!SECMOD_HasRootCerts()) {
  ------------------
  |  Branch (738:17): [True: 0, False: 0]
  ------------------
  739|      0|                const char *dbpath = configdir;
  740|       |                /* handle supported database modifiers */
  741|      0|                if (strncmp(dbpath, "sql:", 4) == 0) {
  ------------------
  |  Branch (741:21): [True: 0, False: 0]
  ------------------
  742|      0|                    dbpath += 4;
  743|      0|                } else if (strncmp(dbpath, "dbm:", 4) == 0) {
  ------------------
  |  Branch (743:28): [True: 0, False: 0]
  ------------------
  744|      0|                    dbpath += 4;
  745|      0|                } else if (strncmp(dbpath, "extern:", 7) == 0) {
  ------------------
  |  Branch (745:28): [True: 0, False: 0]
  ------------------
  746|      0|                    dbpath += 7;
  747|      0|                } else if (strncmp(dbpath, "rdb:", 4) == 0) {
  ------------------
  |  Branch (747:28): [True: 0, False: 0]
  ------------------
  748|       |                    /* if rdb: is specified, the configdir isn't really a
  749|       |                     * path. Skip it */
  750|      0|                    dbpath = NULL;
  751|      0|                }
  752|      0|                if (dbpath) {
  ------------------
  |  Branch (752:21): [True: 0, False: 0]
  ------------------
  753|      0|                    nss_FindExternalRoot(dbpath, secmodName);
  754|      0|                }
  755|      0|            }
  756|      0|        }
  757|      1|        pk11sdr_Init();
  758|      1|        cert_CreateSubjectKeyIDHashTable();
  759|       |
  760|       |#ifndef NSS_DISABLE_LIBPKIX
  761|       |        pkixError = PKIX_Initialize(PKIX_FALSE, PKIX_MAJOR_VERSION, PKIX_MINOR_VERSION,
  762|       |                                    PKIX_MINOR_VERSION, &actualMinorVersion, &plContext);
  763|       |
  764|       |        if (pkixError != NULL) {
  765|       |            goto loser;
  766|       |        } else {
  767|       |            char *ev = PR_GetEnvSecure("NSS_DISABLE_PKIX_VERIFY");
  768|       |            if (ev && ev[0]) {
  769|       |                CERT_SetUsePKIXForValidation(PR_FALSE);
  770|       |            }
  771|       |        }
  772|       |#endif /* NSS_DISABLE_LIBPKIX */
  773|      1|    }
  774|       |
  775|       |    /*
  776|       |     * Now mark the appropriate init state. If initContextPtr was passed
  777|       |     * in, then return the new context pointer and add it to the
  778|       |     * nssInitContextList. Otherwise set the global nss_isInitted flag
  779|       |     */
  780|      1|    PZ_Lock(nssInitLock);
  ------------------
  |  |  245|      1|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  781|      1|    if (!initContextPtr) {
  ------------------
  |  Branch (781:9): [True: 1, False: 0]
  ------------------
  782|      1|        nssIsInitted = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  783|      1|    } else {
  784|      0|        (*initContextPtr)->magic = NSS_INIT_MAGIC;
  ------------------
  |  |  523|      0|#define NSS_INIT_MAGIC 0x1413A91C
  ------------------
  785|      0|        (*initContextPtr)->next = nssInitContextList;
  786|      0|        nssInitContextList = (*initContextPtr);
  787|      0|    }
  788|      1|    nssIsInInit--;
  789|       |    /* now that we are inited, all waiters can move forward */
  790|      1|    PZ_NotifyAllCondVar(nssInitCondition);
  ------------------
  |  |  252|      1|#define PZ_NotifyAllCondVar(v) PR_NotifyAllCondVar((v))
  ------------------
  791|      1|    PZ_Unlock(nssInitLock);
  ------------------
  |  |  246|      1|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  792|       |
  793|      1|    if (initContextPtr && configStrings) {
  ------------------
  |  Branch (793:9): [True: 0, False: 1]
  |  Branch (793:27): [True: 0, False: 0]
  ------------------
  794|      0|        PR_smprintf_free(configStrings);
  795|      0|    }
  796|      1|    if (parent) {
  ------------------
  |  Branch (796:9): [True: 1, False: 0]
  ------------------
  797|      1|        SECMOD_DestroyModule(parent);
  798|      1|    }
  799|       |
  800|      1|    return SECSuccess;
  801|       |
  802|      0|loser:
  803|      0|    if (initContextPtr && *initContextPtr) {
  ------------------
  |  Branch (803:9): [True: 0, False: 0]
  |  Branch (803:27): [True: 0, False: 0]
  ------------------
  804|      0|        PORT_Free(*initContextPtr);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  805|      0|        *initContextPtr = NULL;
  806|      0|        if (configStrings) {
  ------------------
  |  Branch (806:13): [True: 0, False: 0]
  ------------------
  807|      0|            PR_smprintf_free(configStrings);
  808|      0|        }
  809|      0|    }
  810|      0|    PZ_Lock(nssInitLock);
  ------------------
  |  |  245|      0|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  811|      0|    nssIsInInit--;
  812|       |    /* We failed to init, allow one to move forward */
  813|      0|    PZ_NotifyCondVar(nssInitCondition);
  ------------------
  |  |  251|      0|#define PZ_NotifyCondVar(v) PR_NotifyCondVar((v))
  ------------------
  814|      0|    PZ_Unlock(nssInitLock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  815|      0|    if (parent) {
  ------------------
  |  Branch (815:9): [True: 0, False: 0]
  ------------------
  816|      0|        SECMOD_DestroyModule(parent);
  817|      0|    }
  818|      0|    return SECFailure;
  819|      1|}
nssinit.c:nss_InitModules:
  366|      1|{
  367|      1|    SECMODModule *module = NULL;
  368|      1|    char *moduleSpec = NULL;
  369|      1|    char *flags = NULL;
  370|      1|    char *lconfigdir = NULL;
  371|      1|    char *lcertPrefix = NULL;
  372|      1|    char *lkeyPrefix = NULL;
  373|      1|    char *lsecmodName = NULL;
  374|      1|    char *lupdateDir = NULL;
  375|      1|    char *lupdCertPrefix = NULL;
  376|      1|    char *lupdKeyPrefix = NULL;
  377|      1|    char *lupdateID = NULL;
  378|      1|    char *lupdateName = NULL;
  379|       |
  380|      1|    if (NSS_InitializePRErrorTable() != SECSuccess) {
  ------------------
  |  Branch (380:9): [True: 0, False: 1]
  ------------------
  381|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  382|      0|        return NULL;
  383|      0|    }
  384|       |
  385|      1|    flags = nss_makeFlags(readOnly, noCertDB, noModDB, forceOpen,
  386|      1|                          pwRequired, optimizeSpace);
  387|      1|    if (flags == NULL)
  ------------------
  |  Branch (387:9): [True: 0, False: 1]
  ------------------
  388|      0|        return NULL;
  389|       |
  390|       |    /*
  391|       |     * configdir is double nested, and Windows uses the same character
  392|       |     * for file seps as we use for escapes! (sigh).
  393|       |     */
  394|      1|    lconfigdir = NSSUTIL_DoubleEscape(configdir, '\'', '\"');
  395|      1|    if (lconfigdir == NULL) {
  ------------------
  |  Branch (395:9): [True: 0, False: 1]
  ------------------
  396|      0|        goto loser;
  397|      0|    }
  398|      1|    lcertPrefix = NSSUTIL_DoubleEscape(certPrefix, '\'', '\"');
  399|      1|    if (lcertPrefix == NULL) {
  ------------------
  |  Branch (399:9): [True: 0, False: 1]
  ------------------
  400|      0|        goto loser;
  401|      0|    }
  402|      1|    lkeyPrefix = NSSUTIL_DoubleEscape(keyPrefix, '\'', '\"');
  403|      1|    if (lkeyPrefix == NULL) {
  ------------------
  |  Branch (403:9): [True: 0, False: 1]
  ------------------
  404|      0|        goto loser;
  405|      0|    }
  406|      1|    lsecmodName = NSSUTIL_DoubleEscape(secmodName, '\'', '\"');
  407|      1|    if (lsecmodName == NULL) {
  ------------------
  |  Branch (407:9): [True: 0, False: 1]
  ------------------
  408|      0|        goto loser;
  409|      0|    }
  410|      1|    lupdateDir = NSSUTIL_DoubleEscape(updateDir, '\'', '\"');
  411|      1|    if (lupdateDir == NULL) {
  ------------------
  |  Branch (411:9): [True: 0, False: 1]
  ------------------
  412|      0|        goto loser;
  413|      0|    }
  414|      1|    lupdCertPrefix = NSSUTIL_DoubleEscape(updCertPrefix, '\'', '\"');
  415|      1|    if (lupdCertPrefix == NULL) {
  ------------------
  |  Branch (415:9): [True: 0, False: 1]
  ------------------
  416|      0|        goto loser;
  417|      0|    }
  418|      1|    lupdKeyPrefix = NSSUTIL_DoubleEscape(updKeyPrefix, '\'', '\"');
  419|      1|    if (lupdKeyPrefix == NULL) {
  ------------------
  |  Branch (419:9): [True: 0, False: 1]
  ------------------
  420|      0|        goto loser;
  421|      0|    }
  422|      1|    lupdateID = NSSUTIL_DoubleEscape(updateID, '\'', '\"');
  423|      1|    if (lupdateID == NULL) {
  ------------------
  |  Branch (423:9): [True: 0, False: 1]
  ------------------
  424|      0|        goto loser;
  425|      0|    }
  426|      1|    lupdateName = NSSUTIL_DoubleEscape(updateName, '\'', '\"');
  427|      1|    if (lupdateName == NULL) {
  ------------------
  |  Branch (427:9): [True: 0, False: 1]
  ------------------
  428|      0|        goto loser;
  429|      0|    }
  430|       |
  431|      1|    moduleSpec = PR_smprintf(
  432|      1|        "name=\"%s\" parameters=\"configdir='%s' certPrefix='%s' keyPrefix='%s' "
  433|      1|        "secmod='%s' flags=%s updatedir='%s' updateCertPrefix='%s' "
  434|      1|        "updateKeyPrefix='%s' updateid='%s' updateTokenDescription='%s' %s\" "
  435|      1|        "NSS=\"flags=internal,moduleDB,moduleDBOnly,critical%s\"",
  436|      1|        configName ? configName : NSS_DEFAULT_MOD_NAME,
  ------------------
  |  |   58|      1|#define NSS_DEFAULT_MOD_NAME "NSS Internal Module"
  ------------------
  |  Branch (436:9): [True: 0, False: 1]
  ------------------
  437|      1|        lconfigdir, lcertPrefix, lkeyPrefix, lsecmodName, flags,
  438|      1|        lupdateDir, lupdCertPrefix, lupdKeyPrefix, lupdateID,
  439|      1|        lupdateName, configStrings ? configStrings : "",
  ------------------
  |  Branch (439:22): [True: 0, False: 1]
  ------------------
  440|      1|        isContextInit ? "" : ",defaultModDB,internalKeySlot");
  ------------------
  |  Branch (440:9): [True: 0, False: 1]
  ------------------
  441|       |
  442|      1|loser:
  443|      1|    PORT_Free(flags);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  444|      1|    if (lconfigdir)
  ------------------
  |  Branch (444:9): [True: 1, False: 0]
  ------------------
  445|      1|        PORT_Free(lconfigdir);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  446|      1|    if (lcertPrefix)
  ------------------
  |  Branch (446:9): [True: 1, False: 0]
  ------------------
  447|      1|        PORT_Free(lcertPrefix);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  448|      1|    if (lkeyPrefix)
  ------------------
  |  Branch (448:9): [True: 1, False: 0]
  ------------------
  449|      1|        PORT_Free(lkeyPrefix);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  450|      1|    if (lsecmodName)
  ------------------
  |  Branch (450:9): [True: 1, False: 0]
  ------------------
  451|      1|        PORT_Free(lsecmodName);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  452|      1|    if (lupdateDir)
  ------------------
  |  Branch (452:9): [True: 1, False: 0]
  ------------------
  453|      1|        PORT_Free(lupdateDir);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  454|      1|    if (lupdCertPrefix)
  ------------------
  |  Branch (454:9): [True: 1, False: 0]
  ------------------
  455|      1|        PORT_Free(lupdCertPrefix);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  456|      1|    if (lupdKeyPrefix)
  ------------------
  |  Branch (456:9): [True: 1, False: 0]
  ------------------
  457|      1|        PORT_Free(lupdKeyPrefix);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  458|      1|    if (lupdateID)
  ------------------
  |  Branch (458:9): [True: 1, False: 0]
  ------------------
  459|      1|        PORT_Free(lupdateID);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  460|      1|    if (lupdateName)
  ------------------
  |  Branch (460:9): [True: 1, False: 0]
  ------------------
  461|      1|        PORT_Free(lupdateName);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  462|       |
  463|      1|    if (moduleSpec) {
  ------------------
  |  Branch (463:9): [True: 1, False: 0]
  ------------------
  464|      1|        module = SECMOD_LoadModule(moduleSpec, NULL, PR_TRUE);
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  465|      1|        PR_smprintf_free(moduleSpec);
  466|      1|        if (module && !module->loaded) {
  ------------------
  |  Branch (466:13): [True: 1, False: 0]
  |  Branch (466:23): [True: 0, False: 1]
  ------------------
  467|      0|            SECMOD_DestroyModule(module);
  468|      0|            return NULL;
  469|      0|        }
  470|      1|    }
  471|      1|    return module;
  472|      1|}
nssinit.c:nss_makeFlags:
   64|      1|{
   65|      1|    char *flags = (char *)PORT_Alloc(NSS_MAX_FLAG_SIZE);
  ------------------
  |  |   52|      1|#define PORT_Alloc PORT_Alloc_Util
  ------------------
                  char *flags = (char *)PORT_Alloc(NSS_MAX_FLAG_SIZE);
  ------------------
  |  |   55|      1|#define NSS_MAX_FLAG_SIZE sizeof("readOnly") + sizeof("noCertDB") +                                  \
  |  |   56|      1|                              sizeof("noModDB") + sizeof("forceOpen") + sizeof("passwordRequired") + \
  |  |   57|      1|                              sizeof("optimizeSpace") + sizeof("printPolicyFeedback")
  ------------------
   66|      1|    PRBool first = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
   67|       |
   68|      1|    PORT_Memset(flags, 0, NSS_MAX_FLAG_SIZE);
  ------------------
  |  |  182|      1|#define PORT_Memset memset
  ------------------
                  PORT_Memset(flags, 0, NSS_MAX_FLAG_SIZE);
  ------------------
  |  |   55|      1|#define NSS_MAX_FLAG_SIZE sizeof("readOnly") + sizeof("noCertDB") +                                  \
  |  |   56|      1|                              sizeof("noModDB") + sizeof("forceOpen") + sizeof("passwordRequired") + \
  |  |   57|      1|                              sizeof("optimizeSpace") + sizeof("printPolicyFeedback")
  ------------------
   69|      1|    if (readOnly) {
  ------------------
  |  Branch (69:9): [True: 1, False: 0]
  ------------------
   70|      1|        PORT_Strcat(flags, "readOnly");
  ------------------
  |  |  185|      1|#define PORT_Strcat strcat
  ------------------
   71|      1|        first = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
   72|      1|    }
   73|      1|    if (noCertDB) {
  ------------------
  |  Branch (73:9): [True: 1, False: 0]
  ------------------
   74|      1|        if (!first)
  ------------------
  |  Branch (74:13): [True: 1, False: 0]
  ------------------
   75|      1|            PORT_Strcat(flags, ",");
  ------------------
  |  |  185|      1|#define PORT_Strcat strcat
  ------------------
   76|      1|        PORT_Strcat(flags, "noCertDB");
  ------------------
  |  |  185|      1|#define PORT_Strcat strcat
  ------------------
   77|      1|        first = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
   78|      1|    }
   79|      1|    if (noModDB) {
  ------------------
  |  Branch (79:9): [True: 1, False: 0]
  ------------------
   80|      1|        if (!first)
  ------------------
  |  Branch (80:13): [True: 1, False: 0]
  ------------------
   81|      1|            PORT_Strcat(flags, ",");
  ------------------
  |  |  185|      1|#define PORT_Strcat strcat
  ------------------
   82|      1|        PORT_Strcat(flags, "noModDB");
  ------------------
  |  |  185|      1|#define PORT_Strcat strcat
  ------------------
   83|      1|        first = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
   84|      1|    }
   85|      1|    if (forceOpen) {
  ------------------
  |  Branch (85:9): [True: 1, False: 0]
  ------------------
   86|      1|        if (!first)
  ------------------
  |  Branch (86:13): [True: 1, False: 0]
  ------------------
   87|      1|            PORT_Strcat(flags, ",");
  ------------------
  |  |  185|      1|#define PORT_Strcat strcat
  ------------------
   88|      1|        PORT_Strcat(flags, "forceOpen");
  ------------------
  |  |  185|      1|#define PORT_Strcat strcat
  ------------------
   89|      1|        first = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
   90|      1|    }
   91|      1|    if (passwordRequired) {
  ------------------
  |  Branch (91:9): [True: 0, False: 1]
  ------------------
   92|      0|        if (!first)
  ------------------
  |  Branch (92:13): [True: 0, False: 0]
  ------------------
   93|      0|            PORT_Strcat(flags, ",");
  ------------------
  |  |  185|      0|#define PORT_Strcat strcat
  ------------------
   94|      0|        PORT_Strcat(flags, "passwordRequired");
  ------------------
  |  |  185|      0|#define PORT_Strcat strcat
  ------------------
   95|      0|        first = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
   96|      0|    }
   97|      1|    if (optimizeSpace) {
  ------------------
  |  Branch (97:9): [True: 1, False: 0]
  ------------------
   98|      1|        if (!first)
  ------------------
  |  Branch (98:13): [True: 1, False: 0]
  ------------------
   99|      1|            PORT_Strcat(flags, ",");
  ------------------
  |  |  185|      1|#define PORT_Strcat strcat
  ------------------
  100|      1|        PORT_Strcat(flags, "optimizeSpace");
  ------------------
  |  |  185|      1|#define PORT_Strcat strcat
  ------------------
  101|      1|    }
  102|      1|    return flags;
  103|      1|}
nssinit.c:nss_InitShutdownList:
 1091|      1|{
 1092|      1|    if (nssShutdownList.lock != NULL) {
  ------------------
  |  Branch (1092:9): [True: 0, False: 1]
  ------------------
 1093|      0|        return SECSuccess;
 1094|      0|    }
 1095|      1|    nssShutdownList.lock = PZ_NewLock(nssILockOther);
  ------------------
  |  |  243|      1|#define PZ_NewLock(t) PR_NewLock()
  ------------------
 1096|      1|    if (nssShutdownList.lock == NULL) {
  ------------------
  |  Branch (1096:9): [True: 0, False: 1]
  ------------------
 1097|      0|        return SECFailure;
 1098|      0|    }
 1099|      1|    nssShutdownList.funcs = PORT_ZNewArray(struct NSSShutdownFuncPair,
  ------------------
  |  |  159|      1|    (type *)PORT_ZAlloc(sizeof(type) * (num))
  |  |  ------------------
  |  |  |  |   72|      1|#define PORT_ZAlloc PORT_ZAlloc_Util
  |  |  ------------------
  ------------------
 1100|      1|                                           NSS_SHUTDOWN_STEP);
 1101|      1|    if (nssShutdownList.funcs == NULL) {
  ------------------
  |  Branch (1101:9): [True: 0, False: 1]
  ------------------
 1102|      0|        PZ_DestroyLock(nssShutdownList.lock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
 1103|      0|        nssShutdownList.lock = NULL;
 1104|      0|        return SECFailure;
 1105|      0|    }
 1106|      1|    nssShutdownList.allocatedFuncs = NSS_SHUTDOWN_STEP;
  ------------------
  |  |  955|      1|#define NSS_SHUTDOWN_STEP 10
  ------------------
 1107|      1|    nssShutdownList.peakFuncs = 0;
 1108|       |
 1109|      1|    return SECSuccess;
 1110|      1|}
nssinit.c:nss_doLockInit:
  534|      1|{
  535|      1|    nssInitLock = PZ_NewLock(nssILockOther);
  ------------------
  |  |  243|      1|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  536|      1|    if (nssInitLock == NULL) {
  ------------------
  |  Branch (536:9): [True: 0, False: 1]
  ------------------
  537|      0|        return PR_FAILURE;
  538|      0|    }
  539|      1|    nssInitCondition = PZ_NewCondVar(nssInitLock);
  ------------------
  |  |  248|      1|#define PZ_NewCondVar(l) PR_NewCondVar((l))
  ------------------
  540|      1|    if (nssInitCondition == NULL) {
  ------------------
  |  Branch (540:9): [True: 0, False: 1]
  ------------------
  541|      0|        return PR_FAILURE;
  542|      0|    }
  543|      1|    return PR_SUCCESS;
  544|      1|}
nssinit.c:nss_ShutdownShutdownList:
 1114|      1|{
 1115|      1|    SECStatus rv = SECSuccess;
 1116|      1|    int i;
 1117|       |
 1118|       |    /* call all the registerd functions first */
 1119|      1|    for (i = 0; i < nssShutdownList.peakFuncs; i++) {
  ------------------
  |  Branch (1119:17): [True: 0, False: 1]
  ------------------
 1120|      0|        struct NSSShutdownFuncPair *funcPair = &nssShutdownList.funcs[i];
 1121|      0|        if (funcPair->func) {
  ------------------
  |  Branch (1121:13): [True: 0, False: 0]
  ------------------
 1122|      0|            if ((*funcPair->func)(funcPair->appData, NULL) != SECSuccess) {
  ------------------
  |  Branch (1122:17): [True: 0, False: 0]
  ------------------
 1123|      0|                rv = SECFailure;
 1124|      0|            }
 1125|      0|        }
 1126|      0|    }
 1127|       |
 1128|      1|    nssShutdownList.peakFuncs = 0;
 1129|      1|    nssShutdownList.allocatedFuncs = 0;
 1130|      1|    PORT_Free(nssShutdownList.funcs);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
 1131|      1|    nssShutdownList.funcs = NULL;
 1132|      1|    if (nssShutdownList.lock) {
  ------------------
  |  Branch (1132:9): [True: 1, False: 0]
  ------------------
 1133|      1|        PZ_DestroyLock(nssShutdownList.lock);
  ------------------
  |  |  244|      1|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
 1134|      1|    }
 1135|      1|    nssShutdownList.lock = NULL;
 1136|      1|    return rv;
 1137|      1|}

NSS_OptionGet:
  107|  17.1k|{
  108|  17.1k|    SECStatus rv = SECSuccess;
  109|       |
  110|  17.1k|    switch (which) {
  111|  5.54k|        case NSS_RSA_MIN_KEY_SIZE:
  ------------------
  |  |  286|  5.54k|#define NSS_RSA_MIN_KEY_SIZE 0x001
  ------------------
  |  Branch (111:9): [True: 5.54k, False: 11.5k]
  ------------------
  112|  5.54k|            *value = nss_ops.rsaMinKeySize;
  113|  5.54k|            break;
  114|      0|        case NSS_DH_MIN_KEY_SIZE:
  ------------------
  |  |  287|      0|#define NSS_DH_MIN_KEY_SIZE 0x002
  ------------------
  |  Branch (114:9): [True: 0, False: 17.1k]
  ------------------
  115|      0|            *value = nss_ops.dhMinKeySize;
  116|      0|            break;
  117|  2.68k|        case NSS_DSA_MIN_KEY_SIZE:
  ------------------
  |  |  288|  2.68k|#define NSS_DSA_MIN_KEY_SIZE 0x004
  ------------------
  |  Branch (117:9): [True: 2.68k, False: 14.4k]
  ------------------
  118|  2.68k|            *value = nss_ops.dsaMinKeySize;
  119|  2.68k|            break;
  120|      0|        case NSS_TLS_VERSION_MIN_POLICY:
  ------------------
  |  |  289|      0|#define NSS_TLS_VERSION_MIN_POLICY 0x008
  ------------------
  |  Branch (120:9): [True: 0, False: 17.1k]
  ------------------
  121|      0|            *value = nss_ops.tlsVersionMinPolicy;
  122|      0|            break;
  123|      0|        case NSS_TLS_VERSION_MAX_POLICY:
  ------------------
  |  |  290|      0|#define NSS_TLS_VERSION_MAX_POLICY 0x009
  ------------------
  |  Branch (123:9): [True: 0, False: 17.1k]
  ------------------
  124|      0|            *value = nss_ops.tlsVersionMaxPolicy;
  125|      0|            break;
  126|      0|        case NSS_DTLS_VERSION_MIN_POLICY:
  ------------------
  |  |  291|      0|#define NSS_DTLS_VERSION_MIN_POLICY 0x00a
  ------------------
  |  Branch (126:9): [True: 0, False: 17.1k]
  ------------------
  127|      0|            *value = nss_ops.dtlsVersionMinPolicy;
  128|      0|            break;
  129|      0|        case NSS_DTLS_VERSION_MAX_POLICY:
  ------------------
  |  |  292|      0|#define NSS_DTLS_VERSION_MAX_POLICY 0x00b
  ------------------
  |  Branch (129:9): [True: 0, False: 17.1k]
  ------------------
  130|      0|            *value = nss_ops.dtlsVersionMaxPolicy;
  131|      0|            break;
  132|      0|        case __NSS_PKCS12_DECODE_FORCE_UNICODE:
  ------------------
  |  |  301|      0|#define __NSS_PKCS12_DECODE_FORCE_UNICODE 0x00c
  ------------------
  |  Branch (132:9): [True: 0, False: 17.1k]
  ------------------
  133|      0|            *value = nss_ops.pkcs12DecodeForceUnicode;
  134|      0|            break;
  135|      0|        case NSS_DEFAULT_LOCKS:
  ------------------
  |  |  302|      0|#define NSS_DEFAULT_LOCKS 0x00d /* lock default values */
  ------------------
  |  Branch (135:9): [True: 0, False: 17.1k]
  ------------------
  136|      0|            *value = nss_ops.defaultLocks;
  137|      0|            break;
  138|  8.56k|        case NSS_KEY_SIZE_POLICY_FLAGS:
  ------------------
  |  |  317|  8.56k|#define NSS_KEY_SIZE_POLICY_FLAGS 0x00e
  ------------------
  |  Branch (138:9): [True: 8.56k, False: 8.56k]
  ------------------
  139|  8.56k|        case NSS_KEY_SIZE_POLICY_SET_FLAGS:
  ------------------
  |  |  318|  8.56k|#define NSS_KEY_SIZE_POLICY_SET_FLAGS 0x00f
  ------------------
  |  Branch (139:9): [True: 0, False: 17.1k]
  ------------------
  140|  8.56k|            *value = nss_ops.keySizePolicyFlags;
  141|  8.56k|            break;
  142|      0|        case NSS_KEY_SIZE_POLICY_CLEAR_FLAGS:
  ------------------
  |  |  319|      0|#define NSS_KEY_SIZE_POLICY_CLEAR_FLAGS 0x010
  ------------------
  |  Branch (142:9): [True: 0, False: 17.1k]
  ------------------
  143|      0|            *value = ~nss_ops.keySizePolicyFlags;
  144|      0|            break;
  145|    334|        case NSS_ECC_MIN_KEY_SIZE:
  ------------------
  |  |  327|    334|#define NSS_ECC_MIN_KEY_SIZE 0x011
  ------------------
  |  Branch (145:9): [True: 334, False: 16.7k]
  ------------------
  146|    334|            *value = nss_ops.eccMinKeySize;
  147|    334|            break;
  148|      0|        default:
  ------------------
  |  Branch (148:9): [True: 0, False: 17.1k]
  ------------------
  149|      0|            rv = SECFailure;
  150|  17.1k|    }
  151|       |
  152|  17.1k|    return rv;
  153|  17.1k|}

nssSession_ImportNSS3Session:
   29|      2|{
   30|      2|    nssSession *rvSession = NULL;
   31|      2|    if (session != CK_INVALID_HANDLE) {
  ------------------
  |  |   78|      2|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (31:9): [True: 2, False: 0]
  ------------------
   32|      2|        rvSession = nss_ZNEW(arenaOpt, nssSession);
  ------------------
  |  |  348|      2|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
   33|      2|        if (rvSession) {
  ------------------
  |  Branch (33:13): [True: 2, False: 0]
  ------------------
   34|      2|            rvSession->handle = session;
   35|      2|            rvSession->lock = lock;
   36|      2|            rvSession->ownLock = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
   37|      2|            rvSession->isRW = rw;
   38|      2|        }
   39|      2|    }
   40|      2|    return rvSession;
   41|      2|}
nssToken_CreateFromPK11SlotInfo:
  132|      2|{
  133|      2|    NSSToken *rvToken;
  134|      2|    NSSArena *arena;
  135|       |
  136|       |    /* Don't create a token object for a disabled slot */
  137|      2|    if (nss3slot->disabled) {
  ------------------
  |  Branch (137:9): [True: 0, False: 2]
  ------------------
  138|      0|        PORT_SetError(SEC_ERROR_NO_TOKEN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  139|      0|        return NULL;
  140|      0|    }
  141|      2|    arena = nssArena_Create();
  142|      2|    if (!arena) {
  ------------------
  |  Branch (142:9): [True: 0, False: 2]
  ------------------
  143|      0|        return NULL;
  144|      0|    }
  145|      2|    rvToken = nss_ZNEW(arena, NSSToken);
  ------------------
  |  |  348|      2|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
  146|      2|    if (!rvToken) {
  ------------------
  |  Branch (146:9): [True: 0, False: 2]
  ------------------
  147|      0|        nssArena_Destroy(arena);
  148|      0|        return NULL;
  149|      0|    }
  150|      2|    rvToken->base.refCount = 1;
  151|      2|    rvToken->base.lock = PZ_NewLock(nssILockOther);
  ------------------
  |  |  243|      2|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  152|      2|    if (!rvToken->base.lock) {
  ------------------
  |  Branch (152:9): [True: 0, False: 2]
  ------------------
  153|      0|        nssArena_Destroy(arena);
  154|      0|        return NULL;
  155|      0|    }
  156|      2|    rvToken->base.arena = arena;
  157|      2|    rvToken->pk11slot = PK11_ReferenceSlot(nss3slot);
  158|      2|    rvToken->epv = nss3slot->functionList;
  159|      2|    rvToken->defaultSession = nssSession_ImportNSS3Session(td->arena,
  160|      2|                                                           nss3slot->session,
  161|      2|                                                           nss3slot->sessionLock,
  162|      2|                                                           nss3slot->defRWSession);
  163|       |#if 0 /* we should do this instead of blindly continuing. */
  164|       |    if (!rvToken->defaultSession) {
  165|       |    PORT_SetError(SEC_ERROR_NO_TOKEN);
  166|       |        goto loser;
  167|       |    }
  168|       |#endif
  169|      2|    if (!PK11_IsInternal(nss3slot) && PK11_IsHW(nss3slot)) {
  ------------------
  |  Branch (169:9): [True: 0, False: 2]
  |  Branch (169:39): [True: 0, False: 0]
  ------------------
  170|      0|        rvToken->cache = nssTokenObjectCache_Create(rvToken,
  171|      0|                                                    PR_TRUE, PR_TRUE, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
                                                                  PR_TRUE, PR_TRUE, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
                                                                  PR_TRUE, PR_TRUE, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  172|      0|        if (!rvToken->cache)
  ------------------
  |  Branch (172:13): [True: 0, False: 0]
  ------------------
  173|      0|            goto loser;
  174|      0|    }
  175|      2|    rvToken->trustDomain = td;
  176|       |    /* Grab the token name from the PKCS#11 fixed-length buffer */
  177|      2|    rvToken->base.name = nssUTF8_Duplicate(nss3slot->token_name, td->arena);
  178|      2|    rvToken->slot = nssSlot_CreateFromPK11SlotInfo(td, nss3slot);
  179|      2|    if (!rvToken->slot) {
  ------------------
  |  Branch (179:9): [True: 0, False: 2]
  ------------------
  180|      0|        goto loser;
  181|      0|    }
  182|      2|    if (rvToken->defaultSession)
  ------------------
  |  Branch (182:9): [True: 2, False: 0]
  ------------------
  183|      2|        rvToken->defaultSession->slot = rvToken->slot;
  184|      2|    return rvToken;
  185|      0|loser:
  186|      0|    PZ_DestroyLock(rvToken->base.lock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  187|      0|    nssArena_Destroy(arena);
  188|      0|    return NULL;
  189|      2|}
nssToken_UpdateName:
  193|      2|{
  194|      2|    if (!token) {
  ------------------
  |  Branch (194:9): [True: 2, False: 0]
  ------------------
  195|      2|        return;
  196|      2|    }
  197|      0|    token->base.name = nssUTF8_Duplicate(token->pk11slot->token_name, token->base.arena);
  198|      0|}
nssSlot_IsPermanent:
  202|  59.5k|{
  203|  59.5k|    return slot->pk11slot->isPerm;
  204|  59.5k|}
nssToken_Refresh:
  214|      2|{
  215|      2|    PK11SlotInfo *nss3slot;
  216|       |
  217|      2|    if (!token) {
  ------------------
  |  Branch (217:9): [True: 2, False: 0]
  ------------------
  218|      2|        return PR_SUCCESS;
  219|      2|    }
  220|      0|    nss3slot = token->pk11slot;
  221|      0|    token->defaultSession =
  222|      0|        nssSession_ImportNSS3Session(token->slot->base.arena,
  223|      0|                                     nss3slot->session,
  224|      0|                                     nss3slot->sessionLock,
  225|      0|                                     nss3slot->defRWSession);
  226|      0|    return token->defaultSession ? PR_SUCCESS : PR_FAILURE;
  ------------------
  |  Branch (226:12): [True: 0, False: 0]
  ------------------
  227|      2|}
dev3hack.c:nssSlot_CreateFromPK11SlotInfo:
  102|      2|{
  103|      2|    NSSSlot *rvSlot;
  104|      2|    NSSArena *arena;
  105|      2|    arena = nssArena_Create();
  106|      2|    if (!arena) {
  ------------------
  |  Branch (106:9): [True: 0, False: 2]
  ------------------
  107|      0|        return NULL;
  108|      0|    }
  109|      2|    rvSlot = nss_ZNEW(arena, NSSSlot);
  ------------------
  |  |  348|      2|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
  110|      2|    if (!rvSlot) {
  ------------------
  |  Branch (110:9): [True: 0, False: 2]
  ------------------
  111|      0|        nssArena_Destroy(arena);
  112|      0|        return NULL;
  113|      0|    }
  114|      2|    rvSlot->base.refCount = 1;
  115|      2|    rvSlot->base.lock = PZ_NewLock(nssILockOther);
  ------------------
  |  |  243|      2|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  116|      2|    rvSlot->base.arena = arena;
  117|      2|    rvSlot->pk11slot = PK11_ReferenceSlot(nss3slot);
  118|      2|    rvSlot->epv = nss3slot->functionList;
  119|      2|    rvSlot->slotID = nss3slot->slotID;
  120|       |    /* Grab the slot name from the PKCS#11 fixed-length buffer */
  121|      2|    rvSlot->base.name = nssUTF8_Duplicate(nss3slot->slot_name, td->arena);
  122|      2|    rvSlot->lock = (nss3slot->isThreadSafe) ? NULL : nss3slot->sessionLock;
  ------------------
  |  Branch (122:20): [True: 2, False: 0]
  ------------------
  123|      2|    rvSlot->isPresentLock = PZ_NewLock(nssiLockOther);
  ------------------
  |  |  243|      2|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  124|      2|    rvSlot->isPresentCondition = PR_NewCondVar(rvSlot->isPresentLock);
  125|      2|    rvSlot->isPresentThread = NULL;
  126|      2|    rvSlot->lastTokenPingState = nssSlotLastPingState_Reset;
  127|      2|    return rvSlot;
  128|      2|}

PK11_ImportPublicKey:
   72|  4.44k|{
   73|  4.44k|    CK_BBOOL cktrue = CK_TRUE;
  ------------------
  |  |   22|  4.44k|#define CK_TRUE 1
  ------------------
   74|  4.44k|    CK_BBOOL ckfalse = CK_FALSE;
  ------------------
  |  |   23|  4.44k|#define CK_FALSE 0
  ------------------
   75|  4.44k|    CK_OBJECT_CLASS keyClass = CKO_PUBLIC_KEY;
  ------------------
  |  |  327|  4.44k|#define CKO_PUBLIC_KEY 0x00000002UL
  ------------------
   76|  4.44k|    CK_KEY_TYPE keyType = CKK_GENERIC_SECRET;
  ------------------
  |  |  383|  4.44k|#define CKK_GENERIC_SECRET 0x00000010UL
  ------------------
   77|  4.44k|    CK_OBJECT_HANDLE objectID;
   78|  4.44k|    CK_ATTRIBUTE theTemplate[11];
   79|  4.44k|    CK_ATTRIBUTE *signedattr = NULL;
   80|  4.44k|    CK_ATTRIBUTE *attrs = theTemplate;
   81|  4.44k|    CK_NSS_KEM_PARAMETER_SET_TYPE kemParams;
   82|  4.44k|    SECItem *ckaId = NULL;
   83|  4.44k|    SECItem *pubValue = NULL;
   84|  4.44k|    int signedcount = 0;
   85|  4.44k|    unsigned int templateCount = 0;
   86|  4.44k|    SECStatus rv;
   87|       |
   88|       |    /* if we already have an object in the desired slot, use it */
   89|  4.44k|    if (!isToken && pubKey->pkcs11Slot == slot) {
  ------------------
  |  Branch (89:9): [True: 4.44k, False: 0]
  |  Branch (89:21): [True: 0, False: 4.44k]
  ------------------
   90|      0|        return pubKey->pkcs11ID;
   91|      0|    }
   92|       |
   93|       |    /* free the existing key */
   94|  4.44k|    if (pubKey->pkcs11Slot != NULL) {
  ------------------
  |  Branch (94:9): [True: 0, False: 4.44k]
  ------------------
   95|      0|        PK11SlotInfo *oSlot = pubKey->pkcs11Slot;
   96|      0|        if (!PK11_IsPermObject(pubKey->pkcs11Slot, pubKey->pkcs11ID)) {
  ------------------
  |  Branch (96:13): [True: 0, False: 0]
  ------------------
   97|      0|            PK11_EnterSlotMonitor(oSlot);
   98|      0|            (void)PK11_GETTAB(oSlot)->C_DestroyObject(oSlot->session,
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
   99|      0|                                                      pubKey->pkcs11ID);
  100|      0|            PK11_ExitSlotMonitor(oSlot);
  101|      0|        }
  102|      0|        PK11_FreeSlot(oSlot);
  103|      0|        pubKey->pkcs11Slot = NULL;
  104|      0|    }
  105|  4.44k|    PK11_SETATTRS(attrs, CKA_CLASS, &keyClass, sizeof(keyClass));
  ------------------
  |  |  104|  4.44k|    (x)->type = (id);              \
  |  |  105|  4.44k|    (x)->pValue = (v);             \
  |  |  106|  4.44k|    (x)->ulValueLen = (l);
  ------------------
  106|  4.44k|    attrs++;
  107|  4.44k|    PK11_SETATTRS(attrs, CKA_KEY_TYPE, &keyType, sizeof(keyType));
  ------------------
  |  |  104|  4.44k|    (x)->type = (id);              \
  |  |  105|  4.44k|    (x)->pValue = (v);             \
  |  |  106|  4.44k|    (x)->ulValueLen = (l);
  ------------------
  108|  4.44k|    attrs++;
  109|  4.44k|    PK11_SETATTRS(attrs, CKA_TOKEN, isToken ? &cktrue : &ckfalse,
  ------------------
  |  |  104|  4.44k|    (x)->type = (id);              \
  |  |  105|  8.88k|    (x)->pValue = (v);             \
  |  |  ------------------
  |  |  |  Branch (105:20): [True: 0, False: 4.44k]
  |  |  ------------------
  |  |  106|  4.44k|    (x)->ulValueLen = (l);
  ------------------
  110|  4.44k|                  sizeof(CK_BBOOL));
  111|  4.44k|    attrs++;
  112|  4.44k|    if (isToken) {
  ------------------
  |  Branch (112:9): [True: 0, False: 4.44k]
  ------------------
  113|      0|        ckaId = pk11_MakeIDFromPublicKey(pubKey);
  114|      0|        if (ckaId == NULL) {
  ------------------
  |  Branch (114:13): [True: 0, False: 0]
  ------------------
  115|      0|            PORT_SetError(SEC_ERROR_BAD_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  116|      0|            return CK_INVALID_HANDLE;
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
  117|      0|        }
  118|      0|        PK11_SETATTRS(attrs, CKA_ID, ckaId->data, ckaId->len);
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  119|      0|        attrs++;
  120|      0|    }
  121|       |
  122|       |    /* now import the key */
  123|  4.44k|    {
  124|  4.44k|        switch (pubKey->keyType) {
  125|  2.77k|            case rsaKey:
  ------------------
  |  Branch (125:13): [True: 2.77k, False: 1.66k]
  ------------------
  126|  2.77k|                keyType = CKK_RSA;
  ------------------
  |  |  372|  2.77k|#define CKK_RSA 0x00000000UL
  ------------------
  127|  2.77k|                PK11_SETATTRS(attrs, CKA_WRAP, &cktrue, sizeof(CK_BBOOL));
  ------------------
  |  |  104|  2.77k|    (x)->type = (id);              \
  |  |  105|  2.77k|    (x)->pValue = (v);             \
  |  |  106|  2.77k|    (x)->ulValueLen = (l);
  ------------------
  128|  2.77k|                attrs++;
  129|  2.77k|                PK11_SETATTRS(attrs, CKA_ENCRYPT, &cktrue,
  ------------------
  |  |  104|  2.77k|    (x)->type = (id);              \
  |  |  105|  2.77k|    (x)->pValue = (v);             \
  |  |  106|  2.77k|    (x)->ulValueLen = (l);
  ------------------
  130|  2.77k|                              sizeof(CK_BBOOL));
  131|  2.77k|                attrs++;
  132|  2.77k|                PK11_SETATTRS(attrs, CKA_VERIFY, &cktrue, sizeof(CK_BBOOL));
  ------------------
  |  |  104|  2.77k|    (x)->type = (id);              \
  |  |  105|  2.77k|    (x)->pValue = (v);             \
  |  |  106|  2.77k|    (x)->ulValueLen = (l);
  ------------------
  133|  2.77k|                attrs++;
  134|  2.77k|                signedattr = attrs;
  135|  2.77k|                PK11_SETATTRS(attrs, CKA_MODULUS, pubKey->u.rsa.modulus.data,
  ------------------
  |  |  104|  2.77k|    (x)->type = (id);              \
  |  |  105|  2.77k|    (x)->pValue = (v);             \
  |  |  106|  2.77k|    (x)->ulValueLen = (l);
  ------------------
  136|  2.77k|                              pubKey->u.rsa.modulus.len);
  137|  2.77k|                attrs++;
  138|  2.77k|                PK11_SETATTRS(attrs, CKA_PUBLIC_EXPONENT,
  ------------------
  |  |  104|  2.77k|    (x)->type = (id);              \
  |  |  105|  2.77k|    (x)->pValue = (v);             \
  |  |  106|  2.77k|    (x)->ulValueLen = (l);
  ------------------
  139|  2.77k|                              pubKey->u.rsa.publicExponent.data,
  140|  2.77k|                              pubKey->u.rsa.publicExponent.len);
  141|  2.77k|                attrs++;
  142|  2.77k|                break;
  143|  1.34k|            case dsaKey:
  ------------------
  |  Branch (143:13): [True: 1.34k, False: 3.09k]
  ------------------
  144|  1.34k|                keyType = CKK_DSA;
  ------------------
  |  |  373|  1.34k|#define CKK_DSA 0x00000001UL
  ------------------
  145|  1.34k|                PK11_SETATTRS(attrs, CKA_VERIFY, &cktrue, sizeof(CK_BBOOL));
  ------------------
  |  |  104|  1.34k|    (x)->type = (id);              \
  |  |  105|  1.34k|    (x)->pValue = (v);             \
  |  |  106|  1.34k|    (x)->ulValueLen = (l);
  ------------------
  146|  1.34k|                attrs++;
  147|  1.34k|                signedattr = attrs;
  148|  1.34k|                PK11_SETATTRS(attrs, CKA_PRIME, pubKey->u.dsa.params.prime.data,
  ------------------
  |  |  104|  1.34k|    (x)->type = (id);              \
  |  |  105|  1.34k|    (x)->pValue = (v);             \
  |  |  106|  1.34k|    (x)->ulValueLen = (l);
  ------------------
  149|  1.34k|                              pubKey->u.dsa.params.prime.len);
  150|  1.34k|                attrs++;
  151|  1.34k|                PK11_SETATTRS(attrs, CKA_SUBPRIME, pubKey->u.dsa.params.subPrime.data,
  ------------------
  |  |  104|  1.34k|    (x)->type = (id);              \
  |  |  105|  1.34k|    (x)->pValue = (v);             \
  |  |  106|  1.34k|    (x)->ulValueLen = (l);
  ------------------
  152|  1.34k|                              pubKey->u.dsa.params.subPrime.len);
  153|  1.34k|                attrs++;
  154|  1.34k|                PK11_SETATTRS(attrs, CKA_BASE, pubKey->u.dsa.params.base.data,
  ------------------
  |  |  104|  1.34k|    (x)->type = (id);              \
  |  |  105|  1.34k|    (x)->pValue = (v);             \
  |  |  106|  1.34k|    (x)->ulValueLen = (l);
  ------------------
  155|  1.34k|                              pubKey->u.dsa.params.base.len);
  156|  1.34k|                attrs++;
  157|  1.34k|                PK11_SETATTRS(attrs, CKA_VALUE, pubKey->u.dsa.publicValue.data,
  ------------------
  |  |  104|  1.34k|    (x)->type = (id);              \
  |  |  105|  1.34k|    (x)->pValue = (v);             \
  |  |  106|  1.34k|    (x)->ulValueLen = (l);
  ------------------
  158|  1.34k|                              pubKey->u.dsa.publicValue.len);
  159|  1.34k|                attrs++;
  160|  1.34k|                break;
  161|      0|            case fortezzaKey:
  ------------------
  |  Branch (161:13): [True: 0, False: 4.44k]
  ------------------
  162|      0|                keyType = CKK_DSA;
  ------------------
  |  |  373|      0|#define CKK_DSA 0x00000001UL
  ------------------
  163|      0|                PK11_SETATTRS(attrs, CKA_VERIFY, &cktrue, sizeof(CK_BBOOL));
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  164|      0|                attrs++;
  165|      0|                signedattr = attrs;
  166|      0|                PK11_SETATTRS(attrs, CKA_PRIME, pubKey->u.fortezza.params.prime.data,
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  167|      0|                              pubKey->u.fortezza.params.prime.len);
  168|      0|                attrs++;
  169|      0|                PK11_SETATTRS(attrs, CKA_SUBPRIME,
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  170|      0|                              pubKey->u.fortezza.params.subPrime.data,
  171|      0|                              pubKey->u.fortezza.params.subPrime.len);
  172|      0|                attrs++;
  173|      0|                PK11_SETATTRS(attrs, CKA_BASE, pubKey->u.fortezza.params.base.data,
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  174|      0|                              pubKey->u.fortezza.params.base.len);
  175|      0|                attrs++;
  176|      0|                PK11_SETATTRS(attrs, CKA_VALUE, pubKey->u.fortezza.DSSKey.data,
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  177|      0|                              pubKey->u.fortezza.DSSKey.len);
  178|      0|                attrs++;
  179|      0|                break;
  180|      0|            case dhKey:
  ------------------
  |  Branch (180:13): [True: 0, False: 4.44k]
  ------------------
  181|      0|                keyType = CKK_DH;
  ------------------
  |  |  374|      0|#define CKK_DH 0x00000002UL
  ------------------
  182|      0|                PK11_SETATTRS(attrs, CKA_DERIVE, &cktrue, sizeof(CK_BBOOL));
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  183|      0|                attrs++;
  184|      0|                signedattr = attrs;
  185|      0|                PK11_SETATTRS(attrs, CKA_PRIME, pubKey->u.dh.prime.data,
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  186|      0|                              pubKey->u.dh.prime.len);
  187|      0|                attrs++;
  188|      0|                PK11_SETATTRS(attrs, CKA_BASE, pubKey->u.dh.base.data,
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  189|      0|                              pubKey->u.dh.base.len);
  190|      0|                attrs++;
  191|      0|                PK11_SETATTRS(attrs, CKA_VALUE, pubKey->u.dh.publicValue.data,
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  192|      0|                              pubKey->u.dh.publicValue.len);
  193|      0|                attrs++;
  194|      0|                break;
  195|      0|            case edKey:
  ------------------
  |  Branch (195:13): [True: 0, False: 4.44k]
  ------------------
  196|      0|                keyType = CKK_EC_EDWARDS;
  ------------------
  |  |  448|      0|#define CKK_EC_EDWARDS 0x00000040UL
  ------------------
  197|      0|                PK11_SETATTRS(attrs, CKA_VERIFY, &cktrue, sizeof(CK_BBOOL));
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  198|      0|                attrs++;
  199|      0|                PK11_SETATTRS(attrs, CKA_EC_PARAMS,
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  200|      0|                              pubKey->u.ec.DEREncodedParams.data,
  201|      0|                              pubKey->u.ec.DEREncodedParams.len);
  202|      0|                attrs++;
  203|      0|                PK11_SETATTRS(attrs, CKA_EC_POINT,
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  204|      0|                              pubKey->u.ec.publicValue.data,
  205|      0|                              pubKey->u.ec.publicValue.len);
  206|      0|                attrs++;
  207|      0|                break;
  208|      0|            case ecMontKey:
  ------------------
  |  Branch (208:13): [True: 0, False: 4.44k]
  ------------------
  209|      0|                keyType = CKK_EC_MONTGOMERY;
  ------------------
  |  |  449|      0|#define CKK_EC_MONTGOMERY 0x00000041UL
  ------------------
  210|      0|                PK11_SETATTRS(attrs, CKA_DERIVE, &cktrue, sizeof(CK_BBOOL));
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  211|      0|                attrs++;
  212|      0|                PK11_SETATTRS(attrs, CKA_EC_PARAMS,
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  213|      0|                              pubKey->u.ec.DEREncodedParams.data,
  214|      0|                              pubKey->u.ec.DEREncodedParams.len);
  215|      0|                attrs++;
  216|      0|                PK11_SETATTRS(attrs, CKA_EC_POINT,
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  217|      0|                              pubKey->u.ec.publicValue.data,
  218|      0|                              pubKey->u.ec.publicValue.len);
  219|      0|                attrs++;
  220|      0|                break;
  221|    323|            case ecKey:
  ------------------
  |  Branch (221:13): [True: 323, False: 4.12k]
  ------------------
  222|    323|                keyType = CKK_EC;
  ------------------
  |  |  379|    323|#define CKK_EC 0x00000003UL
  ------------------
  223|    323|                PK11_SETATTRS(attrs, CKA_VERIFY, &cktrue, sizeof(CK_BBOOL));
  ------------------
  |  |  104|    323|    (x)->type = (id);              \
  |  |  105|    323|    (x)->pValue = (v);             \
  |  |  106|    323|    (x)->ulValueLen = (l);
  ------------------
  224|    323|                attrs++;
  225|    323|                PK11_SETATTRS(attrs, CKA_DERIVE, &cktrue, sizeof(CK_BBOOL));
  ------------------
  |  |  104|    323|    (x)->type = (id);              \
  |  |  105|    323|    (x)->pValue = (v);             \
  |  |  106|    323|    (x)->ulValueLen = (l);
  ------------------
  226|    323|                attrs++;
  227|    323|                PK11_SETATTRS(attrs, CKA_EC_PARAMS,
  ------------------
  |  |  104|    323|    (x)->type = (id);              \
  |  |  105|    323|    (x)->pValue = (v);             \
  |  |  106|    323|    (x)->ulValueLen = (l);
  ------------------
  228|    323|                              pubKey->u.ec.DEREncodedParams.data,
  229|    323|                              pubKey->u.ec.DEREncodedParams.len);
  230|    323|                attrs++;
  231|    323|                if (PR_GetEnvSecure("NSS_USE_DECODED_CKA_EC_POINT")) {
  ------------------
  |  Branch (231:21): [True: 0, False: 323]
  ------------------
  232|      0|                    PK11_SETATTRS(attrs, CKA_EC_POINT,
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  233|      0|                                  pubKey->u.ec.publicValue.data,
  234|      0|                                  pubKey->u.ec.publicValue.len);
  235|      0|                    attrs++;
  236|    323|                } else {
  237|    323|                    pubValue = SEC_ASN1EncodeItem(NULL, NULL,
  ------------------
  |  |   89|    323|#define SEC_ASN1EncodeItem SEC_ASN1EncodeItem_Util
  ------------------
  238|    323|                                                  &pubKey->u.ec.publicValue,
  239|    323|                                                  SEC_ASN1_GET(SEC_OctetStringTemplate));
  ------------------
  |  |  188|    323|#define SEC_ASN1_GET(x) x
  ------------------
  240|    323|                    if (pubValue == NULL) {
  ------------------
  |  Branch (240:25): [True: 0, False: 323]
  ------------------
  241|      0|                        if (ckaId) {
  ------------------
  |  Branch (241:29): [True: 0, False: 0]
  ------------------
  242|      0|                            SECITEM_FreeItem(ckaId, PR_TRUE);
  ------------------
  |  |  108|      0|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                                          SECITEM_FreeItem(ckaId, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  243|      0|                        }
  244|      0|                        return CK_INVALID_HANDLE;
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
  245|      0|                    }
  246|    323|                    PK11_SETATTRS(attrs, CKA_EC_POINT,
  ------------------
  |  |  104|    323|    (x)->type = (id);              \
  |  |  105|    323|    (x)->pValue = (v);             \
  |  |  106|    323|    (x)->ulValueLen = (l);
  ------------------
  247|    323|                                  pubValue->data, pubValue->len);
  248|    323|                    attrs++;
  249|    323|                }
  250|    323|                break;
  251|    323|            case kyberKey:
  ------------------
  |  Branch (251:13): [True: 0, False: 4.44k]
  ------------------
  252|      0|                switch (pubKey->u.kyber.params) {
  253|      0|                    case params_kyber768_round3:
  ------------------
  |  Branch (253:21): [True: 0, False: 0]
  ------------------
  254|      0|                    case params_kyber768_round3_test_mode:
  ------------------
  |  Branch (254:21): [True: 0, False: 0]
  ------------------
  255|      0|                        keyType = CKK_NSS_KYBER;
  ------------------
  |  |   58|      0|#define CKK_NSS_KYBER (CKK_NSS + 5)
  |  |  ------------------
  |  |  |  |   49|      0|#define CKK_NSS (CKK_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  458|      0|#define CKK_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKK_NSS (CKK_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|      0|                        kemParams = CKP_NSS_KYBER_768_ROUND3;
  ------------------
  |  |  301|      0|#define CKP_NSS_KYBER_768_ROUND3 (CKP_NSS + 1)
  |  |  ------------------
  |  |  |  |  300|      0|#define CKP_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1309|      0|#define CKM_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKP_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  257|      0|                        break;
  258|      0|                    case params_ml_kem768:
  ------------------
  |  Branch (258:21): [True: 0, False: 0]
  ------------------
  259|      0|                    case params_ml_kem768_test_mode:
  ------------------
  |  Branch (259:21): [True: 0, False: 0]
  ------------------
  260|      0|                        keyType = CKK_NSS_ML_KEM;
  ------------------
  |  |   59|      0|#define CKK_NSS_ML_KEM (CKK_NSS + 6)
  |  |  ------------------
  |  |  |  |   49|      0|#define CKK_NSS (CKK_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  458|      0|#define CKK_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKK_NSS (CKK_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  261|      0|                        kemParams = CKP_NSS_ML_KEM_768;
  ------------------
  |  |  302|      0|#define CKP_NSS_ML_KEM_768 (CKP_NSS + 2)
  |  |  ------------------
  |  |  |  |  300|      0|#define CKP_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1309|      0|#define CKM_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKP_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  262|      0|                        break;
  263|      0|                    default:
  ------------------
  |  Branch (263:21): [True: 0, False: 0]
  ------------------
  264|      0|                        kemParams = CKP_INVALID_ID;
  ------------------
  |  |  345|      0|#define CKP_INVALID_ID 0x00000000UL
  ------------------
  265|      0|                        break;
  266|      0|                }
  267|      0|                PK11_SETATTRS(attrs, CKA_NSS_PARAMETER_SET,
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  268|      0|                              &kemParams,
  269|      0|                              sizeof(CK_NSS_KEM_PARAMETER_SET_TYPE));
  270|      0|                attrs++;
  271|      0|                PK11_SETATTRS(attrs, CKA_VALUE, pubKey->u.kyber.publicValue.data,
  ------------------
  |  |  104|      0|    (x)->type = (id);              \
  |  |  105|      0|    (x)->pValue = (v);             \
  |  |  106|      0|    (x)->ulValueLen = (l);
  ------------------
  272|      0|                              pubKey->u.kyber.publicValue.len);
  273|      0|                attrs++;
  274|      0|                break;
  275|      0|            default:
  ------------------
  |  Branch (275:13): [True: 0, False: 4.44k]
  ------------------
  276|      0|                if (ckaId) {
  ------------------
  |  Branch (276:21): [True: 0, False: 0]
  ------------------
  277|      0|                    SECITEM_FreeItem(ckaId, PR_TRUE);
  ------------------
  |  |  108|      0|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                                  SECITEM_FreeItem(ckaId, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  278|      0|                }
  279|      0|                PORT_SetError(SEC_ERROR_BAD_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  280|      0|                return CK_INVALID_HANDLE;
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
  281|  4.44k|        }
  282|  4.44k|        templateCount = attrs - theTemplate;
  283|  4.44k|        PORT_Assert(templateCount <= (sizeof(theTemplate) / sizeof(CK_ATTRIBUTE)));
  ------------------
  |  |  120|  4.44k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  4.44k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 4.44k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|  4.44k|        if (pubKey->keyType != ecKey && pubKey->keyType != kyberKey && pubKey->keyType != edKey &&
  ------------------
  |  Branch (284:13): [True: 4.12k, False: 323]
  |  Branch (284:41): [True: 4.12k, False: 0]
  |  Branch (284:72): [True: 4.12k, False: 0]
  ------------------
  285|  4.44k|            pubKey->keyType != ecMontKey) {
  ------------------
  |  Branch (285:13): [True: 4.12k, False: 0]
  ------------------
  286|  4.12k|            PORT_Assert(signedattr);
  ------------------
  |  |  120|  4.12k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  4.12k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 4.12k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  287|  4.12k|            signedcount = attrs - signedattr;
  288|  15.0k|            for (attrs = signedattr; signedcount; attrs++, signedcount--) {
  ------------------
  |  Branch (288:38): [True: 10.9k, False: 4.12k]
  ------------------
  289|  10.9k|                pk11_SignedToUnsigned(attrs);
  290|  10.9k|            }
  291|  4.12k|        }
  292|  4.44k|        rv = PK11_CreateNewObject(slot, CK_INVALID_HANDLE, theTemplate,
  ------------------
  |  |   78|  4.44k|#define CK_INVALID_HANDLE 0
  ------------------
  293|  4.44k|                                  templateCount, isToken, &objectID);
  294|  4.44k|        if (ckaId) {
  ------------------
  |  Branch (294:13): [True: 0, False: 4.44k]
  ------------------
  295|      0|            SECITEM_FreeItem(ckaId, PR_TRUE);
  ------------------
  |  |  108|      0|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                          SECITEM_FreeItem(ckaId, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  296|      0|        }
  297|  4.44k|        if (pubValue) {
  ------------------
  |  Branch (297:13): [True: 323, False: 4.12k]
  ------------------
  298|    323|            SECITEM_FreeItem(pubValue, PR_TRUE);
  ------------------
  |  |  108|    323|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                          SECITEM_FreeItem(pubValue, PR_TRUE);
  ------------------
  |  |  437|    323|#define PR_TRUE 1
  ------------------
  299|    323|        }
  300|  4.44k|        if (rv != SECSuccess) {
  ------------------
  |  Branch (300:13): [True: 120, False: 4.32k]
  ------------------
  301|    120|            return CK_INVALID_HANDLE;
  ------------------
  |  |   78|    120|#define CK_INVALID_HANDLE 0
  ------------------
  302|    120|        }
  303|  4.44k|    }
  304|       |
  305|  4.32k|    pubKey->pkcs11ID = objectID;
  306|  4.32k|    pubKey->pkcs11Slot = PK11_ReferenceSlot(slot);
  307|       |
  308|  4.32k|    return objectID;
  309|  4.44k|}

pk11_LoginStillRequired:
  311|  8.82k|{
  312|  8.82k|    return slot->needLogin && !PK11_IsLoggedIn(slot, wincx);
  ------------------
  |  Branch (312:12): [True: 0, False: 8.82k]
  |  Branch (312:31): [True: 0, False: 0]
  ------------------
  313|  8.82k|}

PK11_EnterContextMonitor:
   36|  16.9k|{
   37|       |    /* if we own the session and our slot is ThreadSafe, only monitor
   38|       |     * the Context */
   39|  16.9k|    if ((cx->ownSession) && (cx->slot->isThreadSafe)) {
  ------------------
  |  Branch (39:9): [True: 16.9k, False: 0]
  |  Branch (39:29): [True: 16.9k, False: 0]
  ------------------
   40|       |        /* Should this use monitors instead? */
   41|  16.9k|        PZ_Lock(cx->sessionLock);
  ------------------
  |  |  245|  16.9k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
   42|  16.9k|    } else {
   43|      0|        PK11_EnterSlotMonitor(cx->slot);
   44|      0|    }
   45|  16.9k|}
PK11_ExitContextMonitor:
   49|  16.9k|{
   50|       |    /* if we own the session and our slot is ThreadSafe, only monitor
   51|       |     * the Context */
   52|  16.9k|    if ((cx->ownSession) && (cx->slot->isThreadSafe)) {
  ------------------
  |  Branch (52:9): [True: 16.9k, False: 0]
  |  Branch (52:29): [True: 16.9k, False: 0]
  ------------------
   53|       |        /* Should this use monitors instead? */
   54|  16.9k|        PZ_Unlock(cx->sessionLock);
  ------------------
  |  |  246|  16.9k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
   55|  16.9k|    } else {
   56|      0|        PK11_ExitSlotMonitor(cx->slot);
   57|      0|    }
   58|  16.9k|}
PK11_DestroyContext:
   65|  5.65k|{
   66|  5.65k|    pk11_CloseSession(context->slot, context->session, context->ownSession);
   67|       |    /* initialize the critical fields of the context */
   68|  5.65k|    if (context->savedData != NULL)
  ------------------
  |  Branch (68:9): [True: 0, False: 5.65k]
  ------------------
   69|      0|        PORT_Free(context->savedData);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
   70|  5.65k|    if (context->key)
  ------------------
  |  Branch (70:9): [True: 0, False: 5.65k]
  ------------------
   71|      0|        PK11_FreeSymKey(context->key);
   72|  5.65k|    if (context->param && context->param != &pk11_null_params)
  ------------------
  |  Branch (72:9): [True: 5.65k, False: 0]
  |  Branch (72:27): [True: 0, False: 5.65k]
  ------------------
   73|      0|        SECITEM_FreeItem(context->param, PR_TRUE);
  ------------------
  |  |  108|      0|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                      SECITEM_FreeItem(context->param, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
   74|  5.65k|    if (context->sessionLock)
  ------------------
  |  Branch (74:9): [True: 5.65k, False: 0]
  ------------------
   75|  5.65k|        PZ_DestroyLock(context->sessionLock);
  ------------------
  |  |  244|  5.65k|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
   76|  5.65k|    PK11_FreeSlot(context->slot);
   77|  5.65k|    if (freeit)
  ------------------
  |  Branch (77:9): [True: 5.65k, False: 0]
  ------------------
   78|  5.65k|        PORT_Free(context);
  ------------------
  |  |   60|  5.65k|#define PORT_Free PORT_Free_Util
  ------------------
   79|  5.65k|}
PK11_CreateDigestContext:
  579|  5.65k|{
  580|       |    /* digesting has to work without authentication to the slot */
  581|  5.65k|    CK_MECHANISM_TYPE type;
  582|  5.65k|    PK11SlotInfo *slot;
  583|  5.65k|    PK11Context *context;
  584|  5.65k|    SECItem param;
  585|       |
  586|  5.65k|    type = PK11_AlgtagToMechanism(hashAlg);
  587|  5.65k|    slot = PK11_GetBestSlot(type, NULL);
  588|  5.65k|    if (slot == NULL) {
  ------------------
  |  Branch (588:9): [True: 0, False: 5.65k]
  ------------------
  589|      0|        PORT_SetError(SEC_ERROR_NO_MODULE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  590|      0|        return NULL;
  591|      0|    }
  592|       |
  593|       |    /* maybe should really be PK11_GenerateNewParam?? */
  594|  5.65k|    param.data = NULL;
  595|  5.65k|    param.len = 0;
  596|  5.65k|    param.type = 0;
  597|       |
  598|  5.65k|    context = pk11_CreateNewContextInSlot(type, slot, CKA_DIGEST, NULL,
  ------------------
  |  |   68|  5.65k|#define CKA_DIGEST 0x81000000L
  ------------------
  599|  5.65k|                                          CK_INVALID_HANDLE, &param, NULL);
  ------------------
  |  |   78|  5.65k|#define CK_INVALID_HANDLE 0
  ------------------
  600|  5.65k|    PK11_FreeSlot(slot);
  601|  5.65k|    return context;
  602|  5.65k|}
PK11_DigestBegin:
  781|  5.65k|{
  782|  5.65k|    CK_MECHANISM mech_info;
  783|  5.65k|    SECStatus rv;
  784|       |
  785|  5.65k|    if (cx->init == PR_TRUE) {
  ------------------
  |  |  437|  5.65k|#define PR_TRUE 1
  ------------------
  |  Branch (785:9): [True: 5.65k, False: 0]
  ------------------
  786|  5.65k|        return SECSuccess;
  787|  5.65k|    }
  788|       |
  789|       |    /*
  790|       |     * make sure the old context is clear first
  791|       |     */
  792|      0|    PK11_EnterContextMonitor(cx);
  793|      0|    pk11_Finalize(cx);
  794|      0|    PK11_ExitContextMonitor(cx);
  795|       |
  796|      0|    mech_info.mechanism = cx->type;
  797|      0|    mech_info.pParameter = cx->param->data;
  798|      0|    mech_info.ulParameterLen = cx->param->len;
  799|      0|    rv = pk11_context_init(cx, &mech_info);
  800|       |
  801|      0|    if (rv != SECSuccess) {
  ------------------
  |  Branch (801:9): [True: 0, False: 0]
  ------------------
  802|      0|        return SECFailure;
  803|      0|    }
  804|      0|    cx->init = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  805|      0|    return SECSuccess;
  806|      0|}
PK11_HashBuf:
  811|  5.61k|{
  812|  5.61k|    PK11Context *context;
  813|  5.61k|    unsigned int max_length;
  814|  5.61k|    unsigned int out_length;
  815|  5.61k|    SECStatus rv;
  816|       |
  817|       |    /* len will be passed to PK11_DigestOp as unsigned. */
  818|  5.61k|    if (len < 0) {
  ------------------
  |  Branch (818:9): [True: 0, False: 5.61k]
  ------------------
  819|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  820|      0|        return SECFailure;
  821|      0|    }
  822|       |
  823|  5.61k|    context = PK11_CreateDigestContext(hashAlg);
  824|  5.61k|    if (context == NULL)
  ------------------
  |  Branch (824:9): [True: 0, False: 5.61k]
  ------------------
  825|      0|        return SECFailure;
  826|       |
  827|  5.61k|    rv = PK11_DigestBegin(context);
  828|  5.61k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (828:9): [True: 0, False: 5.61k]
  ------------------
  829|      0|        PK11_DestroyContext(context, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  830|      0|        return rv;
  831|      0|    }
  832|       |
  833|  5.61k|    rv = PK11_DigestOp(context, in, len);
  834|  5.61k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (834:9): [True: 0, False: 5.61k]
  ------------------
  835|      0|        PK11_DestroyContext(context, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  836|      0|        return rv;
  837|      0|    }
  838|       |
  839|       |    /* XXX This really should have been an argument to this function! */
  840|  5.61k|    max_length = HASH_ResultLenByOidTag(hashAlg);
  841|  5.61k|    PORT_Assert(max_length);
  ------------------
  |  |  120|  5.61k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  5.61k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5.61k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  842|  5.61k|    if (!max_length)
  ------------------
  |  Branch (842:9): [True: 0, False: 5.61k]
  ------------------
  843|      0|        max_length = HASH_LENGTH_MAX;
  ------------------
  |  |   48|      0|#define HASH_LENGTH_MAX SHA512_LENGTH
  |  |  ------------------
  |  |  |  |   43|      0|#define SHA512_LENGTH 64
  |  |  ------------------
  ------------------
  844|       |
  845|  5.61k|    rv = PK11_DigestFinal(context, out, &out_length, max_length);
  846|  5.61k|    PK11_DestroyContext(context, PR_TRUE);
  ------------------
  |  |  437|  5.61k|#define PR_TRUE 1
  ------------------
  847|  5.61k|    return rv;
  848|  5.61k|}
PK11_DigestOp:
 1491|  5.65k|{
 1492|  5.65k|    CK_RV crv = CKR_OK;
  ------------------
  |  | 1388|  5.65k|#define CKR_OK 0x00000000UL
  ------------------
 1493|  5.65k|    SECStatus rv = SECSuccess;
 1494|       |
 1495|  5.65k|    if (inLen == 0) {
  ------------------
  |  Branch (1495:9): [True: 0, False: 5.65k]
  ------------------
 1496|      0|        return SECSuccess;
 1497|      0|    }
 1498|  5.65k|    if (!in) {
  ------------------
  |  Branch (1498:9): [True: 0, False: 5.65k]
  ------------------
 1499|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1500|      0|        return SECFailure;
 1501|      0|    }
 1502|       |
 1503|       |    /* if we ran out of session, we need to restore our previously stored
 1504|       |     * state.
 1505|       |     */
 1506|  5.65k|    context->init = PR_FALSE;
  ------------------
  |  |  438|  5.65k|#define PR_FALSE 0
  ------------------
 1507|  5.65k|    PK11_EnterContextMonitor(context);
 1508|  5.65k|    if (!context->ownSession) {
  ------------------
  |  Branch (1508:9): [True: 0, False: 5.65k]
  ------------------
 1509|      0|        rv = pk11_restoreContext(context, context->savedData,
 1510|      0|                                 context->savedLength);
 1511|      0|        if (rv != SECSuccess) {
  ------------------
  |  Branch (1511:13): [True: 0, False: 0]
  ------------------
 1512|      0|            PK11_ExitContextMonitor(context);
 1513|      0|            return rv;
 1514|      0|        }
 1515|      0|    }
 1516|       |
 1517|  5.65k|    switch (context->operation) {
 1518|       |        /* also for MAC'ing */
 1519|      0|        case CKA_SIGN:
  ------------------
  |  |  551|      0|#define CKA_SIGN 0x00000108UL
  ------------------
  |  Branch (1519:9): [True: 0, False: 5.65k]
  ------------------
 1520|      0|            crv = PK11_GETTAB(context->slot)->C_SignUpdate(context->session, (unsigned char *)in, inLen);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1521|      0|            break;
 1522|      0|        case CKA_VERIFY:
  ------------------
  |  |  553|      0|#define CKA_VERIFY 0x0000010AUL
  ------------------
  |  Branch (1522:9): [True: 0, False: 5.65k]
  ------------------
 1523|      0|            crv = PK11_GETTAB(context->slot)->C_VerifyUpdate(context->session, (unsigned char *)in, inLen);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1524|      0|            break;
 1525|  5.65k|        case CKA_DIGEST:
  ------------------
  |  |   68|  5.65k|#define CKA_DIGEST 0x81000000L
  ------------------
  |  Branch (1525:9): [True: 5.65k, False: 0]
  ------------------
 1526|  5.65k|            crv = PK11_GETTAB(context->slot)->C_DigestUpdate(context->session, (unsigned char *)in, inLen);
  ------------------
  |  |  102|  5.65k|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1527|  5.65k|            break;
 1528|      0|        default:
  ------------------
  |  Branch (1528:9): [True: 0, False: 5.65k]
  ------------------
 1529|      0|            crv = CKR_OPERATION_NOT_INITIALIZED;
  ------------------
  |  | 1454|      0|#define CKR_OPERATION_NOT_INITIALIZED 0x00000091UL
  ------------------
 1530|      0|            break;
 1531|  5.65k|    }
 1532|       |
 1533|  5.65k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  5.65k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1533:9): [True: 0, False: 5.65k]
  ------------------
 1534|      0|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1535|      0|        rv = SECFailure;
 1536|      0|    }
 1537|       |
 1538|       |    /*
 1539|       |     * handle session starvation case.. use our last session to multiplex
 1540|       |     */
 1541|  5.65k|    if (!context->ownSession) {
  ------------------
  |  Branch (1541:9): [True: 0, False: 5.65k]
  ------------------
 1542|      0|        context->savedData = pk11_saveContext(context, context->savedData,
 1543|      0|                                              &context->savedLength);
 1544|      0|        if (context->savedData == NULL)
  ------------------
  |  Branch (1544:13): [True: 0, False: 0]
  ------------------
 1545|      0|            rv = SECFailure;
 1546|       |
 1547|       |        /* clear out out session for others to use */
 1548|      0|        pk11_Finalize(context);
 1549|      0|    }
 1550|  5.65k|    PK11_ExitContextMonitor(context);
 1551|  5.65k|    return rv;
 1552|  5.65k|}
PK11_DigestFinal:
 1729|  5.65k|{
 1730|  5.65k|    CK_ULONG len;
 1731|  5.65k|    CK_RV crv;
 1732|  5.65k|    SECStatus rv;
 1733|       |
 1734|       |    /* message interface returns no data on Final, Should not use DigestFinal
 1735|       |     * in this case */
 1736|  5.65k|    if (((context->operation) & CKA_NSS_MESSAGE_MASK) == CKA_NSS_MESSAGE) {
  ------------------
  |  |   70|  5.65k|#define CKA_NSS_MESSAGE_MASK 0xff000000L
  ------------------
                  if (((context->operation) & CKA_NSS_MESSAGE_MASK) == CKA_NSS_MESSAGE) {
  ------------------
  |  |   69|  5.65k|#define CKA_NSS_MESSAGE 0x82000000L
  ------------------
  |  Branch (1736:9): [True: 0, False: 5.65k]
  ------------------
 1737|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1738|      0|        return SECFailure;
 1739|      0|    }
 1740|       |
 1741|       |    /* if we ran out of session, we need to restore our previously stored
 1742|       |     * state.
 1743|       |     */
 1744|  5.65k|    PK11_EnterContextMonitor(context);
 1745|  5.65k|    if (!context->ownSession) {
  ------------------
  |  Branch (1745:9): [True: 0, False: 5.65k]
  ------------------
 1746|      0|        rv = pk11_restoreContext(context, context->savedData,
 1747|      0|                                 context->savedLength);
 1748|      0|        if (rv != SECSuccess) {
  ------------------
  |  Branch (1748:13): [True: 0, False: 0]
  ------------------
 1749|      0|            PK11_ExitContextMonitor(context);
 1750|      0|            return rv;
 1751|      0|        }
 1752|      0|    }
 1753|       |
 1754|  5.65k|    len = length;
 1755|  5.65k|    switch (context->operation) {
 1756|      0|        case CKA_SIGN:
  ------------------
  |  |  551|      0|#define CKA_SIGN 0x00000108UL
  ------------------
  |  Branch (1756:9): [True: 0, False: 5.65k]
  ------------------
 1757|      0|            crv = PK11_GETTAB(context->slot)->C_SignFinal(context->session, data, &len);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1758|      0|            break;
 1759|      0|        case CKA_VERIFY:
  ------------------
  |  |  553|      0|#define CKA_VERIFY 0x0000010AUL
  ------------------
  |  Branch (1759:9): [True: 0, False: 5.65k]
  ------------------
 1760|      0|            crv = PK11_GETTAB(context->slot)->C_VerifyFinal(context->session, data, len);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1761|      0|            break;
 1762|  5.65k|        case CKA_DIGEST:
  ------------------
  |  |   68|  5.65k|#define CKA_DIGEST 0x81000000L
  ------------------
  |  Branch (1762:9): [True: 5.65k, False: 0]
  ------------------
 1763|  5.65k|            crv = PK11_GETTAB(context->slot)->C_DigestFinal(context->session, data, &len);
  ------------------
  |  |  102|  5.65k|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1764|  5.65k|            break;
 1765|      0|        case CKA_ENCRYPT:
  ------------------
  |  |  547|      0|#define CKA_ENCRYPT 0x00000104UL
  ------------------
  |  Branch (1765:9): [True: 0, False: 5.65k]
  ------------------
 1766|      0|            crv = PK11_GETTAB(context->slot)->C_EncryptFinal(context->session, data, &len);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1767|      0|            break;
 1768|      0|        case CKA_DECRYPT:
  ------------------
  |  |  548|      0|#define CKA_DECRYPT 0x00000105UL
  ------------------
  |  Branch (1768:9): [True: 0, False: 5.65k]
  ------------------
 1769|      0|            crv = PK11_GETTAB(context->slot)->C_DecryptFinal(context->session, data, &len);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1770|      0|            break;
 1771|      0|        default:
  ------------------
  |  Branch (1771:9): [True: 0, False: 5.65k]
  ------------------
 1772|      0|            crv = CKR_OPERATION_NOT_INITIALIZED;
  ------------------
  |  | 1454|      0|#define CKR_OPERATION_NOT_INITIALIZED 0x00000091UL
  ------------------
 1773|      0|            break;
 1774|  5.65k|    }
 1775|  5.65k|    PK11_ExitContextMonitor(context);
 1776|       |
 1777|  5.65k|    context->init = PR_FALSE; /* allow Begin to start up again */
  ------------------
  |  |  438|  5.65k|#define PR_FALSE 0
  ------------------
 1778|       |
 1779|  5.65k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  5.65k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1779:9): [True: 0, False: 5.65k]
  ------------------
 1780|      0|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1781|      0|        return SECFailure;
 1782|      0|    }
 1783|  5.65k|    *outLen = (unsigned int)len;
 1784|  5.65k|    return SECSuccess;
 1785|  5.65k|}
pk11cxt.c:pk11_CreateNewContextInSlot:
  360|  5.65k|{
  361|  5.65k|    CK_MECHANISM mech_info;
  362|  5.65k|    PK11Context *context;
  363|  5.65k|    SECStatus rv;
  364|       |
  365|  5.65k|    PORT_Assert(slot != NULL);
  ------------------
  |  |  120|  5.65k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  5.65k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5.65k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  366|  5.65k|    if (!slot || ((objectID == CK_INVALID_HANDLE) && ((operation != CKA_DIGEST) ||
  ------------------
  |  |   78|  5.65k|#define CK_INVALID_HANDLE 0
  ------------------
                  if (!slot || ((objectID == CK_INVALID_HANDLE) && ((operation != CKA_DIGEST) ||
  ------------------
  |  |   68|  5.65k|#define CKA_DIGEST 0x81000000L
  ------------------
  |  Branch (366:9): [True: 0, False: 5.65k]
  |  Branch (366:19): [True: 5.65k, False: 0]
  |  Branch (366:55): [True: 0, False: 5.65k]
  ------------------
  367|  5.65k|                                                      (type == CKM_SKIPJACK_CBC64)))) {
  ------------------
  |  | 1049|  5.65k|#define CKM_SKIPJACK_CBC64 0x00001002UL
  ------------------
  |  Branch (367:55): [True: 0, False: 5.65k]
  ------------------
  368|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  369|      0|        return NULL;
  370|      0|    }
  371|  5.65k|    context = (PK11Context *)PORT_Alloc(sizeof(PK11Context));
  ------------------
  |  |   52|  5.65k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  372|  5.65k|    if (context == NULL) {
  ------------------
  |  Branch (372:9): [True: 0, False: 5.65k]
  ------------------
  373|      0|        return NULL;
  374|      0|    }
  375|       |
  376|       |    /* now deal with the fortezza hack... the fortezza hack is an attempt
  377|       |     * to get around the issue of the card not allowing you to do a FORTEZZA
  378|       |     * LoadIV/Encrypt, which was added because such a combination could be
  379|       |     * use to circumvent the key escrow system. Unfortunately SSL needs to
  380|       |     * do this kind of operation, so in SSL we do a loadIV (to verify it),
  381|       |     * Then GenerateIV, and through away the first 8 bytes on either side
  382|       |     * of the connection.*/
  383|  5.65k|    context->fortezzaHack = PR_FALSE;
  ------------------
  |  |  438|  5.65k|#define PR_FALSE 0
  ------------------
  384|  5.65k|    if (type == CKM_SKIPJACK_CBC64) {
  ------------------
  |  | 1049|  5.65k|#define CKM_SKIPJACK_CBC64 0x00001002UL
  ------------------
  |  Branch (384:9): [True: 0, False: 5.65k]
  ------------------
  385|      0|        if (symKey && (symKey->origin == PK11_OriginFortezzaHack)) {
  ------------------
  |  Branch (385:13): [True: 0, False: 0]
  |  Branch (385:23): [True: 0, False: 0]
  ------------------
  386|      0|            context->fortezzaHack = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  387|      0|        }
  388|      0|    }
  389|       |
  390|       |    /* initialize the critical fields of the context */
  391|  5.65k|    context->operation = operation;
  392|       |    /* If we were given a symKey, keep our own reference to it so
  393|       |     * that the key doesn't disappear in the middle of the operation
  394|       |     * if the caller frees it. Public and Private keys are not reference
  395|       |     * counted, so the caller just has to keep his copies around until
  396|       |     * the operation completes */
  397|  5.65k|    context->key = symKey ? PK11_ReferenceSymKey(symKey) : NULL;
  ------------------
  |  Branch (397:20): [True: 0, False: 5.65k]
  ------------------
  398|  5.65k|    context->objectID = objectID;
  399|  5.65k|    context->slot = PK11_ReferenceSlot(slot);
  400|  5.65k|    context->session = pk11_GetNewSession(slot, &context->ownSession);
  401|  5.65k|    context->pwArg = pwArg;
  402|       |    /* get our session */
  403|  5.65k|    context->savedData = NULL;
  404|       |
  405|       |    /* save the parameters so that some digesting stuff can do multiple
  406|       |     * begins on a single context */
  407|  5.65k|    context->type = type;
  408|  5.65k|    if (param) {
  ------------------
  |  Branch (408:9): [True: 5.65k, False: 0]
  ------------------
  409|  5.65k|        if (param->len > 0) {
  ------------------
  |  Branch (409:13): [True: 0, False: 5.65k]
  ------------------
  410|      0|            context->param = SECITEM_DupItem(param);
  ------------------
  |  |  107|      0|#define SECITEM_DupItem SECITEM_DupItem_Util
  ------------------
  411|  5.65k|        } else {
  412|  5.65k|            context->param = (SECItem *)&pk11_null_params;
  413|  5.65k|        }
  414|  5.65k|    } else {
  415|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  416|      0|        context->param = NULL;
  417|      0|    }
  418|  5.65k|    context->init = PR_FALSE;
  ------------------
  |  |  438|  5.65k|#define PR_FALSE 0
  ------------------
  419|  5.65k|    context->sessionLock = PZ_NewLock(nssILockPK11cxt);
  ------------------
  |  |  243|  5.65k|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  420|  5.65k|    if ((context->param == NULL) || (context->sessionLock == NULL)) {
  ------------------
  |  Branch (420:9): [True: 0, False: 5.65k]
  |  Branch (420:37): [True: 0, False: 5.65k]
  ------------------
  421|      0|        PK11_DestroyContext(context, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  422|      0|        return NULL;
  423|      0|    }
  424|       |
  425|  5.65k|    mech_info.mechanism = type;
  426|  5.65k|    mech_info.pParameter = param->data;
  427|  5.65k|    mech_info.ulParameterLen = param->len;
  428|  5.65k|    rv = pk11_context_init(context, &mech_info);
  429|       |
  430|  5.65k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (430:9): [True: 0, False: 5.65k]
  ------------------
  431|      0|        PK11_DestroyContext(context, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  432|      0|        return NULL;
  433|      0|    }
  434|  5.65k|    context->init = PR_TRUE;
  ------------------
  |  |  437|  5.65k|#define PR_TRUE 1
  ------------------
  435|  5.65k|    return context;
  436|  5.65k|}
pk11cxt.c:pk11_context_init:
  198|  5.65k|{
  199|  5.65k|    CK_RV crv;
  200|  5.65k|    SECStatus rv = SECSuccess;
  201|       |
  202|  5.65k|    context->simulate_message = PR_FALSE;
  ------------------
  |  |  438|  5.65k|#define PR_FALSE 0
  ------------------
  203|  5.65k|    switch (context->operation) {
  204|      0|        case CKA_ENCRYPT:
  ------------------
  |  |  547|      0|#define CKA_ENCRYPT 0x00000104UL
  ------------------
  |  Branch (204:9): [True: 0, False: 5.65k]
  ------------------
  205|      0|            PK11_EnterContextMonitor(context);
  206|      0|            crv = PK11_GETTAB(context->slot)->C_EncryptInit(context->session, mech_info, context->objectID);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  207|      0|            PK11_ExitContextMonitor(context);
  208|      0|            break;
  209|      0|        case CKA_DECRYPT:
  ------------------
  |  |  548|      0|#define CKA_DECRYPT 0x00000105UL
  ------------------
  |  Branch (209:9): [True: 0, False: 5.65k]
  ------------------
  210|      0|            PK11_EnterContextMonitor(context);
  211|      0|            if (context->fortezzaHack) {
  ------------------
  |  Branch (211:17): [True: 0, False: 0]
  ------------------
  212|      0|                CK_ULONG count = 0;
  213|       |                /* generate the IV for fortezza */
  214|      0|                crv = PK11_GETTAB(context->slot)->C_EncryptInit(context->session, mech_info, context->objectID);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  215|      0|                if (crv != CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (215:21): [True: 0, False: 0]
  ------------------
  216|      0|                    PK11_ExitContextMonitor(context);
  217|      0|                    break;
  218|      0|                }
  219|      0|                PK11_GETTAB(context->slot)
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  220|      0|                    ->C_EncryptFinal(context->session,
  221|      0|                                     NULL, &count);
  222|      0|            }
  223|      0|            crv = PK11_GETTAB(context->slot)->C_DecryptInit(context->session, mech_info, context->objectID);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  224|      0|            PK11_ExitContextMonitor(context);
  225|      0|            break;
  226|      0|        case CKA_SIGN:
  ------------------
  |  |  551|      0|#define CKA_SIGN 0x00000108UL
  ------------------
  |  Branch (226:9): [True: 0, False: 5.65k]
  ------------------
  227|      0|            PK11_EnterContextMonitor(context);
  228|      0|            crv = PK11_GETTAB(context->slot)->C_SignInit(context->session, mech_info, context->objectID);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  229|      0|            PK11_ExitContextMonitor(context);
  230|      0|            break;
  231|      0|        case CKA_VERIFY:
  ------------------
  |  |  553|      0|#define CKA_VERIFY 0x0000010AUL
  ------------------
  |  Branch (231:9): [True: 0, False: 5.65k]
  ------------------
  232|       |            /* NOTE: we previously has this set to C_SignInit for Macing.
  233|       |             * It turns out now one could possibly use it that way, though,
  234|       |             * because PK11_HashOp() always called C_VerifyUpdate on CKA_VERIFY,
  235|       |             * which would have failed. So everyone just calls us with CKA_SIGN
  236|       |             * when Macing even when they are verifying, no need to 'do it
  237|       |             * for them'. It needs to be VerifyInit now so that we can do
  238|       |             * PKCS #11 hash/Verify combo operations. */
  239|      0|            PK11_EnterContextMonitor(context);
  240|      0|            crv = PK11_GETTAB(context->slot)->C_VerifyInit(context->session, mech_info, context->objectID);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  241|      0|            PK11_ExitContextMonitor(context);
  242|      0|            break;
  243|  5.65k|        case CKA_DIGEST:
  ------------------
  |  |   68|  5.65k|#define CKA_DIGEST 0x81000000L
  ------------------
  |  Branch (243:9): [True: 5.65k, False: 0]
  ------------------
  244|  5.65k|            PK11_EnterContextMonitor(context);
  245|  5.65k|            crv = PK11_GETTAB(context->slot)->C_DigestInit(context->session, mech_info);
  ------------------
  |  |  102|  5.65k|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  246|  5.65k|            PK11_ExitContextMonitor(context);
  247|  5.65k|            break;
  248|       |
  249|      0|        case CKA_NSS_MESSAGE | CKA_ENCRYPT:
  ------------------
  |  |   69|      0|#define CKA_NSS_MESSAGE 0x82000000L
  ------------------
                      case CKA_NSS_MESSAGE | CKA_ENCRYPT:
  ------------------
  |  |  547|      0|#define CKA_ENCRYPT 0x00000104UL
  ------------------
  |  Branch (249:9): [True: 0, False: 5.65k]
  ------------------
  250|      0|            crv = pk11_contextInitMessage(context, mech_info,
  251|      0|                                          PK11_GETTAB(context->slot)->C_MessageEncryptInit,
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  252|      0|                                          CKF_MESSAGE_ENCRYPT, CKR_OK);
  ------------------
  |  | 1339|      0|#define CKF_MESSAGE_ENCRYPT 0x00000002UL
  ------------------
                                                        CKF_MESSAGE_ENCRYPT, CKR_OK);
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  253|      0|            break;
  254|      0|        case CKA_NSS_MESSAGE | CKA_DECRYPT:
  ------------------
  |  |   69|      0|#define CKA_NSS_MESSAGE 0x82000000L
  ------------------
                      case CKA_NSS_MESSAGE | CKA_DECRYPT:
  ------------------
  |  |  548|      0|#define CKA_DECRYPT 0x00000105UL
  ------------------
  |  Branch (254:9): [True: 0, False: 5.65k]
  ------------------
  255|      0|            crv = pk11_contextInitMessage(context, mech_info,
  256|      0|                                          PK11_GETTAB(context->slot)->C_MessageDecryptInit,
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  257|      0|                                          CKF_MESSAGE_DECRYPT, CKR_OK);
  ------------------
  |  | 1340|      0|#define CKF_MESSAGE_DECRYPT 0x00000004UL
  ------------------
                                                        CKF_MESSAGE_DECRYPT, CKR_OK);
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  258|      0|            break;
  259|      0|        case CKA_NSS_MESSAGE | CKA_SIGN:
  ------------------
  |  |   69|      0|#define CKA_NSS_MESSAGE 0x82000000L
  ------------------
                      case CKA_NSS_MESSAGE | CKA_SIGN:
  ------------------
  |  |  551|      0|#define CKA_SIGN 0x00000108UL
  ------------------
  |  Branch (259:9): [True: 0, False: 5.65k]
  ------------------
  260|      0|            crv = pk11_contextInitMessage(context, mech_info,
  261|      0|                                          PK11_GETTAB(context->slot)->C_MessageSignInit,
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  262|      0|                                          CKF_MESSAGE_SIGN, CKR_FUNCTION_NOT_SUPPORTED);
  ------------------
  |  | 1341|      0|#define CKF_MESSAGE_SIGN 0x00000008UL
  ------------------
                                                        CKF_MESSAGE_SIGN, CKR_FUNCTION_NOT_SUPPORTED);
  ------------------
  |  | 1426|      0|#define CKR_FUNCTION_NOT_SUPPORTED 0x00000054UL
  ------------------
  263|      0|            break;
  264|      0|        case CKA_NSS_MESSAGE | CKA_VERIFY:
  ------------------
  |  |   69|      0|#define CKA_NSS_MESSAGE 0x82000000L
  ------------------
                      case CKA_NSS_MESSAGE | CKA_VERIFY:
  ------------------
  |  |  553|      0|#define CKA_VERIFY 0x0000010AUL
  ------------------
  |  Branch (264:9): [True: 0, False: 5.65k]
  ------------------
  265|      0|            crv = pk11_contextInitMessage(context, mech_info,
  266|      0|                                          PK11_GETTAB(context->slot)->C_MessageVerifyInit,
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  267|      0|                                          CKF_MESSAGE_VERIFY, CKR_FUNCTION_NOT_SUPPORTED);
  ------------------
  |  | 1342|      0|#define CKF_MESSAGE_VERIFY 0x00000010UL
  ------------------
                                                        CKF_MESSAGE_VERIFY, CKR_FUNCTION_NOT_SUPPORTED);
  ------------------
  |  | 1426|      0|#define CKR_FUNCTION_NOT_SUPPORTED 0x00000054UL
  ------------------
  268|      0|            break;
  269|      0|        default:
  ------------------
  |  Branch (269:9): [True: 0, False: 5.65k]
  ------------------
  270|      0|            crv = CKR_OPERATION_NOT_INITIALIZED;
  ------------------
  |  | 1454|      0|#define CKR_OPERATION_NOT_INITIALIZED 0x00000091UL
  ------------------
  271|      0|            break;
  272|  5.65k|    }
  273|       |
  274|  5.65k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  5.65k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (274:9): [True: 0, False: 5.65k]
  ------------------
  275|      0|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  276|      0|        return SECFailure;
  277|      0|    }
  278|       |
  279|       |    /* handle the case where the token is using the old NSS mechanism */
  280|  5.65k|    if (context->simulate_message &&
  ------------------
  |  Branch (280:9): [True: 0, False: 5.65k]
  ------------------
  281|  5.65k|        !PK11_DoesMechanism(context->slot, context->simulate_mechanism)) {
  ------------------
  |  Branch (281:9): [True: 0, False: 0]
  ------------------
  282|      0|        if ((context->simulate_mechanism == CKM_CHACHA20_POLY1305) &&
  ------------------
  |  | 1287|      0|#define CKM_CHACHA20_POLY1305 0x00004021UL
  ------------------
  |  Branch (282:13): [True: 0, False: 0]
  ------------------
  283|      0|            PK11_DoesMechanism(context->slot, CKM_NSS_CHACHA20_POLY1305)) {
  ------------------
  |  |  243|      0|#define CKM_NSS_CHACHA20_POLY1305 (CKM_NSS + 28)
  |  |  ------------------
  |  |  |  |  162|      0|#define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1309|      0|#define CKM_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (283:13): [True: 0, False: 0]
  ------------------
  284|      0|            context->simulate_mechanism = CKM_NSS_CHACHA20_POLY1305;
  ------------------
  |  |  243|      0|#define CKM_NSS_CHACHA20_POLY1305 (CKM_NSS + 28)
  |  |  ------------------
  |  |  |  |  162|      0|#define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1309|      0|#define CKM_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  285|      0|        } else {
  286|      0|            PORT_SetError(PK11_MapError(CKR_MECHANISM_INVALID));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
                          PORT_SetError(PK11_MapError(CKR_MECHANISM_INVALID));
  ------------------
  |  | 1447|      0|#define CKR_MECHANISM_INVALID 0x00000070UL
  ------------------
  287|      0|            return SECFailure;
  288|      0|        }
  289|      0|    }
  290|       |
  291|       |    /*
  292|       |     * handle session starvation case.. use our last session to multiplex
  293|       |     */
  294|  5.65k|    if (!context->ownSession) {
  ------------------
  |  Branch (294:9): [True: 0, False: 5.65k]
  ------------------
  295|      0|        PK11_EnterContextMonitor(context);
  296|      0|        context->savedData = pk11_saveContext(context, context->savedData,
  297|      0|                                              &context->savedLength);
  298|      0|        if (context->savedData == NULL)
  ------------------
  |  Branch (298:13): [True: 0, False: 0]
  ------------------
  299|      0|            rv = SECFailure;
  300|       |        /* clear out out session for others to use */
  301|      0|        pk11_Finalize(context);
  302|      0|        PK11_ExitContextMonitor(context);
  303|      0|    }
  304|  5.65k|    return rv;
  305|  5.65k|}

PK11_MapError:
   37|  4.26k|{
   38|       |
   39|  4.26k|    switch (rv) {
   40|      0|#define MAPERROR(x, y) \
   41|      0|    case x:            \
   42|      0|        return y;
   43|       |
   44|      0|#endif
   45|       |
   46|       |    /* the guts mapping */
   47|       |    /* clang-format off */
   48|      0|    MAPERROR(CKR_OK, 0)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   49|      0|    MAPERROR(CKR_CANCEL, SEC_ERROR_IO)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   50|      0|    MAPERROR(CKR_HOST_MEMORY, SEC_ERROR_NO_MEMORY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   51|      0|    MAPERROR(CKR_SLOT_ID_INVALID, SEC_ERROR_BAD_DATA)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   52|      0|    MAPERROR(CKR_ARGUMENTS_BAD, SEC_ERROR_INVALID_ARGS)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   53|      0|    MAPERROR(CKR_ATTRIBUTE_READ_ONLY, SEC_ERROR_READ_ONLY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   54|      0|    MAPERROR(CKR_ATTRIBUTE_SENSITIVE, SEC_ERROR_IO) /* XX SENSITIVE */
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   55|      0|    MAPERROR(CKR_ATTRIBUTE_TYPE_INVALID, SEC_ERROR_BAD_DATA)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   56|     34|    MAPERROR(CKR_ATTRIBUTE_VALUE_INVALID, SEC_ERROR_BAD_DATA)
  ------------------
  |  |   41|     34|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 34, False: 4.22k]
  |  |  ------------------
  |  |   42|     34|        return y;
  ------------------
   57|      0|    MAPERROR(CKR_BUFFER_TOO_SMALL, SEC_ERROR_OUTPUT_LEN)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   58|      0|    MAPERROR(CKR_DATA_INVALID, SEC_ERROR_BAD_DATA)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   59|      0|    MAPERROR(CKR_DATA_LEN_RANGE, SEC_ERROR_INPUT_LEN)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   60|      0|    MAPERROR(CKR_DEVICE_ERROR, SEC_ERROR_PKCS11_DEVICE_ERROR)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   61|      0|    MAPERROR(CKR_DEVICE_MEMORY, SEC_ERROR_NO_MEMORY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   62|      0|    MAPERROR(CKR_DEVICE_REMOVED, SEC_ERROR_NO_TOKEN)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   63|     26|    MAPERROR(CKR_DOMAIN_PARAMS_INVALID, SEC_ERROR_INVALID_KEY)
  ------------------
  |  |   41|     26|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 26, False: 4.23k]
  |  |  ------------------
  |  |   42|     26|        return y;
  ------------------
   64|      0|    MAPERROR(CKR_ENCRYPTED_DATA_INVALID, SEC_ERROR_BAD_DATA)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   65|      0|    MAPERROR(CKR_ENCRYPTED_DATA_LEN_RANGE, SEC_ERROR_BAD_DATA)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   66|      0|    MAPERROR(CKR_FUNCTION_CANCELED, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   67|      0|    MAPERROR(CKR_FUNCTION_FAILED, SEC_ERROR_PKCS11_FUNCTION_FAILED)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   68|      0|    MAPERROR(CKR_FUNCTION_NOT_PARALLEL, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   69|      0|    MAPERROR(CKR_FUNCTION_NOT_SUPPORTED, PR_NOT_IMPLEMENTED_ERROR)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   70|     47|    MAPERROR(CKR_GENERAL_ERROR, SEC_ERROR_PKCS11_GENERAL_ERROR)
  ------------------
  |  |   41|     47|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 47, False: 4.21k]
  |  |  ------------------
  |  |   42|     47|        return y;
  ------------------
   71|      0|    MAPERROR(CKR_KEY_HANDLE_INVALID, SEC_ERROR_INVALID_KEY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   72|      0|    MAPERROR(CKR_KEY_SIZE_RANGE, SEC_ERROR_INVALID_KEY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   73|      0|    MAPERROR(CKR_KEY_TYPE_INCONSISTENT, SEC_ERROR_INVALID_KEY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   74|      0|    MAPERROR(CKR_MECHANISM_INVALID, SEC_ERROR_INVALID_ALGORITHM)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   75|      1|    MAPERROR(CKR_MECHANISM_PARAM_INVALID, SEC_ERROR_BAD_DATA)
  ------------------
  |  |   41|      1|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 1, False: 4.26k]
  |  |  ------------------
  |  |   42|      1|        return y;
  ------------------
   76|      0|    MAPERROR(CKR_NO_EVENT, SEC_ERROR_NO_EVENT)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   77|      0|    MAPERROR(CKR_OBJECT_HANDLE_INVALID, SEC_ERROR_BAD_DATA)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   78|      0|    MAPERROR(CKR_OPERATION_ACTIVE, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   79|      0|    MAPERROR(CKR_OPERATION_NOT_INITIALIZED, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   80|      0|    MAPERROR(CKR_PIN_INCORRECT, SEC_ERROR_BAD_PASSWORD)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   81|      0|    MAPERROR(CKR_PIN_INVALID, SEC_ERROR_INVALID_PASSWORD)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   82|      0|    MAPERROR(CKR_PIN_LEN_RANGE, SEC_ERROR_INVALID_PASSWORD)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   83|      0|    MAPERROR(CKR_PIN_EXPIRED, SEC_ERROR_EXPIRED_PASSWORD)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   84|      0|    MAPERROR(CKR_PIN_LOCKED, SEC_ERROR_LOCKED_PASSWORD)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   85|      0|    MAPERROR(CKR_SESSION_CLOSED, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   86|      0|    MAPERROR(CKR_SESSION_COUNT, SEC_ERROR_NO_MEMORY) /* XXXX? */
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   87|      0|    MAPERROR(CKR_SESSION_HANDLE_INVALID, SEC_ERROR_BAD_DATA)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   88|      0|    MAPERROR(CKR_SESSION_PARALLEL_NOT_SUPPORTED, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   89|      0|    MAPERROR(CKR_SESSION_READ_ONLY, SEC_ERROR_READ_ONLY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   90|  4.09k|    MAPERROR(CKR_SIGNATURE_INVALID, SEC_ERROR_BAD_SIGNATURE)
  ------------------
  |  |   41|  4.09k|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 4.09k, False: 168]
  |  |  ------------------
  |  |   42|  4.09k|        return y;
  ------------------
   91|      0|    MAPERROR(CKR_SIGNATURE_LEN_RANGE, SEC_ERROR_BAD_SIGNATURE)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   92|      0|    MAPERROR(CKR_TEMPLATE_INCOMPLETE, SEC_ERROR_BAD_DATA)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   93|     60|    MAPERROR(CKR_TEMPLATE_INCONSISTENT, SEC_ERROR_BAD_DATA)
  ------------------
  |  |   41|     60|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 60, False: 4.20k]
  |  |  ------------------
  |  |   42|     60|        return y;
  ------------------
   94|      0|    MAPERROR(CKR_TOKEN_NOT_PRESENT, SEC_ERROR_NO_TOKEN)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   95|      0|    MAPERROR(CKR_TOKEN_NOT_RECOGNIZED, SEC_ERROR_IO)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   96|      0|    MAPERROR(CKR_TOKEN_WRITE_PROTECTED, SEC_ERROR_READ_ONLY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   97|      0|    MAPERROR(CKR_UNWRAPPING_KEY_HANDLE_INVALID, SEC_ERROR_INVALID_KEY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   98|      0|    MAPERROR(CKR_UNWRAPPING_KEY_SIZE_RANGE, SEC_ERROR_INVALID_KEY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
   99|      0|    MAPERROR(CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT, SEC_ERROR_INVALID_KEY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
  100|      0|    MAPERROR(CKR_USER_ALREADY_LOGGED_IN, 0)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
  101|      0|    MAPERROR(CKR_USER_NOT_LOGGED_IN, SEC_ERROR_TOKEN_NOT_LOGGED_IN)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
  102|      0|    MAPERROR(CKR_USER_PIN_NOT_INITIALIZED, SEC_ERROR_NO_TOKEN)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
  103|      0|    MAPERROR(CKR_USER_TYPE_INVALID, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
  104|      0|    MAPERROR(CKR_WRAPPED_KEY_INVALID, SEC_ERROR_INVALID_KEY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
  105|      0|    MAPERROR(CKR_WRAPPED_KEY_LEN_RANGE, SEC_ERROR_INVALID_KEY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
  106|      0|    MAPERROR(CKR_WRAPPING_KEY_HANDLE_INVALID, SEC_ERROR_INVALID_KEY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
  107|      0|    MAPERROR(CKR_WRAPPING_KEY_SIZE_RANGE, SEC_ERROR_INVALID_KEY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
  108|      0|    MAPERROR(CKR_WRAPPING_KEY_TYPE_INCONSISTENT, SEC_ERROR_INVALID_KEY)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
  109|      0|    MAPERROR(CKR_VENDOR_DEFINED, SEC_ERROR_LIBRARY_FAILURE)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
  110|      0|    MAPERROR(CKR_NSS_CERTDB_FAILED, SEC_ERROR_BAD_DATABASE)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
  111|      0|    MAPERROR(CKR_NSS_KEYDB_FAILED, SEC_ERROR_BAD_DATABASE)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
  112|      0|    MAPERROR(CKR_CANT_LOCK, SEC_ERROR_INCOMPATIBLE_PKCS11)
  ------------------
  |  |   41|      0|    case x:            \
  |  |  ------------------
  |  |  |  Branch (41:5): [True: 0, False: 4.26k]
  |  |  ------------------
  |  |   42|      0|        return y;
  ------------------
  113|       |/* clang-format on */
  114|       |
  115|       |#ifdef PK11_ERROR_USE_ARRAY
  116|       |};
  117|       |
  118|       |int
  119|       |PK11_MapError(CK_RV rv)
  120|       |{
  121|       |    int size = sizeof(pk11_error_map) / sizeof(pk11_error_map[0]);
  122|       |
  123|       |    for (i = 0; i < size; i++) {
  124|       |        if (pk11_error_map[i].pk11_error == rv) {
  125|       |            return pk11_error_map[i].sec_error;
  126|       |        }
  127|       |    }
  128|       |    return SEC_ERROR_UNKNOWN_PKCS11_ERROR;
  129|       |}
  130|       |
  131|       |#else
  132|       |
  133|       |            /* clang-format off */
  134|      0|    default :
  ------------------
  |  Branch (134:5): [True: 0, False: 4.26k]
  ------------------
  135|      0|        break;
  136|       |            /* clang-format on */
  137|  4.26k|    }
  138|      0|    return SEC_ERROR_UNKNOWN_PKCS11_ERROR;
  139|  4.26k|}

SECMOD_NewListLock:
   21|      1|{
   22|      1|    return NSSRWLock_New(10, "moduleListLock");
  ------------------
  |  |   49|      1|#define NSSRWLock_New NSSRWLock_New_Util
  ------------------
   23|      1|}
SECMOD_DestroyListLock:
   30|      1|{
   31|      1|    NSSRWLock_Destroy(lock);
  ------------------
  |  |   45|      1|#define NSSRWLock_Destroy NSSRWLock_Destroy_Util
  ------------------
   32|      1|}
SECMOD_GetReadLock:
   40|  4.41k|{
   41|  4.41k|    NSSRWLock_LockRead(modLock);
  ------------------
  |  |   47|  4.41k|#define NSSRWLock_LockRead NSSRWLock_LockRead_Util
  ------------------
   42|  4.41k|}
SECMOD_ReleaseReadLock:
   49|  4.41k|{
   50|  4.41k|    NSSRWLock_UnlockRead(modLock);
  ------------------
  |  |   50|  4.41k|#define NSSRWLock_UnlockRead NSSRWLock_UnlockRead_Util
  ------------------
   51|  4.41k|}
SECMOD_GetWriteLock:
   58|      2|{
   59|      2|    NSSRWLock_LockWrite(modLock);
  ------------------
  |  |   48|      2|#define NSSRWLock_LockWrite NSSRWLock_LockWrite_Util
  ------------------
   60|      2|}
SECMOD_ReleaseWriteLock:
   68|      2|{
   69|      2|    NSSRWLock_UnlockWrite(modLock);
  ------------------
  |  |   51|      2|#define NSSRWLock_UnlockWrite NSSRWLock_UnlockWrite_Util
  ------------------
   70|      2|}

secmod_ModuleInit:
  216|      1|{
  217|      1|    CK_C_INITIALIZE_ARGS moduleArgs;
  218|      1|    CK_VOID_PTR pInitArgs;
  219|      1|    CK_RV crv;
  220|       |
  221|      1|    if (reload) {
  ------------------
  |  Branch (221:9): [True: 1, False: 0]
  ------------------
  222|      1|        *reload = NULL;
  223|      1|    }
  224|       |
  225|      1|    if (!mod || !alreadyLoaded) {
  ------------------
  |  Branch (225:9): [True: 0, False: 1]
  |  Branch (225:17): [True: 0, False: 1]
  ------------------
  226|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  227|      0|        return SECFailure;
  228|      0|    }
  229|       |
  230|      1|    if (mod->libraryParams == NULL) {
  ------------------
  |  Branch (230:9): [True: 0, False: 1]
  ------------------
  231|      0|        if (mod->isThreadSafe) {
  ------------------
  |  Branch (231:13): [True: 0, False: 0]
  ------------------
  232|      0|            pInitArgs = (void *)&secmodLockFunctions;
  233|      0|        } else {
  234|      0|            pInitArgs = NULL;
  235|      0|        }
  236|      1|    } else {
  237|      1|        if (mod->isThreadSafe) {
  ------------------
  |  Branch (237:13): [True: 1, False: 0]
  ------------------
  238|      1|            moduleArgs = secmodLockFunctions;
  239|      1|        } else {
  240|      0|            moduleArgs = secmodNoLockArgs;
  241|      0|        }
  242|      1|        moduleArgs.LibraryParameters = (void *)mod->libraryParams;
  243|      1|        pInitArgs = &moduleArgs;
  244|      1|    }
  245|      1|    crv = PK11_GETTAB(mod)->C_Initialize(pInitArgs);
  ------------------
  |  |  102|      1|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  246|      1|    if (CKR_CRYPTOKI_ALREADY_INITIALIZED == crv) {
  ------------------
  |  | 1521|      1|#define CKR_CRYPTOKI_ALREADY_INITIALIZED 0x00000191UL
  ------------------
  |  Branch (246:9): [True: 0, False: 1]
  ------------------
  247|      0|        SECMODModule *oldModule = NULL;
  248|       |
  249|       |        /* Library has already been loaded once, if caller expects it, and it
  250|       |         * has additional configuration, try reloading it as well. */
  251|      0|        if (reload != NULL && mod->libraryParams) {
  ------------------
  |  Branch (251:13): [True: 0, False: 0]
  |  Branch (251:31): [True: 0, False: 0]
  ------------------
  252|      0|            oldModule = secmod_FindModuleByFuncPtr(mod->functionList);
  253|      0|        }
  254|       |        /* Library has been loaded by NSS. It means it may be capable of
  255|       |         * reloading */
  256|      0|        if (oldModule) {
  ------------------
  |  Branch (256:13): [True: 0, False: 0]
  ------------------
  257|      0|            SECStatus rv;
  258|      0|            rv = secmod_handleReload(oldModule, mod);
  259|      0|            if (rv == SECSuccess) {
  ------------------
  |  Branch (259:17): [True: 0, False: 0]
  ------------------
  260|       |                /* This module should go away soon, since we've
  261|       |                 * simply expanded the slots on the old module.
  262|       |                 * When it goes away, it should not Finalize since
  263|       |                 * that will close our old module as well. Setting
  264|       |                 * the function list to NULL will prevent that close */
  265|      0|                mod->functionList = NULL;
  266|      0|                *reload = oldModule;
  267|      0|                return SECSuccess;
  268|      0|            }
  269|      0|            SECMOD_DestroyModule(oldModule);
  270|      0|        }
  271|       |        /* reload not possible, fall back to old semantics */
  272|      0|        if (!enforceAlreadyInitializedError) {
  ------------------
  |  Branch (272:13): [True: 0, False: 0]
  ------------------
  273|      0|            *alreadyLoaded = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  274|      0|            return SECSuccess;
  275|      0|        }
  276|      0|    }
  277|      1|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (277:9): [True: 0, False: 1]
  ------------------
  278|      0|        if (!mod->isThreadSafe ||
  ------------------
  |  Branch (278:13): [True: 0, False: 0]
  ------------------
  279|      0|            crv == CKR_NSS_CERTDB_FAILED ||
  ------------------
  |  |  376|      0|#define CKR_NSS_CERTDB_FAILED (CKR_NSS + 1)
  |  |  ------------------
  |  |  |  |  374|      0|#define CKR_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1309|      0|#define CKM_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKR_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (279:13): [True: 0, False: 0]
  ------------------
  280|      0|            crv == CKR_NSS_KEYDB_FAILED) {
  ------------------
  |  |  377|      0|#define CKR_NSS_KEYDB_FAILED (CKR_NSS + 2)
  |  |  ------------------
  |  |  |  |  374|      0|#define CKR_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1309|      0|#define CKM_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKR_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (280:13): [True: 0, False: 0]
  ------------------
  281|      0|            PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  282|      0|            return SECFailure;
  283|      0|        }
  284|       |        /* If we had attempted to init a single threaded module "with"
  285|       |         * parameters and it failed, should we retry "without" parameters?
  286|       |         * (currently we don't retry in this scenario) */
  287|       |
  288|      0|        if (!loadSingleThreadedModules) {
  ------------------
  |  Branch (288:13): [True: 0, False: 0]
  ------------------
  289|      0|            PORT_SetError(SEC_ERROR_INCOMPATIBLE_PKCS11);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  290|      0|            return SECFailure;
  291|      0|        }
  292|       |        /* If we arrive here, the module failed a ThreadSafe init. */
  293|      0|        mod->isThreadSafe = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  294|      0|        if (!mod->libraryParams) {
  ------------------
  |  Branch (294:13): [True: 0, False: 0]
  ------------------
  295|      0|            pInitArgs = NULL;
  296|      0|        } else {
  297|      0|            moduleArgs = secmodNoLockArgs;
  298|      0|            moduleArgs.LibraryParameters = (void *)mod->libraryParams;
  299|      0|            pInitArgs = &moduleArgs;
  300|      0|        }
  301|      0|        crv = PK11_GETTAB(mod)->C_Initialize(pInitArgs);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  302|      0|        if ((CKR_CRYPTOKI_ALREADY_INITIALIZED == crv) &&
  ------------------
  |  | 1521|      0|#define CKR_CRYPTOKI_ALREADY_INITIALIZED 0x00000191UL
  ------------------
  |  Branch (302:13): [True: 0, False: 0]
  ------------------
  303|      0|            (!enforceAlreadyInitializedError)) {
  ------------------
  |  Branch (303:13): [True: 0, False: 0]
  ------------------
  304|      0|            *alreadyLoaded = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  305|      0|            return SECSuccess;
  306|      0|        }
  307|      0|        if (crv != CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (307:13): [True: 0, False: 0]
  ------------------
  308|      0|            PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  309|      0|            return SECFailure;
  310|      0|        }
  311|      0|    }
  312|      1|    return SECSuccess;
  313|      1|}
SECMOD_SetRootCerts:
  321|      2|{
  322|      2|    PK11PreSlotInfo *psi = NULL;
  323|      2|    int i;
  324|       |
  325|      2|    if (slot->hasRootCerts) {
  ------------------
  |  Branch (325:9): [True: 0, False: 2]
  ------------------
  326|      0|        for (i = 0; i < mod->slotInfoCount; i++) {
  ------------------
  |  Branch (326:21): [True: 0, False: 0]
  ------------------
  327|      0|            if (slot->slotID == mod->slotInfo[i].slotID) {
  ------------------
  |  Branch (327:17): [True: 0, False: 0]
  ------------------
  328|      0|                psi = &mod->slotInfo[i];
  329|      0|                break;
  330|      0|            }
  331|      0|        }
  332|      0|        if (psi == NULL) {
  ------------------
  |  Branch (332:13): [True: 0, False: 0]
  ------------------
  333|       |            /* allocate more slots */
  334|      0|            PK11PreSlotInfo *psi_list = (PK11PreSlotInfo *)
  335|      0|                PORT_ArenaAlloc(mod->arena,
  ------------------
  |  |   53|      0|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  336|      0|                                (mod->slotInfoCount + 1) * sizeof(PK11PreSlotInfo));
  337|       |            /* copy the old ones */
  338|      0|            if (mod->slotInfoCount > 0) {
  ------------------
  |  Branch (338:17): [True: 0, False: 0]
  ------------------
  339|      0|                PORT_Memcpy(psi_list, mod->slotInfo,
  ------------------
  |  |  180|      0|#define PORT_Memcpy memcpy
  ------------------
  340|      0|                            (mod->slotInfoCount) * sizeof(PK11PreSlotInfo));
  341|      0|            }
  342|       |            /* assign psi to the last new slot */
  343|      0|            psi = &psi_list[mod->slotInfoCount];
  344|      0|            psi->slotID = slot->slotID;
  345|      0|            psi->askpw = 0;
  346|      0|            psi->timeout = 0;
  347|      0|            psi->defaultFlags = 0;
  348|       |
  349|       |            /* increment module count & store new list */
  350|      0|            mod->slotInfo = psi_list;
  351|      0|            mod->slotInfoCount++;
  352|      0|        }
  353|      0|        psi->hasRootCerts = 1;
  354|      0|    }
  355|      2|}
secmod_DetermineModuleFunctionList:
  392|      2|{
  393|      2|    PRLibrary *library = NULL;
  394|      2|    CK_C_GetInterface ientry = NULL;
  395|      2|    CK_C_GetFunctionList fentry = NULL;
  396|      2|    char *disableUnload = NULL;
  397|       |#ifndef NSS_STATIC_SOFTOKEN
  398|       |    const char *nss_interface;
  399|       |    const char *nss_function;
  400|       |#endif
  401|      2|    CK_INTERFACE_PTR interface;
  402|       |
  403|       |    /* internal modules get loaded from their internal list */
  404|      2|    if (mod->internal && (mod->dllName == NULL)) {
  ------------------
  |  Branch (404:9): [True: 2, False: 0]
  |  Branch (404:26): [True: 2, False: 0]
  ------------------
  405|      2|#ifdef NSS_STATIC_SOFTOKEN
  406|      2|        ientry = (CK_C_GetInterface)NSC_GetInterface;
  407|       |#else
  408|       |        /*
  409|       |         * Loads softoken as a dynamic library,
  410|       |         * even though the rest of NSS assumes this as the "internal" module.
  411|       |         */
  412|       |        if (!softokenLib &&
  413|       |            PR_SUCCESS != PR_CallOnce(&loadSoftokenOnce, &softoken_LoadDSO))
  414|       |            return SECFailure;
  415|       |
  416|       |        PR_ATOMIC_INCREMENT(&softokenLoadCount);
  417|       |
  418|       |        if (mod->isFIPS) {
  419|       |            nss_interface = "FC_GetInterface";
  420|       |            nss_function = "FC_GetFunctionList";
  421|       |        } else {
  422|       |            nss_interface = "NSC_GetInterface";
  423|       |            nss_function = "NSC_GetFunctionList";
  424|       |        }
  425|       |
  426|       |        ientry = (CK_C_GetInterface)
  427|       |            PR_FindSymbol(softokenLib, nss_interface);
  428|       |        if (!ientry) {
  429|       |            fentry = (CK_C_GetFunctionList)
  430|       |                PR_FindSymbol(softokenLib, nss_function);
  431|       |            if (!fentry) {
  432|       |                return SECFailure;
  433|       |            }
  434|       |        }
  435|       |#endif
  436|       |
  437|      2|        if (mod->isModuleDB) {
  ------------------
  |  Branch (437:13): [True: 1, False: 1]
  ------------------
  438|      1|            mod->moduleDBFunc = (CK_C_GetFunctionList)
  439|      1|#ifdef NSS_STATIC_SOFTOKEN
  440|      1|                NSC_ModuleDBFunc;
  441|       |#else
  442|       |                PR_FindSymbol(softokenLib, "NSC_ModuleDBFunc");
  443|       |#endif
  444|      1|        }
  445|       |
  446|      2|        if (mod->moduleDBOnly) {
  ------------------
  |  Branch (446:13): [True: 1, False: 1]
  ------------------
  447|      1|            mod->loaded = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  448|      1|            return SECSuccess;
  449|      1|        }
  450|      2|    } else {
  451|       |        /* Not internal, load the DLL and look up C_GetFunctionList */
  452|      0|        if (mod->dllName == NULL) {
  ------------------
  |  Branch (452:13): [True: 0, False: 0]
  ------------------
  453|      0|            return SECFailure;
  454|      0|        }
  455|       |
  456|       |/* load the library. If this succeeds, then we have to remember to
  457|       | * unload the library if anything goes wrong from here on out...
  458|       | */
  459|       |#if defined(_WIN32)
  460|       |        if (nssUTF8_Length(mod->dllName, NULL)) {
  461|       |            wchar_t *dllNameWide = _NSSUTIL_UTF8ToWide(mod->dllName);
  462|       |            if (dllNameWide) {
  463|       |                PRLibSpec libSpec;
  464|       |                libSpec.type = PR_LibSpec_PathnameU;
  465|       |                libSpec.value.pathname_u = dllNameWide;
  466|       |                library = PR_LoadLibraryWithFlags(libSpec, 0);
  467|       |                PORT_Free(dllNameWide);
  468|       |            }
  469|       |        }
  470|       |        if (library == NULL) {
  471|       |            // fallback to system code page
  472|       |            library = PR_LoadLibrary(mod->dllName);
  473|       |        }
  474|       |#else
  475|      0|        library = PR_LoadLibrary(mod->dllName);
  476|      0|#endif // defined(_WIN32)
  477|      0|        mod->library = (void *)library;
  478|       |
  479|      0|        if (library == NULL) {
  ------------------
  |  Branch (479:13): [True: 0, False: 0]
  ------------------
  480|      0|            return SECFailure;
  481|      0|        }
  482|       |
  483|       |        /*
  484|       |         * now we need to get the entry point to find the function pointers
  485|       |         */
  486|      0|        if (!mod->moduleDBOnly) {
  ------------------
  |  Branch (486:13): [True: 0, False: 0]
  ------------------
  487|      0|            ientry = (CK_C_GetInterface)
  488|      0|                PR_FindSymbol(library, "C_GetInterface");
  489|      0|            if (!ientry) {
  ------------------
  |  Branch (489:17): [True: 0, False: 0]
  ------------------
  490|      0|                fentry = (CK_C_GetFunctionList)
  491|      0|                    PR_FindSymbol(library, "C_GetFunctionList");
  492|      0|            }
  493|      0|        }
  494|      0|        if (mod->isModuleDB) {
  ------------------
  |  Branch (494:13): [True: 0, False: 0]
  ------------------
  495|      0|            mod->moduleDBFunc = (void *)
  496|      0|                PR_FindSymbol(library, "NSS_ReturnModuleSpecData");
  497|      0|        }
  498|      0|        if (mod->moduleDBFunc == NULL)
  ------------------
  |  Branch (498:13): [True: 0, False: 0]
  ------------------
  499|      0|            mod->isModuleDB = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  500|      0|        if ((ientry == NULL) && (fentry == NULL)) {
  ------------------
  |  Branch (500:13): [True: 0, False: 0]
  |  Branch (500:33): [True: 0, False: 0]
  ------------------
  501|      0|            if (mod->isModuleDB) {
  ------------------
  |  Branch (501:17): [True: 0, False: 0]
  ------------------
  502|      0|                mod->loaded = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  503|      0|                mod->moduleDBOnly = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  504|      0|                return SECSuccess;
  505|      0|            }
  506|      0|            PR_UnloadLibrary(library);
  507|      0|            return SECFailure;
  508|      0|        }
  509|      0|    }
  510|       |
  511|       |    /*
  512|       |     * We need to get the function list
  513|       |     */
  514|      1|    if (ientry) {
  ------------------
  |  Branch (514:9): [True: 1, False: 0]
  ------------------
  515|       |        /* we first try to get a FORK_SAFE interface */
  516|      1|        if ((*ientry)((CK_UTF8CHAR_PTR) "PKCS 11", NULL, &interface,
  ------------------
  |  Branch (516:13): [True: 0, False: 1]
  ------------------
  517|      1|                      CKF_INTERFACE_FORK_SAFE) != CKR_OK) {
  ------------------
  |  | 1576|      1|#define CKF_INTERFACE_FORK_SAFE 0x00000001UL
  ------------------
                                    CKF_INTERFACE_FORK_SAFE) != CKR_OK) {
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
  518|       |            /* one is not appearantly available, get a non-fork safe version */
  519|      0|            if ((*ientry)((CK_UTF8CHAR_PTR) "PKCS 11", NULL, &interface, 0) != CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (519:17): [True: 0, False: 0]
  ------------------
  520|      0|                goto fail;
  521|      0|            }
  522|      0|        }
  523|      1|        mod->functionList = interface->pFunctionList;
  524|      1|        mod->flags = interface->flags;
  525|       |        /* if we have a fips indicator, grab it */
  526|      1|        if ((*ientry)((CK_UTF8CHAR_PTR) "Vendor NSS FIPS Interface", NULL,
  ------------------
  |  Branch (526:13): [True: 1, False: 0]
  ------------------
  527|      1|                      &interface, 0) == CKR_OK) {
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
  528|      1|            mod->fipsIndicator = ((CK_NSS_FIPS_FUNCTIONS *)(interface->pFunctionList))->NSC_NSSGetFIPSStatus;
  529|      1|        }
  530|      1|    } else {
  531|      0|        if ((*fentry)((CK_FUNCTION_LIST_PTR *)&mod->functionList) != CKR_OK)
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (531:13): [True: 0, False: 0]
  ------------------
  532|      0|            goto fail;
  533|      0|        mod->flags = 0;
  534|      0|    }
  535|       |
  536|      1|#ifdef DEBUG_MODULE
  537|      1|    modToDBG = PR_GetEnvSecure("NSS_DEBUG_PKCS11_MODULE");
  538|      1|    if (modToDBG && strcmp(mod->commonName, modToDBG) == 0) {
  ------------------
  |  Branch (538:9): [True: 0, False: 1]
  |  Branch (538:21): [True: 0, False: 0]
  ------------------
  539|      0|        mod->functionList = (void *)nss_InsertDeviceLog(
  540|      0|            (CK_FUNCTION_LIST_3_0_PTR)mod->functionList);
  541|      0|    }
  542|      1|#endif
  543|       |
  544|      1|    return SECSuccess;
  545|       |
  546|      0|fail:
  547|      0|    mod->functionList = NULL;
  548|      0|    disableUnload = PR_GetEnvSecure("NSS_DISABLE_UNLOAD");
  549|      0|    if (library && !disableUnload) {
  ------------------
  |  Branch (549:9): [True: 0, False: 0]
  |  Branch (549:20): [True: 0, False: 0]
  ------------------
  550|      0|        PR_UnloadLibrary(library);
  551|      0|    }
  552|      0|    return SECFailure;
  553|      1|}
secmod_InitializeModuleAndGetSlotInfo:
  557|      1|{
  558|      1|    CK_INFO info;
  559|      1|    CK_ULONG slotCount = 0;
  560|      1|    SECStatus rv;
  561|      1|    PRBool alreadyLoaded = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  562|       |
  563|       |    /* This test operation makes sure our locking system is
  564|       |     * consistent even if we are using non-thread safe tokens by
  565|       |     * simulating unsafe tokens with safe ones. */
  566|      1|    mod->isThreadSafe = !PR_GetEnvSecure("NSS_FORCE_TOKEN_LOCK");
  567|       |
  568|       |    /* Now we initialize the module */
  569|      1|    rv = secmod_ModuleInit(mod, oldModule, &alreadyLoaded);
  570|      1|    if (rv != SECSuccess) {
  ------------------
  |  Branch (570:9): [True: 0, False: 1]
  ------------------
  571|      0|        goto fail;
  572|      0|    }
  573|       |
  574|       |    /* module has been reloaded, this module itself is done,
  575|       |     * return to the caller */
  576|      1|    if (mod->functionList == NULL) {
  ------------------
  |  Branch (576:9): [True: 0, False: 1]
  ------------------
  577|      0|        mod->loaded = PR_TRUE; /* technically the module is loaded.. */
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  578|      0|        return SECSuccess;
  579|      0|    }
  580|       |
  581|       |    /* check the version number */
  582|      1|    if (PK11_GETTAB(mod)->C_GetInfo(&info) != CKR_OK)
  ------------------
  |  |  102|      1|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
                  if (PK11_GETTAB(mod)->C_GetInfo(&info) != CKR_OK)
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (582:9): [True: 0, False: 1]
  ------------------
  583|      0|        goto fail2;
  584|      1|    if (info.cryptokiVersion.major < 2)
  ------------------
  |  Branch (584:9): [True: 0, False: 1]
  ------------------
  585|      0|        goto fail2;
  586|       |    /* all 2.0 are a priori *not* thread safe */
  587|      1|    if ((info.cryptokiVersion.major == 2) && (info.cryptokiVersion.minor < 1)) {
  ------------------
  |  Branch (587:9): [True: 0, False: 1]
  |  Branch (587:46): [True: 0, False: 0]
  ------------------
  588|      0|        if (!loadSingleThreadedModules) {
  ------------------
  |  Branch (588:13): [True: 0, False: 0]
  ------------------
  589|      0|            PORT_SetError(SEC_ERROR_INCOMPATIBLE_PKCS11);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  590|      0|            goto fail2;
  591|      0|        } else {
  592|      0|            mod->isThreadSafe = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  593|      0|        }
  594|      0|    }
  595|      1|    mod->cryptokiVersion = info.cryptokiVersion;
  596|       |
  597|       |    /* If we don't have a common name, get it from the PKCS 11 module */
  598|      1|    if ((mod->commonName == NULL) || (mod->commonName[0] == 0)) {
  ------------------
  |  Branch (598:9): [True: 0, False: 1]
  |  Branch (598:38): [True: 0, False: 1]
  ------------------
  599|      0|        mod->commonName = PK11_MakeString(mod->arena, NULL,
  600|      0|                                          (char *)info.libraryDescription, sizeof(info.libraryDescription));
  601|      0|        if (mod->commonName == NULL)
  ------------------
  |  Branch (601:13): [True: 0, False: 0]
  ------------------
  602|      0|            goto fail2;
  603|      0|    }
  604|       |
  605|       |    /* initialize the Slots */
  606|      1|    if (PK11_GETTAB(mod)->C_GetSlotList(CK_FALSE, NULL, &slotCount) == CKR_OK) {
  ------------------
  |  |  102|      1|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
                  if (PK11_GETTAB(mod)->C_GetSlotList(CK_FALSE, NULL, &slotCount) == CKR_OK) {
  ------------------
  |  |   23|      1|#define CK_FALSE 0
  ------------------
                  if (PK11_GETTAB(mod)->C_GetSlotList(CK_FALSE, NULL, &slotCount) == CKR_OK) {
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (606:9): [True: 1, False: 0]
  ------------------
  607|      1|        CK_SLOT_ID *slotIDs;
  608|      1|        int i;
  609|      1|        CK_RV crv;
  610|       |
  611|      1|        mod->slots = (PK11SlotInfo **)PORT_ArenaAlloc(mod->arena,
  ------------------
  |  |   53|      1|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  612|      1|                                                      sizeof(PK11SlotInfo *) * slotCount);
  613|      1|        if (mod->slots == NULL)
  ------------------
  |  Branch (613:13): [True: 0, False: 1]
  ------------------
  614|      0|            goto fail2;
  615|       |
  616|      1|        slotIDs = (CK_SLOT_ID *)PORT_Alloc(sizeof(CK_SLOT_ID) * slotCount);
  ------------------
  |  |   52|      1|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  617|      1|        if (slotIDs == NULL) {
  ------------------
  |  Branch (617:13): [True: 0, False: 1]
  ------------------
  618|      0|            goto fail2;
  619|      0|        }
  620|      1|        crv = PK11_GETTAB(mod)->C_GetSlotList(CK_FALSE, slotIDs, &slotCount);
  ------------------
  |  |  102|      1|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
                      crv = PK11_GETTAB(mod)->C_GetSlotList(CK_FALSE, slotIDs, &slotCount);
  ------------------
  |  |   23|      1|#define CK_FALSE 0
  ------------------
  621|      1|        if (crv != CKR_OK) {
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (621:13): [True: 0, False: 1]
  ------------------
  622|      0|            PORT_Free(slotIDs);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  623|      0|            goto fail2;
  624|      0|        }
  625|       |
  626|       |        /* Initialize each slot */
  627|      3|        for (i = 0; i < (int)slotCount; i++) {
  ------------------
  |  Branch (627:21): [True: 2, False: 1]
  ------------------
  628|      2|            mod->slots[i] = PK11_NewSlotInfo(mod);
  629|      2|            PK11_InitSlot(mod, slotIDs[i], mod->slots[i]);
  630|       |            /* look down the slot info table */
  631|      2|            PK11_LoadSlotList(mod->slots[i], mod->slotInfo, mod->slotInfoCount);
  632|      2|            SECMOD_SetRootCerts(mod->slots[i], mod);
  633|       |            /* explicitly mark the internal slot as such if IsInternalKeySlot()
  634|       |             * is set */
  635|      2|            if (secmod_IsInternalKeySlot(mod) && (i == (mod->isFIPS ? 0 : 1))) {
  ------------------
  |  Branch (635:17): [True: 2, False: 0]
  |  Branch (635:50): [True: 1, False: 1]
  |  Branch (635:57): [True: 0, False: 2]
  ------------------
  636|      1|                pk11_SetInternalKeySlotIfFirst(mod->slots[i]);
  637|      1|            }
  638|      2|        }
  639|      1|        mod->slotCount = slotCount;
  640|      1|        mod->slotInfoCount = 0;
  641|      1|        PORT_Free(slotIDs);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  642|      1|    }
  643|       |
  644|      1|    mod->loaded = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  645|      1|    mod->moduleID = nextModuleID++;
  646|      1|    return SECSuccess;
  647|      0|fail2:
  648|      0|    if (enforceAlreadyInitializedError || (!alreadyLoaded)) {
  ------------------
  |  Branch (648:9): [True: 0, False: 0]
  |  Branch (648:43): [True: 0, False: 0]
  ------------------
  649|      0|        PK11_GETTAB(mod)->C_Finalize(NULL);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  650|      0|    }
  651|      0|fail:
  652|      0|    mod->functionList = NULL;
  653|      0|    return SECFailure;
  654|      0|}
secmod_LoadPKCS11Module:
  661|      2|{
  662|      2|    SECStatus rv = SECFailure;
  663|      2|    if (mod->loaded) {
  ------------------
  |  Branch (663:9): [True: 0, False: 2]
  ------------------
  664|      0|        return SECSuccess;
  665|      0|    }
  666|       |
  667|      2|    mod->fipsIndicator = NULL;
  668|       |
  669|      2|    rv = secmod_DetermineModuleFunctionList(mod);
  670|      2|    if (rv != SECSuccess) { // The error code is set up by secmod_DetermineModuleFunctionList.
  ------------------
  |  Branch (670:9): [True: 0, False: 2]
  ------------------
  671|      0|        return rv;
  672|      0|    }
  673|       |
  674|      2|    if (mod->loaded == PR_TRUE) {
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
  |  Branch (674:9): [True: 1, False: 1]
  ------------------
  675|      1|        return SECSuccess;
  676|      1|    }
  677|       |
  678|      1|    rv = secmod_InitializeModuleAndGetSlotInfo(mod, oldModule);
  679|      1|    if (rv != SECSuccess) { // The error code is set up by secmod_InitializeModuleAndGetSlotInfo
  ------------------
  |  Branch (679:9): [True: 0, False: 1]
  ------------------
  680|      0|        return rv;
  681|      0|    }
  682|       |
  683|      1|    return SECSuccess;
  684|      1|}
SECMOD_UnloadModule:
  729|      2|{
  730|      2|    PRLibrary *library;
  731|      2|    char *disableUnload = NULL;
  732|       |
  733|      2|    if (!mod->loaded) {
  ------------------
  |  Branch (733:9): [True: 0, False: 2]
  ------------------
  734|      0|        return SECFailure;
  735|      0|    }
  736|      2|    if (finalizeModules) {
  ------------------
  |  Branch (736:9): [True: 2, False: 0]
  ------------------
  737|      2|        if (mod->functionList && !mod->moduleDBOnly) {
  ------------------
  |  Branch (737:13): [True: 1, False: 1]
  |  Branch (737:34): [True: 1, False: 0]
  ------------------
  738|      1|            PK11_GETTAB(mod)->C_Finalize(NULL);
  ------------------
  |  |  102|      1|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  739|      1|        }
  740|      2|    }
  741|      2|    mod->moduleID = 0;
  742|      2|    mod->loaded = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  743|       |
  744|       |    /* do we want the semantics to allow unloading the internal library?
  745|       |     * if not, we should change this to SECFailure and move it above the
  746|       |     * mod->loaded = PR_FALSE; */
  747|      2|    if (mod->internal && (mod->dllName == NULL)) {
  ------------------
  |  Branch (747:9): [True: 2, False: 0]
  |  Branch (747:26): [True: 2, False: 0]
  ------------------
  748|       |#ifndef NSS_STATIC_SOFTOKEN
  749|       |        if (0 == PR_ATOMIC_DECREMENT(&softokenLoadCount)) {
  750|       |            if (softokenLib) {
  751|       |                disableUnload = PR_GetEnvSecure("NSS_DISABLE_UNLOAD");
  752|       |                if (!disableUnload) {
  753|       |#ifdef DEBUG
  754|       |                    PRStatus status = PR_UnloadLibrary(softokenLib);
  755|       |                    PORT_Assert(PR_SUCCESS == status);
  756|       |#else
  757|       |                    PR_UnloadLibrary(softokenLib);
  758|       |#endif
  759|       |                }
  760|       |                softokenLib = NULL;
  761|       |            }
  762|       |            loadSoftokenOnce = pristineCallOnce;
  763|       |        }
  764|       |#endif
  765|      2|        return SECSuccess;
  766|      2|    }
  767|       |
  768|      0|    library = (PRLibrary *)mod->library;
  769|       |    /* if no library, then we should not unload it */
  770|      0|    if (library == NULL) {
  ------------------
  |  Branch (770:9): [True: 0, False: 0]
  ------------------
  771|      0|        return SECSuccess;
  772|      0|    }
  773|       |
  774|      0|    disableUnload = PR_GetEnvSecure("NSS_DISABLE_UNLOAD");
  775|      0|    if (!disableUnload) {
  ------------------
  |  Branch (775:9): [True: 0, False: 0]
  ------------------
  776|      0|        PR_UnloadLibrary(library);
  777|      0|    }
  778|      0|    return SECSuccess;
  779|      0|}
nss_DumpModuleLog:
  783|      1|{
  784|      1|#ifdef DEBUG_MODULE
  785|      1|    if (modToDBG) {
  ------------------
  |  Branch (785:9): [True: 0, False: 1]
  ------------------
  786|      0|        print_final_statistics();
  787|      0|    }
  788|      1|#endif
  789|      1|}

PK11_AlgtagToMechanism:
 1755|  14.5k|{
 1756|  14.5k|    SECOidData *oid = SECOID_FindOIDByTag(algTag);
  ------------------
  |  |  116|  14.5k|#define SECOID_FindOIDByTag SECOID_FindOIDByTag_Util
  ------------------
 1757|       |
 1758|  14.5k|    if (oid)
  ------------------
  |  Branch (1758:9): [True: 14.5k, False: 0]
  ------------------
 1759|  14.5k|        return (CK_MECHANISM_TYPE)oid->mechanism;
 1760|      0|    return CKM_INVALID_MECHANISM;
  ------------------
  |  |  155|      0|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
 1761|  14.5k|}
PK11_MapSignKeyType:
 1931|     45|{
 1932|     45|    switch (keyType) {
 1933|      5|        case rsaKey:
  ------------------
  |  Branch (1933:9): [True: 5, False: 40]
  ------------------
 1934|      5|            return CKM_RSA_PKCS;
  ------------------
  |  |  720|      5|#define CKM_RSA_PKCS 0x00000001UL
  ------------------
 1935|      0|        case fortezzaKey:
  ------------------
  |  Branch (1935:9): [True: 0, False: 45]
  ------------------
 1936|      5|        case dsaKey:
  ------------------
  |  Branch (1936:9): [True: 5, False: 40]
  ------------------
 1937|      5|            return CKM_DSA;
  ------------------
  |  |  745|      5|#define CKM_DSA 0x00000011UL
  ------------------
 1938|     35|        case ecKey:
  ------------------
  |  Branch (1938:9): [True: 35, False: 10]
  ------------------
 1939|     35|            return CKM_ECDSA;
  ------------------
  |  | 1074|     35|#define CKM_ECDSA 0x00001041UL
  ------------------
 1940|      0|        case edKey:
  ------------------
  |  Branch (1940:9): [True: 0, False: 45]
  ------------------
 1941|      0|            return CKM_EDDSA;
  ------------------
  |  | 1174|      0|#define CKM_EDDSA 0x00001057UL
  ------------------
 1942|      0|        case dhKey:
  ------------------
  |  Branch (1942:9): [True: 0, False: 45]
  ------------------
 1943|      0|        default:
  ------------------
  |  Branch (1943:9): [True: 0, False: 45]
  ------------------
 1944|      0|            break;
 1945|     45|    }
 1946|      0|    return CKM_INVALID_MECHANISM;
  ------------------
  |  |  155|      0|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
 1947|     45|}

pk11_RetrieveCrls:
  361|      9|{
  362|      9|    pk11TraverseSlot creater;
  363|      9|    CK_ATTRIBUTE theTemplate[2];
  364|      9|    CK_ATTRIBUTE *attrs;
  365|      9|    CK_OBJECT_CLASS crlClass = CKO_NSS_CRL;
  ------------------
  |  |   35|      9|#define CKO_NSS_CRL (CKO_NSS + 1)
  |  |  ------------------
  |  |  |  |   33|      9|#define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  335|      9|#define CKO_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      9|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  366|      9|    crlOptions options;
  367|       |
  368|      9|    attrs = theTemplate;
  369|      9|    PK11_SETATTRS(attrs, CKA_CLASS, &crlClass, sizeof(crlClass));
  ------------------
  |  |  104|      9|    (x)->type = (id);              \
  |  |  105|      9|    (x)->pValue = (v);             \
  |  |  106|      9|    (x)->ulValueLen = (l);
  ------------------
  370|      9|    attrs++;
  371|       |
  372|      9|    options.head = nodes;
  373|       |
  374|       |    /* - do a partial decoding - we don't need to decode the entries while fetching
  375|       |       - don't copy the DER for optimal performance - CRL can be very large
  376|       |       - have the CRL objects adopt the DER, so SEC_DestroyCrl will free it
  377|       |       - keep bad CRL objects. The CRL cache is interested in them, for
  378|       |         security purposes. Bad CRL objects are a sign of something amiss.
  379|       |     */
  380|       |
  381|      9|    options.decodeOptions = CRL_DECODE_SKIP_ENTRIES | CRL_DECODE_DONT_COPY_DER |
  ------------------
  |  |  436|      9|#define CRL_DECODE_SKIP_ENTRIES 0x00000002
  ------------------
                  options.decodeOptions = CRL_DECODE_SKIP_ENTRIES | CRL_DECODE_DONT_COPY_DER |
  ------------------
  |  |  435|      9|#define CRL_DECODE_DONT_COPY_DER 0x00000001
  ------------------
  382|      9|                            CRL_DECODE_ADOPT_HEAP_DER | CRL_DECODE_KEEP_BAD_CRL;
  ------------------
  |  |  438|      9|#define CRL_DECODE_ADOPT_HEAP_DER 0x00000008
  ------------------
                                          CRL_DECODE_ADOPT_HEAP_DER | CRL_DECODE_KEEP_BAD_CRL;
  ------------------
  |  |  437|      9|#define CRL_DECODE_KEEP_BAD_CRL 0x00000004
  ------------------
  383|      9|    if (issuer) {
  ------------------
  |  Branch (383:9): [True: 9, False: 0]
  ------------------
  384|      9|        PK11_SETATTRS(attrs, CKA_SUBJECT, issuer->data, issuer->len);
  ------------------
  |  |  104|      9|    (x)->type = (id);              \
  |  |  105|      9|    (x)->pValue = (v);             \
  |  |  106|      9|    (x)->ulValueLen = (l);
  ------------------
  385|      9|        attrs++;
  386|      9|    }
  387|       |
  388|      9|    creater.callback = pk11_RetrieveCrlsCallback;
  389|      9|    creater.callbackArg = (void *)&options;
  390|      9|    creater.findTemplate = theTemplate;
  391|      9|    creater.templateCount = (attrs - theTemplate);
  392|       |
  393|      9|    return pk11_TraverseAllSlots(PK11_TraverseSlot, &creater, PR_FALSE, wincx);
  ------------------
  |  |  438|      9|#define PR_FALSE 0
  ------------------
  394|      9|}

PK11_DestroyObject:
   55|  4.32k|{
   56|  4.32k|    CK_RV crv;
   57|       |
   58|  4.32k|    PK11_EnterSlotMonitor(slot);
   59|  4.32k|    crv = PK11_GETTAB(slot)->C_DestroyObject(slot->session, object);
  ------------------
  |  |  102|  4.32k|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
   60|  4.32k|    PK11_ExitSlotMonitor(slot);
   61|  4.32k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  4.32k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (61:9): [True: 0, False: 4.32k]
  ------------------
   62|      0|        return SECFailure;
   63|      0|    }
   64|  4.32k|    return SECSuccess;
   65|  4.32k|}
pk11_HasAttributeSet_Lock:
  165|  4.32k|{
  166|  4.32k|    CK_BBOOL ckvalue = CK_FALSE;
  ------------------
  |  |   23|  4.32k|#define CK_FALSE 0
  ------------------
  167|  4.32k|    CK_ATTRIBUTE theTemplate;
  168|  4.32k|    CK_RV crv;
  169|       |
  170|       |    /* Prepare to retrieve the attribute. */
  171|  4.32k|    PK11_SETATTRS(&theTemplate, type, &ckvalue, sizeof(CK_BBOOL));
  ------------------
  |  |  104|  4.32k|    (x)->type = (id);              \
  |  |  105|  4.32k|    (x)->pValue = (v);             \
  |  |  106|  4.32k|    (x)->ulValueLen = (l);
  ------------------
  172|       |
  173|       |    /* Retrieve attribute value. */
  174|  4.32k|    if (!haslock)
  ------------------
  |  Branch (174:9): [True: 4.32k, False: 0]
  ------------------
  175|  4.32k|        PK11_EnterSlotMonitor(slot);
  176|  4.32k|    crv = PK11_GETTAB(slot)->C_GetAttributeValue(slot->session, id,
  ------------------
  |  |  102|  4.32k|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  177|  4.32k|                                                 &theTemplate, 1);
  178|  4.32k|    if (!haslock)
  ------------------
  |  Branch (178:9): [True: 4.32k, False: 0]
  ------------------
  179|  4.32k|        PK11_ExitSlotMonitor(slot);
  180|  4.32k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  4.32k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (180:9): [True: 0, False: 4.32k]
  ------------------
  181|      0|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  182|      0|        return CK_FALSE;
  ------------------
  |  |   23|      0|#define CK_FALSE 0
  ------------------
  183|      0|    }
  184|       |
  185|  4.32k|    return ckvalue;
  186|  4.32k|}
PK11_HasAttributeSet:
  191|  4.32k|{
  192|  4.32k|    PR_ASSERT(haslock == PR_FALSE);
  ------------------
  |  |  208|  4.32k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 4.32k, False: 0]
  |  |  ------------------
  ------------------
  193|  4.32k|    return pk11_HasAttributeSet_Lock(slot, id, type, PR_FALSE);
  ------------------
  |  |  438|  4.32k|#define PR_FALSE 0
  ------------------
  194|  4.32k|}
PK11_IsPermObject:
  281|  4.32k|{
  282|  4.32k|    return (PRBool)PK11_HasAttributeSet(slot, handle, CKA_TOKEN, PR_FALSE);
  ------------------
  |  |  512|  4.32k|#define CKA_TOKEN 0x00000001UL
  ------------------
                  return (PRBool)PK11_HasAttributeSet(slot, handle, CKA_TOKEN, PR_FALSE);
  ------------------
  |  |  438|  4.32k|#define PR_FALSE 0
  ------------------
  283|  4.32k|}
pk11_SignedToUnsigned:
  341|  10.9k|{
  342|  10.9k|    char *ptr = (char *)attrib->pValue;
  343|  10.9k|    unsigned long len = attrib->ulValueLen;
  344|       |
  345|  10.9k|    while ((len > 1) && (*ptr == 0)) {
  ------------------
  |  Branch (345:12): [True: 10.9k, False: 5]
  |  Branch (345:25): [True: 0, False: 10.9k]
  ------------------
  346|      0|        len--;
  347|      0|        ptr++;
  348|      0|    }
  349|  10.9k|    attrib->pValue = ptr;
  350|  10.9k|    attrib->ulValueLen = len;
  351|  10.9k|}
pk11_GetNewSession:
  359|  9.99k|{
  360|  9.99k|    CK_SESSION_HANDLE session;
  361|  9.99k|    *owner = PR_TRUE;
  ------------------
  |  |  437|  9.99k|#define PR_TRUE 1
  ------------------
  362|  9.99k|    if (!slot->isThreadSafe)
  ------------------
  |  Branch (362:9): [True: 0, False: 9.99k]
  ------------------
  363|      0|        PK11_EnterSlotMonitor(slot);
  364|  9.99k|    if (PK11_GETTAB(slot)->C_OpenSession(slot->slotID, CKF_SERIAL_SESSION,
  ------------------
  |  |  102|  9.99k|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
                  if (PK11_GETTAB(slot)->C_OpenSession(slot->slotID, CKF_SERIAL_SESSION,
  ------------------
  |  |  303|  9.99k|#define CKF_SERIAL_SESSION 0x00000004UL /* no parallel */
  ------------------
  |  Branch (364:9): [True: 0, False: 9.99k]
  ------------------
  365|  9.99k|                                         slot, pk11_notify, &session) != CKR_OK) {
  ------------------
  |  | 1388|  9.99k|#define CKR_OK 0x00000000UL
  ------------------
  366|      0|        *owner = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  367|      0|        session = slot->session;
  368|      0|    }
  369|  9.99k|    if (!slot->isThreadSafe)
  ------------------
  |  Branch (369:9): [True: 0, False: 9.99k]
  ------------------
  370|      0|        PK11_ExitSlotMonitor(slot);
  371|       |
  372|  9.99k|    return session;
  373|  9.99k|}
pk11_CloseSession:
  377|  9.99k|{
  378|  9.99k|    if (!owner)
  ------------------
  |  Branch (378:9): [True: 0, False: 9.99k]
  ------------------
  379|      0|        return;
  380|  9.99k|    if (!slot->isThreadSafe)
  ------------------
  |  Branch (380:9): [True: 0, False: 9.99k]
  ------------------
  381|      0|        PK11_EnterSlotMonitor(slot);
  382|  9.99k|    (void)PK11_GETTAB(slot)->C_CloseSession(session);
  ------------------
  |  |  102|  9.99k|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  383|  9.99k|    if (!slot->isThreadSafe)
  ------------------
  |  Branch (383:9): [True: 0, False: 9.99k]
  ------------------
  384|      0|        PK11_ExitSlotMonitor(slot);
  385|  9.99k|}
PK11_CreateNewObject:
  391|  4.44k|{
  392|  4.44k|    CK_SESSION_HANDLE rwsession;
  393|  4.44k|    CK_RV crv;
  394|  4.44k|    SECStatus rv = SECSuccess;
  395|       |
  396|  4.44k|    rwsession = session;
  397|  4.44k|    if (token) {
  ------------------
  |  Branch (397:9): [True: 0, False: 4.44k]
  ------------------
  398|      0|        rwsession = PK11_GetRWSession(slot);
  399|  4.44k|    } else if (rwsession == CK_INVALID_HANDLE) {
  ------------------
  |  |   78|  4.44k|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (399:16): [True: 4.44k, False: 0]
  ------------------
  400|  4.44k|        rwsession = slot->session;
  401|  4.44k|        if (rwsession != CK_INVALID_HANDLE)
  ------------------
  |  |   78|  4.44k|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (401:13): [True: 4.44k, False: 0]
  ------------------
  402|  4.44k|            PK11_EnterSlotMonitor(slot);
  403|  4.44k|    }
  404|  4.44k|    if (rwsession == CK_INVALID_HANDLE) {
  ------------------
  |  |   78|  4.44k|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (404:9): [True: 0, False: 4.44k]
  ------------------
  405|      0|        PORT_SetError(SEC_ERROR_BAD_DATA);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  406|      0|        return SECFailure;
  407|      0|    }
  408|  4.44k|    crv = PK11_GETTAB(slot)->C_CreateObject(rwsession,
  ------------------
  |  |  102|  4.44k|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  409|  4.44k|                                            /* cast away const :-( */ (CK_ATTRIBUTE_PTR)theTemplate,
  410|  4.44k|                                            count, objectID);
  411|  4.44k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (411:9): [True: 120, False: 4.32k]
  ------------------
  412|    120|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|    120|#define PORT_SetError PORT_SetError_Util
  ------------------
  413|    120|        rv = SECFailure;
  414|    120|    }
  415|  4.44k|    if (token) {
  ------------------
  |  Branch (415:9): [True: 0, False: 4.44k]
  ------------------
  416|      0|        PK11_RestoreROSession(slot, rwsession);
  417|  4.44k|    } else if (session == CK_INVALID_HANDLE) {
  ------------------
  |  |   78|  4.44k|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (417:16): [True: 4.44k, False: 0]
  ------------------
  418|  4.44k|        PK11_ExitSlotMonitor(slot);
  419|  4.44k|    }
  420|       |
  421|  4.44k|    return rv;
  422|  4.44k|}
PK11_VerifyRecover:
  637|      5|{
  638|      5|    PK11SlotInfo *slot = key->pkcs11Slot;
  639|      5|    CK_OBJECT_HANDLE id = key->pkcs11ID;
  640|      5|    CK_MECHANISM mech = { 0, NULL, 0 };
  641|      5|    PRBool owner = PR_TRUE;
  ------------------
  |  |  437|      5|#define PR_TRUE 1
  ------------------
  642|      5|    CK_SESSION_HANDLE session;
  643|      5|    CK_ULONG len;
  644|      5|    CK_RV crv;
  645|       |
  646|      5|    mech.mechanism = PK11_MapSignKeyType(key->keyType);
  647|       |
  648|      5|    if (slot == NULL) {
  ------------------
  |  Branch (648:9): [True: 5, False: 0]
  ------------------
  649|      5|        slot = PK11_GetBestSlotWithAttributes(mech.mechanism,
  650|      5|                                              CKF_VERIFY_RECOVER, 0, wincx);
  ------------------
  |  | 1359|      5|#define CKF_VERIFY_RECOVER 0x00004000UL
  ------------------
  651|      5|        if (slot == NULL) {
  ------------------
  |  Branch (651:13): [True: 0, False: 5]
  ------------------
  652|      0|            PORT_SetError(SEC_ERROR_NO_MODULE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  653|      0|            return SECFailure;
  654|      0|        }
  655|      5|        id = PK11_ImportPublicKey(slot, key, PR_FALSE);
  ------------------
  |  |  438|      5|#define PR_FALSE 0
  ------------------
  656|      5|    } else {
  657|      0|        PK11_ReferenceSlot(slot);
  658|      0|    }
  659|       |
  660|      5|    if (id == CK_INVALID_HANDLE) {
  ------------------
  |  |   78|      5|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (660:9): [True: 2, False: 3]
  ------------------
  661|      2|        PK11_FreeSlot(slot);
  662|      2|        PORT_SetError(SEC_ERROR_BAD_KEY);
  ------------------
  |  |   65|      2|#define PORT_SetError PORT_SetError_Util
  ------------------
  663|      2|        return SECFailure;
  664|      2|    }
  665|       |
  666|      3|    session = pk11_GetNewSession(slot, &owner);
  667|      3|    if (!owner || !(slot->isThreadSafe))
  ------------------
  |  Branch (667:9): [True: 0, False: 3]
  |  Branch (667:19): [True: 0, False: 3]
  ------------------
  668|      0|        PK11_EnterSlotMonitor(slot);
  669|      3|    crv = PK11_GETTAB(slot)->C_VerifyRecoverInit(session, &mech, id);
  ------------------
  |  |  102|      3|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  670|      3|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      3|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (670:9): [True: 0, False: 3]
  ------------------
  671|      0|        if (!owner || !(slot->isThreadSafe))
  ------------------
  |  Branch (671:13): [True: 0, False: 0]
  |  Branch (671:23): [True: 0, False: 0]
  ------------------
  672|      0|            PK11_ExitSlotMonitor(slot);
  673|      0|        pk11_CloseSession(slot, session, owner);
  674|      0|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  675|      0|        PK11_FreeSlot(slot);
  676|      0|        return SECFailure;
  677|      0|    }
  678|      3|    len = dsig->len;
  679|      3|    crv = PK11_GETTAB(slot)->C_VerifyRecover(session, sig->data,
  ------------------
  |  |  102|      3|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  680|      3|                                             sig->len, dsig->data, &len);
  681|      3|    if (!owner || !(slot->isThreadSafe))
  ------------------
  |  Branch (681:9): [True: 0, False: 3]
  |  Branch (681:19): [True: 0, False: 3]
  ------------------
  682|      0|        PK11_ExitSlotMonitor(slot);
  683|      3|    pk11_CloseSession(slot, session, owner);
  684|      3|    dsig->len = len;
  685|      3|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      3|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (685:9): [True: 3, False: 0]
  ------------------
  686|      3|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      3|#define PORT_SetError PORT_SetError_Util
  ------------------
  687|      3|        PK11_FreeSlot(slot);
  688|      3|        return SECFailure;
  689|      3|    }
  690|      0|    PK11_FreeSlot(slot);
  691|      0|    return SECSuccess;
  692|      3|}
PK11_Verify:
  700|     40|{
  701|     40|    CK_MECHANISM_TYPE mech = PK11_MapSignKeyType(key->keyType);
  702|     40|    return PK11_VerifyWithMechanism(key, mech, NULL, sig, hash, wincx);
  703|     40|}
PK11_VerifyWithMechanism:
  712|  4.34k|{
  713|  4.34k|    PK11SlotInfo *slot = key->pkcs11Slot;
  714|  4.34k|    CK_OBJECT_HANDLE id = key->pkcs11ID;
  715|  4.34k|    CK_MECHANISM mech = { 0, NULL, 0 };
  716|  4.34k|    PRBool owner = PR_TRUE;
  ------------------
  |  |  437|  4.34k|#define PR_TRUE 1
  ------------------
  717|  4.34k|    CK_SESSION_HANDLE session;
  718|  4.34k|    CK_RV crv;
  719|       |
  720|  4.34k|    mech.mechanism = mechanism;
  721|  4.34k|    if (param) {
  ------------------
  |  Branch (721:9): [True: 4.30k, False: 40]
  ------------------
  722|  4.30k|        mech.pParameter = param->data;
  723|  4.30k|        mech.ulParameterLen = param->len;
  724|  4.30k|    }
  725|       |
  726|  4.34k|    if (slot == NULL) {
  ------------------
  |  Branch (726:9): [True: 40, False: 4.30k]
  ------------------
  727|     40|        unsigned int length = 0;
  728|     40|        if ((mech.mechanism == CKM_DSA) &&
  ------------------
  |  |  745|     40|#define CKM_DSA 0x00000011UL
  ------------------
  |  Branch (728:13): [True: 5, False: 35]
  ------------------
  729|       |            /* 129 is 1024 bits translated to bytes and
  730|       |             * padded with an optional '0' to maintain a
  731|       |             * positive sign */
  732|     40|            (key->u.dsa.params.prime.len > 129)) {
  ------------------
  |  Branch (732:13): [True: 5, False: 0]
  ------------------
  733|       |            /* we need to get a slot that not only can do DSA, but can do DSA2
  734|       |             * key lengths */
  735|      5|            length = key->u.dsa.params.prime.len;
  736|      5|            if (key->u.dsa.params.prime.data[0] == 0) {
  ------------------
  |  Branch (736:17): [True: 0, False: 5]
  ------------------
  737|      0|                length--;
  738|      0|            }
  739|       |            /* convert keysize to bits for slot lookup */
  740|      5|            length *= 8;
  741|      5|        }
  742|     40|        slot = PK11_GetBestSlotWithAttributes(mech.mechanism,
  743|     40|                                              CKF_VERIFY, length, wincx);
  ------------------
  |  | 1358|     40|#define CKF_VERIFY 0x00002000
  ------------------
  744|     40|        if (slot == NULL) {
  ------------------
  |  Branch (744:13): [True: 1, False: 39]
  ------------------
  745|      1|            PORT_SetError(SEC_ERROR_NO_MODULE);
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
  746|      1|            return SECFailure;
  747|      1|        }
  748|     39|        id = PK11_ImportPublicKey(slot, key, PR_FALSE);
  ------------------
  |  |  438|     39|#define PR_FALSE 0
  ------------------
  749|       |
  750|  4.30k|    } else {
  751|  4.30k|        PK11_ReferenceSlot(slot);
  752|  4.30k|    }
  753|       |
  754|  4.34k|    if (id == CK_INVALID_HANDLE) {
  ------------------
  |  |   78|  4.34k|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (754:9): [True: 39, False: 4.30k]
  ------------------
  755|     39|        PK11_FreeSlot(slot);
  756|     39|        PORT_SetError(SEC_ERROR_BAD_KEY);
  ------------------
  |  |   65|     39|#define PORT_SetError PORT_SetError_Util
  ------------------
  757|     39|        return SECFailure;
  758|     39|    }
  759|       |
  760|  4.30k|    session = pk11_GetNewSession(slot, &owner);
  761|  4.30k|    if (!owner || !(slot->isThreadSafe))
  ------------------
  |  Branch (761:9): [True: 0, False: 4.30k]
  |  Branch (761:19): [True: 0, False: 4.30k]
  ------------------
  762|      0|        PK11_EnterSlotMonitor(slot);
  763|  4.30k|    crv = PK11_GETTAB(slot)->C_VerifyInit(session, &mech, id);
  ------------------
  |  |  102|  4.30k|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  764|  4.30k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  4.30k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (764:9): [True: 1, False: 4.30k]
  ------------------
  765|      1|        if (!owner || !(slot->isThreadSafe))
  ------------------
  |  Branch (765:13): [True: 0, False: 1]
  |  Branch (765:23): [True: 0, False: 1]
  ------------------
  766|      0|            PK11_ExitSlotMonitor(slot);
  767|      1|        pk11_CloseSession(slot, session, owner);
  768|      1|        PK11_FreeSlot(slot);
  769|      1|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
  770|      1|        return SECFailure;
  771|      1|    }
  772|  4.30k|    crv = PK11_GETTAB(slot)->C_Verify(session, hash->data,
  ------------------
  |  |  102|  4.30k|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  773|  4.30k|                                      hash->len, sig->data, sig->len);
  774|  4.30k|    if (!owner || !(slot->isThreadSafe))
  ------------------
  |  Branch (774:9): [True: 0, False: 4.30k]
  |  Branch (774:19): [True: 0, False: 4.30k]
  ------------------
  775|      0|        PK11_ExitSlotMonitor(slot);
  776|  4.30k|    pk11_CloseSession(slot, session, owner);
  777|  4.30k|    PK11_FreeSlot(slot);
  778|  4.30k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  4.30k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (778:9): [True: 4.13k, False: 171]
  ------------------
  779|  4.13k|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|  4.13k|#define PORT_SetError PORT_SetError_Util
  ------------------
  780|  4.13k|        return SECFailure;
  781|  4.13k|    }
  782|    171|    return SECSuccess;
  783|  4.30k|}
pk11_FindObjectByTemplate:
 1866|      2|{
 1867|      2|    CK_OBJECT_HANDLE object;
 1868|      2|    CK_RV crv = CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      2|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
 1869|      2|    CK_ULONG objectCount;
 1870|       |
 1871|       |    /*
 1872|       |     * issue the find
 1873|       |     */
 1874|      2|    PK11_EnterSlotMonitor(slot);
 1875|      2|    if (slot->session != CK_INVALID_HANDLE) {
  ------------------
  |  |   78|      2|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (1875:9): [True: 2, False: 0]
  ------------------
 1876|      2|        crv = PK11_GETTAB(slot)->C_FindObjectsInit(slot->session,
  ------------------
  |  |  102|      2|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1877|      2|                                                   theTemplate, tsize);
 1878|      2|    }
 1879|      2|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1879:9): [True: 0, False: 2]
  ------------------
 1880|      0|        PK11_ExitSlotMonitor(slot);
 1881|      0|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1882|      0|        return CK_INVALID_HANDLE;
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
 1883|      0|    }
 1884|       |
 1885|      2|    crv = PK11_GETTAB(slot)->C_FindObjects(slot->session, &object, 1, &objectCount);
  ------------------
  |  |  102|      2|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1886|      2|    PK11_GETTAB(slot)->C_FindObjectsFinal(slot->session);
  ------------------
  |  |  102|      2|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1887|      2|    PK11_ExitSlotMonitor(slot);
 1888|      2|    if ((crv != CKR_OK) || (objectCount < 1)) {
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1888:9): [True: 0, False: 2]
  |  Branch (1888:28): [True: 2, False: 0]
  ------------------
 1889|       |        /* shouldn't use SSL_ERROR... here */
 1890|      2|        PORT_SetError(crv != CKR_OK ? PK11_MapError(crv) : SSL_ERROR_NO_CERTIFICATE);
  ------------------
  |  |   65|      2|#define PORT_SetError PORT_SetError_Util
  ------------------
                      PORT_SetError(crv != CKR_OK ? PK11_MapError(crv) : SSL_ERROR_NO_CERTIFICATE);
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1890:23): [True: 0, False: 2]
  ------------------
 1891|      2|        return CK_INVALID_HANDLE;
  ------------------
  |  |   78|      2|#define CK_INVALID_HANDLE 0
  ------------------
 1892|      2|    }
 1893|       |
 1894|       |    /* blow up if the PKCS #11 module returns us and invalid object handle */
 1895|      0|    PORT_Assert(object != CK_INVALID_HANDLE);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1896|      0|    return object;
 1897|      2|}
pk11_FindObjectsByTemplate:
 1905|     20|{
 1906|     20|    CK_OBJECT_HANDLE *objID = NULL;
 1907|     20|    CK_ULONG returned_count = 0;
 1908|     20|    PRBool owner = PR_TRUE;
  ------------------
  |  |  437|     20|#define PR_TRUE 1
  ------------------
 1909|     20|    CK_SESSION_HANDLE session;
 1910|     20|    PRBool haslock = PR_FALSE;
  ------------------
  |  |  438|     20|#define PR_FALSE 0
  ------------------
 1911|     20|    CK_RV crv = CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|     20|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
 1912|       |
 1913|     20|    session = pk11_GetNewSession(slot, &owner);
 1914|     20|    haslock = (!owner || !(slot->isThreadSafe));
  ------------------
  |  Branch (1914:16): [True: 0, False: 20]
  |  Branch (1914:26): [True: 0, False: 20]
  ------------------
 1915|     20|    if (haslock) {
  ------------------
  |  Branch (1915:9): [True: 0, False: 20]
  ------------------
 1916|      0|        PK11_EnterSlotMonitor(slot);
 1917|      0|    }
 1918|     20|    if (session != CK_INVALID_HANDLE) {
  ------------------
  |  |   78|     20|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (1918:9): [True: 20, False: 0]
  ------------------
 1919|     20|        crv = PK11_GETTAB(slot)->C_FindObjectsInit(session,
  ------------------
  |  |  102|     20|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1920|     20|                                                   findTemplate, templCount);
 1921|     20|    }
 1922|     20|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|     20|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1922:9): [True: 0, False: 20]
  ------------------
 1923|      0|        if (haslock)
  ------------------
  |  Branch (1923:13): [True: 0, False: 0]
  ------------------
 1924|      0|            PK11_ExitSlotMonitor(slot);
 1925|      0|        pk11_CloseSession(slot, session, owner);
 1926|      0|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1927|      0|        *object_count = -1;
 1928|      0|        return NULL;
 1929|      0|    }
 1930|       |
 1931|       |    /*
 1932|       |     * collect all the Matching Objects
 1933|       |     */
 1934|     20|    do {
 1935|     20|        CK_OBJECT_HANDLE *oldObjID = objID;
 1936|       |
 1937|     20|        if (objID == NULL) {
  ------------------
  |  Branch (1937:13): [True: 20, False: 0]
  ------------------
 1938|     20|            objID = (CK_OBJECT_HANDLE *)PORT_Alloc(sizeof(CK_OBJECT_HANDLE) *
  ------------------
  |  |   52|     20|#define PORT_Alloc PORT_Alloc_Util
  ------------------
 1939|     20|                                                   (*object_count + PK11_SEARCH_CHUNKSIZE));
  ------------------
  |  |   23|     20|#define PK11_SEARCH_CHUNKSIZE 10
  ------------------
 1940|     20|        } else {
 1941|      0|            objID = (CK_OBJECT_HANDLE *)PORT_Realloc(objID,
  ------------------
  |  |   64|      0|#define PORT_Realloc PORT_Realloc_Util
  ------------------
 1942|      0|                                                     sizeof(CK_OBJECT_HANDLE) * (*object_count + PK11_SEARCH_CHUNKSIZE));
  ------------------
  |  |   23|      0|#define PK11_SEARCH_CHUNKSIZE 10
  ------------------
 1943|      0|        }
 1944|       |
 1945|     20|        if (objID == NULL) {
  ------------------
  |  Branch (1945:13): [True: 0, False: 20]
  ------------------
 1946|      0|            if (oldObjID)
  ------------------
  |  Branch (1946:17): [True: 0, False: 0]
  ------------------
 1947|      0|                PORT_Free(oldObjID);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1948|      0|            break;
 1949|      0|        }
 1950|     20|        crv = PK11_GETTAB(slot)->C_FindObjects(session,
  ------------------
  |  |  102|     20|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1951|     20|                                               &objID[*object_count], PK11_SEARCH_CHUNKSIZE, &returned_count);
  ------------------
  |  |   23|     20|#define PK11_SEARCH_CHUNKSIZE 10
  ------------------
 1952|     20|        if (crv != CKR_OK) {
  ------------------
  |  | 1388|     20|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1952:13): [True: 0, False: 20]
  ------------------
 1953|      0|            PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1954|      0|            PORT_Free(objID);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1955|      0|            objID = NULL;
 1956|      0|            break;
 1957|      0|        }
 1958|     20|        *object_count += returned_count;
 1959|     20|    } while (returned_count == PK11_SEARCH_CHUNKSIZE);
  ------------------
  |  |   23|     20|#define PK11_SEARCH_CHUNKSIZE 10
  ------------------
  |  Branch (1959:14): [True: 0, False: 20]
  ------------------
 1960|       |
 1961|     20|    PK11_GETTAB(slot)->C_FindObjectsFinal(session);
  ------------------
  |  |  102|     20|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1962|     20|    if (haslock) {
  ------------------
  |  Branch (1962:9): [True: 0, False: 20]
  ------------------
 1963|      0|        PK11_ExitSlotMonitor(slot);
 1964|      0|    }
 1965|     20|    pk11_CloseSession(slot, session, owner);
 1966|       |
 1967|     20|    if (objID && (*object_count == 0)) {
  ------------------
  |  Branch (1967:9): [True: 20, False: 0]
  |  Branch (1967:18): [True: 20, False: 0]
  ------------------
 1968|     20|        PORT_Free(objID);
  ------------------
  |  |   60|     20|#define PORT_Free PORT_Free_Util
  ------------------
 1969|     20|        return NULL;
 1970|     20|    }
 1971|      0|    if (objID == NULL)
  ------------------
  |  Branch (1971:9): [True: 0, False: 0]
  ------------------
 1972|      0|        *object_count = -1;
 1973|      0|    return objID;
 1974|     20|}
PK11_TraverseSlot:
 2163|     18|{
 2164|     18|    int i;
 2165|     18|    CK_OBJECT_HANDLE *objID = NULL;
 2166|     18|    int object_count = 0;
 2167|     18|    pk11TraverseSlot *slotcb = (pk11TraverseSlot *)arg;
 2168|       |
 2169|     18|    objID = pk11_FindObjectsByTemplate(slot, slotcb->findTemplate,
 2170|     18|                                       slotcb->templateCount, &object_count);
 2171|       |
 2172|       |    /*Actually this isn't a failure... there just were no objs to be found*/
 2173|     18|    if (object_count == 0) {
  ------------------
  |  Branch (2173:9): [True: 18, False: 0]
  ------------------
 2174|     18|        return SECSuccess;
 2175|     18|    }
 2176|       |
 2177|      0|    if (objID == NULL) {
  ------------------
  |  Branch (2177:9): [True: 0, False: 0]
  ------------------
 2178|      0|        return SECFailure;
 2179|      0|    }
 2180|       |
 2181|      0|    for (i = 0; i < object_count; i++) {
  ------------------
  |  Branch (2181:17): [True: 0, False: 0]
  ------------------
 2182|      0|        (*slotcb->callback)(slot, objID[i], slotcb->callbackArg);
 2183|      0|    }
 2184|      0|    PORT_Free(objID);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 2185|      0|    return SECSuccess;
 2186|      0|}
pk11_TraverseAllSlots:
 2194|      9|{
 2195|      9|    PK11SlotList *list;
 2196|      9|    PK11SlotListElement *le;
 2197|      9|    SECStatus rv;
 2198|       |
 2199|       |    /* get them all! */
 2200|      9|    list = PK11_GetAllTokens(CKM_INVALID_MECHANISM, PR_FALSE, PR_FALSE, wincx);
  ------------------
  |  |  155|      9|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
                  list = PK11_GetAllTokens(CKM_INVALID_MECHANISM, PR_FALSE, PR_FALSE, wincx);
  ------------------
  |  |  438|      9|#define PR_FALSE 0
  ------------------
                  list = PK11_GetAllTokens(CKM_INVALID_MECHANISM, PR_FALSE, PR_FALSE, wincx);
  ------------------
  |  |  438|      9|#define PR_FALSE 0
  ------------------
 2201|      9|    if (list == NULL)
  ------------------
  |  Branch (2201:9): [True: 0, False: 9]
  ------------------
 2202|      0|        return SECFailure;
 2203|       |
 2204|       |    /* look at each slot and authenticate as necessary */
 2205|     27|    for (le = list->head; le; le = le->next) {
  ------------------
  |  Branch (2205:27): [True: 18, False: 9]
  ------------------
 2206|     18|        if (forceLogin) {
  ------------------
  |  Branch (2206:13): [True: 0, False: 18]
  ------------------
 2207|      0|            rv = pk11_AuthenticateUnfriendly(le->slot, PR_FALSE, wincx);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 2208|      0|            if (rv != SECSuccess) {
  ------------------
  |  Branch (2208:17): [True: 0, False: 0]
  ------------------
 2209|      0|                continue;
 2210|      0|            }
 2211|      0|        }
 2212|     18|        if (callback) {
  ------------------
  |  Branch (2212:13): [True: 18, False: 0]
  ------------------
 2213|     18|            (*callback)(le->slot, arg);
 2214|     18|        }
 2215|     18|    }
 2216|       |
 2217|      9|    PK11_FreeSlotList(list);
 2218|       |
 2219|      9|    return SECSuccess;
 2220|      9|}

SECMOD_CreateModuleEx:
 1154|      2|{
 1155|      2|    SECMODModule *mod;
 1156|      2|    SECStatus rv;
 1157|      2|    char *slotParams, *ciphers;
 1158|      2|    PRBool printPolicyFeedback = NSSUTIL_ArgHasFlag("flags", "printPolicyFeedback", nss);
 1159|      2|    PRUint32 policyCheckFlags = secmod_parsePolicyCheckFlags(nss);
 1160|       |
 1161|      2|    rv = secmod_parseCryptoPolicy(config, printPolicyFeedback, policyCheckFlags);
 1162|       |
 1163|       |    /* do not load the module if policy parsing fails */
 1164|      2|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1164:9): [True: 0, False: 2]
  ------------------
 1165|      0|        if (printPolicyFeedback) {
  ------------------
  |  Branch (1165:13): [True: 0, False: 0]
  ------------------
 1166|      0|            PR_SetEnv("NSS_POLICY_FAIL=1");
 1167|      0|            fprintf(stderr, "NSS-POLICY-FAIL: policy config parsing failed, not loading module %s\n", moduleName);
 1168|      0|        }
 1169|      0|        return NULL;
 1170|      0|    }
 1171|       |
 1172|      2|    mod = secmod_NewModule();
 1173|      2|    if (mod == NULL)
  ------------------
  |  Branch (1173:9): [True: 0, False: 2]
  ------------------
 1174|      0|        return NULL;
 1175|       |
 1176|      2|    mod->commonName = PORT_ArenaStrdup(mod->arena, moduleName ? moduleName : "");
  ------------------
  |  |   57|      2|#define PORT_ArenaStrdup PORT_ArenaStrdup_Util
  ------------------
  |  Branch (1176:52): [True: 2, False: 0]
  ------------------
 1177|      2|    if (library) {
  ------------------
  |  Branch (1177:9): [True: 0, False: 2]
  ------------------
 1178|      0|        mod->dllName = PORT_ArenaStrdup(mod->arena, library);
  ------------------
  |  |   57|      0|#define PORT_ArenaStrdup PORT_ArenaStrdup_Util
  ------------------
 1179|      0|    }
 1180|       |    /* new field */
 1181|      2|    if (parameters) {
  ------------------
  |  Branch (1181:9): [True: 2, False: 0]
  ------------------
 1182|      2|        mod->libraryParams = PORT_ArenaStrdup(mod->arena, parameters);
  ------------------
  |  |   57|      2|#define PORT_ArenaStrdup PORT_ArenaStrdup_Util
  ------------------
 1183|      2|    }
 1184|       |
 1185|      2|    mod->internal = NSSUTIL_ArgHasFlag("flags", "internal", nss);
 1186|      2|    mod->isFIPS = NSSUTIL_ArgHasFlag("flags", "FIPS", nss);
 1187|       |    /* if the system FIPS mode is enabled, force FIPS to be on */
 1188|      2|    if (SECMOD_GetSystemFIPSEnabled()) {
  ------------------
  |  Branch (1188:9): [True: 0, False: 2]
  ------------------
 1189|      0|        mod->isFIPS = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1190|      0|    }
 1191|      2|    mod->isCritical = NSSUTIL_ArgHasFlag("flags", "critical", nss);
 1192|      2|    slotParams = NSSUTIL_ArgGetParamValue("slotParams", nss);
 1193|      2|    mod->slotInfo = NSSUTIL_ArgParseSlotInfo(mod->arena, slotParams,
 1194|      2|                                             &mod->slotInfoCount);
 1195|      2|    if (slotParams)
  ------------------
  |  Branch (1195:9): [True: 1, False: 1]
  ------------------
 1196|      1|        PORT_Free(slotParams);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
 1197|       |    /* new field */
 1198|      2|    mod->trustOrder = NSSUTIL_ArgReadLong("trustOrder", nss,
 1199|      2|                                          NSSUTIL_DEFAULT_TRUST_ORDER, NULL);
  ------------------
  |  |   49|      2|#define NSSUTIL_DEFAULT_TRUST_ORDER 50
  ------------------
 1200|       |    /* new field */
 1201|      2|    mod->cipherOrder = NSSUTIL_ArgReadLong("cipherOrder", nss,
 1202|      2|                                           NSSUTIL_DEFAULT_CIPHER_ORDER, NULL);
  ------------------
  |  |   48|      2|#define NSSUTIL_DEFAULT_CIPHER_ORDER 0
  ------------------
 1203|       |    /* new field */
 1204|      2|    mod->isModuleDB = NSSUTIL_ArgHasFlag("flags", "moduleDB", nss);
 1205|      2|    mod->moduleDBOnly = NSSUTIL_ArgHasFlag("flags", "moduleDBOnly", nss);
 1206|      2|    if (mod->moduleDBOnly)
  ------------------
  |  Branch (1206:9): [True: 1, False: 1]
  ------------------
 1207|      1|        mod->isModuleDB = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
 1208|       |
 1209|       |    /* we need more bits, but we also want to preserve binary compatibility
 1210|       |     * so we overload the isModuleDB PRBool with additional flags.
 1211|       |     * These flags are only valid if mod->isModuleDB is already set.
 1212|       |     * NOTE: this depends on the fact that PRBool is at least a char on
 1213|       |     * all platforms. These flags are only valid if moduleDB is set, so
 1214|       |     * code checking if (mod->isModuleDB) will continue to work correctly. */
 1215|      2|    if (mod->isModuleDB) {
  ------------------
  |  Branch (1215:9): [True: 1, False: 1]
  ------------------
 1216|      1|        char flags = SECMOD_FLAG_MODULE_DB_IS_MODULE_DB;
  ------------------
  |  |  108|      1|#define SECMOD_FLAG_MODULE_DB_IS_MODULE_DB 0x01 /* must be set if any of the \
  ------------------
 1217|      1|        if (NSSUTIL_ArgHasFlag("flags", "skipFirst", nss)) {
  ------------------
  |  Branch (1217:13): [True: 0, False: 1]
  ------------------
 1218|      0|            flags |= SECMOD_FLAG_MODULE_DB_SKIP_FIRST;
  ------------------
  |  |  110|      0|#define SECMOD_FLAG_MODULE_DB_SKIP_FIRST 0x02
  ------------------
 1219|      0|        }
 1220|      1|        if (NSSUTIL_ArgHasFlag("flags", "defaultModDB", nss)) {
  ------------------
  |  Branch (1220:13): [True: 1, False: 0]
  ------------------
 1221|      1|            flags |= SECMOD_FLAG_MODULE_DB_DEFAULT_MODDB;
  ------------------
  |  |  111|      1|#define SECMOD_FLAG_MODULE_DB_DEFAULT_MODDB 0x04
  ------------------
 1222|      1|        }
 1223|      1|        if (NSSUTIL_ArgHasFlag("flags", "policyOnly", nss)) {
  ------------------
  |  Branch (1223:13): [True: 0, False: 1]
  ------------------
 1224|      0|            flags |= SECMOD_FLAG_MODULE_DB_POLICY_ONLY;
  ------------------
  |  |  112|      0|#define SECMOD_FLAG_MODULE_DB_POLICY_ONLY 0x08
  ------------------
 1225|      0|        }
 1226|       |        /* additional moduleDB flags could be added here in the future */
 1227|      1|        mod->isModuleDB = (PRBool)flags;
 1228|      1|    }
 1229|       |
 1230|      2|    if (mod->internal) {
  ------------------
  |  Branch (1230:9): [True: 2, False: 0]
  ------------------
 1231|      2|        char flags = SECMOD_FLAG_INTERNAL_IS_INTERNAL;
  ------------------
  |  |  126|      2|#define SECMOD_FLAG_INTERNAL_IS_INTERNAL 0x01 /* must be set if any of \
  ------------------
 1232|       |
 1233|      2|        if (NSSUTIL_ArgHasFlag("flags", "internalKeySlot", nss)) {
  ------------------
  |  Branch (1233:13): [True: 1, False: 1]
  ------------------
 1234|      1|            flags |= SECMOD_FLAG_INTERNAL_KEY_SLOT;
  ------------------
  |  |  128|      1|#define SECMOD_FLAG_INTERNAL_KEY_SLOT 0x02
  ------------------
 1235|      1|        }
 1236|      2|        mod->internal = (PRBool)flags;
 1237|      2|    }
 1238|       |
 1239|      2|    ciphers = NSSUTIL_ArgGetParamValue("ciphers", nss);
 1240|      2|    NSSUTIL_ArgParseCipherFlags(&mod->ssl[0], ciphers);
 1241|      2|    if (ciphers)
  ------------------
  |  Branch (1241:9): [True: 0, False: 2]
  ------------------
 1242|      0|        PORT_Free(ciphers);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1243|       |
 1244|      2|    secmod_PrivateModuleCount++;
 1245|       |
 1246|      2|    return mod;
 1247|      2|}
SECMOD_GetSkipFirstFlag:
 1251|      1|{
 1252|      1|    char flags = (char)mod->isModuleDB;
 1253|       |
 1254|      1|    return (flags & SECMOD_FLAG_MODULE_DB_SKIP_FIRST) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  110|      1|#define SECMOD_FLAG_MODULE_DB_SKIP_FIRST 0x02
  ------------------
                  return (flags & SECMOD_FLAG_MODULE_DB_SKIP_FIRST) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
                  return (flags & SECMOD_FLAG_MODULE_DB_SKIP_FIRST) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  |  Branch (1254:12): [True: 0, False: 1]
  ------------------
 1255|      1|}
secmod_PolicyOnly:
 1267|      2|{
 1268|      2|    char flags = (char)mod->isModuleDB;
 1269|       |
 1270|      2|    return (flags & SECMOD_FLAG_MODULE_DB_POLICY_ONLY) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  112|      2|#define SECMOD_FLAG_MODULE_DB_POLICY_ONLY 0x08
  ------------------
                  return (flags & SECMOD_FLAG_MODULE_DB_POLICY_ONLY) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
                  return (flags & SECMOD_FLAG_MODULE_DB_POLICY_ONLY) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  |  Branch (1270:12): [True: 0, False: 2]
  ------------------
 1271|      2|}
secmod_IsInternalKeySlot:
 1275|      3|{
 1276|      3|    char flags = (char)mod->internal;
 1277|       |
 1278|      3|    return (flags & SECMOD_FLAG_INTERNAL_KEY_SLOT) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  128|      3|#define SECMOD_FLAG_INTERNAL_KEY_SLOT 0x02
  ------------------
                  return (flags & SECMOD_FLAG_INTERNAL_KEY_SLOT) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|      3|#define PR_TRUE 1
  ------------------
                  return (flags & SECMOD_FLAG_INTERNAL_KEY_SLOT) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  |  Branch (1278:12): [True: 3, False: 0]
  ------------------
 1279|      3|}
SECMOD_GetModuleSpecList:
 2095|      1|{
 2096|      1|    SECMODModuleDBFunc func = (SECMODModuleDBFunc)module->moduleDBFunc;
 2097|      1|    if (func) {
  ------------------
  |  Branch (2097:9): [True: 1, False: 0]
  ------------------
 2098|      1|        return (*func)(SECMOD_MODULE_DB_FUNCTION_FIND,
  ------------------
  |  |  557|      1|#define SECMOD_MODULE_DB_FUNCTION_FIND 0
  ------------------
 2099|      1|                       module->libraryParams, NULL);
 2100|      1|    }
 2101|      0|    return NULL;
 2102|      1|}
SECMOD_FreeModuleSpecList:
 2150|      1|{
 2151|      1|    SECMODModuleDBFunc func = (SECMODModuleDBFunc)module->moduleDBFunc;
 2152|      1|    char **retString;
 2153|      1|    if (func) {
  ------------------
  |  Branch (2153:9): [True: 1, False: 0]
  ------------------
 2154|      1|        retString = (*func)(SECMOD_MODULE_DB_FUNCTION_RELEASE,
  ------------------
  |  |  560|      1|#define SECMOD_MODULE_DB_FUNCTION_RELEASE 3
  ------------------
 2155|      1|                            module->libraryParams, moduleSpecList);
 2156|      1|        if (retString != NULL)
  ------------------
  |  Branch (2156:13): [True: 1, False: 0]
  ------------------
 2157|      1|            return SECSuccess;
 2158|      1|    }
 2159|      0|    return SECFailure;
 2160|      1|}
SECMOD_LoadModule:
 2167|      2|{
 2168|      2|    char *library = NULL, *moduleName = NULL, *parameters = NULL, *nss = NULL;
 2169|      2|    char *config = NULL;
 2170|      2|    SECStatus status;
 2171|      2|    SECMODModule *module = NULL;
 2172|      2|    SECMODModule *oldModule = NULL;
 2173|      2|    SECStatus rv;
 2174|      2|    PRBool forwardPolicyFeedback = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 2175|      2|    PRUint32 forwardPolicyCheckFlags;
 2176|       |
 2177|       |    /* initialize the underlying module structures */
 2178|      2|    SECMOD_Init();
 2179|       |
 2180|      2|    status = NSSUTIL_ArgParseModuleSpecEx(modulespec, &library, &moduleName,
 2181|      2|                                          &parameters, &nss,
 2182|      2|                                          &config);
 2183|      2|    if (status != SECSuccess) {
  ------------------
  |  Branch (2183:9): [True: 0, False: 2]
  ------------------
 2184|      0|        goto loser;
 2185|      0|    }
 2186|       |
 2187|      2|    module = SECMOD_CreateModuleEx(library, moduleName, parameters, nss, config);
 2188|      2|    forwardPolicyFeedback = NSSUTIL_ArgHasFlag("flags", "printPolicyFeedback", nss);
 2189|      2|    forwardPolicyCheckFlags = secmod_parsePolicyCheckFlags(nss);
 2190|       |
 2191|      2|    if (library)
  ------------------
  |  Branch (2191:9): [True: 0, False: 2]
  ------------------
 2192|      0|        PORT_Free(library);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 2193|      2|    if (moduleName)
  ------------------
  |  Branch (2193:9): [True: 2, False: 0]
  ------------------
 2194|      2|        PORT_Free(moduleName);
  ------------------
  |  |   60|      2|#define PORT_Free PORT_Free_Util
  ------------------
 2195|      2|    if (parameters)
  ------------------
  |  Branch (2195:9): [True: 2, False: 0]
  ------------------
 2196|      2|        PORT_Free(parameters);
  ------------------
  |  |   60|      2|#define PORT_Free PORT_Free_Util
  ------------------
 2197|      2|    if (nss)
  ------------------
  |  Branch (2197:9): [True: 2, False: 0]
  ------------------
 2198|      2|        PORT_Free(nss);
  ------------------
  |  |   60|      2|#define PORT_Free PORT_Free_Util
  ------------------
 2199|      2|    if (config)
  ------------------
  |  Branch (2199:9): [True: 0, False: 2]
  ------------------
 2200|      0|        PORT_Free(config);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 2201|      2|    if (!module) {
  ------------------
  |  Branch (2201:9): [True: 0, False: 2]
  ------------------
 2202|      0|        goto loser;
 2203|      0|    }
 2204|       |
 2205|       |    /* a policy only stanza doesn't actually get 'loaded'. policy has already
 2206|       |     * been parsed as a side effect of the CreateModuleEx call */
 2207|      2|    if (secmod_PolicyOnly(module)) {
  ------------------
  |  Branch (2207:9): [True: 0, False: 2]
  ------------------
 2208|      0|        return module;
 2209|      0|    }
 2210|      2|    if (parent) {
  ------------------
  |  Branch (2210:9): [True: 1, False: 1]
  ------------------
 2211|      1|        module->parent = SECMOD_ReferenceModule(parent);
 2212|      1|        if (module->internal && secmod_IsInternalKeySlot(parent)) {
  ------------------
  |  Branch (2212:13): [True: 1, False: 0]
  |  Branch (2212:33): [True: 1, False: 0]
  ------------------
 2213|      1|            module->internal = parent->internal;
 2214|      1|        }
 2215|      1|    }
 2216|       |
 2217|       |    /* load it */
 2218|      2|    rv = secmod_LoadPKCS11Module(module, &oldModule);
 2219|      2|    if (rv != SECSuccess) {
  ------------------
  |  Branch (2219:9): [True: 0, False: 2]
  ------------------
 2220|      0|        goto loser;
 2221|      0|    }
 2222|       |
 2223|       |    /* if we just reload an old module, no need to add it to any lists.
 2224|       |     * we simple release all our references */
 2225|      2|    if (oldModule) {
  ------------------
  |  Branch (2225:9): [True: 0, False: 2]
  ------------------
 2226|       |        /* This module already exists, don't link it anywhere. This
 2227|       |         * will probably destroy this module */
 2228|      0|        SECMOD_DestroyModule(module);
 2229|      0|        return oldModule;
 2230|      0|    }
 2231|       |
 2232|      2|    if (recurse && module->isModuleDB) {
  ------------------
  |  Branch (2232:9): [True: 2, False: 0]
  |  Branch (2232:20): [True: 1, False: 1]
  ------------------
 2233|      1|        char **moduleSpecList;
 2234|      1|        PORT_SetError(0);
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
 2235|       |
 2236|      1|        moduleSpecList = SECMOD_GetModuleSpecList(module);
 2237|      1|        if (moduleSpecList) {
  ------------------
  |  Branch (2237:13): [True: 1, False: 0]
  ------------------
 2238|      1|            char **index;
 2239|       |
 2240|      1|            index = moduleSpecList;
 2241|      1|            if (*index && SECMOD_GetSkipFirstFlag(module)) {
  ------------------
  |  Branch (2241:17): [True: 1, False: 0]
  |  Branch (2241:27): [True: 0, False: 1]
  ------------------
 2242|      0|                index++;
 2243|      0|            }
 2244|       |
 2245|      2|            for (; *index; index++) {
  ------------------
  |  Branch (2245:20): [True: 1, False: 1]
  ------------------
 2246|      1|                SECMODModule *child;
 2247|      1|                if (0 == PORT_Strcmp(*index, modulespec)) {
  ------------------
  |  |  188|      1|#define PORT_Strcmp strcmp
  ------------------
  |  Branch (2247:21): [True: 0, False: 1]
  ------------------
 2248|       |                    /* avoid trivial infinite recursion */
 2249|      0|                    PORT_SetError(SEC_ERROR_NO_MODULE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2250|      0|                    rv = SECFailure;
 2251|      0|                    break;
 2252|      0|                }
 2253|      1|                if (!forwardPolicyFeedback) {
  ------------------
  |  Branch (2253:21): [True: 1, False: 0]
  ------------------
 2254|      1|                    child = SECMOD_LoadModule(*index, module, PR_TRUE);
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
 2255|      1|                } else {
 2256|       |                    /* Add printPolicyFeedback to the nss flags */
 2257|      0|                    char *specWithForwards =
 2258|      0|                        NSSUTIL_AddNSSFlagToModuleSpec(*index, "printPolicyFeedback");
 2259|      0|                    char *tmp;
 2260|      0|                    if (forwardPolicyCheckFlags & SECMOD_FLAG_POLICY_CHECK_IDENTIFIER) {
  ------------------
  |  |  131|      0|#define SECMOD_FLAG_POLICY_CHECK_IDENTIFIER 0x01
  ------------------
  |  Branch (2260:25): [True: 0, False: 0]
  ------------------
 2261|      0|                        tmp = NSSUTIL_AddNSSFlagToModuleSpec(specWithForwards, "policyCheckIdentifier");
 2262|      0|                        PORT_Free(specWithForwards);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 2263|      0|                        specWithForwards = tmp;
 2264|      0|                    }
 2265|      0|                    if (forwardPolicyCheckFlags & SECMOD_FLAG_POLICY_CHECK_VALUE) {
  ------------------
  |  |  132|      0|#define SECMOD_FLAG_POLICY_CHECK_VALUE 0x02
  ------------------
  |  Branch (2265:25): [True: 0, False: 0]
  ------------------
 2266|      0|                        tmp = NSSUTIL_AddNSSFlagToModuleSpec(specWithForwards, "policyCheckValue");
 2267|      0|                        PORT_Free(specWithForwards);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 2268|      0|                        specWithForwards = tmp;
 2269|      0|                    }
 2270|      0|                    child = SECMOD_LoadModule(specWithForwards, module, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 2271|      0|                    PORT_Free(specWithForwards);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 2272|      0|                }
 2273|      1|                if (!child)
  ------------------
  |  Branch (2273:21): [True: 0, False: 1]
  ------------------
 2274|      0|                    break;
 2275|      1|                if (child->isCritical && !child->loaded) {
  ------------------
  |  Branch (2275:21): [True: 1, False: 0]
  |  Branch (2275:42): [True: 0, False: 1]
  ------------------
 2276|      0|                    int err = PORT_GetError();
  ------------------
  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  ------------------
 2277|      0|                    if (!err)
  ------------------
  |  Branch (2277:25): [True: 0, False: 0]
  ------------------
 2278|      0|                        err = SEC_ERROR_NO_MODULE;
 2279|      0|                    SECMOD_DestroyModule(child);
 2280|      0|                    PORT_SetError(err);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2281|      0|                    rv = SECFailure;
 2282|      0|                    break;
 2283|      0|                }
 2284|      1|                SECMOD_DestroyModule(child);
 2285|      1|            }
 2286|      1|            SECMOD_FreeModuleSpecList(module, moduleSpecList);
 2287|      1|        } else {
 2288|      0|            if (!PORT_GetError())
  ------------------
  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  ------------------
  |  Branch (2288:17): [True: 0, False: 0]
  ------------------
 2289|      0|                PORT_SetError(SEC_ERROR_NO_MODULE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2290|      0|            rv = SECFailure;
 2291|      0|        }
 2292|      1|    }
 2293|       |
 2294|      2|    if (rv != SECSuccess) {
  ------------------
  |  Branch (2294:9): [True: 0, False: 2]
  ------------------
 2295|      0|        goto loser;
 2296|      0|    }
 2297|       |
 2298|       |    /* inherit the reference */
 2299|      2|    if (!module->moduleDBOnly) {
  ------------------
  |  Branch (2299:9): [True: 1, False: 1]
  ------------------
 2300|      1|        SECMOD_AddModuleToList(module);
 2301|      1|    } else {
 2302|      1|        SECMOD_AddModuleToDBOnlyList(module);
 2303|      1|    }
 2304|       |
 2305|       |    /* handle any additional work here */
 2306|      2|    return module;
 2307|       |
 2308|      0|loser:
 2309|      0|    if (module) {
  ------------------
  |  Branch (2309:9): [True: 0, False: 0]
  ------------------
 2310|      0|        if (module->loaded) {
  ------------------
  |  Branch (2310:13): [True: 0, False: 0]
  ------------------
 2311|      0|            SECMOD_UnloadModule(module);
 2312|      0|        }
 2313|      0|        SECMOD_AddModuleToUnloadList(module);
 2314|      0|    }
 2315|      0|    return module;
 2316|      2|}
pk11pars.c:secmod_parsePolicyCheckFlags:
 1133|      4|{
 1134|      4|    PRUint32 policyCheckFlags = 0;
 1135|       |
 1136|      4|    if (NSSUTIL_ArgHasFlag("flags", "policyCheckIdentifier", nss)) {
  ------------------
  |  Branch (1136:9): [True: 0, False: 4]
  ------------------
 1137|      0|        policyCheckFlags |= SECMOD_FLAG_POLICY_CHECK_IDENTIFIER;
  ------------------
  |  |  131|      0|#define SECMOD_FLAG_POLICY_CHECK_IDENTIFIER 0x01
  ------------------
 1138|      0|    }
 1139|       |
 1140|      4|    if (NSSUTIL_ArgHasFlag("flags", "policyCheckValue", nss)) {
  ------------------
  |  Branch (1140:9): [True: 0, False: 4]
  ------------------
 1141|      0|        policyCheckFlags |= SECMOD_FLAG_POLICY_CHECK_VALUE;
  ------------------
  |  |  132|      0|#define SECMOD_FLAG_POLICY_CHECK_VALUE 0x02
  ------------------
 1142|      0|    }
 1143|       |
 1144|      4|    return policyCheckFlags;
 1145|      4|}
pk11pars.c:secmod_parseCryptoPolicy:
 1061|      2|{
 1062|      2|    char *args;
 1063|      2|    SECStatus rv;
 1064|       |
 1065|      2|    if (policyConfig == NULL) {
  ------------------
  |  Branch (1065:9): [True: 2, False: 0]
  ------------------
 1066|      2|        return SECSuccess; /* no policy given */
 1067|      2|    }
 1068|       |    /* make sure we initialize the oid table and set all the default policy
 1069|       |     * values first so we can override them here */
 1070|      0|    rv = SECOID_Init();
 1071|      0|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1071:9): [True: 0, False: 0]
  ------------------
 1072|      0|        return rv;
 1073|      0|    }
 1074|      0|    args = NSSUTIL_ArgGetParamValue("disallow", policyConfig);
 1075|      0|    rv = secmod_applyCryptoPolicy(args, NSS_DISALLOW, printPolicyFeedback,
 1076|      0|                                  policyCheckFlags);
 1077|      0|    if (args)
  ------------------
  |  Branch (1077:9): [True: 0, False: 0]
  ------------------
 1078|      0|        PORT_Free(args);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1079|      0|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1079:9): [True: 0, False: 0]
  ------------------
 1080|      0|        return rv;
 1081|      0|    }
 1082|      0|    args = NSSUTIL_ArgGetParamValue("allow", policyConfig);
 1083|      0|    rv = secmod_applyCryptoPolicy(args, NSS_ALLOW, printPolicyFeedback,
 1084|      0|                                  policyCheckFlags);
 1085|      0|    if (args)
  ------------------
  |  Branch (1085:9): [True: 0, False: 0]
  ------------------
 1086|      0|        PORT_Free(args);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1087|      0|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1087:9): [True: 0, False: 0]
  ------------------
 1088|      0|        return rv;
 1089|      0|    }
 1090|      0|    args = NSSUTIL_ArgGetParamValue("disable", policyConfig);
 1091|      0|    rv = secmod_applyCryptoPolicy(args, NSS_DISABLE, printPolicyFeedback,
 1092|      0|                                  policyCheckFlags);
 1093|      0|    if (args)
  ------------------
  |  Branch (1093:9): [True: 0, False: 0]
  ------------------
 1094|      0|        PORT_Free(args);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1095|      0|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1095:9): [True: 0, False: 0]
  ------------------
 1096|      0|        return rv;
 1097|      0|    }
 1098|      0|    args = NSSUTIL_ArgGetParamValue("enable", policyConfig);
 1099|      0|    rv = secmod_applyCryptoPolicy(args, NSS_ENABLE, printPolicyFeedback,
 1100|      0|                                  policyCheckFlags);
 1101|      0|    if (args)
  ------------------
  |  Branch (1101:9): [True: 0, False: 0]
  ------------------
 1102|      0|        PORT_Free(args);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1103|      0|    if (rv != SECSuccess) {
  ------------------
  |  Branch (1103:9): [True: 0, False: 0]
  ------------------
 1104|      0|        return rv;
 1105|      0|    }
 1106|       |    /* this has to be last. Everything after this will be a noop */
 1107|      0|    if (NSSUTIL_ArgHasFlag("flags", "ssl-lock", policyConfig)) {
  ------------------
  |  Branch (1107:9): [True: 0, False: 0]
  ------------------
 1108|      0|        PRInt32 locks;
 1109|       |        /* don't overwrite other (future) lock flags */
 1110|      0|        rv = NSS_OptionGet(NSS_DEFAULT_LOCKS, &locks);
  ------------------
  |  |  302|      0|#define NSS_DEFAULT_LOCKS 0x00d /* lock default values */
  ------------------
 1111|      0|        if (rv == SECSuccess) {
  ------------------
  |  Branch (1111:13): [True: 0, False: 0]
  ------------------
 1112|      0|            rv = NSS_OptionSet(NSS_DEFAULT_LOCKS, locks | NSS_DEFAULT_SSL_LOCK);
  ------------------
  |  |  302|      0|#define NSS_DEFAULT_LOCKS 0x00d /* lock default values */
  ------------------
                          rv = NSS_OptionSet(NSS_DEFAULT_LOCKS, locks | NSS_DEFAULT_SSL_LOCK);
  ------------------
  |  |  303|      0|#define NSS_DEFAULT_SSL_LOCK 1  /* lock the ssl default values */
  ------------------
 1113|      0|        }
 1114|      0|        if (rv != SECSuccess) {
  ------------------
  |  Branch (1114:13): [True: 0, False: 0]
  ------------------
 1115|      0|            return rv;
 1116|      0|        }
 1117|      0|    }
 1118|      0|    if (NSSUTIL_ArgHasFlag("flags", "policy-lock", policyConfig)) {
  ------------------
  |  Branch (1118:9): [True: 0, False: 0]
  ------------------
 1119|      0|        NSS_LockPolicy();
 1120|      0|    }
 1121|      0|    if (printPolicyFeedback) {
  ------------------
  |  Branch (1121:9): [True: 0, False: 0]
  ------------------
 1122|       |        /* This helps to distinguish configurations that don't contain any
 1123|       |         * policy config= statement. */
 1124|      0|        PR_SetEnv("NSS_POLICY_LOADED=1");
 1125|      0|        fprintf(stderr, "NSS-POLICY-INFO: LOADED-SUCCESSFULLY\n");
 1126|      0|        secmod_sanityCheckCryptoPolicy();
 1127|      0|    }
 1128|      0|    return rv;
 1129|      0|}
pk11pars.c:secmod_NewModule:
   25|      2|{
   26|      2|    SECMODModule *newMod;
   27|      2|    PLArenaPool *arena;
   28|       |
   29|       |    /* create an arena in which dllName and commonName can be
   30|       |     * allocated.
   31|       |     */
   32|      2|    arena = PORT_NewArena(512);
  ------------------
  |  |   63|      2|#define PORT_NewArena PORT_NewArena_Util
  ------------------
   33|      2|    if (arena == NULL) {
  ------------------
  |  Branch (33:9): [True: 0, False: 2]
  ------------------
   34|      0|        return NULL;
   35|      0|    }
   36|       |
   37|      2|    newMod = (SECMODModule *)PORT_ArenaAlloc(arena, sizeof(SECMODModule));
  ------------------
  |  |   53|      2|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
   38|      2|    if (newMod == NULL) {
  ------------------
  |  Branch (38:9): [True: 0, False: 2]
  ------------------
   39|      0|        PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |   61|      0|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
   40|      0|        return NULL;
   41|      0|    }
   42|       |
   43|       |    /*
   44|       |     * initialize of the fields of the module
   45|       |     */
   46|      2|    newMod->arena = arena;
   47|      2|    newMod->internal = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
   48|      2|    newMod->loaded = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
   49|      2|    newMod->isFIPS = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
   50|      2|    newMod->dllName = NULL;
   51|      2|    newMod->commonName = NULL;
   52|      2|    newMod->library = NULL;
   53|      2|    newMod->functionList = NULL;
   54|      2|    newMod->slotCount = 0;
   55|      2|    newMod->slots = NULL;
   56|      2|    newMod->slotInfo = NULL;
   57|      2|    newMod->slotInfoCount = 0;
   58|      2|    newMod->refCount = 1;
   59|      2|    newMod->ssl[0] = 0;
   60|      2|    newMod->ssl[1] = 0;
   61|      2|    newMod->libraryParams = NULL;
   62|      2|    newMod->moduleDBFunc = NULL;
   63|      2|    newMod->parent = NULL;
   64|      2|    newMod->isCritical = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
   65|      2|    newMod->isModuleDB = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
   66|      2|    newMod->moduleDBOnly = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
   67|      2|    newMod->trustOrder = 0;
   68|      2|    newMod->cipherOrder = 0;
   69|      2|    newMod->evControlMask = 0;
   70|      2|    newMod->refLock = PZ_NewLock(nssILockRefLock);
  ------------------
  |  |  243|      2|#define PZ_NewLock(t) PR_NewLock()
  ------------------
   71|      2|    if (newMod->refLock == NULL) {
  ------------------
  |  Branch (71:9): [True: 0, False: 2]
  ------------------
   72|      0|        PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |   61|      0|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
   73|      0|        return NULL;
   74|      0|    }
   75|      2|    return newMod;
   76|      2|}

pk11sdr_Init:
  126|      1|{
  127|      1|    pk11sdrLock = PR_NewLock();
  128|      1|}
pk11sdr_Shutdown:
  132|      1|{
  133|      1|    if (pk11sdrLock) {
  ------------------
  |  Branch (133:9): [True: 1, False: 0]
  ------------------
  134|      1|        PR_DestroyLock(pk11sdrLock);
  135|      1|        pk11sdrLock = NULL;
  136|      1|    }
  137|      1|}

PK11_CleanKeyList:
  114|      2|{
  115|      2|    PK11SymKey *symKey = NULL;
  116|       |
  117|      2|    while (slot->freeSymKeysWithSessionHead) {
  ------------------
  |  Branch (117:12): [True: 0, False: 2]
  ------------------
  118|      0|        symKey = slot->freeSymKeysWithSessionHead;
  119|      0|        slot->freeSymKeysWithSessionHead = symKey->next;
  120|      0|        pk11_CloseSession(slot, symKey->session, symKey->sessionOwner);
  121|      0|        PORT_Free(symKey);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  122|      0|    }
  123|      2|    while (slot->freeSymKeysHead) {
  ------------------
  |  Branch (123:12): [True: 0, False: 2]
  ------------------
  124|      0|        symKey = slot->freeSymKeysHead;
  125|      0|        slot->freeSymKeysHead = symKey->next;
  126|      0|        pk11_CloseSession(slot, symKey->session, symKey->sessionOwner);
  127|      0|        PORT_Free(symKey);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  128|      0|    }
  129|      2|    return;
  130|      2|}

PK11_NewSlotList:
  108|  13.2k|{
  109|  13.2k|    PK11SlotList *list;
  110|       |
  111|  13.2k|    list = (PK11SlotList *)PORT_Alloc(sizeof(PK11SlotList));
  ------------------
  |  |   52|  13.2k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  112|  13.2k|    if (list == NULL)
  ------------------
  |  Branch (112:9): [True: 0, False: 13.2k]
  ------------------
  113|      0|        return NULL;
  114|  13.2k|    list->head = NULL;
  115|  13.2k|    list->tail = NULL;
  116|  13.2k|    list->lock = PZ_NewLock(nssILockList);
  ------------------
  |  |  243|  13.2k|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  117|  13.2k|    if (list->lock == NULL) {
  ------------------
  |  Branch (117:9): [True: 0, False: 13.2k]
  ------------------
  118|      0|        PORT_Free(list);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  119|      0|        return NULL;
  120|      0|    }
  121|       |
  122|  13.2k|    return list;
  123|  13.2k|}
PK11_FreeSlotListElement:
  130|  18.9k|{
  131|  18.9k|    PRBool freeit = PR_FALSE;
  ------------------
  |  |  438|  18.9k|#define PR_FALSE 0
  ------------------
  132|       |
  133|  18.9k|    if (list == NULL || le == NULL) {
  ------------------
  |  Branch (133:9): [True: 0, False: 18.9k]
  |  Branch (133:25): [True: 0, False: 18.9k]
  ------------------
  134|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  135|      0|        return SECFailure;
  136|      0|    }
  137|       |
  138|  18.9k|    PZ_Lock(list->lock);
  ------------------
  |  |  245|  18.9k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  139|  18.9k|    if (le->refCount-- == 1) {
  ------------------
  |  Branch (139:9): [True: 8.84k, False: 10.1k]
  ------------------
  140|  8.84k|        freeit = PR_TRUE;
  ------------------
  |  |  437|  8.84k|#define PR_TRUE 1
  ------------------
  141|  8.84k|    }
  142|  18.9k|    PZ_Unlock(list->lock);
  ------------------
  |  |  246|  18.9k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  143|  18.9k|    if (freeit) {
  ------------------
  |  Branch (143:9): [True: 8.84k, False: 10.1k]
  ------------------
  144|  8.84k|        PK11_FreeSlot(le->slot);
  145|  8.84k|        PORT_Free(le);
  ------------------
  |  |   60|  8.84k|#define PORT_Free PORT_Free_Util
  ------------------
  146|  8.84k|    }
  147|  18.9k|    return SECSuccess;
  148|  18.9k|}
PK11_FreeSlotList:
  174|  13.2k|{
  175|  13.2k|    pk11_FreeSlotListStatic(list);
  176|  13.2k|    PORT_Free(list);
  ------------------
  |  |   60|  13.2k|#define PORT_Free PORT_Free_Util
  ------------------
  177|  13.2k|}
PK11_AddSlotToList:
  188|  8.84k|{
  189|  8.84k|    PK11SlotListElement *le;
  190|  8.84k|    PK11SlotListElement *element;
  191|       |
  192|  8.84k|    le = (PK11SlotListElement *)PORT_Alloc(sizeof(PK11SlotListElement));
  ------------------
  |  |   52|  8.84k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  193|  8.84k|    if (le == NULL)
  ------------------
  |  Branch (193:9): [True: 0, False: 8.84k]
  ------------------
  194|      0|        return SECFailure;
  195|       |
  196|  8.84k|    le->slot = PK11_ReferenceSlot(slot);
  197|  8.84k|    le->prev = NULL;
  198|  8.84k|    le->refCount = 1;
  199|  8.84k|    PZ_Lock(list->lock);
  ------------------
  |  |  245|  8.84k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  200|  8.84k|    element = list->head;
  201|       |    /* Insertion sort, with higher cipherOrders are sorted first in the list */
  202|  8.84k|    while (element && sorted && (element->slot->module->cipherOrder > le->slot->module->cipherOrder)) {
  ------------------
  |  Branch (202:12): [True: 4.41k, False: 4.43k]
  |  Branch (202:23): [True: 4.41k, False: 1]
  |  Branch (202:33): [True: 0, False: 4.41k]
  ------------------
  203|      0|        element = element->next;
  204|      0|    }
  205|  8.84k|    if (element) {
  ------------------
  |  Branch (205:9): [True: 4.41k, False: 4.43k]
  ------------------
  206|  4.41k|        le->prev = element->prev;
  207|  4.41k|        element->prev = le;
  208|  4.41k|        le->next = element;
  209|  4.43k|    } else {
  210|  4.43k|        le->prev = list->tail;
  211|  4.43k|        le->next = NULL;
  212|  4.43k|        list->tail = le;
  213|  4.43k|    }
  214|  8.84k|    if (le->prev)
  ------------------
  |  Branch (214:9): [True: 0, False: 8.84k]
  ------------------
  215|      0|        le->prev->next = le;
  216|  8.84k|    if (list->head == element)
  ------------------
  |  Branch (216:9): [True: 8.84k, False: 0]
  ------------------
  217|  8.84k|        list->head = le;
  218|  8.84k|    PZ_Unlock(list->lock);
  ------------------
  |  |  246|  8.84k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  219|       |
  220|  8.84k|    return SECSuccess;
  221|  8.84k|}
PK11_DeleteSlotFromList:
  228|     18|{
  229|     18|    PZ_Lock(list->lock);
  ------------------
  |  |  245|     18|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  230|     18|    if (le->prev)
  ------------------
  |  Branch (230:9): [True: 0, False: 18]
  ------------------
  231|      0|        le->prev->next = le->next;
  232|     18|    else
  233|     18|        list->head = le->next;
  234|     18|    if (le->next)
  ------------------
  |  Branch (234:9): [True: 1, False: 17]
  ------------------
  235|      1|        le->next->prev = le->prev;
  236|     17|    else
  237|     17|        list->tail = le->prev;
  238|     18|    le->next = le->prev = NULL;
  239|     18|    PZ_Unlock(list->lock);
  ------------------
  |  |  246|     18|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  240|     18|    PK11_FreeSlotListElement(list, le);
  241|     18|    return SECSuccess;
  242|     18|}
pk11_MoveListToList:
  251|  8.82k|{
  252|  8.82k|    if (src->head == NULL)
  ------------------
  |  Branch (252:9): [True: 8.82k, False: 0]
  ------------------
  253|  8.82k|        return SECSuccess;
  254|       |
  255|      0|    if (target->tail == NULL) {
  ------------------
  |  Branch (255:9): [True: 0, False: 0]
  ------------------
  256|      0|        target->head = src->head;
  257|      0|    } else {
  258|      0|        target->tail->next = src->head;
  259|      0|    }
  260|      0|    src->head->prev = target->tail;
  261|      0|    target->tail = src->tail;
  262|      0|    src->head = src->tail = NULL;
  263|      0|    return SECSuccess;
  264|  8.82k|}
PK11_GetFirstSafe:
  300|  10.1k|{
  301|  10.1k|    PK11SlotListElement *le;
  302|       |
  303|  10.1k|    PZ_Lock(list->lock);
  ------------------
  |  |  245|  10.1k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  304|  10.1k|    le = list->head;
  305|  10.1k|    if (le != NULL)
  ------------------
  |  Branch (305:9): [True: 10.1k, False: 0]
  ------------------
  306|  10.1k|        (le)->refCount++;
  307|  10.1k|    PZ_Unlock(list->lock);
  ------------------
  |  |  246|  10.1k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  308|  10.1k|    return le;
  309|  10.1k|}
PK11_GetNextSafe:
  318|      2|{
  319|      2|    PK11SlotListElement *new_le;
  320|      2|    PZ_Lock(list->lock);
  ------------------
  |  |  245|      2|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  321|      2|    new_le = le->next;
  322|      2|    if (le->next == NULL) {
  ------------------
  |  Branch (322:9): [True: 1, False: 1]
  ------------------
  323|       |        /* if the prev and next fields are NULL then either this element
  324|       |         * has been removed and we need to walk the list again (if restart
  325|       |         * is true) or this was the only element on the list */
  326|      1|        if ((le->prev == NULL) && restart && (list->head != le)) {
  ------------------
  |  Branch (326:13): [True: 0, False: 1]
  |  Branch (326:35): [True: 0, False: 0]
  |  Branch (326:46): [True: 0, False: 0]
  ------------------
  327|      0|            new_le = list->head;
  328|      0|        }
  329|      1|    }
  330|      2|    if (new_le)
  ------------------
  |  Branch (330:9): [True: 1, False: 1]
  ------------------
  331|      1|        new_le->refCount++;
  332|      2|    PZ_Unlock(list->lock);
  ------------------
  |  |  246|      2|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  333|      2|    PK11_FreeSlotListElement(list, le);
  334|      2|    return new_le;
  335|      2|}
PK11_FindSlotElement:
  342|     18|{
  343|     18|    PK11SlotListElement *le;
  344|       |
  345|     18|    for (le = PK11_GetFirstSafe(list); le;
  ------------------
  |  Branch (345:40): [True: 18, False: 0]
  ------------------
  346|     18|         le = PK11_GetNextSafe(list, le, PR_TRUE)) {
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  347|     18|        if (le->slot == slot)
  ------------------
  |  Branch (347:13): [True: 18, False: 0]
  ------------------
  348|     18|            return le;
  349|     18|    }
  350|      0|    return NULL;
  351|     18|}
PK11_NewSlotInfo:
  361|      2|{
  362|      2|    PK11SlotInfo *slot;
  363|       |
  364|      2|    slot = (PK11SlotInfo *)PORT_Alloc(sizeof(PK11SlotInfo));
  ------------------
  |  |   52|      2|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  365|      2|    if (slot == NULL) {
  ------------------
  |  Branch (365:9): [True: 0, False: 2]
  ------------------
  366|      0|        return slot;
  367|      0|    }
  368|      2|    slot->freeListLock = PZ_NewLock(nssILockFreelist);
  ------------------
  |  |  243|      2|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  369|      2|    if (slot->freeListLock == NULL) {
  ------------------
  |  Branch (369:9): [True: 0, False: 2]
  ------------------
  370|      0|        PORT_Free(slot);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  371|      0|        return NULL;
  372|      0|    }
  373|      2|    slot->nssTokenLock = PZ_NewLock(nssILockOther);
  ------------------
  |  |  243|      2|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  374|      2|    if (slot->nssTokenLock == NULL) {
  ------------------
  |  Branch (374:9): [True: 0, False: 2]
  ------------------
  375|      0|        PZ_DestroyLock(slot->freeListLock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  376|      0|        PORT_Free(slot);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  377|      0|        return NULL;
  378|      0|    }
  379|      2|    slot->sessionLock = mod->isThreadSafe ? PZ_NewLock(nssILockSession) : mod->refLock;
  ------------------
  |  |  243|      2|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  |  Branch (379:25): [True: 2, False: 0]
  ------------------
  380|      2|    if (slot->sessionLock == NULL) {
  ------------------
  |  Branch (380:9): [True: 0, False: 2]
  ------------------
  381|      0|        PZ_DestroyLock(slot->nssTokenLock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  382|      0|        PZ_DestroyLock(slot->freeListLock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  383|      0|        PORT_Free(slot);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  384|      0|        return NULL;
  385|      0|    }
  386|      2|    slot->freeSymKeysWithSessionHead = NULL;
  387|      2|    slot->freeSymKeysHead = NULL;
  388|      2|    slot->keyCount = 0;
  389|      2|    slot->maxKeyCount = 0;
  390|      2|    slot->functionList = NULL;
  391|      2|    slot->needTest = PR_TRUE;
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
  392|      2|    slot->isPerm = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  393|      2|    slot->isHW = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  394|      2|    slot->isInternal = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  395|      2|    slot->isThreadSafe = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  396|      2|    slot->disabled = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  397|      2|    slot->series = 1;
  398|      2|    slot->flagSeries = 0;
  399|      2|    slot->flagState = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  400|      2|    slot->wrapKey = 0;
  401|      2|    slot->wrapMechanism = CKM_INVALID_MECHANISM;
  ------------------
  |  |  155|      2|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  402|      2|    slot->refKeys[0] = CK_INVALID_HANDLE;
  ------------------
  |  |   78|      2|#define CK_INVALID_HANDLE 0
  ------------------
  403|      2|    slot->reason = PK11_DIS_NONE;
  404|      2|    slot->readOnly = PR_TRUE;
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
  405|      2|    slot->needLogin = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  406|      2|    slot->hasRandom = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  407|      2|    slot->defRWSession = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  408|      2|    slot->protectedAuthPath = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  409|      2|    slot->flags = 0;
  410|      2|    slot->session = CK_INVALID_HANDLE;
  ------------------
  |  |   78|      2|#define CK_INVALID_HANDLE 0
  ------------------
  411|      2|    slot->slotID = 0;
  412|      2|    slot->defaultFlags = 0;
  413|      2|    slot->refCount = 1;
  414|      2|    slot->askpw = 0;
  415|      2|    slot->timeout = 0;
  416|      2|    slot->mechanismList = NULL;
  417|      2|    slot->mechanismCount = 0;
  418|      2|    slot->cert_array = NULL;
  419|      2|    slot->cert_count = 0;
  420|      2|    slot->slot_name[0] = 0;
  421|      2|    slot->token_name[0] = 0;
  422|      2|    PORT_Memset(slot->serial, ' ', sizeof(slot->serial));
  ------------------
  |  |  182|      2|#define PORT_Memset memset
  ------------------
  423|      2|    PORT_Memset(&slot->tokenInfo, 0, sizeof(slot->tokenInfo));
  ------------------
  |  |  182|      2|#define PORT_Memset memset
  ------------------
  424|      2|    slot->module = NULL;
  425|      2|    slot->authTransact = 0;
  426|      2|    slot->authTime = LL_ZERO;
  ------------------
  |  |   41|      2|#define LL_ZERO     0L
  ------------------
  427|      2|    slot->minPassword = 0;
  428|      2|    slot->maxPassword = 0;
  429|      2|    slot->hasRootCerts = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  430|      2|    slot->hasRootTrust = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  431|      2|    slot->nssToken = NULL;
  432|      2|    slot->profileList = NULL;
  433|      2|    slot->profileCount = 0;
  434|      2|    return slot;
  435|      2|}
PK11_ReferenceSlot:
  440|  33.2k|{
  441|  33.2k|    PR_ATOMIC_INCREMENT(&slot->refCount);
  ------------------
  |  |  122|  33.2k|#define PR_ATOMIC_INCREMENT(val) __sync_add_and_fetch(val, 1)
  ------------------
  442|  33.2k|    return slot;
  443|  33.2k|}
PK11_DestroySlot:
  448|      2|{
  449|       |    /* free up the cached keys and sessions */
  450|      2|    PK11_CleanKeyList(slot);
  451|       |
  452|       |    /* free up all the sessions on this slot */
  453|      2|    if (slot->functionList) {
  ------------------
  |  Branch (453:9): [True: 2, False: 0]
  ------------------
  454|      2|        PK11_GETTAB(slot)
  ------------------
  |  |  102|      2|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
  455|      2|            ->C_CloseAllSessions(slot->slotID);
  456|      2|    }
  457|       |
  458|      2|    if (slot->mechanismList) {
  ------------------
  |  Branch (458:9): [True: 2, False: 0]
  ------------------
  459|      2|        PORT_Free(slot->mechanismList);
  ------------------
  |  |   60|      2|#define PORT_Free PORT_Free_Util
  ------------------
  460|      2|    }
  461|      2|    if (slot->profileList) {
  ------------------
  |  Branch (461:9): [True: 0, False: 2]
  ------------------
  462|      0|        PORT_Free(slot->profileList);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  463|      0|    }
  464|      2|    if (slot->isThreadSafe && slot->sessionLock) {
  ------------------
  |  Branch (464:9): [True: 2, False: 0]
  |  Branch (464:31): [True: 2, False: 0]
  ------------------
  465|      2|        PZ_DestroyLock(slot->sessionLock);
  ------------------
  |  |  244|      2|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  466|      2|    }
  467|      2|    slot->sessionLock = NULL;
  468|      2|    if (slot->freeListLock) {
  ------------------
  |  Branch (468:9): [True: 2, False: 0]
  ------------------
  469|      2|        PZ_DestroyLock(slot->freeListLock);
  ------------------
  |  |  244|      2|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  470|      2|        slot->freeListLock = NULL;
  471|      2|    }
  472|      2|    if (slot->nssTokenLock) {
  ------------------
  |  Branch (472:9): [True: 2, False: 0]
  ------------------
  473|      2|        PZ_DestroyLock(slot->nssTokenLock);
  ------------------
  |  |  244|      2|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  474|      2|        slot->nssTokenLock = NULL;
  475|      2|    }
  476|       |
  477|       |    /* finally Tell our parent module that we've gone away so it can unload */
  478|      2|    if (slot->module) {
  ------------------
  |  Branch (478:9): [True: 2, False: 0]
  ------------------
  479|      2|        SECMOD_SlotDestroyModule(slot->module, PR_TRUE);
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
  480|      2|    }
  481|       |
  482|       |    /* ok, well not quit finally... now we free the memory */
  483|      2|    PORT_Free(slot);
  ------------------
  |  |   60|      2|#define PORT_Free PORT_Free_Util
  ------------------
  484|      2|}
PK11_FreeSlot:
  489|  33.2k|{
  490|  33.2k|    if (PR_ATOMIC_DECREMENT(&slot->refCount) == 0) {
  ------------------
  |  |  123|  33.2k|#define PR_ATOMIC_DECREMENT(val) __sync_sub_and_fetch(val, 1)
  ------------------
  |  Branch (490:9): [True: 2, False: 33.2k]
  ------------------
  491|      2|        PK11_DestroySlot(slot);
  492|      2|    }
  493|  33.2k|}
PK11_EnterSlotMonitor:
  497|  13.0k|{
  498|  13.0k|    PZ_Lock(slot->sessionLock);
  ------------------
  |  |  245|  13.0k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  499|  13.0k|}
PK11_ExitSlotMonitor:
  503|  13.0k|{
  504|  13.0k|    PZ_Unlock(slot->sessionLock);
  ------------------
  |  |  246|  13.0k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  505|  13.0k|}
PK11_InitSlotLists:
  831|      1|{
  832|      1|    pk11_InitSlotListStatic(&pk11_seedSlotList);
  833|      1|    pk11_InitSlotListStatic(&pk11_camelliaSlotList);
  834|      1|    pk11_InitSlotListStatic(&pk11_aesSlotList);
  835|      1|    pk11_InitSlotListStatic(&pk11_desSlotList);
  836|      1|    pk11_InitSlotListStatic(&pk11_rc4SlotList);
  837|      1|    pk11_InitSlotListStatic(&pk11_rc2SlotList);
  838|      1|    pk11_InitSlotListStatic(&pk11_rc5SlotList);
  839|      1|    pk11_InitSlotListStatic(&pk11_md5SlotList);
  840|      1|    pk11_InitSlotListStatic(&pk11_md2SlotList);
  841|      1|    pk11_InitSlotListStatic(&pk11_sha1SlotList);
  842|      1|    pk11_InitSlotListStatic(&pk11_rsaSlotList);
  843|      1|    pk11_InitSlotListStatic(&pk11_dsaSlotList);
  844|      1|    pk11_InitSlotListStatic(&pk11_dhSlotList);
  845|      1|    pk11_InitSlotListStatic(&pk11_ecSlotList);
  846|      1|    pk11_InitSlotListStatic(&pk11_ideaSlotList);
  847|      1|    pk11_InitSlotListStatic(&pk11_sslSlotList);
  848|      1|    pk11_InitSlotListStatic(&pk11_tlsSlotList);
  849|      1|    pk11_InitSlotListStatic(&pk11_randomSlotList);
  850|      1|    pk11_InitSlotListStatic(&pk11_sha256SlotList);
  851|      1|    pk11_InitSlotListStatic(&pk11_sha512SlotList);
  852|      1|    return SECSuccess;
  853|      1|}
PK11_DestroySlotLists:
  857|      1|{
  858|      1|    pk11_FreeSlotListStatic(&pk11_seedSlotList);
  859|      1|    pk11_FreeSlotListStatic(&pk11_camelliaSlotList);
  860|      1|    pk11_FreeSlotListStatic(&pk11_aesSlotList);
  861|      1|    pk11_FreeSlotListStatic(&pk11_desSlotList);
  862|      1|    pk11_FreeSlotListStatic(&pk11_rc4SlotList);
  863|      1|    pk11_FreeSlotListStatic(&pk11_rc2SlotList);
  864|      1|    pk11_FreeSlotListStatic(&pk11_rc5SlotList);
  865|      1|    pk11_FreeSlotListStatic(&pk11_md5SlotList);
  866|      1|    pk11_FreeSlotListStatic(&pk11_md2SlotList);
  867|      1|    pk11_FreeSlotListStatic(&pk11_sha1SlotList);
  868|      1|    pk11_FreeSlotListStatic(&pk11_rsaSlotList);
  869|      1|    pk11_FreeSlotListStatic(&pk11_dsaSlotList);
  870|      1|    pk11_FreeSlotListStatic(&pk11_dhSlotList);
  871|      1|    pk11_FreeSlotListStatic(&pk11_ecSlotList);
  872|      1|    pk11_FreeSlotListStatic(&pk11_ideaSlotList);
  873|      1|    pk11_FreeSlotListStatic(&pk11_sslSlotList);
  874|      1|    pk11_FreeSlotListStatic(&pk11_tlsSlotList);
  875|      1|    pk11_FreeSlotListStatic(&pk11_randomSlotList);
  876|      1|    pk11_FreeSlotListStatic(&pk11_sha256SlotList);
  877|      1|    pk11_FreeSlotListStatic(&pk11_sha512SlotList);
  878|      1|    return;
  879|      1|}
PK11_GetSlotList:
  884|  10.1k|{
  885|       |/* XXX a workaround for Bugzilla bug #55267 */
  886|       |#if defined(HPUX) && defined(__LP64__)
  887|       |    if (CKM_INVALID_MECHANISM == type)
  888|       |        return NULL;
  889|       |#endif
  890|  10.1k|    switch (type) {
  ------------------
  |  Branch (890:13): [True: 4.40k, False: 5.74k]
  ------------------
  891|      2|        case CKM_SEED_CBC:
  ------------------
  |  | 1157|      2|#define CKM_SEED_CBC 0x00000652UL
  ------------------
  |  Branch (891:9): [True: 2, False: 10.1k]
  ------------------
  892|      2|        case CKM_SEED_ECB:
  ------------------
  |  | 1156|      2|#define CKM_SEED_ECB 0x00000651UL
  ------------------
  |  Branch (892:9): [True: 0, False: 10.1k]
  ------------------
  893|      2|            return &pk11_seedSlotList;
  894|      2|        case CKM_CAMELLIA_CBC:
  ------------------
  |  | 1137|      2|#define CKM_CAMELLIA_CBC 0x00000552UL
  ------------------
  |  Branch (894:9): [True: 2, False: 10.1k]
  ------------------
  895|      2|        case CKM_CAMELLIA_ECB:
  ------------------
  |  | 1136|      2|#define CKM_CAMELLIA_ECB 0x00000551UL
  ------------------
  |  Branch (895:9): [True: 0, False: 10.1k]
  ------------------
  896|      2|            return &pk11_camelliaSlotList;
  897|      2|        case CKM_AES_CBC:
  ------------------
  |  | 1108|      2|#define CKM_AES_CBC 0x00001082UL
  ------------------
  |  Branch (897:9): [True: 2, False: 10.1k]
  ------------------
  898|      2|        case CKM_AES_CCM:
  ------------------
  |  | 1116|      2|#define CKM_AES_CCM 0x00001088UL
  ------------------
  |  Branch (898:9): [True: 0, False: 10.1k]
  ------------------
  899|      2|        case CKM_AES_CTR:
  ------------------
  |  | 1113|      2|#define CKM_AES_CTR 0x00001086UL
  ------------------
  |  Branch (899:9): [True: 0, False: 10.1k]
  ------------------
  900|      2|        case CKM_AES_CTS:
  ------------------
  |  | 1117|      2|#define CKM_AES_CTS 0x00001089UL
  ------------------
  |  Branch (900:9): [True: 0, False: 10.1k]
  ------------------
  901|      2|        case CKM_AES_GCM:
  ------------------
  |  | 1115|      2|#define CKM_AES_GCM 0x00001087UL
  ------------------
  |  Branch (901:9): [True: 0, False: 10.1k]
  ------------------
  902|      2|        case CKM_AES_ECB:
  ------------------
  |  | 1107|      2|#define CKM_AES_ECB 0x00001081UL
  ------------------
  |  Branch (902:9): [True: 0, False: 10.1k]
  ------------------
  903|      2|            return &pk11_aesSlotList;
  904|      2|        case CKM_DES_CBC:
  ------------------
  |  |  816|      2|#define CKM_DES_CBC 0x00000122UL
  ------------------
  |  Branch (904:9): [True: 2, False: 10.1k]
  ------------------
  905|      2|        case CKM_DES_ECB:
  ------------------
  |  |  815|      2|#define CKM_DES_ECB 0x00000121UL
  ------------------
  |  Branch (905:9): [True: 0, False: 10.1k]
  ------------------
  906|      2|        case CKM_DES3_ECB:
  ------------------
  |  |  825|      2|#define CKM_DES3_ECB 0x00000132UL
  ------------------
  |  Branch (906:9): [True: 0, False: 10.1k]
  ------------------
  907|      2|        case CKM_DES3_CBC:
  ------------------
  |  |  826|      2|#define CKM_DES3_CBC 0x00000133UL
  ------------------
  |  Branch (907:9): [True: 0, False: 10.1k]
  ------------------
  908|      2|            return &pk11_desSlotList;
  909|      2|        case CKM_RC4:
  ------------------
  |  |  813|      2|#define CKM_RC4 0x00000111UL
  ------------------
  |  Branch (909:9): [True: 2, False: 10.1k]
  ------------------
  910|      2|            return &pk11_rc4SlotList;
  911|      0|        case CKM_RC5_CBC:
  ------------------
  |  |  943|      0|#define CKM_RC5_CBC 0x00000332UL
  ------------------
  |  Branch (911:9): [True: 0, False: 10.1k]
  ------------------
  912|      0|            return &pk11_rc5SlotList;
  913|  5.62k|        case CKM_SHA_1:
  ------------------
  |  |  859|  5.62k|#define CKM_SHA_1 0x00000220UL
  ------------------
  |  Branch (913:9): [True: 5.62k, False: 4.51k]
  ------------------
  914|  5.62k|            return &pk11_sha1SlotList;
  915|      1|        case CKM_SHA224:
  ------------------
  |  |  887|      1|#define CKM_SHA224 0x00000255UL
  ------------------
  |  Branch (915:9): [True: 1, False: 10.1k]
  ------------------
  916|     38|        case CKM_SHA256:
  ------------------
  |  |  876|     38|#define CKM_SHA256 0x00000250UL
  ------------------
  |  Branch (916:9): [True: 37, False: 10.1k]
  ------------------
  917|     38|        case CKM_SHA3_224:
  ------------------
  |  |  902|     38|#define CKM_SHA3_224 0x000002B5UL
  ------------------
  |  Branch (917:9): [True: 0, False: 10.1k]
  ------------------
  918|     38|        case CKM_SHA3_256:
  ------------------
  |  |  898|     38|#define CKM_SHA3_256 0x000002B0UL
  ------------------
  |  Branch (918:9): [True: 0, False: 10.1k]
  ------------------
  919|     38|            return &pk11_sha256SlotList;
  920|      3|        case CKM_SHA384:
  ------------------
  |  |  879|      3|#define CKM_SHA384 0x00000260UL
  ------------------
  |  Branch (920:9): [True: 3, False: 10.1k]
  ------------------
  921|      6|        case CKM_SHA512:
  ------------------
  |  |  882|      6|#define CKM_SHA512 0x00000270UL
  ------------------
  |  Branch (921:9): [True: 3, False: 10.1k]
  ------------------
  922|      6|        case CKM_SHA3_384:
  ------------------
  |  |  906|      6|#define CKM_SHA3_384 0x000002C0UL
  ------------------
  |  Branch (922:9): [True: 0, False: 10.1k]
  ------------------
  923|      6|        case CKM_SHA3_512:
  ------------------
  |  |  910|      6|#define CKM_SHA3_512 0x000002D0UL
  ------------------
  |  Branch (923:9): [True: 0, False: 10.1k]
  ------------------
  924|      6|            return &pk11_sha512SlotList;
  925|      2|        case CKM_MD5:
  ------------------
  |  |  853|      2|#define CKM_MD5 0x00000210UL
  ------------------
  |  Branch (925:9): [True: 2, False: 10.1k]
  ------------------
  926|      2|            return &pk11_md5SlotList;
  927|      2|        case CKM_MD2:
  ------------------
  |  |  847|      2|#define CKM_MD2 0x00000200UL
  ------------------
  |  Branch (927:9): [True: 2, False: 10.1k]
  ------------------
  928|      2|            return &pk11_md2SlotList;
  929|      0|        case CKM_RC2_ECB:
  ------------------
  |  |  804|      0|#define CKM_RC2_ECB 0x00000101UL
  ------------------
  |  Branch (929:9): [True: 0, False: 10.1k]
  ------------------
  930|      2|        case CKM_RC2_CBC:
  ------------------
  |  |  805|      2|#define CKM_RC2_CBC 0x00000102UL
  ------------------
  |  Branch (930:9): [True: 2, False: 10.1k]
  ------------------
  931|      2|            return &pk11_rc2SlotList;
  932|      7|        case CKM_RSA_PKCS:
  ------------------
  |  |  720|      7|#define CKM_RSA_PKCS 0x00000001UL
  ------------------
  |  Branch (932:9): [True: 7, False: 10.1k]
  ------------------
  933|      7|        case CKM_RSA_PKCS_KEY_PAIR_GEN:
  ------------------
  |  |  719|      7|#define CKM_RSA_PKCS_KEY_PAIR_GEN 0x00000000UL
  ------------------
  |  Branch (933:9): [True: 0, False: 10.1k]
  ------------------
  934|      7|        case CKM_RSA_X_509:
  ------------------
  |  |  722|      7|#define CKM_RSA_X_509 0x00000003UL
  ------------------
  |  Branch (934:9): [True: 0, False: 10.1k]
  ------------------
  935|      7|            return &pk11_rsaSlotList;
  936|      5|        case CKM_DSA:
  ------------------
  |  |  745|      5|#define CKM_DSA 0x00000011UL
  ------------------
  |  Branch (936:9): [True: 5, False: 10.1k]
  ------------------
  937|      5|            return &pk11_dsaSlotList;
  938|      0|        case CKM_DH_PKCS_KEY_PAIR_GEN:
  ------------------
  |  |  758|      0|#define CKM_DH_PKCS_KEY_PAIR_GEN 0x00000020UL
  ------------------
  |  Branch (938:9): [True: 0, False: 10.1k]
  ------------------
  939|      2|        case CKM_DH_PKCS_DERIVE:
  ------------------
  |  |  759|      2|#define CKM_DH_PKCS_DERIVE 0x00000021UL
  ------------------
  |  Branch (939:9): [True: 2, False: 10.1k]
  ------------------
  940|      2|            return &pk11_dhSlotList;
  941|      2|        case CKM_EDDSA:
  ------------------
  |  | 1174|      2|#define CKM_EDDSA 0x00001057UL
  ------------------
  |  Branch (941:9): [True: 2, False: 10.1k]
  ------------------
  942|      2|        case CKM_EC_EDWARDS_KEY_PAIR_GEN:
  ------------------
  |  | 1172|      2|#define CKM_EC_EDWARDS_KEY_PAIR_GEN 0x00001055UL
  ------------------
  |  Branch (942:9): [True: 0, False: 10.1k]
  ------------------
  943|     39|        case CKM_ECDSA:
  ------------------
  |  | 1074|     39|#define CKM_ECDSA 0x00001041UL
  ------------------
  |  Branch (943:9): [True: 37, False: 10.1k]
  ------------------
  944|     39|        case CKM_ECDSA_SHA1:
  ------------------
  |  | 1075|     39|#define CKM_ECDSA_SHA1 0x00001042UL
  ------------------
  |  Branch (944:9): [True: 0, False: 10.1k]
  ------------------
  945|     39|        case CKM_EC_KEY_PAIR_GEN: /* aka CKM_ECDSA_KEY_PAIR_GEN */
  ------------------
  |  | 1072|     39|#define CKM_EC_KEY_PAIR_GEN 0x00001040UL
  ------------------
  |  Branch (945:9): [True: 0, False: 10.1k]
  ------------------
  946|     39|        case CKM_NSS_ECDHE_NO_PAIRWISE_CHECK_KEY_PAIR_GEN:
  ------------------
  |  |  274|     39|#define CKM_NSS_ECDHE_NO_PAIRWISE_CHECK_KEY_PAIR_GEN (CKM_NSS + 47)
  |  |  ------------------
  |  |  |  |  162|     39|#define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1309|     39|#define CKM_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     39|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (946:9): [True: 0, False: 10.1k]
  ------------------
  947|     39|        case CKM_ECDH1_DERIVE:
  ------------------
  |  | 1086|     39|#define CKM_ECDH1_DERIVE 0x00001050UL
  ------------------
  |  Branch (947:9): [True: 0, False: 10.1k]
  ------------------
  948|     39|        case CKM_NSS_KYBER_KEY_PAIR_GEN: /* Bug 1893029 */
  ------------------
  |  |  267|     39|#define CKM_NSS_KYBER_KEY_PAIR_GEN (CKM_NSS + 45)
  |  |  ------------------
  |  |  |  |  162|     39|#define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1309|     39|#define CKM_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     39|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (948:9): [True: 0, False: 10.1k]
  ------------------
  949|     39|        case CKM_NSS_KYBER:
  ------------------
  |  |  268|     39|#define CKM_NSS_KYBER (CKM_NSS + 46)
  |  |  ------------------
  |  |  |  |  162|     39|#define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1309|     39|#define CKM_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     39|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (949:9): [True: 0, False: 10.1k]
  ------------------
  950|     39|        case CKM_NSS_ML_KEM_KEY_PAIR_GEN: /* Bug 1893029 */
  ------------------
  |  |  277|     39|#define CKM_NSS_ML_KEM_KEY_PAIR_GEN (CKM_NSS + 48)
  |  |  ------------------
  |  |  |  |  162|     39|#define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1309|     39|#define CKM_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     39|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (950:9): [True: 0, False: 10.1k]
  ------------------
  951|     39|        case CKM_NSS_ML_KEM:
  ------------------
  |  |  278|     39|#define CKM_NSS_ML_KEM (CKM_NSS + 49)
  |  |  ------------------
  |  |  |  |  162|     39|#define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1309|     39|#define CKM_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     39|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (951:9): [True: 0, False: 10.1k]
  ------------------
  952|     39|            return &pk11_ecSlotList;
  953|      2|        case CKM_SSL3_PRE_MASTER_KEY_GEN:
  ------------------
  |  |  959|      2|#define CKM_SSL3_PRE_MASTER_KEY_GEN 0x00000370UL
  ------------------
  |  Branch (953:9): [True: 2, False: 10.1k]
  ------------------
  954|      2|        case CKM_SSL3_MASTER_KEY_DERIVE:
  ------------------
  |  |  960|      2|#define CKM_SSL3_MASTER_KEY_DERIVE 0x00000371UL
  ------------------
  |  Branch (954:9): [True: 0, False: 10.1k]
  ------------------
  955|      2|        case CKM_SSL3_SHA1_MAC:
  ------------------
  |  |  976|      2|#define CKM_SSL3_SHA1_MAC 0x00000381UL
  ------------------
  |  Branch (955:9): [True: 0, False: 10.1k]
  ------------------
  956|      2|        case CKM_SSL3_MD5_MAC:
  ------------------
  |  |  975|      2|#define CKM_SSL3_MD5_MAC 0x00000380UL
  ------------------
  |  Branch (956:9): [True: 0, False: 10.1k]
  ------------------
  957|      2|            return &pk11_sslSlotList;
  958|      2|        case CKM_TLS_MASTER_KEY_DERIVE:
  ------------------
  |  |  968|      2|#define CKM_TLS_MASTER_KEY_DERIVE 0x00000375UL
  ------------------
  |  Branch (958:9): [True: 2, False: 10.1k]
  ------------------
  959|      2|        case CKM_TLS_KEY_AND_MAC_DERIVE:
  ------------------
  |  |  969|      2|#define CKM_TLS_KEY_AND_MAC_DERIVE 0x00000376UL
  ------------------
  |  Branch (959:9): [True: 0, False: 10.1k]
  ------------------
  960|      2|        case CKM_NSS_TLS_KEY_AND_MAC_DERIVE_SHA256:
  ------------------
  |  |  235|      2|#define CKM_NSS_TLS_KEY_AND_MAC_DERIVE_SHA256 (CKM_NSS + 23)
  |  |  ------------------
  |  |  |  |  162|      2|#define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1309|      2|#define CKM_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      2|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (960:9): [True: 0, False: 10.1k]
  ------------------
  961|      2|            return &pk11_tlsSlotList;
  962|      0|        case CKM_IDEA_CBC:
  ------------------
  |  |  949|      0|#define CKM_IDEA_CBC 0x00000342UL
  ------------------
  |  Branch (962:9): [True: 0, False: 10.1k]
  ------------------
  963|      0|        case CKM_IDEA_ECB:
  ------------------
  |  |  948|      0|#define CKM_IDEA_ECB 0x00000341UL
  ------------------
  |  Branch (963:9): [True: 0, False: 10.1k]
  ------------------
  964|      0|            return &pk11_ideaSlotList;
  965|      2|        case CKM_FAKE_RANDOM:
  ------------------
  |  |  154|      2|#define CKM_FAKE_RANDOM 0x80000efeUL
  ------------------
  |  Branch (965:9): [True: 2, False: 10.1k]
  ------------------
  966|      2|            return &pk11_randomSlotList;
  967|  10.1k|    }
  968|  4.40k|    return NULL;
  969|  10.1k|}
PK11_LoadSlotList:
  978|      2|{
  979|      2|    int i;
  980|       |
  981|      3|    for (i = 0; i < count; i++) {
  ------------------
  |  Branch (981:17): [True: 2, False: 1]
  ------------------
  982|      2|        if (psi[i].slotID == slot->slotID)
  ------------------
  |  Branch (982:13): [True: 1, False: 1]
  ------------------
  983|      1|            break;
  984|      2|    }
  985|       |
  986|      2|    if (i == count)
  ------------------
  |  Branch (986:9): [True: 1, False: 1]
  ------------------
  987|      1|        return;
  988|       |
  989|      1|    slot->defaultFlags = psi[i].defaultFlags;
  990|      1|    slot->askpw = psi[i].askpw;
  991|      1|    slot->timeout = psi[i].timeout;
  992|      1|    slot->hasRootCerts = psi[i].hasRootCerts;
  993|       |
  994|       |    /* if the slot is already disabled, don't load them into the
  995|       |     * default slot lists. We get here so we can save the default
  996|       |     * list value. */
  997|      1|    if (slot->disabled)
  ------------------
  |  Branch (997:9): [True: 0, False: 1]
  ------------------
  998|      0|        return;
  999|       |
 1000|       |    /* if the user has disabled us, don't load us in */
 1001|      1|    if (slot->defaultFlags & PK11_DISABLE_FLAG) {
  ------------------
  |  |   37|      1|#define PK11_DISABLE_FLAG 0x40000000L
  ------------------
  |  Branch (1001:9): [True: 0, False: 1]
  ------------------
 1002|      0|        slot->disabled = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1003|      0|        slot->reason = PK11_DIS_USER_SELECTED;
 1004|       |        /* free up sessions and things?? */
 1005|      0|        return;
 1006|      0|    }
 1007|       |
 1008|     23|    for (i = 0; i < num_pk11_default_mechanisms; i++) {
  ------------------
  |  Branch (1008:17): [True: 22, False: 1]
  ------------------
 1009|     22|        if (slot->defaultFlags & PK11_DefaultArray[i].flag) {
  ------------------
  |  Branch (1009:13): [True: 18, False: 4]
  ------------------
 1010|     18|            CK_MECHANISM_TYPE mechanism = PK11_DefaultArray[i].mechanism;
 1011|     18|            PK11SlotList *slotList = PK11_GetSlotList(mechanism);
 1012|       |
 1013|     18|            if (slotList)
  ------------------
  |  Branch (1013:17): [True: 18, False: 0]
  ------------------
 1014|     18|                PK11_AddSlotToList(slotList, slot, PR_FALSE);
  ------------------
  |  |  438|     18|#define PR_FALSE 0
  ------------------
 1015|     18|        }
 1016|     22|    }
 1017|       |
 1018|      1|    return;
 1019|      1|}
PK11_ClearSlotList:
 1065|      2|{
 1066|      2|    int i;
 1067|       |
 1068|      2|    if (slot->disabled)
  ------------------
  |  Branch (1068:9): [True: 0, False: 2]
  ------------------
 1069|      0|        return;
 1070|      2|    if (slot->defaultFlags == 0)
  ------------------
  |  Branch (1070:9): [True: 1, False: 1]
  ------------------
 1071|      1|        return;
 1072|       |
 1073|     23|    for (i = 0; i < num_pk11_default_mechanisms; i++) {
  ------------------
  |  Branch (1073:17): [True: 22, False: 1]
  ------------------
 1074|     22|        if (slot->defaultFlags & PK11_DefaultArray[i].flag) {
  ------------------
  |  Branch (1074:13): [True: 18, False: 4]
  ------------------
 1075|     18|            CK_MECHANISM_TYPE mechanism = PK11_DefaultArray[i].mechanism;
 1076|     18|            PK11SlotList *slotList = PK11_GetSlotList(mechanism);
 1077|     18|            PK11SlotListElement *le = NULL;
 1078|       |
 1079|     18|            if (slotList)
  ------------------
  |  Branch (1079:17): [True: 18, False: 0]
  ------------------
 1080|     18|                le = PK11_FindSlotElement(slotList, slot);
 1081|       |
 1082|     18|            if (le) {
  ------------------
  |  Branch (1082:17): [True: 18, False: 0]
  ------------------
 1083|     18|                PK11_DeleteSlotFromList(slotList, le);
 1084|     18|                PK11_FreeSlotListElement(slotList, le);
 1085|     18|            }
 1086|     18|        }
 1087|     22|    }
 1088|      1|}
PK11_MakeString:
 1099|      4|{
 1100|      4|    int i;
 1101|      4|    char *newString;
 1102|     71|    for (i = (stringLen - 1); i >= 0; i--) {
  ------------------
  |  Branch (1102:31): [True: 71, False: 0]
  ------------------
 1103|     71|        if (staticString[i] != ' ')
  ------------------
  |  Branch (1103:13): [True: 4, False: 67]
  ------------------
 1104|      4|            break;
 1105|     71|    }
 1106|       |    /* move i to point to the last space */
 1107|      4|    i++;
 1108|      4|    if (arena) {
  ------------------
  |  Branch (1108:9): [True: 0, False: 4]
  ------------------
 1109|      0|        newString = (char *)PORT_ArenaAlloc(arena, i + 1 /* space for NULL */);
  ------------------
  |  |   53|      0|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
 1110|      4|    } else if (space) {
  ------------------
  |  Branch (1110:16): [True: 4, False: 0]
  ------------------
 1111|      4|        newString = space;
 1112|      4|    } else {
 1113|      0|        newString = (char *)PORT_Alloc(i + 1 /* space for NULL */);
  ------------------
  |  |   52|      0|#define PORT_Alloc PORT_Alloc_Util
  ------------------
 1114|      0|    }
 1115|      4|    if (newString == NULL)
  ------------------
  |  Branch (1115:9): [True: 0, False: 4]
  ------------------
 1116|      0|        return NULL;
 1117|       |
 1118|      4|    if (i)
  ------------------
  |  Branch (1118:9): [True: 4, False: 0]
  ------------------
 1119|      4|        PORT_Memcpy(newString, staticString, i);
  ------------------
  |  |  180|      4|#define PORT_Memcpy memcpy
  ------------------
 1120|      4|    newString[i] = 0;
 1121|       |
 1122|      4|    return newString;
 1123|      4|}
PK11_ReadMechanismList:
 1153|      2|{
 1154|      2|    CK_ULONG count;
 1155|      2|    CK_RV crv;
 1156|      2|    PRUint32 i;
 1157|       |
 1158|      2|    if (slot->mechanismList) {
  ------------------
  |  Branch (1158:9): [True: 0, False: 2]
  ------------------
 1159|      0|        PORT_Free(slot->mechanismList);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1160|      0|        slot->mechanismList = NULL;
 1161|      0|    }
 1162|      2|    slot->mechanismCount = 0;
 1163|       |
 1164|      2|    if (!slot->isThreadSafe)
  ------------------
  |  Branch (1164:9): [True: 0, False: 2]
  ------------------
 1165|      0|        PK11_EnterSlotMonitor(slot);
 1166|      2|    crv = PK11_GETTAB(slot)->C_GetMechanismList(slot->slotID, NULL, &count);
  ------------------
  |  |  102|      2|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1167|      2|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1167:9): [True: 0, False: 2]
  ------------------
 1168|      0|        if (!slot->isThreadSafe)
  ------------------
  |  Branch (1168:13): [True: 0, False: 0]
  ------------------
 1169|      0|            PK11_ExitSlotMonitor(slot);
 1170|      0|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1171|      0|        return SECFailure;
 1172|      0|    }
 1173|       |
 1174|      2|    slot->mechanismList = (CK_MECHANISM_TYPE *)
 1175|      2|        PORT_Alloc(count * sizeof(CK_MECHANISM_TYPE));
  ------------------
  |  |   52|      2|#define PORT_Alloc PORT_Alloc_Util
  ------------------
 1176|      2|    if (slot->mechanismList == NULL) {
  ------------------
  |  Branch (1176:9): [True: 0, False: 2]
  ------------------
 1177|      0|        if (!slot->isThreadSafe)
  ------------------
  |  Branch (1177:13): [True: 0, False: 0]
  ------------------
 1178|      0|            PK11_ExitSlotMonitor(slot);
 1179|      0|        return SECFailure;
 1180|      0|    }
 1181|      2|    crv = PK11_GETTAB(slot)->C_GetMechanismList(slot->slotID,
  ------------------
  |  |  102|      2|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1182|      2|                                                slot->mechanismList, &count);
 1183|      2|    if (!slot->isThreadSafe)
  ------------------
  |  Branch (1183:9): [True: 0, False: 2]
  ------------------
 1184|      0|        PK11_ExitSlotMonitor(slot);
 1185|      2|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1185:9): [True: 0, False: 2]
  ------------------
 1186|      0|        PORT_Free(slot->mechanismList);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1187|      0|        slot->mechanismList = NULL;
 1188|      0|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1189|      0|        return SECSuccess;
 1190|      0|    }
 1191|      2|    slot->mechanismCount = count;
 1192|      2|    PORT_Memset(slot->mechanismBits, 0, sizeof(slot->mechanismBits));
  ------------------
  |  |  182|      2|#define PORT_Memset memset
  ------------------
 1193|       |
 1194|    409|    for (i = 0; i < count; i++) {
  ------------------
  |  Branch (1194:17): [True: 407, False: 2]
  ------------------
 1195|    407|        CK_MECHANISM_TYPE mech = slot->mechanismList[i];
 1196|    407|        if (mech < 0x7ff) {
  ------------------
  |  Branch (1196:13): [True: 240, False: 167]
  ------------------
 1197|    240|            slot->mechanismBits[mech & 0xff] |= 1 << (mech >> 8);
 1198|    240|        }
 1199|    407|    }
 1200|      2|    return SECSuccess;
 1201|      2|}
PK11_InitToken:
 1281|      2|{
 1282|      2|    CK_RV crv;
 1283|      2|    SECStatus rv;
 1284|      2|    PRStatus status;
 1285|      2|    NSSToken *nssToken;
 1286|       |
 1287|       |    /* set the slot flags to the current token values */
 1288|      2|    if (!slot->isThreadSafe)
  ------------------
  |  Branch (1288:9): [True: 0, False: 2]
  ------------------
 1289|      0|        PK11_EnterSlotMonitor(slot);
 1290|      2|    crv = PK11_GETTAB(slot)->C_GetTokenInfo(slot->slotID, &slot->tokenInfo);
  ------------------
  |  |  102|      2|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1291|      2|    if (!slot->isThreadSafe)
  ------------------
  |  Branch (1291:9): [True: 0, False: 2]
  ------------------
 1292|      0|        PK11_ExitSlotMonitor(slot);
 1293|      2|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1293:9): [True: 0, False: 2]
  ------------------
 1294|      0|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1295|      0|        return SECFailure;
 1296|      0|    }
 1297|       |
 1298|       |    /* set the slot flags to the current token values */
 1299|      2|    slot->series++; /* allow other objects to detect that the
 1300|       |                     * slot is different */
 1301|      2|    slot->flags = slot->tokenInfo.flags;
 1302|      2|    slot->needLogin = ((slot->tokenInfo.flags & CKF_LOGIN_REQUIRED) ? PR_TRUE : PR_FALSE);
  ------------------
  |  |  176|      2|#define CKF_LOGIN_REQUIRED 0x00000004UL       /* user must \
  ------------------
                  slot->needLogin = ((slot->tokenInfo.flags & CKF_LOGIN_REQUIRED) ? PR_TRUE : PR_FALSE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
                  slot->needLogin = ((slot->tokenInfo.flags & CKF_LOGIN_REQUIRED) ? PR_TRUE : PR_FALSE);
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  |  Branch (1302:24): [True: 0, False: 2]
  ------------------
 1303|      2|    slot->readOnly = ((slot->tokenInfo.flags & CKF_WRITE_PROTECTED) ? PR_TRUE : PR_FALSE);
  ------------------
  |  |  173|      2|#define CKF_WRITE_PROTECTED 0x00000002UL      /* token is \
  ------------------
                  slot->readOnly = ((slot->tokenInfo.flags & CKF_WRITE_PROTECTED) ? PR_TRUE : PR_FALSE);
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
                  slot->readOnly = ((slot->tokenInfo.flags & CKF_WRITE_PROTECTED) ? PR_TRUE : PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  |  Branch (1303:23): [True: 2, False: 0]
  ------------------
 1304|       |
 1305|      2|    slot->hasRandom = ((slot->tokenInfo.flags & CKF_RNG) ? PR_TRUE : PR_FALSE);
  ------------------
  |  |  171|      2|#define CKF_RNG 0x00000001UL                  /* has random # \
  ------------------
                  slot->hasRandom = ((slot->tokenInfo.flags & CKF_RNG) ? PR_TRUE : PR_FALSE);
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
                  slot->hasRandom = ((slot->tokenInfo.flags & CKF_RNG) ? PR_TRUE : PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  |  Branch (1305:24): [True: 2, False: 0]
  ------------------
 1306|      2|    slot->protectedAuthPath =
 1307|      2|        ((slot->tokenInfo.flags & CKF_PROTECTED_AUTHENTICATION_PATH)
  ------------------
  |  |  195|      2|#define CKF_PROTECTED_AUTHENTICATION_PATH 0x00000100UL
  ------------------
  |  Branch (1307:10): [True: 0, False: 2]
  ------------------
 1308|      2|             ? PR_TRUE
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1309|      2|             : PR_FALSE);
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 1310|      2|    slot->lastLoginCheck = 0;
 1311|      2|    slot->lastState = 0;
 1312|       |    /* on some platforms Active Card incorrectly sets the
 1313|       |     * CKF_PROTECTED_AUTHENTICATION_PATH bit when it doesn't mean to. */
 1314|      2|    if (slot->isActiveCard) {
  ------------------
  |  Branch (1314:9): [True: 0, False: 2]
  ------------------
 1315|      0|        slot->protectedAuthPath = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1316|      0|    }
 1317|      2|    (void)PK11_MakeString(NULL, slot->token_name,
 1318|      2|                          (char *)slot->tokenInfo.label, sizeof(slot->tokenInfo.label));
 1319|      2|    slot->minPassword = slot->tokenInfo.ulMinPinLen;
 1320|      2|    slot->maxPassword = slot->tokenInfo.ulMaxPinLen;
 1321|      2|    PORT_Memcpy(slot->serial, slot->tokenInfo.serialNumber, sizeof(slot->serial));
  ------------------
  |  |  180|      2|#define PORT_Memcpy memcpy
  ------------------
 1322|       |
 1323|      2|    nssToken = PK11Slot_GetNSSToken(slot);
 1324|      2|    nssToken_UpdateName(nssToken); /* null token is OK */
 1325|      2|    (void)nssToken_Destroy(nssToken);
 1326|       |
 1327|      2|    slot->defRWSession = (PRBool)((!slot->readOnly) &&
  ------------------
  |  Branch (1327:35): [True: 0, False: 2]
  ------------------
 1328|      2|                                  (slot->tokenInfo.ulMaxSessionCount == 1));
  ------------------
  |  Branch (1328:35): [True: 0, False: 0]
  ------------------
 1329|      2|    rv = PK11_ReadMechanismList(slot);
 1330|      2|    if (rv != SECSuccess)
  ------------------
  |  Branch (1330:9): [True: 0, False: 2]
  ------------------
 1331|      0|        return rv;
 1332|       |
 1333|      2|    slot->hasRSAInfo = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 1334|      2|    slot->RSAInfoFlags = 0;
 1335|       |
 1336|       |    /* initialize the maxKeyCount value */
 1337|      2|    if (slot->tokenInfo.ulMaxSessionCount == 0) {
  ------------------
  |  Branch (1337:9): [True: 2, False: 0]
  ------------------
 1338|      2|        slot->maxKeyCount = 800; /* should be #define or a config param */
 1339|      2|    } else if (slot->tokenInfo.ulMaxSessionCount < 20) {
  ------------------
  |  Branch (1339:16): [True: 0, False: 0]
  ------------------
 1340|       |        /* don't have enough sessions to keep that many keys around */
 1341|      0|        slot->maxKeyCount = 0;
 1342|      0|    } else {
 1343|      0|        slot->maxKeyCount = slot->tokenInfo.ulMaxSessionCount / 2;
 1344|      0|    }
 1345|       |
 1346|       |    /* Make sure our session handle is valid */
 1347|      2|    if (slot->session == CK_INVALID_HANDLE) {
  ------------------
  |  |   78|      2|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (1347:9): [True: 2, False: 0]
  ------------------
 1348|       |        /* we know we don't have a valid session, go get one */
 1349|      2|        CK_SESSION_HANDLE session;
 1350|       |
 1351|       |        /* session should be Readonly, serial */
 1352|      2|        if (!slot->isThreadSafe)
  ------------------
  |  Branch (1352:13): [True: 0, False: 2]
  ------------------
 1353|      0|            PK11_EnterSlotMonitor(slot);
 1354|      2|        crv = PK11_GETTAB(slot)->C_OpenSession(slot->slotID,
  ------------------
  |  |  102|      2|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1355|      2|                                               (slot->defRWSession ? CKF_RW_SESSION : 0) | CKF_SERIAL_SESSION,
  ------------------
  |  |  302|      0|#define CKF_RW_SESSION 0x00000002UL     /* session is r/w */
  ------------------
                                                             (slot->defRWSession ? CKF_RW_SESSION : 0) | CKF_SERIAL_SESSION,
  ------------------
  |  |  303|      2|#define CKF_SERIAL_SESSION 0x00000004UL /* no parallel */
  ------------------
  |  Branch (1355:49): [True: 0, False: 2]
  ------------------
 1356|      2|                                               slot, pk11_notify, &session);
 1357|      2|        if (!slot->isThreadSafe)
  ------------------
  |  Branch (1357:13): [True: 0, False: 2]
  ------------------
 1358|      0|            PK11_ExitSlotMonitor(slot);
 1359|      2|        if (crv != CKR_OK) {
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1359:13): [True: 0, False: 2]
  ------------------
 1360|      0|            PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1361|      0|            return SECFailure;
 1362|      0|        }
 1363|      2|        slot->session = session;
 1364|      2|    } else {
 1365|       |        /* The session we have may be defunct (the token associated with it)
 1366|       |         * has been removed   */
 1367|      0|        CK_SESSION_INFO sessionInfo;
 1368|       |
 1369|      0|        if (!slot->isThreadSafe)
  ------------------
  |  Branch (1369:13): [True: 0, False: 0]
  ------------------
 1370|      0|            PK11_EnterSlotMonitor(slot);
 1371|      0|        crv = PK11_GETTAB(slot)->C_GetSessionInfo(slot->session, &sessionInfo);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1372|      0|        if (crv == CKR_DEVICE_ERROR) {
  ------------------
  |  | 1416|      0|#define CKR_DEVICE_ERROR 0x00000030UL
  ------------------
  |  Branch (1372:13): [True: 0, False: 0]
  ------------------
 1373|      0|            PK11_GETTAB(slot)
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1374|      0|                ->C_CloseSession(slot->session);
 1375|      0|            crv = CKR_SESSION_CLOSED;
  ------------------
  |  | 1463|      0|#define CKR_SESSION_CLOSED 0x000000B0UL
  ------------------
 1376|      0|        }
 1377|      0|        if ((crv == CKR_SESSION_CLOSED) || (crv == CKR_SESSION_HANDLE_INVALID)) {
  ------------------
  |  | 1463|      0|#define CKR_SESSION_CLOSED 0x000000B0UL
  ------------------
                      if ((crv == CKR_SESSION_CLOSED) || (crv == CKR_SESSION_HANDLE_INVALID)) {
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
  |  Branch (1377:13): [True: 0, False: 0]
  |  Branch (1377:44): [True: 0, False: 0]
  ------------------
 1378|      0|            crv = PK11_GETTAB(slot)->C_OpenSession(slot->slotID,
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1379|      0|                                                   (slot->defRWSession ? CKF_RW_SESSION : 0) | CKF_SERIAL_SESSION,
  ------------------
  |  |  302|      0|#define CKF_RW_SESSION 0x00000002UL     /* session is r/w */
  ------------------
                                                                 (slot->defRWSession ? CKF_RW_SESSION : 0) | CKF_SERIAL_SESSION,
  ------------------
  |  |  303|      0|#define CKF_SERIAL_SESSION 0x00000004UL /* no parallel */
  ------------------
  |  Branch (1379:53): [True: 0, False: 0]
  ------------------
 1380|      0|                                                   slot, pk11_notify, &slot->session);
 1381|      0|            if (crv != CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1381:17): [True: 0, False: 0]
  ------------------
 1382|      0|                PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1383|      0|                slot->session = CK_INVALID_HANDLE;
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
 1384|      0|                if (!slot->isThreadSafe)
  ------------------
  |  Branch (1384:21): [True: 0, False: 0]
  ------------------
 1385|      0|                    PK11_ExitSlotMonitor(slot);
 1386|      0|                return SECFailure;
 1387|      0|            }
 1388|      0|        }
 1389|      0|        if (!slot->isThreadSafe)
  ------------------
  |  Branch (1389:13): [True: 0, False: 0]
  ------------------
 1390|      0|            PK11_ExitSlotMonitor(slot);
 1391|      0|    }
 1392|       |
 1393|      2|    nssToken = PK11Slot_GetNSSToken(slot);
 1394|      2|    status = nssToken_Refresh(nssToken); /* null token is OK */
 1395|      2|    (void)nssToken_Destroy(nssToken);
 1396|      2|    if (status != PR_SUCCESS)
  ------------------
  |  Branch (1396:9): [True: 0, False: 2]
  ------------------
 1397|      0|        return SECFailure;
 1398|       |
 1399|       |    /* Not all tokens have profile objects or even recognize what profile
 1400|       |     * objects are it's OK for pk11_ReadProfileList to fail */
 1401|      2|    (void)pk11_ReadProfileList(slot);
 1402|       |
 1403|      2|    if (!(slot->isInternal) && (slot->hasRandom)) {
  ------------------
  |  Branch (1403:9): [True: 0, False: 2]
  |  Branch (1403:32): [True: 0, False: 0]
  ------------------
 1404|       |        /* if this slot has a random number generater, use it to add entropy
 1405|       |         * to the internal slot. */
 1406|      0|        PK11SlotInfo *int_slot = PK11_GetInternalSlot();
 1407|       |
 1408|      0|        if (int_slot) {
  ------------------
  |  Branch (1408:13): [True: 0, False: 0]
  ------------------
 1409|      0|            unsigned char random_bytes[32];
 1410|       |
 1411|       |            /* if this slot can issue random numbers, get some entropy from
 1412|       |             * that random number generater and give it to our internal token.
 1413|       |             */
 1414|      0|            PK11_EnterSlotMonitor(slot);
 1415|      0|            crv = PK11_GETTAB(slot)->C_GenerateRandom(slot->session, random_bytes, sizeof(random_bytes));
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1416|      0|            PK11_ExitSlotMonitor(slot);
 1417|      0|            if (crv == CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1417:17): [True: 0, False: 0]
  ------------------
 1418|      0|                PK11_EnterSlotMonitor(int_slot);
 1419|      0|                PK11_GETTAB(int_slot)
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1420|      0|                    ->C_SeedRandom(int_slot->session,
 1421|      0|                                   random_bytes, sizeof(random_bytes));
 1422|      0|                PK11_ExitSlotMonitor(int_slot);
 1423|      0|            }
 1424|       |
 1425|       |            /* Now return the favor and send entropy to the token's random
 1426|       |             * number generater */
 1427|      0|            PK11_EnterSlotMonitor(int_slot);
 1428|      0|            crv = PK11_GETTAB(int_slot)->C_GenerateRandom(int_slot->session,
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1429|      0|                                                          random_bytes, sizeof(random_bytes));
 1430|      0|            PK11_ExitSlotMonitor(int_slot);
 1431|      0|            if (crv == CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1431:17): [True: 0, False: 0]
  ------------------
 1432|      0|                PK11_EnterSlotMonitor(slot);
 1433|      0|                crv = PK11_GETTAB(slot)->C_SeedRandom(slot->session,
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1434|      0|                                                      random_bytes, sizeof(random_bytes));
 1435|      0|                PK11_ExitSlotMonitor(slot);
 1436|      0|            }
 1437|      0|            PK11_FreeSlot(int_slot);
 1438|      0|        }
 1439|      0|    }
 1440|       |    /* work around a problem in softoken where it incorrectly
 1441|       |     * reports databases opened read only as read/write. */
 1442|      2|    if (slot->isInternal && !slot->readOnly) {
  ------------------
  |  Branch (1442:9): [True: 2, False: 0]
  |  Branch (1442:29): [True: 0, False: 2]
  ------------------
 1443|      0|        CK_SESSION_HANDLE session = CK_INVALID_HANDLE;
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
 1444|       |
 1445|       |        /* try to open a R/W session */
 1446|      0|        crv = PK11_GETTAB(slot)->C_OpenSession(slot->slotID,
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1447|      0|                                               CKF_RW_SESSION | CKF_SERIAL_SESSION, slot, pk11_notify, &session);
  ------------------
  |  |  302|      0|#define CKF_RW_SESSION 0x00000002UL     /* session is r/w */
  ------------------
                                                             CKF_RW_SESSION | CKF_SERIAL_SESSION, slot, pk11_notify, &session);
  ------------------
  |  |  303|      0|#define CKF_SERIAL_SESSION 0x00000004UL /* no parallel */
  ------------------
 1448|       |        /* what a well behaved token should return if you open
 1449|       |         * a RW session on a read only token */
 1450|      0|        if (crv == CKR_TOKEN_WRITE_PROTECTED) {
  ------------------
  |  | 1481|      0|#define CKR_TOKEN_WRITE_PROTECTED 0x000000E2UL
  ------------------
  |  Branch (1450:13): [True: 0, False: 0]
  ------------------
 1451|      0|            slot->readOnly = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1452|      0|        } else if (crv == CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1452:20): [True: 0, False: 0]
  ------------------
 1453|      0|            CK_SESSION_INFO sessionInfo;
 1454|       |
 1455|       |            /* Because of a second bug in softoken, which silently returns
 1456|       |             * a RO session, we need to check what type of session we got. */
 1457|      0|            crv = PK11_GETTAB(slot)->C_GetSessionInfo(session, &sessionInfo);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1458|      0|            if (crv == CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1458:17): [True: 0, False: 0]
  ------------------
 1459|      0|                if ((sessionInfo.flags & CKF_RW_SESSION) == 0) {
  ------------------
  |  |  302|      0|#define CKF_RW_SESSION 0x00000002UL     /* session is r/w */
  ------------------
  |  Branch (1459:21): [True: 0, False: 0]
  ------------------
 1460|       |                    /* session was readonly, so this softoken slot must be readonly */
 1461|      0|                    slot->readOnly = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1462|      0|                }
 1463|      0|            }
 1464|      0|            PK11_GETTAB(slot)
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1465|      0|                ->C_CloseSession(session);
 1466|      0|        }
 1467|      0|    }
 1468|       |
 1469|      2|    return SECSuccess;
 1470|      2|}
PK11_InitSlot:
 1542|      2|{
 1543|      2|    SECStatus rv;
 1544|      2|    CK_SLOT_INFO slotInfo;
 1545|       |
 1546|      2|    slot->functionList = mod->functionList;
 1547|      2|    slot->isInternal = mod->internal;
 1548|      2|    slot->slotID = slotID;
 1549|      2|    slot->isThreadSafe = mod->isThreadSafe;
 1550|      2|    slot->hasRSAInfo = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 1551|      2|    slot->module = mod; /* NOTE: we don't make a reference here because
 1552|       |                         * modules have references to their slots. This
 1553|       |                         * works because modules keep implicit references
 1554|       |                         * from their slots, and won't unload and disappear
 1555|       |                         * until all their slots have been freed */
 1556|       |
 1557|      2|    if (PK11_GetSlotInfo(slot, &slotInfo) != SECSuccess) {
  ------------------
  |  Branch (1557:9): [True: 0, False: 2]
  ------------------
 1558|      0|        slot->disabled = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1559|      0|        slot->reason = PK11_DIS_COULD_NOT_INIT_TOKEN;
 1560|      0|        return;
 1561|      0|    }
 1562|       |
 1563|       |    /* test to make sure claimed mechanism work */
 1564|      2|    slot->needTest = mod->internal ? PR_FALSE : PR_TRUE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
                  slot->needTest = mod->internal ? PR_FALSE : PR_TRUE;
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
  |  Branch (1564:22): [True: 2, False: 0]
  ------------------
 1565|      2|    (void)PK11_MakeString(NULL, slot->slot_name,
 1566|      2|                          (char *)slotInfo.slotDescription, sizeof(slotInfo.slotDescription));
 1567|      2|    slot->isHW = (PRBool)((slotInfo.flags & CKF_HW_SLOT) == CKF_HW_SLOT);
  ------------------
  |  |  133|      2|#define CKF_HW_SLOT 0x00000004UL          /* hardware slot */
  ------------------
                  slot->isHW = (PRBool)((slotInfo.flags & CKF_HW_SLOT) == CKF_HW_SLOT);
  ------------------
  |  |  133|      2|#define CKF_HW_SLOT 0x00000004UL          /* hardware slot */
  ------------------
 1568|      2|#define ACTIVE_CARD "ActivCard SA"
 1569|      2|    slot->isActiveCard = (PRBool)(PORT_Strncmp((char *)slotInfo.manufacturerID,
  ------------------
  |  |  193|      2|#define PORT_Strncmp strncmp
  ------------------
 1570|      2|                                               ACTIVE_CARD, sizeof(ACTIVE_CARD) - 1) == 0);
  ------------------
  |  | 1568|      2|#define ACTIVE_CARD "ActivCard SA"
  ------------------
                                                             ACTIVE_CARD, sizeof(ACTIVE_CARD) - 1) == 0);
  ------------------
  |  | 1568|      2|#define ACTIVE_CARD "ActivCard SA"
  ------------------
 1571|      2|    if ((slotInfo.flags & CKF_REMOVABLE_DEVICE) == 0) {
  ------------------
  |  |  132|      2|#define CKF_REMOVABLE_DEVICE 0x00000002UL /* removable devices*/
  ------------------
  |  Branch (1571:9): [True: 2, False: 0]
  ------------------
 1572|      2|        slot->isPerm = PR_TRUE;
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
 1573|       |        /* permanment slots must have the token present always */
 1574|      2|        if ((slotInfo.flags & CKF_TOKEN_PRESENT) == 0) {
  ------------------
  |  |  131|      2|#define CKF_TOKEN_PRESENT 0x00000001UL    /* a token is there */
  ------------------
  |  Branch (1574:13): [True: 0, False: 2]
  ------------------
 1575|      0|            slot->disabled = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1576|      0|            slot->reason = PK11_DIS_TOKEN_NOT_PRESENT;
 1577|      0|            return; /* nothing else to do */
 1578|      0|        }
 1579|      2|    }
 1580|       |    /* if the token is present, initialize it */
 1581|      2|    if ((slotInfo.flags & CKF_TOKEN_PRESENT) != 0) {
  ------------------
  |  |  131|      2|#define CKF_TOKEN_PRESENT 0x00000001UL    /* a token is there */
  ------------------
  |  Branch (1581:9): [True: 2, False: 0]
  ------------------
 1582|      2|        rv = PK11_InitToken(slot, PR_TRUE);
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
 1583|       |        /* the only hard failures are on permanent devices, or function
 1584|       |         * verify failures... function verify failures are already handled
 1585|       |         * by tokenInit */
 1586|      2|        if ((rv != SECSuccess) && (slot->isPerm) && (!slot->disabled)) {
  ------------------
  |  Branch (1586:13): [True: 0, False: 2]
  |  Branch (1586:35): [True: 0, False: 0]
  |  Branch (1586:53): [True: 0, False: 0]
  ------------------
 1587|      0|            slot->disabled = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1588|      0|            slot->reason = PK11_DIS_COULD_NOT_INIT_TOKEN;
 1589|      0|        }
 1590|      2|        if (rv == SECSuccess && pk11_isRootSlot(slot)) {
  ------------------
  |  Branch (1590:13): [True: 2, False: 0]
  |  Branch (1590:33): [True: 0, False: 2]
  ------------------
 1591|      0|            if (!slot->hasRootCerts) {
  ------------------
  |  Branch (1591:17): [True: 0, False: 0]
  ------------------
 1592|      0|                slot->module->trustOrder = 100;
 1593|      0|            }
 1594|      0|            slot->hasRootCerts = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1595|      0|        }
 1596|      2|    }
 1597|      2|    if ((slotInfo.flags & CKF_USER_PIN_INITIALIZED) != 0) {
  ------------------
  |  |  178|      2|#define CKF_USER_PIN_INITIALIZED 0x00000008UL /* normal user's \
  ------------------
  |  Branch (1597:9): [True: 2, False: 0]
  ------------------
 1598|      2|        slot->flags |= CKF_USER_PIN_INITIALIZED;
  ------------------
  |  |  178|      2|#define CKF_USER_PIN_INITIALIZED 0x00000008UL /* normal user's \
  ------------------
 1599|      2|    }
 1600|      2|}
PK11_IsPresent:
 1690|  10.1k|{
 1691|  10.1k|    return pk11_IsPresentCertLoad(slot, PR_TRUE);
  ------------------
  |  |  437|  10.1k|#define PR_TRUE 1
  ------------------
 1692|  10.1k|}
PK11_IsDisabled:
 1697|   119k|{
 1698|   119k|    return slot->disabled;
 1699|   119k|}
PK11_IsInternal:
 1780|      2|{
 1781|      2|    return slot->isInternal;
 1782|      2|}
PK11_GetSlotInfo:
 1929|      2|{
 1930|      2|    CK_RV crv;
 1931|       |
 1932|      2|    if (!slot->isThreadSafe)
  ------------------
  |  Branch (1932:9): [True: 0, False: 2]
  ------------------
 1933|      0|        PK11_EnterSlotMonitor(slot);
 1934|       |    /*
 1935|       |     * some buggy drivers do not fill the buffer completely,
 1936|       |     * erase the buffer first
 1937|       |     */
 1938|      2|    PORT_Memset(info->slotDescription, ' ', sizeof(info->slotDescription));
  ------------------
  |  |  182|      2|#define PORT_Memset memset
  ------------------
 1939|      2|    PORT_Memset(info->manufacturerID, ' ', sizeof(info->manufacturerID));
  ------------------
  |  |  182|      2|#define PORT_Memset memset
  ------------------
 1940|      2|    crv = PK11_GETTAB(slot)->C_GetSlotInfo(slot->slotID, info);
  ------------------
  |  |  102|      2|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1941|      2|    pk11_zeroTerminatedToBlankPadded(info->slotDescription,
 1942|      2|                                     sizeof(info->slotDescription));
 1943|      2|    pk11_zeroTerminatedToBlankPadded(info->manufacturerID,
 1944|      2|                                     sizeof(info->manufacturerID));
 1945|      2|    if (!slot->isThreadSafe)
  ------------------
  |  Branch (1945:9): [True: 0, False: 2]
  ------------------
 1946|      0|        PK11_ExitSlotMonitor(slot);
 1947|      2|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1947:9): [True: 0, False: 2]
  ------------------
 1948|      0|        PORT_SetError(PK11_MapError(crv));
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1949|      0|        return SECFailure;
 1950|      0|    }
 1951|      2|    return SECSuccess;
 1952|      2|}
pk11_SetInternalKeySlot:
 2053|      1|{
 2054|      1|    if (pk11InternalKeySlot) {
  ------------------
  |  Branch (2054:9): [True: 1, False: 0]
  ------------------
 2055|      1|        PK11_FreeSlot(pk11InternalKeySlot);
 2056|      1|    }
 2057|      1|    pk11InternalKeySlot = slot ? PK11_ReferenceSlot(slot) : NULL;
  ------------------
  |  Branch (2057:27): [True: 0, False: 1]
  ------------------
 2058|      1|}
pk11_SetInternalKeySlotIfFirst:
 2067|      1|{
 2068|      1|    if (pk11InternalKeySlot) {
  ------------------
  |  Branch (2068:9): [True: 0, False: 1]
  ------------------
 2069|      0|        return;
 2070|      0|    }
 2071|      1|    pk11InternalKeySlot = slot ? PK11_ReferenceSlot(slot) : NULL;
  ------------------
  |  Branch (2071:27): [True: 1, False: 0]
  ------------------
 2072|      1|}
PK11_DoesMechanism:
 2127|  18.9k|{
 2128|  18.9k|    int i;
 2129|       |
 2130|       |    /* CKM_FAKE_RANDOM is not a real PKCS mechanism. It's a marker to
 2131|       |     * tell us we're looking form someone that has implemented get
 2132|       |     * random bits */
 2133|  18.9k|    if (type == CKM_FAKE_RANDOM) {
  ------------------
  |  |  154|  18.9k|#define CKM_FAKE_RANDOM 0x80000efeUL
  ------------------
  |  Branch (2133:9): [True: 0, False: 18.9k]
  ------------------
 2134|      0|        return slot->hasRandom;
 2135|      0|    }
 2136|       |
 2137|       |    /* for most mechanism, bypass the linear lookup */
 2138|  18.9k|    if (type < 0x7ff) {
  ------------------
  |  Branch (2138:9): [True: 18.0k, False: 899]
  ------------------
 2139|  18.0k|        return (slot->mechanismBits[type & 0xff] & (1 << (type >> 8))) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|  18.0k|#define PR_TRUE 1
  ------------------
                      return (slot->mechanismBits[type & 0xff] & (1 << (type >> 8))) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  |  Branch (2139:16): [True: 18.0k, False: 0]
  ------------------
 2140|  18.0k|    }
 2141|       |
 2142|  30.4k|    for (i = 0; i < (int)slot->mechanismCount; i++) {
  ------------------
  |  Branch (2142:17): [True: 30.4k, False: 0]
  ------------------
 2143|  30.4k|        if (slot->mechanismList[i] == type)
  ------------------
  |  Branch (2143:13): [True: 899, False: 29.5k]
  ------------------
 2144|    899|            return PR_TRUE;
  ------------------
  |  |  437|    899|#define PR_TRUE 1
  ------------------
 2145|  30.4k|    }
 2146|      0|    return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 2147|    899|}
PK11_GetAllTokens:
 2218|  4.41k|{
 2219|  4.41k|    PK11SlotList *list;
 2220|  4.41k|    PK11SlotList *loginList;
 2221|  4.41k|    PK11SlotList *friendlyList;
 2222|  4.41k|    SECMODModuleList *mlp;
 2223|  4.41k|    SECMODModuleList *modules;
 2224|  4.41k|    SECMODListLock *moduleLock;
 2225|  4.41k|    int i;
 2226|       |
 2227|  4.41k|    moduleLock = SECMOD_GetDefaultModuleListLock();
 2228|  4.41k|    if (!moduleLock) {
  ------------------
  |  Branch (2228:9): [True: 0, False: 4.41k]
  ------------------
 2229|      0|        PORT_SetError(SEC_ERROR_NOT_INITIALIZED);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2230|      0|        return NULL;
 2231|      0|    }
 2232|       |
 2233|  4.41k|    list = PK11_NewSlotList();
 2234|  4.41k|    loginList = PK11_NewSlotList();
 2235|  4.41k|    friendlyList = PK11_NewSlotList();
 2236|  4.41k|    if ((list == NULL) || (loginList == NULL) || (friendlyList == NULL)) {
  ------------------
  |  Branch (2236:9): [True: 0, False: 4.41k]
  |  Branch (2236:27): [True: 0, False: 4.41k]
  |  Branch (2236:50): [True: 0, False: 4.41k]
  ------------------
 2237|      0|        if (list)
  ------------------
  |  Branch (2237:13): [True: 0, False: 0]
  ------------------
 2238|      0|            PK11_FreeSlotList(list);
 2239|      0|        if (loginList)
  ------------------
  |  Branch (2239:13): [True: 0, False: 0]
  ------------------
 2240|      0|            PK11_FreeSlotList(loginList);
 2241|      0|        if (friendlyList)
  ------------------
  |  Branch (2241:13): [True: 0, False: 0]
  ------------------
 2242|      0|            PK11_FreeSlotList(friendlyList);
 2243|      0|        return NULL;
 2244|      0|    }
 2245|       |
 2246|  4.41k|    SECMOD_GetReadLock(moduleLock);
 2247|       |
 2248|  4.41k|    modules = SECMOD_GetDefaultModuleList();
 2249|  8.82k|    for (mlp = modules; mlp != NULL; mlp = mlp->next) {
  ------------------
  |  Branch (2249:25): [True: 4.41k, False: 4.41k]
  ------------------
 2250|  13.2k|        for (i = 0; i < mlp->module->slotCount; i++) {
  ------------------
  |  Branch (2250:21): [True: 8.82k, False: 4.41k]
  ------------------
 2251|  8.82k|            PK11SlotInfo *slot = mlp->module->slots[i];
 2252|       |
 2253|  8.82k|            if (pk11_IsPresentCertLoad(slot, loadCerts)) {
  ------------------
  |  Branch (2253:17): [True: 8.82k, False: 0]
  ------------------
 2254|  8.82k|                if (needRW && slot->readOnly)
  ------------------
  |  Branch (2254:21): [True: 0, False: 8.82k]
  |  Branch (2254:31): [True: 0, False: 0]
  ------------------
 2255|      0|                    continue;
 2256|  8.82k|                if ((type == CKM_INVALID_MECHANISM) || PK11_DoesMechanism(slot, type)) {
  ------------------
  |  |  155|  8.82k|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  |  Branch (2256:21): [True: 18, False: 8.81k]
  |  Branch (2256:56): [True: 8.81k, False: 0]
  ------------------
 2257|  8.82k|                    if (pk11_LoginStillRequired(slot, wincx)) {
  ------------------
  |  Branch (2257:25): [True: 0, False: 8.82k]
  ------------------
 2258|      0|                        if (PK11_IsFriendly(slot)) {
  ------------------
  |  Branch (2258:29): [True: 0, False: 0]
  ------------------
 2259|      0|                            PK11_AddSlotToList(friendlyList, slot, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 2260|      0|                        } else {
 2261|      0|                            PK11_AddSlotToList(loginList, slot, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 2262|      0|                        }
 2263|  8.82k|                    } else {
 2264|  8.82k|                        PK11_AddSlotToList(list, slot, PR_TRUE);
  ------------------
  |  |  437|  8.82k|#define PR_TRUE 1
  ------------------
 2265|  8.82k|                    }
 2266|  8.82k|                }
 2267|  8.82k|            }
 2268|  8.82k|        }
 2269|  4.41k|    }
 2270|  4.41k|    SECMOD_ReleaseReadLock(moduleLock);
 2271|       |
 2272|  4.41k|    pk11_MoveListToList(list, friendlyList);
 2273|  4.41k|    PK11_FreeSlotList(friendlyList);
 2274|  4.41k|    pk11_MoveListToList(list, loginList);
 2275|  4.41k|    PK11_FreeSlotList(loginList);
 2276|       |
 2277|  4.41k|    return list;
 2278|  4.41k|}
pk11_filterSlot:
 2312|  4.44k|{
 2313|  4.44k|    CK_MECHANISM_INFO mechanism_info;
 2314|  4.44k|    CK_RV crv = CKR_OK;
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
 2315|       |
 2316|       |    /* handle the only case where we don't actually fetch the mechanisms
 2317|       |     * on the fly */
 2318|  4.44k|    if ((keySize == 0) && (mechanism == CKM_RSA_PKCS) && (slot->hasRSAInfo)) {
  ------------------
  |  |  720|  4.44k|#define CKM_RSA_PKCS 0x00000001UL
  ------------------
  |  Branch (2318:9): [True: 4.44k, False: 6]
  |  Branch (2318:27): [True: 5, False: 4.43k]
  |  Branch (2318:58): [True: 4, False: 1]
  ------------------
 2319|      4|        mechanism_info.flags = slot->RSAInfoFlags;
 2320|  4.44k|    } else {
 2321|  4.44k|        if (!slot->isThreadSafe)
  ------------------
  |  Branch (2321:13): [True: 0, False: 4.44k]
  ------------------
 2322|      0|            PK11_EnterSlotMonitor(slot);
 2323|  4.44k|        crv = PK11_GETTAB(slot)->C_GetMechanismInfo(slot->slotID, mechanism,
  ------------------
  |  |  102|  4.44k|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 2324|  4.44k|                                                    &mechanism_info);
 2325|  4.44k|        if (!slot->isThreadSafe)
  ------------------
  |  Branch (2325:13): [True: 0, False: 4.44k]
  ------------------
 2326|      0|            PK11_ExitSlotMonitor(slot);
 2327|       |        /* if we were getting the RSA flags, save them */
 2328|  4.44k|        if ((crv == CKR_OK) && (mechanism == CKM_RSA_PKCS) && (!slot->hasRSAInfo)) {
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
                      if ((crv == CKR_OK) && (mechanism == CKM_RSA_PKCS) && (!slot->hasRSAInfo)) {
  ------------------
  |  |  720|  4.44k|#define CKM_RSA_PKCS 0x00000001UL
  ------------------
  |  Branch (2328:13): [True: 4.44k, False: 0]
  |  Branch (2328:32): [True: 1, False: 4.44k]
  |  Branch (2328:63): [True: 1, False: 0]
  ------------------
 2329|      1|            slot->RSAInfoFlags = mechanism_info.flags;
 2330|      1|            slot->hasRSAInfo = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
 2331|      1|        }
 2332|  4.44k|    }
 2333|       |    /* couldn't get the mechanism info */
 2334|  4.44k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (2334:9): [True: 0, False: 4.44k]
  ------------------
 2335|      0|        return PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 2336|      0|    }
 2337|  4.44k|    if (keySize && ((mechanism_info.ulMinKeySize > keySize) || (mechanism_info.ulMaxKeySize < keySize))) {
  ------------------
  |  Branch (2337:9): [True: 6, False: 4.44k]
  |  Branch (2337:21): [True: 0, False: 6]
  |  Branch (2337:64): [True: 2, False: 4]
  ------------------
 2338|       |        /* Token can do mechanism, but not at the key size we
 2339|       |         * want */
 2340|      2|        return PR_TRUE;
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
 2341|      2|    }
 2342|  4.44k|    if (mechanismInfoFlags && ((mechanism_info.flags & mechanismInfoFlags) !=
  ------------------
  |  Branch (2342:9): [True: 4.44k, False: 0]
  |  Branch (2342:31): [True: 0, False: 4.44k]
  ------------------
 2343|  4.44k|                               mechanismInfoFlags)) {
 2344|      0|        return PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 2345|      0|    }
 2346|  4.44k|    return PR_FALSE;
  ------------------
  |  |  438|  4.44k|#define PR_FALSE 0
  ------------------
 2347|  4.44k|}
PK11_GetBestSlotMultipleWithAttributes:
 2362|  10.1k|{
 2363|  10.1k|    PK11SlotList *list = NULL;
 2364|  10.1k|    PK11SlotListElement *le;
 2365|  10.1k|    PK11SlotInfo *slot = NULL;
 2366|  10.1k|    PRBool freeit = PR_FALSE;
  ------------------
  |  |  438|  10.1k|#define PR_FALSE 0
  ------------------
 2367|  10.1k|    PRBool listNeedLogin = PR_FALSE;
  ------------------
  |  |  438|  10.1k|#define PR_FALSE 0
  ------------------
 2368|  10.1k|    unsigned int i;
 2369|  10.1k|    SECStatus rv;
 2370|       |
 2371|  10.1k|    list = PK11_GetSlotList(type[0]);
 2372|       |
 2373|  10.1k|    if ((list == NULL) || (list->head == NULL)) {
  ------------------
  |  Branch (2373:9): [True: 4.40k, False: 5.70k]
  |  Branch (2373:27): [True: 5, False: 5.69k]
  ------------------
 2374|       |        /* We need to look up all the tokens for the mechanism */
 2375|  4.40k|        list = PK11_GetAllTokens(type[0], PR_FALSE, PR_TRUE, wincx);
  ------------------
  |  |  438|  4.40k|#define PR_FALSE 0
  ------------------
                      list = PK11_GetAllTokens(type[0], PR_FALSE, PR_TRUE, wincx);
  ------------------
  |  |  437|  4.40k|#define PR_TRUE 1
  ------------------
 2376|  4.40k|        freeit = PR_TRUE;
  ------------------
  |  |  437|  4.40k|#define PR_TRUE 1
  ------------------
 2377|  4.40k|    }
 2378|       |
 2379|       |    /* no one can do it! */
 2380|  10.1k|    if (list == NULL) {
  ------------------
  |  Branch (2380:9): [True: 0, False: 10.1k]
  ------------------
 2381|      0|        PORT_SetError(SEC_ERROR_NO_TOKEN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2382|      0|        return NULL;
 2383|      0|    }
 2384|       |
 2385|  10.1k|    PORT_SetError(0);
  ------------------
  |  |   65|  10.1k|#define PORT_SetError PORT_SetError_Util
  ------------------
 2386|       |
 2387|  10.1k|    listNeedLogin = PR_FALSE;
  ------------------
  |  |  438|  10.1k|#define PR_FALSE 0
  ------------------
 2388|  15.7k|    for (i = 0; i < mech_count; i++) {
  ------------------
  |  Branch (2388:17): [True: 10.1k, False: 5.65k]
  ------------------
 2389|  10.1k|        if ((type[i] != CKM_FAKE_RANDOM) &&
  ------------------
  |  |  154|  10.1k|#define CKM_FAKE_RANDOM 0x80000efeUL
  ------------------
  |  Branch (2389:13): [True: 10.1k, False: 0]
  ------------------
 2390|  10.1k|            (type[i] != CKM_SHA_1) &&
  ------------------
  |  |  859|  10.1k|#define CKM_SHA_1 0x00000220UL
  ------------------
  |  Branch (2390:13): [True: 4.48k, False: 5.61k]
  ------------------
 2391|  10.1k|            (type[i] != CKM_SHA224) &&
  ------------------
  |  |  887|  4.48k|#define CKM_SHA224 0x00000255UL
  ------------------
  |  Branch (2391:13): [True: 4.48k, False: 1]
  ------------------
 2392|  10.1k|            (type[i] != CKM_SHA256) &&
  ------------------
  |  |  876|  4.48k|#define CKM_SHA256 0x00000250UL
  ------------------
  |  Branch (2392:13): [True: 4.44k, False: 35]
  ------------------
 2393|  10.1k|            (type[i] != CKM_SHA384) &&
  ------------------
  |  |  879|  4.44k|#define CKM_SHA384 0x00000260UL
  ------------------
  |  Branch (2393:13): [True: 4.44k, False: 3]
  ------------------
 2394|  10.1k|            (type[i] != CKM_SHA512) &&
  ------------------
  |  |  882|  4.44k|#define CKM_SHA512 0x00000270UL
  ------------------
  |  Branch (2394:13): [True: 4.44k, False: 1]
  ------------------
 2395|  10.1k|            (type[i] != CKM_MD5) &&
  ------------------
  |  |  853|  4.44k|#define CKM_MD5 0x00000210UL
  ------------------
  |  Branch (2395:13): [True: 4.44k, False: 0]
  ------------------
 2396|  10.1k|            (type[i] != CKM_MD2)) {
  ------------------
  |  |  847|  4.44k|#define CKM_MD2 0x00000200UL
  ------------------
  |  Branch (2396:13): [True: 4.44k, False: 0]
  ------------------
 2397|  4.44k|            listNeedLogin = PR_TRUE;
  ------------------
  |  |  437|  4.44k|#define PR_TRUE 1
  ------------------
 2398|  4.44k|            break;
 2399|  4.44k|        }
 2400|  10.1k|    }
 2401|       |
 2402|  10.1k|    for (le = PK11_GetFirstSafe(list); le;
  ------------------
  |  Branch (2402:40): [True: 10.1k, False: 1]
  ------------------
 2403|  10.1k|         le = PK11_GetNextSafe(list, le, PR_TRUE)) {
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
 2404|  10.1k|        if (PK11_IsPresent(le->slot)) {
  ------------------
  |  Branch (2404:13): [True: 10.1k, False: 0]
  ------------------
 2405|  10.1k|            PRBool doExit = PR_FALSE;
  ------------------
  |  |  438|  10.1k|#define PR_FALSE 0
  ------------------
 2406|  20.2k|            for (i = 0; i < mech_count; i++) {
  ------------------
  |  Branch (2406:25): [True: 10.1k, False: 10.1k]
  ------------------
 2407|  10.1k|                if (!PK11_DoesMechanism(le->slot, type[i])) {
  ------------------
  |  Branch (2407:21): [True: 0, False: 10.1k]
  ------------------
 2408|      0|                    doExit = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 2409|      0|                    break;
 2410|      0|                }
 2411|  10.1k|                if ((mechanismInfoFlags && mechanismInfoFlags[i]) ||
  ------------------
  |  Branch (2411:22): [True: 4.44k, False: 5.65k]
  |  Branch (2411:44): [True: 4.44k, False: 0]
  ------------------
 2412|  10.1k|                    (keySize && keySize[i])) {
  ------------------
  |  Branch (2412:22): [True: 0, False: 5.65k]
  |  Branch (2412:33): [True: 0, False: 0]
  ------------------
 2413|  4.44k|                    if (pk11_filterSlot(le->slot, type[i],
  ------------------
  |  Branch (2413:25): [True: 2, False: 4.44k]
  ------------------
 2414|  4.44k|                                        mechanismInfoFlags ? mechanismInfoFlags[i] : 0,
  ------------------
  |  Branch (2414:41): [True: 4.44k, False: 0]
  ------------------
 2415|  4.44k|                                        keySize ? keySize[i] : 0)) {
  ------------------
  |  Branch (2415:41): [True: 4.44k, False: 0]
  ------------------
 2416|      2|                        doExit = PR_TRUE;
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
 2417|      2|                        break;
 2418|      2|                    }
 2419|  4.44k|                }
 2420|  10.1k|            }
 2421|       |
 2422|  10.1k|            if (doExit)
  ------------------
  |  Branch (2422:17): [True: 2, False: 10.1k]
  ------------------
 2423|      2|                continue;
 2424|       |
 2425|  10.1k|            if (listNeedLogin && le->slot->needLogin) {
  ------------------
  |  Branch (2425:17): [True: 4.44k, False: 5.65k]
  |  Branch (2425:34): [True: 0, False: 4.44k]
  ------------------
 2426|      0|                rv = PK11_Authenticate(le->slot, PR_TRUE, wincx);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 2427|      0|                if (rv != SECSuccess)
  ------------------
  |  Branch (2427:21): [True: 0, False: 0]
  ------------------
 2428|      0|                    continue;
 2429|      0|            }
 2430|  10.1k|            slot = le->slot;
 2431|  10.1k|            PK11_ReferenceSlot(slot);
 2432|  10.1k|            PK11_FreeSlotListElement(list, le);
 2433|  10.1k|            if (freeit) {
  ------------------
  |  Branch (2433:17): [True: 4.40k, False: 5.69k]
  ------------------
 2434|  4.40k|                PK11_FreeSlotList(list);
 2435|  4.40k|            }
 2436|  10.1k|            return slot;
 2437|  10.1k|        }
 2438|  10.1k|    }
 2439|      1|    if (freeit) {
  ------------------
  |  Branch (2439:9): [True: 1, False: 0]
  ------------------
 2440|      1|        PK11_FreeSlotList(list);
 2441|      1|    }
 2442|      1|    if (PORT_GetError() == 0) {
  ------------------
  |  |   62|      1|#define PORT_GetError PORT_GetError_Util
  ------------------
  |  Branch (2442:9): [True: 1, False: 0]
  ------------------
 2443|      1|        PORT_SetError(SEC_ERROR_NO_TOKEN);
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
 2444|      1|    }
 2445|      1|    return NULL;
 2446|  10.1k|}
PK11_GetBestSlot:
 2459|  5.65k|{
 2460|  5.65k|    return PK11_GetBestSlotMultipleWithAttributes(&type, NULL, NULL, 1, wincx);
 2461|  5.65k|}
PK11_GetBestSlotWithAttributes:
 2466|  4.44k|{
 2467|  4.44k|    return PK11_GetBestSlotMultipleWithAttributes(&type, &mechanismFlags,
 2468|  4.44k|                                                  &keySize, 1, wincx);
 2469|  4.44k|}
PK11Slot_SetNSSToken:
 2693|      4|{
 2694|      4|    NSSToken *old;
 2695|      4|    if (nsst) {
  ------------------
  |  Branch (2695:9): [True: 2, False: 2]
  ------------------
 2696|      2|        nsst = nssToken_AddRef(nsst);
 2697|      2|    }
 2698|       |
 2699|      4|    PZ_Lock(sl->nssTokenLock);
  ------------------
  |  |  245|      4|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 2700|      4|    old = sl->nssToken;
 2701|      4|    sl->nssToken = nsst;
 2702|      4|    PZ_Unlock(sl->nssTokenLock);
  ------------------
  |  |  246|      4|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 2703|       |
 2704|      4|    if (old) {
  ------------------
  |  Branch (2704:9): [True: 2, False: 2]
  ------------------
 2705|      2|        (void)nssToken_Destroy(old);
 2706|      2|    }
 2707|      4|}
PK11Slot_GetNSSToken:
 2711|  59.6k|{
 2712|  59.6k|    NSSToken *rv = NULL;
 2713|       |
 2714|  59.6k|    PZ_Lock(sl->nssTokenLock);
  ------------------
  |  |  245|  59.6k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 2715|  59.6k|    if (sl->nssToken) {
  ------------------
  |  Branch (2715:9): [True: 59.5k, False: 4]
  ------------------
 2716|  59.5k|        rv = nssToken_AddRef(sl->nssToken);
 2717|  59.5k|    }
 2718|  59.6k|    PZ_Unlock(sl->nssTokenLock);
  ------------------
  |  |  246|  59.6k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 2719|       |
 2720|  59.6k|    return rv;
 2721|  59.6k|}
pk11slot.c:pk11_FreeSlotListStatic:
  152|  13.2k|{
  153|  13.2k|    PK11SlotListElement *le, *next;
  154|  13.2k|    if (list == NULL)
  ------------------
  |  Branch (154:9): [True: 0, False: 13.2k]
  ------------------
  155|      0|        return;
  156|       |
  157|  22.0k|    for (le = list->head; le; le = next) {
  ------------------
  |  Branch (157:27): [True: 8.82k, False: 13.2k]
  ------------------
  158|  8.82k|        next = le->next;
  159|  8.82k|        PK11_FreeSlotListElement(list, le);
  160|  8.82k|    }
  161|  13.2k|    if (list->lock) {
  ------------------
  |  Branch (161:9): [True: 13.2k, False: 0]
  ------------------
  162|  13.2k|        PZ_DestroyLock(list->lock);
  ------------------
  |  |  244|  13.2k|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  163|  13.2k|    }
  164|  13.2k|    list->lock = NULL;
  165|  13.2k|    list->head = NULL;
  166|  13.2k|}
pk11slot.c:pk11_InitSlotListStatic:
  823|     20|{
  824|     20|    list->lock = PZ_NewLock(nssILockList);
  ------------------
  |  |  243|     20|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  825|     20|    list->head = NULL;
  826|     20|}
pk11slot.c:pk11_ReadProfileList:
 1205|      2|{
 1206|      2|    CK_ATTRIBUTE findTemp[2];
 1207|      2|    CK_ATTRIBUTE *attrs;
 1208|      2|    CK_BBOOL cktrue = CK_TRUE;
  ------------------
  |  |   22|      2|#define CK_TRUE 1
  ------------------
 1209|      2|    CK_OBJECT_CLASS oclass = CKO_PROFILE;
  ------------------
  |  |  334|      2|#define CKO_PROFILE 0x00000009UL
  ------------------
 1210|      2|    size_t tsize;
 1211|      2|    int objCount;
 1212|      2|    CK_OBJECT_HANDLE *handles = NULL;
 1213|      2|    int i;
 1214|       |
 1215|      2|    attrs = findTemp;
 1216|      2|    PK11_SETATTRS(attrs, CKA_TOKEN, &cktrue, sizeof(cktrue));
  ------------------
  |  |  104|      2|    (x)->type = (id);              \
  |  |  105|      2|    (x)->pValue = (v);             \
  |  |  106|      2|    (x)->ulValueLen = (l);
  ------------------
 1217|      2|    attrs++;
 1218|      2|    PK11_SETATTRS(attrs, CKA_CLASS, &oclass, sizeof(oclass));
  ------------------
  |  |  104|      2|    (x)->type = (id);              \
  |  |  105|      2|    (x)->pValue = (v);             \
  |  |  106|      2|    (x)->ulValueLen = (l);
  ------------------
 1219|      2|    attrs++;
 1220|      2|    tsize = attrs - findTemp;
 1221|      2|    PORT_Assert(tsize <= sizeof(findTemp) / sizeof(CK_ATTRIBUTE));
  ------------------
  |  |  120|      2|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      2|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1222|       |
 1223|      2|    if (slot->profileList) {
  ------------------
  |  Branch (1223:9): [True: 0, False: 2]
  ------------------
 1224|      0|        PORT_Free(slot->profileList);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1225|      0|        slot->profileList = NULL;
 1226|      0|    }
 1227|      2|    slot->profileCount = 0;
 1228|       |
 1229|      2|    objCount = 0;
 1230|      2|    handles = pk11_FindObjectsByTemplate(slot, findTemp, tsize, &objCount);
 1231|      2|    if (handles == NULL) {
  ------------------
  |  Branch (1231:9): [True: 2, False: 0]
  ------------------
 1232|      2|        if (objCount < 0) {
  ------------------
  |  Branch (1232:13): [True: 0, False: 2]
  ------------------
 1233|      0|            return SECFailure; /* error code is set */
 1234|      0|        }
 1235|      2|        PORT_Assert(objCount == 0);
  ------------------
  |  |  120|      2|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      2|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1236|      2|        return SECSuccess;
 1237|      2|    }
 1238|       |
 1239|      0|    slot->profileList = (CK_PROFILE_ID *)
 1240|      0|        PORT_Alloc(objCount * sizeof(CK_PROFILE_ID));
  ------------------
  |  |   52|      0|#define PORT_Alloc PORT_Alloc_Util
  ------------------
 1241|      0|    if (slot->profileList == NULL) {
  ------------------
  |  Branch (1241:9): [True: 0, False: 0]
  ------------------
 1242|      0|        PORT_Free(handles);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1243|      0|        return SECFailure; /* error code is set */
 1244|      0|    }
 1245|       |
 1246|      0|    for (i = 0; i < objCount; i++) {
  ------------------
  |  Branch (1246:17): [True: 0, False: 0]
  ------------------
 1247|      0|        CK_ULONG value;
 1248|       |
 1249|      0|        value = PK11_ReadULongAttribute(slot, handles[i], CKA_PROFILE_ID);
  ------------------
  |  |  663|      0|#define CKA_PROFILE_ID 0x00000601UL
  ------------------
 1250|      0|        if (value == CK_UNAVAILABLE_INFORMATION) {
  ------------------
  |  |   64|      0|#define CK_UNAVAILABLE_INFORMATION (~0UL)
  ------------------
  |  Branch (1250:13): [True: 0, False: 0]
  ------------------
 1251|      0|            continue;
 1252|      0|        }
 1253|      0|        slot->profileList[slot->profileCount++] = value;
 1254|      0|    }
 1255|       |
 1256|      0|    PORT_Free(handles);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1257|      0|    return SECSuccess;
 1258|      0|}
pk11slot.c:pk11_isRootSlot:
 1512|      2|{
 1513|      2|    CK_ATTRIBUTE findTemp[1];
 1514|      2|    CK_ATTRIBUTE *attrs;
 1515|      2|    CK_OBJECT_CLASS oclass = CKO_NSS_BUILTIN_ROOT_LIST;
  ------------------
  |  |   38|      2|#define CKO_NSS_BUILTIN_ROOT_LIST (CKO_NSS + 4)
  |  |  ------------------
  |  |  |  |   33|      2|#define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  335|      2|#define CKO_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      2|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1516|      2|    size_t tsize;
 1517|      2|    CK_OBJECT_HANDLE handle;
 1518|       |
 1519|      2|    attrs = findTemp;
 1520|      2|    PK11_SETATTRS(attrs, CKA_CLASS, &oclass, sizeof(oclass));
  ------------------
  |  |  104|      2|    (x)->type = (id);              \
  |  |  105|      2|    (x)->pValue = (v);             \
  |  |  106|      2|    (x)->ulValueLen = (l);
  ------------------
 1521|      2|    attrs++;
 1522|      2|    tsize = attrs - findTemp;
 1523|      2|    PORT_Assert(tsize <= sizeof(findTemp) / sizeof(CK_ATTRIBUTE));
  ------------------
  |  |  120|      2|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      2|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1524|       |
 1525|      2|    handle = pk11_FindObjectByTemplate(slot, findTemp, tsize);
 1526|      2|    if (handle == CK_INVALID_HANDLE) {
  ------------------
  |  |   78|      2|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (1526:9): [True: 2, False: 0]
  ------------------
 1527|      2|        return PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 1528|      2|    }
 1529|      0|    return PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1530|      2|}
pk11slot.c:pk11_IsPresentCertLoad:
 1613|  18.9k|{
 1614|  18.9k|    CK_SLOT_INFO slotInfo;
 1615|  18.9k|    CK_SESSION_INFO sessionInfo;
 1616|  18.9k|    CK_RV crv;
 1617|       |
 1618|       |    /* disabled slots are never present */
 1619|  18.9k|    if (slot->disabled) {
  ------------------
  |  Branch (1619:9): [True: 0, False: 18.9k]
  ------------------
 1620|      0|        return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1621|      0|    }
 1622|       |
 1623|       |    /* permanent slots are always present */
 1624|  18.9k|    if (slot->isPerm && (slot->session != CK_INVALID_HANDLE)) {
  ------------------
  |  |   78|  18.9k|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (1624:9): [True: 18.9k, False: 0]
  |  Branch (1624:25): [True: 18.9k, False: 0]
  ------------------
 1625|  18.9k|        return PR_TRUE;
  ------------------
  |  |  437|  18.9k|#define PR_TRUE 1
  ------------------
 1626|  18.9k|    }
 1627|       |
 1628|      0|    NSSToken *nssToken = PK11Slot_GetNSSToken(slot);
 1629|      0|    if (nssToken) {
  ------------------
  |  Branch (1629:9): [True: 0, False: 0]
  ------------------
 1630|      0|        PRBool present = nssToken_IsPresent(nssToken);
 1631|      0|        (void)nssToken_Destroy(nssToken);
 1632|      0|        return present;
 1633|      0|    }
 1634|       |
 1635|       |    /* removable slots have a flag that says they are present */
 1636|      0|    if (PK11_GetSlotInfo(slot, &slotInfo) != SECSuccess) {
  ------------------
  |  Branch (1636:9): [True: 0, False: 0]
  ------------------
 1637|      0|        return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1638|      0|    }
 1639|       |
 1640|      0|    if ((slotInfo.flags & CKF_TOKEN_PRESENT) == 0) {
  ------------------
  |  |  131|      0|#define CKF_TOKEN_PRESENT 0x00000001UL    /* a token is there */
  ------------------
  |  Branch (1640:9): [True: 0, False: 0]
  ------------------
 1641|       |        /* if the slot is no longer present, close the session */
 1642|      0|        if (slot->session != CK_INVALID_HANDLE) {
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (1642:13): [True: 0, False: 0]
  ------------------
 1643|      0|            if (!slot->isThreadSafe) {
  ------------------
  |  Branch (1643:17): [True: 0, False: 0]
  ------------------
 1644|      0|                PK11_EnterSlotMonitor(slot);
 1645|      0|            }
 1646|      0|            PK11_GETTAB(slot)
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1647|      0|                ->C_CloseSession(slot->session);
 1648|      0|            slot->session = CK_INVALID_HANDLE;
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
 1649|      0|            if (!slot->isThreadSafe) {
  ------------------
  |  Branch (1649:17): [True: 0, False: 0]
  ------------------
 1650|      0|                PK11_ExitSlotMonitor(slot);
 1651|      0|            }
 1652|      0|        }
 1653|      0|        return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1654|      0|    }
 1655|       |
 1656|       |    /* use the session Info to determine if the card has been removed and then
 1657|       |     * re-inserted */
 1658|      0|    if (slot->session != CK_INVALID_HANDLE) {
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (1658:9): [True: 0, False: 0]
  ------------------
 1659|      0|        if (slot->isThreadSafe) {
  ------------------
  |  Branch (1659:13): [True: 0, False: 0]
  ------------------
 1660|      0|            PK11_EnterSlotMonitor(slot);
 1661|      0|        }
 1662|      0|        crv = PK11_GETTAB(slot)->C_GetSessionInfo(slot->session, &sessionInfo);
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1663|      0|        if (crv != CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1663:13): [True: 0, False: 0]
  ------------------
 1664|      0|            PK11_GETTAB(slot)
  ------------------
  |  |  102|      0|#define PK11_GETTAB(x) ((CK_FUNCTION_LIST_3_0_PTR)((x)->functionList))
  ------------------
 1665|      0|                ->C_CloseSession(slot->session);
 1666|      0|            slot->session = CK_INVALID_HANDLE;
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
 1667|      0|        }
 1668|      0|        if (slot->isThreadSafe) {
  ------------------
  |  Branch (1668:13): [True: 0, False: 0]
  ------------------
 1669|      0|            PK11_ExitSlotMonitor(slot);
 1670|      0|        }
 1671|      0|    }
 1672|       |
 1673|       |    /* card has not been removed, current token info is correct */
 1674|      0|    if (slot->session != CK_INVALID_HANDLE)
  ------------------
  |  |   78|      0|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (1674:9): [True: 0, False: 0]
  ------------------
 1675|      0|        return PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1676|       |
 1677|       |    /* initialize the token info state */
 1678|      0|    if (PK11_InitToken(slot, loadCerts) != SECSuccess) {
  ------------------
  |  Branch (1678:9): [True: 0, False: 0]
  ------------------
 1679|      0|        return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1680|      0|    }
 1681|       |
 1682|      0|    return PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1683|      0|}
pk11slot.c:pk11_zeroTerminatedToBlankPadded:
 1911|      4|{
 1912|      4|    CK_CHAR *walk = buffer;
 1913|      4|    CK_CHAR *end = buffer + buffer_size;
 1914|       |
 1915|       |    /* find the NULL */
 1916|    196|    while (walk < end && *walk != '\0') {
  ------------------
  |  Branch (1916:12): [True: 192, False: 4]
  |  Branch (1916:26): [True: 192, False: 0]
  ------------------
 1917|    192|        walk++;
 1918|    192|    }
 1919|       |
 1920|       |    /* clear out the buffer */
 1921|      4|    while (walk < end) {
  ------------------
  |  Branch (1921:12): [True: 0, False: 4]
  ------------------
 1922|      0|        *walk++ = ' ';
 1923|      0|    }
 1924|      4|}

SECMOD_Init:
   37|      2|{
   38|       |    /* don't initialize twice */
   39|      2|    if (moduleLock)
  ------------------
  |  Branch (39:9): [True: 1, False: 1]
  ------------------
   40|      1|        return;
   41|       |
   42|      1|    moduleLock = SECMOD_NewListLock();
   43|      1|    PK11_InitSlotLists();
   44|      1|}
SECMOD_Shutdown:
   48|      1|{
   49|       |    /* destroy the lock */
   50|      1|    if (moduleLock) {
  ------------------
  |  Branch (50:9): [True: 1, False: 0]
  ------------------
   51|      1|        SECMOD_DestroyListLock(moduleLock);
   52|      1|        moduleLock = NULL;
   53|      1|    }
   54|       |    /* free the internal module */
   55|      1|    if (internalModule) {
  ------------------
  |  Branch (55:9): [True: 1, False: 0]
  ------------------
   56|      1|        SECMOD_DestroyModule(internalModule);
   57|      1|        internalModule = NULL;
   58|      1|    }
   59|       |
   60|       |    /* free the default database module */
   61|      1|    if (defaultDBModule) {
  ------------------
  |  Branch (61:9): [True: 1, False: 0]
  ------------------
   62|      1|        SECMOD_DestroyModule(defaultDBModule);
   63|      1|        defaultDBModule = NULL;
   64|      1|    }
   65|       |
   66|       |    /* destroy the list */
   67|      1|    if (modules) {
  ------------------
  |  Branch (67:9): [True: 1, False: 0]
  ------------------
   68|      1|        SECMOD_DestroyModuleList(modules);
   69|      1|        modules = NULL;
   70|      1|    }
   71|       |
   72|      1|    if (modulesDB) {
  ------------------
  |  Branch (72:9): [True: 1, False: 0]
  ------------------
   73|      1|        SECMOD_DestroyModuleList(modulesDB);
   74|      1|        modulesDB = NULL;
   75|      1|    }
   76|       |
   77|      1|    if (modulesUnload) {
  ------------------
  |  Branch (77:9): [True: 0, False: 1]
  ------------------
   78|      0|        SECMOD_DestroyModuleList(modulesUnload);
   79|      0|        modulesUnload = NULL;
   80|      0|    }
   81|       |
   82|       |    /* make all the slots and the lists go away */
   83|      1|    PK11_DestroySlotLists();
   84|       |
   85|      1|    nss_DumpModuleLog();
   86|       |
   87|      1|#ifdef DEBUG
   88|      1|    if (PR_GetEnvSecure("NSS_STRICT_SHUTDOWN")) {
  ------------------
  |  Branch (88:9): [True: 0, False: 1]
  ------------------
   89|      0|        PORT_Assert(secmod_PrivateModuleCount == 0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|      0|    }
   91|      1|#endif
   92|      1|    if (secmod_PrivateModuleCount) {
  ------------------
  |  Branch (92:9): [True: 0, False: 1]
  ------------------
   93|      0|        PORT_SetError(SEC_ERROR_BUSY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   94|      0|        return SECFailure;
   95|      0|    }
   96|      1|    return SECSuccess;
   97|      1|}
SECMOD_GetSystemFIPSEnabled:
  101|      2|{
  102|      2|    return NSS_GetSystemFIPSEnabled();
  103|      2|}
secmod_AddModuleToList:
  116|      2|{
  117|      2|    SECMODModuleList *mlp, *newListElement, *last = NULL;
  118|       |
  119|      2|    newListElement = SECMOD_NewModuleListElement();
  120|      2|    if (newListElement == NULL) {
  ------------------
  |  Branch (120:9): [True: 0, False: 2]
  ------------------
  121|      0|        return SECFailure;
  122|      0|    }
  123|       |
  124|      2|    newListElement->module = SECMOD_ReferenceModule(newModule);
  125|       |
  126|      2|    SECMOD_GetWriteLock(moduleLock);
  127|       |    /* Added it to the end (This is very inefficient, but Adding a module
  128|       |     * on the fly should happen maybe 2-3 times through the life this program
  129|       |     * on a given computer, and this list should be *SHORT*. */
  130|      2|    for (mlp = *moduleList; mlp != NULL; mlp = mlp->next) {
  ------------------
  |  Branch (130:29): [True: 0, False: 2]
  ------------------
  131|      0|        last = mlp;
  132|      0|    }
  133|       |
  134|      2|    if (last == NULL) {
  ------------------
  |  Branch (134:9): [True: 2, False: 0]
  ------------------
  135|      2|        *moduleList = newListElement;
  136|      2|    } else {
  137|      0|        SECMOD_AddList(last, newListElement, NULL);
  138|      0|    }
  139|      2|    SECMOD_ReleaseWriteLock(moduleLock);
  140|      2|    return SECSuccess;
  141|      2|}
SECMOD_AddModuleToList:
  145|      1|{
  146|      1|    if (newModule->internal && !internalModule) {
  ------------------
  |  Branch (146:9): [True: 1, False: 0]
  |  Branch (146:32): [True: 1, False: 0]
  ------------------
  147|      1|        internalModule = SECMOD_ReferenceModule(newModule);
  148|      1|    }
  149|      1|    return secmod_AddModuleToList(&modules, newModule);
  150|      1|}
SECMOD_AddModuleToDBOnlyList:
  154|      1|{
  155|      1|    if (defaultDBModule && SECMOD_GetDefaultModDBFlag(newModule)) {
  ------------------
  |  Branch (155:9): [True: 0, False: 1]
  |  Branch (155:28): [True: 0, False: 0]
  ------------------
  156|      0|        SECMOD_DestroyModule(defaultDBModule);
  157|      0|        defaultDBModule = SECMOD_ReferenceModule(newModule);
  158|      1|    } else if (defaultDBModule == NULL) {
  ------------------
  |  Branch (158:16): [True: 1, False: 0]
  ------------------
  159|      1|        defaultDBModule = SECMOD_ReferenceModule(newModule);
  160|      1|    }
  161|      1|    return secmod_AddModuleToList(&modulesDB, newModule);
  162|      1|}
SECMOD_GetDefaultModuleList:
  175|  4.41k|{
  176|  4.41k|    return modules;
  177|  4.41k|}
SECMOD_GetDefaultModuleListLock:
  202|  4.41k|{
  203|  4.41k|    return moduleLock;
  204|  4.41k|}
SECMOD_NewModuleListElement:
  839|      2|{
  840|      2|    SECMODModuleList *newModList;
  841|       |
  842|      2|    newModList = (SECMODModuleList *)PORT_Alloc(sizeof(SECMODModuleList));
  ------------------
  |  |   52|      2|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  843|      2|    if (newModList) {
  ------------------
  |  Branch (843:9): [True: 2, False: 0]
  ------------------
  844|      2|        newModList->next = NULL;
  845|      2|        newModList->module = NULL;
  846|      2|    }
  847|      2|    return newModList;
  848|      2|}
SECMOD_ReferenceModule:
  855|      5|{
  856|      5|    PZ_Lock(module->refLock);
  ------------------
  |  |  245|      5|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  857|      5|    PORT_Assert(module->refCount > 0);
  ------------------
  |  |  120|      5|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      5|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  858|       |
  859|      5|    module->refCount++;
  860|      5|    PZ_Unlock(module->refLock);
  ------------------
  |  |  246|      5|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  861|      5|    return module;
  862|      5|}
SECMOD_DestroyModule:
  867|      7|{
  868|      7|    PRBool willfree = PR_FALSE;
  ------------------
  |  |  438|      7|#define PR_FALSE 0
  ------------------
  869|      7|    int slotCount;
  870|      7|    int i;
  871|       |
  872|      7|    PZ_Lock(module->refLock);
  ------------------
  |  |  245|      7|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  873|      7|    if (module->refCount-- == 1) {
  ------------------
  |  Branch (873:9): [True: 2, False: 5]
  ------------------
  874|      2|        willfree = PR_TRUE;
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
  875|      2|    }
  876|      7|    PORT_Assert(willfree || (module->refCount > 0));
  ------------------
  |  |  120|      7|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     12|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 2, False: 5]
  |  |  |  |  |  Branch (208:7): [True: 5, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  877|      7|    PZ_Unlock(module->refLock);
  ------------------
  |  |  246|      7|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  878|       |
  879|      7|    if (!willfree) {
  ------------------
  |  Branch (879:9): [True: 5, False: 2]
  ------------------
  880|      5|        return;
  881|      5|    }
  882|       |
  883|      2|    if (module->parent != NULL) {
  ------------------
  |  Branch (883:9): [True: 1, False: 1]
  ------------------
  884|      1|        SECMODModule *parent = module->parent;
  885|       |        /* paranoia, don't loop forever if the modules are looped */
  886|      1|        module->parent = NULL;
  887|      1|        SECMOD_DestroyModule(parent);
  888|      1|    }
  889|       |
  890|       |    /* slots can't really disappear until our module starts freeing them,
  891|       |     * so this check is safe */
  892|      2|    slotCount = module->slotCount;
  893|      2|    if (slotCount == 0) {
  ------------------
  |  Branch (893:9): [True: 1, False: 1]
  ------------------
  894|      1|        SECMOD_SlotDestroyModule(module, PR_FALSE);
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  895|      1|        return;
  896|      1|    }
  897|       |
  898|       |    /* now free all out slots, when they are done, they will cause the
  899|       |     * module to disappear altogether */
  900|      3|    for (i = 0; i < slotCount; i++) {
  ------------------
  |  Branch (900:17): [True: 2, False: 1]
  ------------------
  901|      2|        if (!module->slots[i]->disabled) {
  ------------------
  |  Branch (901:13): [True: 2, False: 0]
  ------------------
  902|      2|            PK11_ClearSlotList(module->slots[i]);
  903|      2|        }
  904|      2|        PK11_FreeSlot(module->slots[i]);
  905|      2|    }
  906|       |    /* WARNING: once the last slot has been freed is it possible (even likely)
  907|       |     * that module is no more... touching it now is a good way to go south */
  908|      1|}
SECMOD_SlotDestroyModule:
  914|      3|{
  915|      3|    PRBool willfree = PR_FALSE;
  ------------------
  |  |  438|      3|#define PR_FALSE 0
  ------------------
  916|      3|    if (fromSlot) {
  ------------------
  |  Branch (916:9): [True: 2, False: 1]
  ------------------
  917|      2|        PORT_Assert(module->refCount == 0);
  ------------------
  |  |  120|      2|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      2|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  918|      2|        PZ_Lock(module->refLock);
  ------------------
  |  |  245|      2|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  919|      2|        if (module->slotCount-- == 1) {
  ------------------
  |  Branch (919:13): [True: 1, False: 1]
  ------------------
  920|      1|            willfree = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  921|      1|        }
  922|      2|        PORT_Assert(willfree || (module->slotCount > 0));
  ------------------
  |  |  120|      2|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      3|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 1, False: 1]
  |  |  |  |  |  Branch (208:7): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  923|      2|        PZ_Unlock(module->refLock);
  ------------------
  |  |  246|      2|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  924|      2|        if (!willfree)
  ------------------
  |  Branch (924:13): [True: 1, False: 1]
  ------------------
  925|      1|            return;
  926|      2|    }
  927|       |
  928|      2|    if (module == pendingModule) {
  ------------------
  |  Branch (928:9): [True: 0, False: 2]
  ------------------
  929|      0|        pendingModule = NULL;
  930|      0|    }
  931|       |
  932|      2|    if (module->loaded) {
  ------------------
  |  Branch (932:9): [True: 2, False: 0]
  ------------------
  933|      2|        SECMOD_UnloadModule(module);
  934|      2|    }
  935|      2|    PZ_DestroyLock(module->refLock);
  ------------------
  |  |  244|      2|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  936|      2|    PORT_FreeArena(module->arena, PR_FALSE);
  ------------------
  |  |   61|      2|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                  PORT_FreeArena(module->arena, PR_FALSE);
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  937|      2|    secmod_PrivateModuleCount--;
  938|      2|}
SECMOD_DestroyModuleListElement:
  946|      2|{
  947|      2|    SECMODModuleList *next = element->next;
  948|       |
  949|      2|    if (element->module) {
  ------------------
  |  Branch (949:9): [True: 2, False: 0]
  ------------------
  950|      2|        SECMOD_DestroyModule(element->module);
  951|      2|        element->module = NULL;
  952|      2|    }
  953|      2|    PORT_Free(element);
  ------------------
  |  |   60|      2|#define PORT_Free PORT_Free_Util
  ------------------
  954|      2|    return next;
  955|      2|}
SECMOD_DestroyModuleList:
  962|      2|{
  963|      2|    SECMODModuleList *lp;
  964|       |
  965|      4|    for (lp = list; lp != NULL; lp = SECMOD_DestroyModuleListElement(lp))
  ------------------
  |  Branch (965:21): [True: 2, False: 2]
  ------------------
  966|      2|        ;
  967|      2|}

CERT_DecodeCertPackage:
  254|  8.68k|{
  255|  8.68k|    unsigned char *cp;
  256|  8.68k|    unsigned char *bincert = NULL;
  257|  8.68k|    char *ascCert = NULL;
  258|  8.68k|    SECStatus rv;
  259|       |
  260|  8.68k|    if (certbuf == NULL) {
  ------------------
  |  Branch (260:9): [True: 0, False: 8.68k]
  ------------------
  261|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  262|      0|        return (SECFailure);
  263|      0|    }
  264|       |    /*
  265|       |     * Make sure certlen is long enough to handle the longest possible
  266|       |     * reference in the code below:
  267|       |     * 0x30 0x84 l1 l2 l3 l4  +
  268|       |     *                       tag 9 o1 o2 o3 o4 o5 o6 o7 o8 o9
  269|       |     * where 9 is the longest length of the expected oids we are testing.
  270|       |     *   6 + 11 = 17. 17 bytes is clearly too small to code any kind of
  271|       |     *  certificate (a 128 bit ECC certificate contains at least an 8 byte
  272|       |     * key and a 16 byte signature, plus coding overhead). Typically a cert
  273|       |     * is much larger. So it's safe to require certlen to be at least 17
  274|       |     * bytes.
  275|       |     */
  276|  8.68k|    if (certlen < 17) {
  ------------------
  |  Branch (276:9): [True: 56, False: 8.63k]
  ------------------
  277|     56|        PORT_SetError(SEC_ERROR_INPUT_LEN);
  ------------------
  |  |   65|     56|#define PORT_SetError PORT_SetError_Util
  ------------------
  278|     56|        return (SECFailure);
  279|     56|    }
  280|       |
  281|  8.63k|    cp = (unsigned char *)certbuf;
  282|       |
  283|       |    /* is a DER encoded certificate of some type? */
  284|  8.63k|    if ((*cp & 0x1f) == SEC_ASN1_SEQUENCE) {
  ------------------
  |  |   92|  8.63k|#define SEC_ASN1_SEQUENCE 0x10
  ------------------
  |  Branch (284:9): [True: 8.33k, False: 300]
  ------------------
  285|  8.33k|        SECItem certitem;
  286|  8.33k|        SECItem *pcertitem = &certitem;
  287|  8.33k|        PRUint64 seqLen, seqLenLen;
  288|       |
  289|  8.33k|        cp++;
  290|       |
  291|  8.33k|        if (*cp & 0x80) {
  ------------------
  |  Branch (291:13): [True: 7.91k, False: 419]
  ------------------
  292|       |            /* Multibyte length */
  293|  7.91k|            seqLenLen = cp[0] & 0x7f;
  294|       |
  295|  7.91k|            switch (seqLenLen) {
  296|     39|                case 4:
  ------------------
  |  Branch (296:17): [True: 39, False: 7.87k]
  ------------------
  297|     39|                    seqLen = ((unsigned long)cp[1] << 24) |
  298|     39|                             ((unsigned long)cp[2] << 16) | (cp[3] << 8) | cp[4];
  299|     39|                    break;
  300|     13|                case 3:
  ------------------
  |  Branch (300:17): [True: 13, False: 7.89k]
  ------------------
  301|     13|                    seqLen = ((unsigned long)cp[1] << 16) | (cp[2] << 8) | cp[3];
  302|     13|                    break;
  303|  5.66k|                case 2:
  ------------------
  |  Branch (303:17): [True: 5.66k, False: 2.24k]
  ------------------
  304|  5.66k|                    seqLen = (cp[1] << 8) | cp[2];
  305|  5.66k|                    break;
  306|     12|                case 1:
  ------------------
  |  Branch (306:17): [True: 12, False: 7.90k]
  ------------------
  307|     12|                    seqLen = cp[1];
  308|     12|                    break;
  309|  2.16k|                case 0:
  ------------------
  |  Branch (309:17): [True: 2.16k, False: 5.74k]
  ------------------
  310|       |                    /* indefinite length */
  311|  2.16k|                    seqLen = 0;
  312|  2.16k|                    break;
  313|     12|                default:
  ------------------
  |  Branch (313:17): [True: 12, False: 7.90k]
  ------------------
  314|     12|                    goto notder;
  315|  7.91k|            }
  316|  7.90k|            cp += (seqLenLen + 1);
  317|       |
  318|  7.90k|        } else {
  319|    419|            seqLenLen = 0;
  320|    419|            seqLen = *cp;
  321|    419|            cp++;
  322|    419|        }
  323|       |
  324|       |        /* check entire length if definite length */
  325|  8.31k|        if (seqLen || seqLenLen) {
  ------------------
  |  Branch (325:13): [True: 6.12k, False: 2.19k]
  |  Branch (325:23): [True: 1, False: 2.18k]
  ------------------
  326|  6.13k|            if (certlen != (seqLen + seqLenLen + 2L)) {
  ------------------
  |  Branch (326:17): [True: 96, False: 6.03k]
  ------------------
  327|     96|                if (certlen > (seqLen + seqLenLen + 2L)) {
  ------------------
  |  Branch (327:21): [True: 13, False: 83]
  ------------------
  328|     13|                    PORT_SetError(SEC_ERROR_EXTRA_INPUT);
  ------------------
  |  |   65|     13|#define PORT_SetError PORT_SetError_Util
  ------------------
  329|     83|                } else {
  330|     83|                    PORT_SetError(SEC_ERROR_INPUT_LEN);
  ------------------
  |  |   65|     83|#define PORT_SetError PORT_SetError_Util
  ------------------
  331|     83|                }
  332|     96|                goto notder;
  333|     96|            }
  334|  6.13k|        }
  335|       |
  336|       |        /* check the type oid */
  337|  8.22k|        if (cp[0] == SEC_ASN1_OBJECT_ID) {
  ------------------
  |  |   82|  8.22k|#define SEC_ASN1_OBJECT_ID 0x06
  ------------------
  |  Branch (337:13): [True: 2.12k, False: 6.09k]
  ------------------
  338|  2.12k|            SECOidData *oiddata;
  339|  2.12k|            SECItem oiditem;
  340|       |            /* XXX - assume DER encoding of OID len!! */
  341|  2.12k|            oiditem.len = cp[1];
  342|       |            /* if we add an oid below that is longer than 9 bytes, then we
  343|       |             * need to change the certlen check at the top of the function
  344|       |             * to prevent a buffer overflow
  345|       |             */
  346|  2.12k|            if (oiditem.len > 9) {
  ------------------
  |  Branch (346:17): [True: 4, False: 2.12k]
  ------------------
  347|      4|                PORT_SetError(SEC_ERROR_UNRECOGNIZED_OID);
  ------------------
  |  |   65|      4|#define PORT_SetError PORT_SetError_Util
  ------------------
  348|      4|                return (SECFailure);
  349|      4|            }
  350|  2.12k|            oiditem.data = (unsigned char *)&cp[2];
  351|  2.12k|            oiddata = SECOID_FindOID(&oiditem);
  ------------------
  |  |  115|  2.12k|#define SECOID_FindOID SECOID_FindOID_Util
  ------------------
  352|  2.12k|            if (oiddata == NULL) {
  ------------------
  |  Branch (352:17): [True: 69, False: 2.05k]
  ------------------
  353|     69|                return (SECFailure);
  354|     69|            }
  355|       |
  356|  2.05k|            certitem.data = (unsigned char *)certbuf;
  357|  2.05k|            certitem.len = certlen;
  358|       |
  359|  2.05k|            switch (oiddata->offset) {
  360|  1.12k|                case SEC_OID_PKCS7_SIGNED_DATA:
  ------------------
  |  Branch (360:17): [True: 1.12k, False: 936]
  ------------------
  361|       |                    /* oid: 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x07, 0x02 */
  362|  1.12k|                    return (SEC_ReadPKCS7Certs(&certitem, f, arg));
  363|      0|                    break;
  364|    927|                case SEC_OID_NS_TYPE_CERT_SEQUENCE:
  ------------------
  |  Branch (364:17): [True: 927, False: 1.12k]
  ------------------
  365|       |                    /* oid: 0x60, 0x86, 0x48, 0x01, 0x86, 0xf8, 0x42, 0x02, 0x05 */
  366|    927|                    return (SEC_ReadCertSequence(&certitem, f, arg));
  367|      0|                    break;
  368|      9|                default:
  ------------------
  |  Branch (368:17): [True: 9, False: 2.04k]
  ------------------
  369|      9|                    break;
  370|  2.05k|            }
  371|       |
  372|  6.09k|        } else {
  373|       |            /* it had better be a certificate by now!! */
  374|  6.09k|            certitem.data = (unsigned char *)certbuf;
  375|  6.09k|            certitem.len = certlen;
  376|       |
  377|  6.09k|            rv = (*f)(arg, &pcertitem, 1);
  378|  6.09k|            return (rv);
  379|  6.09k|        }
  380|  8.22k|    }
  381|       |
  382|       |/* now look for a netscape base64 ascii encoded cert */
  383|    417|notder : {
  384|    417|    unsigned char *certbegin = NULL;
  385|    417|    unsigned char *certend = NULL;
  386|    417|    char *pc;
  387|    417|    int cl;
  388|       |
  389|       |    /* Convert the ASCII data into a nul-terminated string */
  390|    417|    ascCert = (char *)PORT_Alloc(certlen + 1);
  ------------------
  |  |   52|    417|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  391|    417|    if (!ascCert) {
  ------------------
  |  Branch (391:9): [True: 0, False: 417]
  ------------------
  392|      0|        rv = SECFailure;
  393|      0|        goto loser;
  394|      0|    }
  395|       |
  396|    417|    PORT_Memcpy(ascCert, certbuf, certlen);
  ------------------
  |  |  180|    417|#define PORT_Memcpy memcpy
  ------------------
  397|    417|    ascCert[certlen] = '\0';
  398|       |
  399|    417|    pc = PORT_Strchr(ascCert, '\n'); /* find an EOL */
  ------------------
  |  |  186|    417|#define PORT_Strchr strchr
  ------------------
  400|    417|    if (!pc) {                       /* maybe this is a MAC file */
  ------------------
  |  Branch (400:9): [True: 200, False: 217]
  ------------------
  401|    200|        pc = ascCert;
  402|  1.77k|        while (*pc && NULL != (pc = PORT_Strchr(pc, '\r'))) {
  ------------------
  |  |  186|  1.75k|#define PORT_Strchr strchr
  ------------------
  |  Branch (402:16): [True: 1.75k, False: 22]
  |  Branch (402:23): [True: 1.57k, False: 178]
  ------------------
  403|  1.57k|            *pc++ = '\n';
  404|  1.57k|        }
  405|    200|    }
  406|       |
  407|    417|    cp = (unsigned char *)ascCert;
  408|    417|    cl = certlen;
  409|       |
  410|       |    /* find the beginning marker */
  411|  98.9k|    while (cl > NS_CERT_HEADER_LEN) {
  ------------------
  |  |  243|  98.9k|#define NS_CERT_HEADER_LEN ((sizeof NS_CERT_HEADER) - 1)
  ------------------
  |  Branch (411:12): [True: 98.7k, False: 208]
  ------------------
  412|  98.7k|        int found = 0;
  413|  98.7k|        if (!PORT_Strncasecmp((char *)cp, NS_CERT_HEADER,
  ------------------
  |  |  191|  98.7k|#define PORT_Strncasecmp PL_strncasecmp
  ------------------
  |  Branch (413:13): [True: 210, False: 98.5k]
  ------------------
  414|  98.7k|                              NS_CERT_HEADER_LEN)) {
  ------------------
  |  |  243|  98.7k|#define NS_CERT_HEADER_LEN ((sizeof NS_CERT_HEADER) - 1)
  ------------------
  415|    210|            cl -= NS_CERT_HEADER_LEN;
  ------------------
  |  |  243|    210|#define NS_CERT_HEADER_LEN ((sizeof NS_CERT_HEADER) - 1)
  ------------------
  416|    210|            cp += NS_CERT_HEADER_LEN;
  ------------------
  |  |  243|    210|#define NS_CERT_HEADER_LEN ((sizeof NS_CERT_HEADER) - 1)
  ------------------
  417|    210|            found = 1;
  418|    210|        }
  419|       |
  420|       |        /* skip to next eol */
  421|  12.3M|        while (cl && (*cp != '\n')) {
  ------------------
  |  Branch (421:16): [True: 12.3M, False: 64]
  |  Branch (421:22): [True: 12.3M, False: 98.7k]
  ------------------
  422|  12.3M|            cp++;
  423|  12.3M|            cl--;
  424|  12.3M|        }
  425|       |
  426|       |        /* skip all blank lines */
  427|   198k|        while (cl && (*cp == '\n' || *cp == '\r')) {
  ------------------
  |  Branch (427:16): [True: 198k, False: 73]
  |  Branch (427:23): [True: 98.9k, False: 99.3k]
  |  Branch (427:38): [True: 678, False: 98.7k]
  ------------------
  428|  99.6k|            cp++;
  429|  99.6k|            cl--;
  430|  99.6k|        }
  431|  98.7k|        if (cl && found) {
  ------------------
  |  Branch (431:13): [True: 98.7k, False: 73]
  |  Branch (431:19): [True: 209, False: 98.5k]
  ------------------
  432|    209|            certbegin = cp;
  433|    209|            break;
  434|    209|        }
  435|  98.7k|    }
  436|       |
  437|    417|    if (certbegin) {
  ------------------
  |  Branch (437:9): [True: 209, False: 208]
  ------------------
  438|       |        /* find the ending marker */
  439|   110k|        while (cl >= NS_CERT_TRAILER_LEN) {
  ------------------
  |  |  244|   110k|#define NS_CERT_TRAILER_LEN ((sizeof NS_CERT_TRAILER) - 1)
  ------------------
  |  Branch (439:16): [True: 109k, False: 67]
  ------------------
  440|   109k|            if (!PORT_Strncasecmp((char *)cp, NS_CERT_TRAILER,
  ------------------
  |  |  191|   109k|#define PORT_Strncasecmp PL_strncasecmp
  ------------------
  |  Branch (440:17): [True: 142, False: 109k]
  ------------------
  441|   109k|                                  NS_CERT_TRAILER_LEN)) {
  ------------------
  |  |  244|   109k|#define NS_CERT_TRAILER_LEN ((sizeof NS_CERT_TRAILER) - 1)
  ------------------
  442|    142|                certend = cp;
  443|    142|                break;
  444|    142|            }
  445|       |
  446|       |            /* skip to next eol */
  447|  10.8M|            while (cl && (*cp != '\n')) {
  ------------------
  |  Branch (447:20): [True: 10.8M, False: 28]
  |  Branch (447:26): [True: 10.7M, False: 109k]
  ------------------
  448|  10.7M|                cp++;
  449|  10.7M|                cl--;
  450|  10.7M|            }
  451|       |
  452|       |            /* skip all blank lines */
  453|   232k|            while (cl && (*cp == '\n' || *cp == '\r')) {
  ------------------
  |  Branch (453:20): [True: 232k, False: 34]
  |  Branch (453:27): [True: 122k, False: 110k]
  |  Branch (453:42): [True: 622, False: 109k]
  ------------------
  454|   122k|                cp++;
  455|   122k|                cl--;
  456|   122k|            }
  457|   109k|        }
  458|    209|    }
  459|       |
  460|    417|    if (certbegin && certend) {
  ------------------
  |  Branch (460:9): [True: 209, False: 208]
  |  Branch (460:22): [True: 142, False: 67]
  ------------------
  461|    142|        unsigned int binLen;
  462|       |
  463|    142|        *certend = 0;
  464|       |        /* convert to binary */
  465|    142|        bincert = ATOB_AsciiToData((char *)certbegin, &binLen);
  ------------------
  |  |   16|    142|#define ATOB_AsciiToData ATOB_AsciiToData_Util
  ------------------
  466|    142|        if (!bincert) {
  ------------------
  |  Branch (466:13): [True: 64, False: 78]
  ------------------
  467|     64|            rv = SECFailure;
  468|     64|            goto loser;
  469|     64|        }
  470|       |
  471|       |        /* now recurse to decode the binary */
  472|     78|        rv = CERT_DecodeCertPackage((char *)bincert, binLen, f, arg);
  473|       |
  474|    275|    } else {
  475|    275|        PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|    275|#define PORT_SetError PORT_SetError_Util
  ------------------
  476|    275|        rv = SECFailure;
  477|    275|    }
  478|    417|}
  479|       |
  480|    417|loser:
  481|       |
  482|    417|    if (bincert) {
  ------------------
  |  Branch (482:9): [True: 78, False: 339]
  ------------------
  483|     78|        PORT_Free(bincert);
  ------------------
  |  |   60|     78|#define PORT_Free PORT_Free_Util
  ------------------
  484|     78|    }
  485|       |
  486|    417|    if (ascCert) {
  ------------------
  |  Branch (486:9): [True: 417, False: 0]
  ------------------
  487|    417|        PORT_Free(ascCert);
  ------------------
  |  |   60|    417|#define PORT_Free PORT_Free_Util
  ------------------
  488|    417|    }
  489|       |
  490|    417|    return (rv);
  491|    417|}
CERT_DecodeCertFromPackage:
  518|  8.60k|{
  519|  8.60k|    collect_args collectArgs;
  520|  8.60k|    SECStatus rv;
  521|  8.60k|    CERTCertificate *cert = NULL;
  522|       |
  523|  8.60k|    collectArgs.arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   63|  8.60k|#define PORT_NewArena PORT_NewArena_Util
  ------------------
                  collectArgs.arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|  8.60k|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  524|  8.60k|    collectArgs.cert.data = NULL;
  525|  8.60k|    collectArgs.cert.len = 0;
  526|       |
  527|  8.60k|    rv = CERT_DecodeCertPackage(certbuf, certlen, collect_certs,
  528|  8.60k|                                (void *)&collectArgs);
  529|  8.60k|    if (rv == SECSuccess) {
  ------------------
  |  Branch (529:9): [True: 6.16k, False: 2.44k]
  ------------------
  530|  6.16k|        cert = CERT_NewTempCertificate(CERT_GetDefaultCertDB(),
  531|  6.16k|                                       &collectArgs.cert, NULL,
  532|  6.16k|                                       PR_FALSE, PR_TRUE);
  ------------------
  |  |  438|  6.16k|#define PR_FALSE 0
  ------------------
                                                     PR_FALSE, PR_TRUE);
  ------------------
  |  |  437|  6.16k|#define PR_TRUE 1
  ------------------
  533|  6.16k|    }
  534|       |
  535|  8.60k|    PORT_FreeArena(collectArgs.arena, PR_FALSE);
  ------------------
  |  |   61|  8.60k|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                  PORT_FreeArena(collectArgs.arena, PR_FALSE);
  ------------------
  |  |  438|  8.60k|#define PR_FALSE 0
  ------------------
  536|       |
  537|  8.60k|    return (cert);
  538|  8.60k|}
certread.c:SEC_ReadPKCS7Certs:
  120|  1.12k|{
  121|  1.12k|    ContentInfo contentInfo;
  122|  1.12k|    SECStatus rv = SECFailure;
  123|  1.12k|    SECItem **certs;
  124|  1.12k|    int count;
  125|  1.12k|    PLArenaPool *arena;
  126|       |
  127|  1.12k|    arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   63|  1.12k|#define PORT_NewArena PORT_NewArena_Util
  ------------------
                  arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|  1.12k|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  128|  1.12k|    if (arena == NULL) {
  ------------------
  |  Branch (128:9): [True: 0, False: 1.12k]
  ------------------
  129|      0|        return rv;
  130|      0|    }
  131|       |
  132|  1.12k|    PORT_Memset(&contentInfo, 0, sizeof(contentInfo));
  ------------------
  |  |  182|  1.12k|#define PORT_Memset memset
  ------------------
  133|  1.12k|    if (SEC_ASN1DecodeItem(arena, &contentInfo, ContentInfoTemplate,
  ------------------
  |  |   78|  1.12k|#define SEC_ASN1DecodeItem SEC_ASN1DecodeItem_Util
  ------------------
  |  Branch (133:9): [True: 1.06k, False: 56]
  ------------------
  134|  1.12k|                           pkcs7Item) != SECSuccess) {
  135|  1.06k|        goto done;
  136|  1.06k|    }
  137|       |
  138|     56|    if (GetContentTypeTag(&contentInfo) != SEC_OID_PKCS7_SIGNED_DATA) {
  ------------------
  |  Branch (138:9): [True: 0, False: 56]
  ------------------
  139|      0|        goto done;
  140|      0|    }
  141|       |
  142|     56|    if (contentInfo.content.signedData == NULL) {
  ------------------
  |  Branch (142:9): [True: 26, False: 30]
  ------------------
  143|     26|        PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|     26|#define PORT_SetError PORT_SetError_Util
  ------------------
  144|     26|        goto done;
  145|     26|    }
  146|       |
  147|     30|    rv = SECSuccess;
  148|       |
  149|     30|    certs = contentInfo.content.signedData->certificates;
  150|     30|    if (certs) {
  ------------------
  |  Branch (150:9): [True: 21, False: 9]
  ------------------
  151|     21|        count = 0;
  152|       |
  153|  1.07M|        while (*certs) {
  ------------------
  |  Branch (153:16): [True: 1.07M, False: 21]
  ------------------
  154|  1.07M|            count++;
  155|  1.07M|            certs++;
  156|  1.07M|        }
  157|     21|        rv = (*f)(arg, contentInfo.content.signedData->certificates, count);
  158|     21|    }
  159|       |
  160|  1.12k|done:
  161|  1.12k|    if (arena) {
  ------------------
  |  Branch (161:9): [True: 1.12k, False: 0]
  ------------------
  162|  1.12k|        PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |   61|  1.12k|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |  438|  1.12k|#define PR_FALSE 0
  ------------------
  163|  1.12k|    }
  164|       |
  165|  1.12k|    return rv;
  166|     30|}
certread.c:choose_content_template:
   93|  2.44k|{
   94|  2.44k|    const SEC_ASN1Template *theTemplate;
   95|  2.44k|    ContentInfo *cinfo;
   96|  2.44k|    SECOidTag kind;
   97|       |
   98|  2.44k|    PORT_Assert(src_or_dest != NULL);
  ------------------
  |  |  120|  2.44k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  2.44k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 2.44k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|  2.44k|    if (src_or_dest == NULL)
  ------------------
  |  Branch (99:9): [True: 0, False: 2.44k]
  ------------------
  100|      0|        return NULL;
  101|       |
  102|  2.44k|    cinfo = (ContentInfo *)src_or_dest;
  103|  2.44k|    kind = GetContentTypeTag(cinfo);
  104|  2.44k|    switch (kind) {
  105|    887|        default:
  ------------------
  |  Branch (105:9): [True: 887, False: 1.56k]
  ------------------
  106|    887|            theTemplate = SEC_ASN1_GET(SEC_PointerToAnyTemplate);
  ------------------
  |  |  188|    887|#define SEC_ASN1_GET(x) x
  ------------------
  107|    887|            break;
  108|    161|        case SEC_OID_PKCS7_DATA:
  ------------------
  |  Branch (108:9): [True: 161, False: 2.28k]
  ------------------
  109|    161|            theTemplate = SEC_ASN1_GET(SEC_PointerToOctetStringTemplate);
  ------------------
  |  |  188|    161|#define SEC_ASN1_GET(x) x
  ------------------
  110|    161|            break;
  111|  1.39k|        case SEC_OID_PKCS7_SIGNED_DATA:
  ------------------
  |  Branch (111:9): [True: 1.39k, False: 1.04k]
  ------------------
  112|  1.39k|            theTemplate = PointerToDegenerateSignedDataTemplate;
  113|  1.39k|            break;
  114|  2.44k|    }
  115|  2.44k|    return theTemplate;
  116|  2.44k|}
certread.c:GetContentTypeTag:
   85|  2.60k|{
   86|  2.60k|    if (cinfo->contentTypeTag == SEC_OID_UNKNOWN)
  ------------------
  |  Branch (86:9): [True: 2.48k, False: 121]
  ------------------
   87|  2.48k|        cinfo->contentTypeTag = SECOID_FindOIDTag(&cinfo->contentType);
  ------------------
  |  |  117|  2.48k|#define SECOID_FindOIDTag SECOID_FindOIDTag_Util
  ------------------
   88|  2.60k|    return cinfo->contentTypeTag;
   89|  2.60k|}
certread.c:SEC_ReadCertSequence:
  174|    927|{
  175|    927|    SECStatus rv = SECFailure;
  176|    927|    SECItem **certs;
  177|    927|    int count;
  178|    927|    SECItem **rawCerts = NULL;
  179|    927|    PLArenaPool *arena;
  180|    927|    ContentInfo contentInfo;
  181|       |
  182|    927|    arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   63|    927|#define PORT_NewArena PORT_NewArena_Util
  ------------------
                  arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|    927|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
  183|    927|    if (arena == NULL) {
  ------------------
  |  Branch (183:9): [True: 0, False: 927]
  ------------------
  184|      0|        return rv;
  185|      0|    }
  186|       |
  187|    927|    PORT_Memset(&contentInfo, 0, sizeof(contentInfo));
  ------------------
  |  |  182|    927|#define PORT_Memset memset
  ------------------
  188|    927|    if (SEC_ASN1DecodeItem(arena, &contentInfo, ContentInfoTemplate,
  ------------------
  |  |   78|    927|#define SEC_ASN1DecodeItem SEC_ASN1DecodeItem_Util
  ------------------
  |  Branch (188:9): [True: 828, False: 99]
  ------------------
  189|    927|                           certsItem) != SECSuccess) {
  190|    828|        goto done;
  191|    828|    }
  192|       |
  193|     99|    if (GetContentTypeTag(&contentInfo) != SEC_OID_NS_TYPE_CERT_SEQUENCE) {
  ------------------
  |  Branch (193:9): [True: 0, False: 99]
  ------------------
  194|      0|        goto done;
  195|      0|    }
  196|       |
  197|     99|    if (SEC_QuickDERDecodeItem(arena, &rawCerts, SEC_CertSequenceTemplate,
  ------------------
  |  |  102|     99|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
  |  Branch (197:9): [True: 55, False: 44]
  ------------------
  198|     99|                               contentInfo.content.data) != SECSuccess) {
  199|     55|        goto done;
  200|     55|    }
  201|       |
  202|     44|    rv = SECSuccess;
  203|       |
  204|     44|    certs = rawCerts;
  205|     44|    if (certs) {
  ------------------
  |  Branch (205:9): [True: 44, False: 0]
  ------------------
  206|     44|        count = 0;
  207|       |
  208|  5.39k|        while (*certs) {
  ------------------
  |  Branch (208:16): [True: 5.34k, False: 44]
  ------------------
  209|  5.34k|            count++;
  210|  5.34k|            certs++;
  211|  5.34k|        }
  212|     44|        rv = (*f)(arg, rawCerts, count);
  213|     44|    }
  214|       |
  215|    927|done:
  216|    927|    if (arena) {
  ------------------
  |  Branch (216:9): [True: 927, False: 0]
  ------------------
  217|    927|        PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |   61|    927|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |  438|    927|#define PR_FALSE 0
  ------------------
  218|    927|    }
  219|       |
  220|    927|    return rv;
  221|     44|}
certread.c:collect_certs:
  500|  6.15k|{
  501|  6.15k|    collect_args *collectArgs = (collect_args *)arg;
  502|  6.15k|    if (!collectArgs || !collectArgs->arena) {
  ------------------
  |  Branch (502:9): [True: 0, False: 6.15k]
  |  Branch (502:25): [True: 0, False: 6.15k]
  ------------------
  503|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  504|      0|        return SECFailure;
  505|      0|    }
  506|  6.15k|    if (numcerts < 1 || !certs || !*certs) {
  ------------------
  |  Branch (506:9): [True: 2, False: 6.15k]
  |  Branch (506:25): [True: 0, False: 6.15k]
  |  Branch (506:35): [True: 0, False: 6.15k]
  ------------------
  507|      2|        PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      2|#define PORT_SetError PORT_SetError_Util
  ------------------
  508|      2|        return SECFailure;
  509|      2|    }
  510|  6.15k|    return SECITEM_CopyItem(collectArgs->arena, &collectArgs->cert, *certs);
  ------------------
  |  |  106|  6.15k|#define SECITEM_CopyItem SECITEM_CopyItem_Util
  ------------------
  511|  6.15k|}

nssDecodedCert_Destroy:
   46|  5.75k|{
   47|  5.75k|    if (!dc) {
  ------------------
  |  Branch (47:9): [True: 0, False: 5.75k]
  ------------------
   48|      0|        return PR_FAILURE;
   49|      0|    }
   50|  5.75k|    switch (dc->type) {
   51|  5.75k|        case NSSCertificateType_PKIX:
  ------------------
  |  Branch (51:9): [True: 5.75k, False: 0]
  ------------------
   52|  5.75k|            return nssDecodedPKIXCertificate_Destroy(dc);
   53|      0|        default:
  ------------------
  |  Branch (53:9): [True: 0, False: 5.75k]
  ------------------
   54|       |#if 0
   55|       |    nss_SetError(NSS_ERROR_INVALID_ARGUMENT);
   56|       |#endif
   57|      0|            break;
   58|  5.75k|    }
   59|      0|    return PR_FAILURE;
   60|  5.75k|}

nssCertificate_AddRef:
   79|  12.4k|{
   80|  12.4k|    if (c) {
  ------------------
  |  Branch (80:9): [True: 12.4k, False: 0]
  ------------------
   81|  12.4k|        nssPKIObject_AddRef(&c->object);
   82|  12.4k|    }
   83|  12.4k|    return c;
   84|  12.4k|}
nssCertificate_Destroy:
   89|  29.5k|{
   90|  29.5k|    nssCertificateStoreTrace lockTrace = { NULL, NULL, PR_FALSE, PR_FALSE };
  ------------------
  |  |  438|  29.5k|#define PR_FALSE 0
  ------------------
                  nssCertificateStoreTrace lockTrace = { NULL, NULL, PR_FALSE, PR_FALSE };
  ------------------
  |  |  438|  29.5k|#define PR_FALSE 0
  ------------------
   91|  29.5k|    nssCertificateStoreTrace unlockTrace = { NULL, NULL, PR_FALSE, PR_FALSE };
  ------------------
  |  |  438|  29.5k|#define PR_FALSE 0
  ------------------
                  nssCertificateStoreTrace unlockTrace = { NULL, NULL, PR_FALSE, PR_FALSE };
  ------------------
  |  |  438|  29.5k|#define PR_FALSE 0
  ------------------
   92|       |
   93|  29.5k|    if (c) {
  ------------------
  |  Branch (93:9): [True: 29.5k, False: 0]
  ------------------
   94|  29.5k|        PRUint32 i;
   95|  29.5k|        nssDecodedCert *dc = c->decoding;
   96|  29.5k|        NSSTrustDomain *td = STAN_GetDefaultTrustDomain();
   97|  29.5k|        NSSCryptoContext *cc = c->object.cryptoContext;
   98|       |
   99|  29.5k|        PR_ASSERT(c->object.refCount > 0);
  ------------------
  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  ------------------
  ------------------
  100|       |
  101|       |        /* --- LOCK storage --- */
  102|  29.5k|        if (cc) {
  ------------------
  |  Branch (102:13): [True: 29.5k, False: 0]
  ------------------
  103|  29.5k|            nssCertificateStore_Lock(cc->certStore, &lockTrace);
  104|  29.5k|        } else {
  105|      0|            nssTrustDomain_LockCertCache(td);
  106|      0|        }
  107|  29.5k|        if (PR_ATOMIC_DECREMENT(&c->object.refCount) == 0) {
  ------------------
  |  |  123|  29.5k|#define PR_ATOMIC_DECREMENT(val) __sync_sub_and_fetch(val, 1)
  ------------------
  |  Branch (107:13): [True: 5.75k, False: 23.7k]
  ------------------
  108|       |            /* --- remove cert and UNLOCK storage --- */
  109|  5.75k|            if (cc) {
  ------------------
  |  Branch (109:17): [True: 5.75k, False: 0]
  ------------------
  110|  5.75k|                nssCertificateStore_RemoveCertLOCKED(cc->certStore, c);
  111|  5.75k|                nssCertificateStore_Unlock(cc->certStore, &lockTrace,
  112|  5.75k|                                           &unlockTrace);
  113|  5.75k|            } else {
  114|      0|                nssTrustDomain_RemoveCertFromCacheLOCKED(td, c);
  115|      0|                nssTrustDomain_UnlockCertCache(td);
  116|      0|            }
  117|       |            /* free cert data */
  118|  5.75k|            for (i = 0; i < c->object.numInstances; i++) {
  ------------------
  |  Branch (118:25): [True: 0, False: 5.75k]
  ------------------
  119|      0|                nssCryptokiObject_Destroy(c->object.instances[i]);
  120|      0|            }
  121|  5.75k|            nssPKIObject_DestroyLock(&c->object);
  122|  5.75k|            nssArena_Destroy(c->object.arena);
  123|  5.75k|            nssDecodedCert_Destroy(dc);
  124|  23.7k|        } else {
  125|       |            /* --- UNLOCK storage --- */
  126|  23.7k|            if (cc) {
  ------------------
  |  Branch (126:17): [True: 23.7k, False: 0]
  ------------------
  127|  23.7k|                nssCertificateStore_Unlock(cc->certStore,
  128|  23.7k|                                           &lockTrace,
  129|  23.7k|                                           &unlockTrace);
  130|  23.7k|            } else {
  131|      0|                nssTrustDomain_UnlockCertCache(td);
  132|      0|            }
  133|  23.7k|        }
  134|  29.5k|    }
  135|  29.5k|    return PR_SUCCESS;
  136|  29.5k|}
NSSCertificate_Destroy:
  140|  29.5k|{
  141|  29.5k|    return nssCertificate_Destroy(c);
  142|  29.5k|}
nssCertificate_GetEncoding:
  146|  5.67k|{
  147|  5.67k|    if (c->encoding.size > 0 && c->encoding.data) {
  ------------------
  |  Branch (147:9): [True: 5.67k, False: 0]
  |  Branch (147:33): [True: 5.67k, False: 0]
  ------------------
  148|  5.67k|        return &c->encoding;
  149|  5.67k|    } else {
  150|      0|        return (NSSDER *)NULL;
  151|      0|    }
  152|  5.67k|}
nssCertificate_GetDecoding:
  263|    478|{
  264|    478|    nssDecodedCert *deco = NULL;
  265|    478|    if (c->type == NSSCertificateType_PKIX) {
  ------------------
  |  Branch (265:9): [True: 0, False: 478]
  ------------------
  266|      0|        (void)STAN_GetCERTCertificate(c);
  267|      0|    }
  268|    478|    nssPKIObject_Lock(&c->object);
  269|    478|    if (!c->decoding) {
  ------------------
  |  Branch (269:9): [True: 0, False: 478]
  ------------------
  270|      0|        deco = nssDecodedCert_Create(NULL, &c->encoding, c->type);
  271|      0|        PORT_Assert(!c->decoding);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  272|      0|        c->decoding = deco;
  273|    478|    } else {
  274|    478|        deco = c->decoding;
  275|    478|    }
  276|    478|    nssPKIObject_Unlock(&c->object);
  277|    478|    return deco;
  278|    478|}
nssCertificate_BuildChain:
  428|  5.65k|{
  429|  5.65k|    NSSCertificate **rvChain = NULL;
  430|  5.65k|    NSSUsage issuerUsage = *usage;
  431|  5.65k|    nssPKIObjectCollection *collection = NULL;
  432|  5.65k|    PRUint32 rvCount = 0;
  433|  5.65k|    PRStatus st;
  434|  5.65k|    PRStatus ret = PR_SUCCESS;
  435|       |
  436|  5.65k|    if (!c || !cc ||
  ------------------
  |  Branch (436:9): [True: 0, False: 5.65k]
  |  Branch (436:15): [True: 0, False: 5.65k]
  ------------------
  437|  5.65k|        (!td && (td = NSSCertificate_GetTrustDomain(c)) == NULL)) {
  ------------------
  |  Branch (437:10): [True: 0, False: 5.65k]
  |  Branch (437:17): [True: 0, False: 0]
  ------------------
  438|      0|        goto loser;
  439|      0|    }
  440|       |    /* bump the usage up to CA level */
  441|  5.65k|    issuerUsage.nss3lookingForCA = PR_TRUE;
  ------------------
  |  |  437|  5.65k|#define PR_TRUE 1
  ------------------
  442|  5.65k|    collection = nssCertificateCollection_Create(td, NULL);
  443|  5.65k|    if (!collection)
  ------------------
  |  Branch (443:9): [True: 0, False: 5.65k]
  ------------------
  444|      0|        goto loser;
  445|  5.65k|    st = nssPKIObjectCollection_AddObject(collection, (nssPKIObject *)c);
  446|  5.65k|    if (st != PR_SUCCESS)
  ------------------
  |  Branch (446:9): [True: 0, False: 5.65k]
  ------------------
  447|      0|        goto loser;
  448|  5.67k|    for (rvCount = 1; (!rvLimit || rvCount < rvLimit); ++rvCount) {
  ------------------
  |  Branch (448:24): [True: 0, False: 5.67k]
  |  Branch (448:36): [True: 5.65k, False: 16]
  ------------------
  449|  5.65k|        CERTCertificate *cCert = STAN_GetCERTCertificate(c);
  450|  5.65k|        if (cCert->isRoot) {
  ------------------
  |  Branch (450:13): [True: 4.52k, False: 1.13k]
  ------------------
  451|       |            /* not including the issuer of the self-signed cert, which is,
  452|       |             * of course, itself
  453|       |             */
  454|  4.52k|            break;
  455|  4.52k|        }
  456|  1.13k|        c = find_cert_issuer(c, timeOpt, &issuerUsage, policiesOpt, td, cc);
  457|  1.13k|        if (!c) {
  ------------------
  |  Branch (457:13): [True: 1.11k, False: 16]
  ------------------
  458|  1.11k|            ret = PR_FAILURE;
  459|  1.11k|            break;
  460|  1.11k|        }
  461|     16|        st = nssPKIObjectCollection_AddObject(collection, (nssPKIObject *)c);
  462|     16|        nssCertificate_Destroy(c); /* collection has it */
  463|     16|        if (st != PR_SUCCESS)
  ------------------
  |  Branch (463:13): [True: 0, False: 16]
  ------------------
  464|      0|            goto loser;
  465|     16|    }
  466|  5.65k|    rvChain = nssPKIObjectCollection_GetCertificates(collection,
  467|  5.65k|                                                     rvOpt,
  468|  5.65k|                                                     rvLimit,
  469|  5.65k|                                                     arenaOpt);
  470|  5.65k|    if (rvChain) {
  ------------------
  |  Branch (470:9): [True: 5.65k, False: 0]
  ------------------
  471|  5.65k|        nssPKIObjectCollection_Destroy(collection);
  472|  5.65k|        if (statusOpt)
  ------------------
  |  Branch (472:13): [True: 5.65k, False: 0]
  ------------------
  473|  5.65k|            *statusOpt = ret;
  474|  5.65k|        if (ret != PR_SUCCESS)
  ------------------
  |  Branch (474:13): [True: 1.11k, False: 4.53k]
  ------------------
  475|  1.11k|            nss_SetError(NSS_ERROR_CERTIFICATE_ISSUER_NOT_FOUND);
  476|  5.65k|        return rvChain;
  477|  5.65k|    }
  478|       |
  479|      0|loser:
  480|      0|    if (collection)
  ------------------
  |  Branch (480:9): [True: 0, False: 0]
  ------------------
  481|      0|        nssPKIObjectCollection_Destroy(collection);
  482|      0|    if (statusOpt)
  ------------------
  |  Branch (482:9): [True: 0, False: 0]
  ------------------
  483|      0|        *statusOpt = PR_FAILURE;
  484|      0|    nss_SetError(NSS_ERROR_CERTIFICATE_ISSUER_NOT_FOUND);
  485|      0|    return rvChain;
  486|  5.65k|}
NSSCertificate_BuildChain:
  500|  5.65k|{
  501|  5.65k|    return nssCertificate_BuildChain(c, timeOpt, usage, policiesOpt,
  502|  5.65k|                                     rvOpt, rvLimit, arenaOpt, statusOpt,
  503|  5.65k|                                     td, cc);
  504|  5.65k|}
nssCertificateList_DoCallback:
  845|    163|{
  846|    163|    nssListIterator *certs;
  847|    163|    NSSCertificate *cert;
  848|    163|    certs = nssList_CreateIterator(certList);
  849|    163|    if (!certs) {
  ------------------
  |  Branch (849:9): [True: 0, False: 163]
  ------------------
  850|      0|        return PR_FAILURE;
  851|      0|    }
  852|    163|    for (cert = (NSSCertificate *)nssListIterator_Start(certs);
  853|    326|         cert != (NSSCertificate *)NULL;
  ------------------
  |  Branch (853:10): [True: 163, False: 163]
  ------------------
  854|    163|         cert = (NSSCertificate *)nssListIterator_Next(certs)) {
  855|    163|        (void)(*callback)(cert, arg);
  856|    163|    }
  857|    163|    nssListIterator_Finish(certs);
  858|    163|    nssListIterator_Destroy(certs);
  859|    163|    return PR_SUCCESS;
  860|    163|}
nssCertificateList_AddReferences:
  872|    163|{
  873|    163|    (void)nssCertificateList_DoCallback(certList, add_ref_callback, NULL);
  874|    163|}
certificate.c:find_cert_issuer:
  359|  1.13k|{
  360|  1.13k|    NSSArena *arena;
  361|  1.13k|    NSSCertificate **certs = NULL;
  362|  1.13k|    NSSCertificate **ccIssuers = NULL;
  363|  1.13k|    NSSCertificate **tdIssuers = NULL;
  364|  1.13k|    NSSCertificate *issuer = NULL;
  365|       |
  366|  1.13k|    if (!cc)
  ------------------
  |  Branch (366:9): [True: 0, False: 1.13k]
  ------------------
  367|      0|        cc = c->object.cryptoContext;
  368|  1.13k|    if (!td)
  ------------------
  |  Branch (368:9): [True: 0, False: 1.13k]
  ------------------
  369|      0|        td = NSSCertificate_GetTrustDomain(c);
  370|  1.13k|    arena = nssArena_Create();
  371|  1.13k|    if (!arena) {
  ------------------
  |  Branch (371:9): [True: 0, False: 1.13k]
  ------------------
  372|      0|        return (NSSCertificate *)NULL;
  373|      0|    }
  374|  1.13k|    if (cc) {
  ------------------
  |  Branch (374:9): [True: 1.13k, False: 0]
  ------------------
  375|  1.13k|        ccIssuers = nssCryptoContext_FindCertificatesBySubject(cc,
  376|  1.13k|                                                               &c->issuer,
  377|  1.13k|                                                               NULL,
  378|  1.13k|                                                               0,
  379|  1.13k|                                                               arena);
  380|  1.13k|    }
  381|  1.13k|    if (td)
  ------------------
  |  Branch (381:9): [True: 1.13k, False: 0]
  ------------------
  382|  1.13k|        tdIssuers = nssTrustDomain_FindCertificatesBySubject(td,
  383|  1.13k|                                                             &c->issuer,
  384|  1.13k|                                                             NULL,
  385|  1.13k|                                                             0,
  386|  1.13k|                                                             arena);
  387|  1.13k|    certs = nssCertificateArray_Join(ccIssuers, tdIssuers);
  388|  1.13k|    if (certs) {
  ------------------
  |  Branch (388:9): [True: 163, False: 969]
  ------------------
  389|    163|        nssDecodedCert *dc = NULL;
  390|    163|        void *issuerID = NULL;
  391|    163|        dc = nssCertificate_GetDecoding(c);
  392|    163|        if (dc) {
  ------------------
  |  Branch (392:13): [True: 163, False: 0]
  ------------------
  393|    163|            issuerID = dc->getIssuerIdentifier(dc);
  394|    163|        }
  395|       |        /* XXX review based on CERT_FindCertIssuer
  396|       |         * this function is not using the authCertIssuer field as a fallback
  397|       |         * if authority key id does not exist
  398|       |         */
  399|    163|        if (issuerID) {
  ------------------
  |  Branch (399:13): [True: 163, False: 0]
  ------------------
  400|    163|            certs = filter_subject_certs_for_id(certs, issuerID);
  401|    163|        }
  402|    163|        certs = filter_certs_for_valid_issuers(certs);
  403|    163|        issuer = nssCertificateArray_FindBestCertificate(certs,
  404|    163|                                                         timeOpt,
  405|    163|                                                         usage,
  406|    163|                                                         policiesOpt);
  407|    163|        nssCertificateArray_Destroy(certs);
  408|    163|    }
  409|  1.13k|    nssArena_Destroy(arena);
  410|  1.13k|    return issuer;
  411|  1.13k|}
certificate.c:filter_subject_certs_for_id:
  284|    163|{
  285|    163|    NSSCertificate **si;
  286|    163|    nssDecodedCert *dcp;
  287|    163|    int nextOpenSlot = 0;
  288|    163|    int i;
  289|    163|    nssCertIDMatch matchLevel = nssCertIDMatch_Unknown;
  290|    163|    nssCertIDMatch match;
  291|       |
  292|       |    /* walk the subject certs */
  293|    326|    for (si = subjectCerts; *si; si++) {
  ------------------
  |  Branch (293:29): [True: 163, False: 163]
  ------------------
  294|    163|        dcp = nssCertificate_GetDecoding(*si);
  295|    163|        if (!dcp) {
  ------------------
  |  Branch (295:13): [True: 0, False: 163]
  ------------------
  296|      0|            NSSCertificate_Destroy(*si);
  297|      0|            continue;
  298|      0|        }
  299|    163|        match = dcp->matchIdentifier(dcp, id);
  300|    163|        switch (match) {
  301|     21|            case nssCertIDMatch_Yes:
  ------------------
  |  Branch (301:13): [True: 21, False: 142]
  ------------------
  302|     21|                if (matchLevel == nssCertIDMatch_Unknown) {
  ------------------
  |  Branch (302:21): [True: 21, False: 0]
  ------------------
  303|       |                    /* we have non-definitive matches, forget them */
  304|     21|                    for (i = 0; i < nextOpenSlot; i++) {
  ------------------
  |  Branch (304:33): [True: 0, False: 21]
  ------------------
  305|      0|                        NSSCertificate_Destroy(subjectCerts[i]);
  306|      0|                        subjectCerts[i] = NULL;
  307|      0|                    }
  308|     21|                    nextOpenSlot = 0;
  309|       |                    /* only keep definitive matches from now on */
  310|     21|                    matchLevel = nssCertIDMatch_Yes;
  311|     21|                }
  312|       |                /* keep the cert */
  313|     21|                subjectCerts[nextOpenSlot++] = *si;
  314|     21|                break;
  315|    115|            case nssCertIDMatch_Unknown:
  ------------------
  |  Branch (315:13): [True: 115, False: 48]
  ------------------
  316|    115|                if (matchLevel == nssCertIDMatch_Unknown) {
  ------------------
  |  Branch (316:21): [True: 115, False: 0]
  ------------------
  317|       |                    /* only have non-definitive matches so far, keep it */
  318|    115|                    subjectCerts[nextOpenSlot++] = *si;
  319|    115|                    break;
  320|    115|                }
  321|       |            /* else fall through, we have a definitive match already */
  322|     27|            case nssCertIDMatch_No:
  ------------------
  |  Branch (322:13): [True: 27, False: 136]
  ------------------
  323|     27|            default:
  ------------------
  |  Branch (323:13): [True: 0, False: 163]
  ------------------
  324|     27|                NSSCertificate_Destroy(*si);
  325|     27|                *si = NULL;
  326|    163|        }
  327|    163|    }
  328|    163|    subjectCerts[nextOpenSlot] = NULL;
  329|    163|    return subjectCerts;
  330|    163|}
certificate.c:filter_certs_for_valid_issuers:
  334|    163|{
  335|    163|    NSSCertificate **cp;
  336|    163|    nssDecodedCert *dcp;
  337|    163|    int nextOpenSlot = 0;
  338|       |
  339|    299|    for (cp = certs; *cp; cp++) {
  ------------------
  |  Branch (339:22): [True: 136, False: 163]
  ------------------
  340|    136|        dcp = nssCertificate_GetDecoding(*cp);
  341|    136|        if (dcp && dcp->isValidIssuer(dcp)) {
  ------------------
  |  Branch (341:13): [True: 136, False: 0]
  |  Branch (341:20): [True: 16, False: 120]
  ------------------
  342|     16|            certs[nextOpenSlot++] = *cp;
  343|    120|        } else {
  344|    120|            NSSCertificate_Destroy(*cp);
  345|    120|        }
  346|    136|    }
  347|    163|    certs[nextOpenSlot] = NULL;
  348|    163|    return certs;
  349|    163|}
certificate.c:add_ref_callback:
  864|    163|{
  865|    163|    nssCertificate_AddRef(c);
  866|    163|    return PR_SUCCESS;
  867|    163|}

nssCryptoContext_Create:
   24|      1|{
   25|      1|    NSSArena *arena;
   26|      1|    NSSCryptoContext *rvCC;
   27|      1|    arena = NSSArena_Create();
   28|      1|    if (!arena) {
  ------------------
  |  Branch (28:9): [True: 0, False: 1]
  ------------------
   29|      0|        return NULL;
   30|      0|    }
   31|      1|    rvCC = nss_ZNEW(arena, NSSCryptoContext);
  ------------------
  |  |  348|      1|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
   32|      1|    if (!rvCC) {
  ------------------
  |  Branch (32:9): [True: 0, False: 1]
  ------------------
   33|      0|        return NULL;
   34|      0|    }
   35|      1|    rvCC->td = td;
   36|      1|    rvCC->arena = arena;
   37|      1|    rvCC->certStore = nssCertificateStore_Create(rvCC->arena);
   38|      1|    if (!rvCC->certStore) {
  ------------------
  |  Branch (38:9): [True: 0, False: 1]
  ------------------
   39|      0|        nssArena_Destroy(arena);
   40|      0|        return NULL;
   41|      0|    }
   42|       |
   43|      1|    return rvCC;
   44|      1|}
NSSCryptoContext_Destroy:
   48|      1|{
   49|      1|    PRStatus status = PR_SUCCESS;
   50|      1|    PORT_Assert(cc && cc->certStore);
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      2|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 1, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   51|      1|    if (!cc) {
  ------------------
  |  Branch (51:9): [True: 0, False: 1]
  ------------------
   52|      0|        return PR_FAILURE;
   53|      0|    }
   54|      1|    if (cc->certStore) {
  ------------------
  |  Branch (54:9): [True: 1, False: 0]
  ------------------
   55|      1|        status = nssCertificateStore_Destroy(cc->certStore);
   56|      1|        if (status == PR_FAILURE) {
  ------------------
  |  Branch (56:13): [True: 0, False: 1]
  ------------------
   57|      0|            return status;
   58|      0|        }
   59|      1|    } else {
   60|      0|        status = PR_FAILURE;
   61|      0|    }
   62|      1|    nssArena_Destroy(cc->arena);
   63|      1|    return status;
   64|      1|}
NSSCryptoContext_FindOrImportCertificate:
   96|  5.75k|{
   97|  5.75k|    NSSCertificate *rvCert = NULL;
   98|       |
   99|  5.75k|    PORT_Assert(cc && cc->certStore);
  ------------------
  |  |  120|  5.75k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  11.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 5.75k, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 5.75k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  100|  5.75k|    if (!cc || !cc->certStore) {
  ------------------
  |  Branch (100:9): [True: 0, False: 5.75k]
  |  Branch (100:16): [True: 0, False: 5.75k]
  ------------------
  101|      0|        nss_SetError(NSS_ERROR_INVALID_ARGUMENT);
  102|      0|        return rvCert;
  103|      0|    }
  104|  5.75k|    rvCert = nssCertificateStore_FindOrAdd(cc->certStore, c);
  105|  5.75k|    if (rvCert == c && c->object.cryptoContext != cc) {
  ------------------
  |  Branch (105:9): [True: 5.75k, False: 0]
  |  Branch (105:24): [True: 0, False: 5.75k]
  ------------------
  106|      0|        PORT_Assert(!c->object.cryptoContext);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|      0|        c->object.cryptoContext = cc;
  108|      0|    }
  109|  5.75k|    if (rvCert) {
  ------------------
  |  Branch (109:9): [True: 5.75k, False: 0]
  ------------------
  110|       |        /* an NSSCertificate cannot be part of two crypto contexts
  111|       |        ** simultaneously.  If this assertion fails, then there is
  112|       |        ** a serious Stan design flaw.
  113|       |        */
  114|  5.75k|        PORT_Assert(cc == c->object.cryptoContext);
  ------------------
  |  |  120|  5.75k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  5.75k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5.75k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|  5.75k|    }
  116|  5.75k|    return rvCert;
  117|  5.75k|}
nssCryptoContext_FindCertificatesBySubject:
  283|  1.13k|{
  284|  1.13k|    NSSCertificate **rvCerts;
  285|  1.13k|    PORT_Assert(cc && cc->certStore);
  ------------------
  |  |  120|  1.13k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  2.26k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 1.13k, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 1.13k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  286|  1.13k|    if (!cc || !cc->certStore) {
  ------------------
  |  Branch (286:9): [True: 0, False: 1.13k]
  |  Branch (286:16): [True: 0, False: 1.13k]
  ------------------
  287|      0|        return NULL;
  288|      0|    }
  289|  1.13k|    rvCerts = nssCertificateStore_FindCertificatesBySubject(cc->certStore,
  290|  1.13k|                                                            subject,
  291|  1.13k|                                                            rvOpt,
  292|  1.13k|                                                            maximumOpt,
  293|  1.13k|                                                            arenaOpt);
  294|  1.13k|    return rvCerts;
  295|  1.13k|}
NSSCryptoContext_FindCertificateByEncodedCertificate:
  338|  6.16k|{
  339|  6.16k|    PORT_Assert(cc && cc->certStore);
  ------------------
  |  |  120|  6.16k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  12.3k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 6.16k, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 6.16k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  340|  6.16k|    if (!cc || !cc->certStore) {
  ------------------
  |  Branch (340:9): [True: 0, False: 6.16k]
  |  Branch (340:16): [True: 0, False: 6.16k]
  ------------------
  341|      0|        return NULL;
  342|      0|    }
  343|  6.16k|    return nssCertificateStore_FindCertificateByEncodedCertificate(
  344|  6.16k|        cc->certStore,
  345|  6.16k|        encodedCertificate);
  346|  6.16k|}
nssCryptoContext_FindTrustForCertificate:
  493|  5.75k|{
  494|  5.75k|    PORT_Assert(cc && cc->certStore);
  ------------------
  |  |  120|  5.75k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  11.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 5.75k, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 5.75k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  495|  5.75k|    if (!cc || !cc->certStore) {
  ------------------
  |  Branch (495:9): [True: 0, False: 5.75k]
  |  Branch (495:16): [True: 0, False: 5.75k]
  ------------------
  496|      0|        return NULL;
  497|      0|    }
  498|  5.75k|    return nssCertificateStore_FindTrustForCertificate(cc->certStore, cert);
  499|  5.75k|}

STAN_GetDefaultTrustDomain:
   49|  41.3k|{
   50|  41.3k|    return g_default_trust_domain;
   51|  41.3k|}
STAN_GetDefaultCryptoContext:
   55|  11.8k|{
   56|  11.8k|    return g_default_crypto_context;
   57|  11.8k|}
STAN_InitTokenForSlotInfo:
   64|      2|{
   65|      2|    NSSToken *token;
   66|      2|    if (!td) {
  ------------------
  |  Branch (66:9): [True: 0, False: 2]
  ------------------
   67|      0|        td = g_default_trust_domain;
   68|      0|        if (!td) {
  ------------------
  |  Branch (68:13): [True: 0, False: 0]
  ------------------
   69|       |            /* we're called while still initting. slot will get added
   70|       |             * appropriately through normal init processes */
   71|      0|            return PR_SUCCESS;
   72|      0|        }
   73|      0|    }
   74|      2|    token = nssToken_CreateFromPK11SlotInfo(td, slot);
   75|      2|    if (token) {
  ------------------
  |  Branch (75:9): [True: 2, False: 0]
  ------------------
   76|       |        /* PK11Slot_SetNSSToken increments the refcount on |token| to 2 */
   77|      2|        PK11Slot_SetNSSToken(slot, token);
   78|       |
   79|       |        /* we give our reference to |td->tokenList| */
   80|      2|        NSSRWLock_LockWrite(td->tokensLock);
  ------------------
  |  |   48|      2|#define NSSRWLock_LockWrite NSSRWLock_LockWrite_Util
  ------------------
   81|      2|        nssList_Add(td->tokenList, token);
   82|      2|        NSSRWLock_UnlockWrite(td->tokensLock);
  ------------------
  |  |   51|      2|#define NSSRWLock_UnlockWrite NSSRWLock_UnlockWrite_Util
  ------------------
   83|      2|    } else {
   84|      0|        PK11Slot_SetNSSToken(slot, NULL);
   85|      0|    }
   86|      2|    return PR_SUCCESS;
   87|      2|}
STAN_LoadDefaultNSS3TrustDomain:
  110|      1|{
  111|      1|    NSSTrustDomain *td;
  112|      1|    SECMODModuleList *mlp;
  113|      1|    SECMODListLock *moduleLock = SECMOD_GetDefaultModuleListLock();
  114|      1|    int i;
  115|       |
  116|      1|    if (g_default_trust_domain || g_default_crypto_context) {
  ------------------
  |  Branch (116:9): [True: 0, False: 1]
  |  Branch (116:35): [True: 0, False: 1]
  ------------------
  117|       |        /* Stan is already initialized or a previous shutdown failed. */
  118|      0|        nss_SetError(NSS_ERROR_ALREADY_INITIALIZED);
  119|      0|        return PR_FAILURE;
  120|      0|    }
  121|      1|    td = NSSTrustDomain_Create(NULL, NULL, NULL, NULL);
  122|      1|    if (!td) {
  ------------------
  |  Branch (122:9): [True: 0, False: 1]
  ------------------
  123|      0|        return PR_FAILURE;
  124|      0|    }
  125|       |    /*
  126|       |     * Deadlock warning: we should never acquire the moduleLock while
  127|       |     * we hold the tokensLock. We can use the NSSRWLock Rank feature to
  128|       |     * guarrentee this. tokensLock have a higher rank than module lock.
  129|       |     */
  130|      1|    td->tokenList = nssList_Create(td->arena, PR_TRUE);
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  131|      1|    if (!td->tokenList) {
  ------------------
  |  Branch (131:9): [True: 0, False: 1]
  ------------------
  132|      0|        goto loser;
  133|      0|    }
  134|      1|    SECMOD_GetReadLock(moduleLock);
  135|      1|    NSSRWLock_LockWrite(td->tokensLock);
  ------------------
  |  |   48|      1|#define NSSRWLock_LockWrite NSSRWLock_LockWrite_Util
  ------------------
  136|      2|    for (mlp = SECMOD_GetDefaultModuleList(); mlp != NULL; mlp = mlp->next) {
  ------------------
  |  Branch (136:47): [True: 1, False: 1]
  ------------------
  137|      3|        for (i = 0; i < mlp->module->slotCount; i++) {
  ------------------
  |  Branch (137:21): [True: 2, False: 1]
  ------------------
  138|      2|            STAN_InitTokenForSlotInfo(td, mlp->module->slots[i]);
  139|      2|        }
  140|      1|    }
  141|      1|    td->tokens = nssList_CreateIterator(td->tokenList);
  142|      1|    NSSRWLock_UnlockWrite(td->tokensLock);
  ------------------
  |  |   51|      1|#define NSSRWLock_UnlockWrite NSSRWLock_UnlockWrite_Util
  ------------------
  143|      1|    SECMOD_ReleaseReadLock(moduleLock);
  144|      1|    if (!td->tokens) {
  ------------------
  |  Branch (144:9): [True: 0, False: 1]
  ------------------
  145|      0|        goto loser;
  146|      0|    }
  147|      1|    g_default_crypto_context = NSSTrustDomain_CreateCryptoContext(td, NULL);
  148|      1|    if (!g_default_crypto_context) {
  ------------------
  |  Branch (148:9): [True: 0, False: 1]
  ------------------
  149|      0|        goto loser;
  150|      0|    }
  151|      1|    g_default_trust_domain = td;
  152|      1|    return PR_SUCCESS;
  153|       |
  154|      0|loser:
  155|      0|    NSSTrustDomain_Destroy(td);
  156|      0|    return PR_FAILURE;
  157|      1|}
STAN_Shutdown:
  208|      1|{
  209|      1|    PRStatus status = PR_SUCCESS;
  210|      1|    if (g_default_trust_domain) {
  ------------------
  |  Branch (210:9): [True: 1, False: 0]
  ------------------
  211|      1|        if (NSSTrustDomain_Destroy(g_default_trust_domain) == PR_SUCCESS) {
  ------------------
  |  Branch (211:13): [True: 1, False: 0]
  ------------------
  212|      1|            g_default_trust_domain = NULL;
  213|      1|        } else {
  214|      0|            status = PR_FAILURE;
  215|      0|        }
  216|      1|    }
  217|      1|    if (g_default_crypto_context) {
  ------------------
  |  Branch (217:9): [True: 1, False: 0]
  ------------------
  218|      1|        if (NSSCryptoContext_Destroy(g_default_crypto_context) == PR_SUCCESS) {
  ------------------
  |  Branch (218:13): [True: 1, False: 0]
  ------------------
  219|      1|            g_default_crypto_context = NULL;
  220|      1|        } else {
  221|      0|            status = PR_FAILURE;
  222|      0|        }
  223|      1|    }
  224|      1|    return status;
  225|      1|}
nssPKIX509_GetIssuerAndSerialFromDER:
  257|  12.3k|{
  258|  12.3k|    SECItem derCert = { 0 };
  259|  12.3k|    SECItem derIssuer = { 0 };
  260|  12.3k|    SECItem derSerial = { 0 };
  261|  12.3k|    SECStatus secrv;
  262|  12.3k|    derCert.data = (unsigned char *)der->data;
  263|  12.3k|    derCert.len = der->size;
  264|  12.3k|    secrv = CERT_IssuerNameFromDERCert(&derCert, &derIssuer);
  265|  12.3k|    if (secrv != SECSuccess) {
  ------------------
  |  Branch (265:9): [True: 736, False: 11.5k]
  ------------------
  266|    736|        return PR_FAILURE;
  267|    736|    }
  268|  11.5k|    secrv = CERT_SerialNumberFromDERCert(&derCert, &derSerial);
  269|  11.5k|    if (secrv != SECSuccess) {
  ------------------
  |  Branch (269:9): [True: 0, False: 11.5k]
  ------------------
  270|      0|        PORT_Free(derSerial.data);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  271|      0|        return PR_FAILURE;
  272|      0|    }
  273|  11.5k|    issuer->data = derIssuer.data;
  274|  11.5k|    issuer->size = derIssuer.len;
  275|  11.5k|    serial->data = derSerial.data;
  276|  11.5k|    serial->size = derSerial.len;
  277|  11.5k|    return PR_SUCCESS;
  278|  11.5k|}
nssDecodedPKIXCertificate_Create:
  490|  6.16k|{
  491|  6.16k|    nssDecodedCert *rvDC = NULL;
  492|  6.16k|    CERTCertificate *cert;
  493|  6.16k|    SECItem secDER;
  494|       |
  495|  6.16k|    SECITEM_FROM_NSSITEM(&secDER, encoding);
  ------------------
  |  |   31|  6.16k|    (secit)->data = (unsigned char *)(nssit)->data; \
  |  |   32|  6.16k|    (secit)->len = (unsigned int)(nssit)->size;
  ------------------
  496|  6.16k|    cert = CERT_DecodeDERCertificate(&secDER, PR_TRUE, NULL);
  ------------------
  |  |  437|  6.16k|#define PR_TRUE 1
  ------------------
  497|  6.16k|    if (cert) {
  ------------------
  |  Branch (497:9): [True: 5.75k, False: 411]
  ------------------
  498|  5.75k|        rvDC = nss_ZNEW(arenaOpt, nssDecodedCert);
  ------------------
  |  |  348|  5.75k|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
  499|  5.75k|        if (rvDC) {
  ------------------
  |  Branch (499:13): [True: 5.75k, False: 0]
  ------------------
  500|  5.75k|            rvDC->type = NSSCertificateType_PKIX;
  501|  5.75k|            rvDC->data = (void *)cert;
  502|  5.75k|            rvDC->getIdentifier = nss3certificate_getIdentifier;
  503|  5.75k|            rvDC->getIssuerIdentifier = nss3certificate_getIssuerIdentifier;
  504|  5.75k|            rvDC->matchIdentifier = nss3certificate_matchIdentifier;
  505|  5.75k|            rvDC->isValidIssuer = nss3certificate_isValidIssuer;
  506|  5.75k|            rvDC->getUsage = nss3certificate_getUsage;
  507|  5.75k|            rvDC->isValidAtTime = nss3certificate_isValidAtTime;
  508|  5.75k|            rvDC->isNewerThan = nss3certificate_isNewerThan;
  509|  5.75k|            rvDC->matchUsage = nss3certificate_matchUsage;
  510|  5.75k|            rvDC->isTrustedForUsage = nss3certificate_isTrustedForUsage;
  511|  5.75k|            rvDC->getEmailAddress = nss3certificate_getEmailAddress;
  512|  5.75k|            rvDC->getDERSerialNumber = nss3certificate_getDERSerialNumber;
  513|  5.75k|        } else {
  514|      0|            CERT_DestroyCertificate(cert);
  515|      0|        }
  516|  5.75k|    }
  517|  6.16k|    return rvDC;
  518|  6.16k|}
nssDecodedPKIXCertificate_Destroy:
  546|  5.75k|{
  547|  5.75k|    CERTCertificate *cert = (CERTCertificate *)dc->data;
  548|       |
  549|       |    /* The decoder may only be half initialized (the case where we find we
  550|       |     * could not decode the certificate). In this case, there is not cert to
  551|       |     * free, just free the dc structure. */
  552|  5.75k|    if (cert) {
  ------------------
  |  Branch (552:9): [True: 5.75k, False: 0]
  ------------------
  553|  5.75k|        PRBool freeSlot = cert->ownSlot;
  554|  5.75k|        PK11SlotInfo *slot = cert->slot;
  555|  5.75k|        PLArenaPool *arena = cert->arena;
  556|       |        /* zero cert before freeing. Any stale references to this cert
  557|       |         * after this point will probably cause an exception.  */
  558|  5.75k|        PORT_Memset(cert, 0, sizeof *cert);
  ------------------
  |  |  182|  5.75k|#define PORT_Memset memset
  ------------------
  559|       |        /* free the arena that contains the cert. */
  560|  5.75k|        PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |   61|  5.75k|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |  438|  5.75k|#define PR_FALSE 0
  ------------------
  561|  5.75k|        if (slot && freeSlot) {
  ------------------
  |  Branch (561:13): [True: 0, False: 5.75k]
  |  Branch (561:21): [True: 0, False: 0]
  ------------------
  562|      0|            PK11_FreeSlot(slot);
  563|      0|        }
  564|  5.75k|    }
  565|  5.75k|    nss_ZFreeIf(dc);
  566|  5.75k|    return PR_SUCCESS;
  567|  5.75k|}
STAN_GetCERTCertificate:
  977|  17.5k|{
  978|  17.5k|    return stan_GetCERTCertificate(c, PR_FALSE);
  ------------------
  |  |  438|  17.5k|#define PR_FALSE 0
  ------------------
  979|  17.5k|}
STAN_GetCERTCertificateOrRelease:
  990|  5.75k|{
  991|  5.75k|    CERTCertificate *nss3cert = stan_GetCERTCertificate(c, PR_FALSE);
  ------------------
  |  |  438|  5.75k|#define PR_FALSE 0
  ------------------
  992|  5.75k|    if (!nss3cert) {
  ------------------
  |  Branch (992:9): [True: 0, False: 5.75k]
  ------------------
  993|      0|        nssCertificate_Destroy(c);
  994|      0|    }
  995|  5.75k|    return nss3cert;
  996|  5.75k|}
STAN_GetNSSCertificate:
 1024|  12.1k|{
 1025|  12.1k|    NSSCertificate *c;
 1026|  12.1k|    nssCryptokiInstance *instance;
 1027|  12.1k|    nssPKIObject *pkiob;
 1028|  12.1k|    NSSArena *arena;
 1029|  12.1k|    CERT_LockCertTempPerm(cc);
 1030|  12.1k|    c = cc->nssCertificate;
 1031|  12.1k|    CERT_UnlockCertTempPerm(cc);
 1032|  12.1k|    if (c) {
  ------------------
  |  Branch (1032:9): [True: 12.1k, False: 0]
  ------------------
 1033|  12.1k|        return c;
 1034|  12.1k|    }
 1035|       |    /* i don't think this should happen.  but if it can, need to create
 1036|       |     * NSSCertificate from CERTCertificate values here.  */
 1037|       |    /* Yup, it can happen. */
 1038|      0|    arena = NSSArena_Create();
 1039|      0|    if (!arena) {
  ------------------
  |  Branch (1039:9): [True: 0, False: 0]
  ------------------
 1040|      0|        return NULL;
 1041|      0|    }
 1042|      0|    c = nss_ZNEW(arena, NSSCertificate);
  ------------------
  |  |  348|      0|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
 1043|      0|    if (!c) {
  ------------------
  |  Branch (1043:9): [True: 0, False: 0]
  ------------------
 1044|      0|        nssArena_Destroy(arena);
 1045|      0|        return NULL;
 1046|      0|    }
 1047|      0|    NSSITEM_FROM_SECITEM(&c->encoding, &cc->derCert);
  ------------------
  |  |   27|      0|    (nssit)->data = (void *)(secit)->data; \
  |  |   28|      0|    (nssit)->size = (PRUint32)(secit)->len;
  ------------------
 1048|      0|    c->type = NSSCertificateType_PKIX;
 1049|      0|    pkiob = nssPKIObject_Create(arena, NULL, cc->dbhandle, NULL, nssPKIMonitor);
 1050|      0|    if (!pkiob) {
  ------------------
  |  Branch (1050:9): [True: 0, False: 0]
  ------------------
 1051|      0|        nssArena_Destroy(arena);
 1052|      0|        return NULL;
 1053|      0|    }
 1054|      0|    c->object = *pkiob;
 1055|      0|    nssItem_Create(arena,
 1056|      0|                   &c->issuer, cc->derIssuer.len, cc->derIssuer.data);
 1057|      0|    nssItem_Create(arena,
 1058|      0|                   &c->subject, cc->derSubject.len, cc->derSubject.data);
 1059|       |    /* CERTCertificate stores serial numbers decoded.  I need the DER
 1060|       |     * here.  sigh.
 1061|       |     */
 1062|      0|    SECItem derSerial;
 1063|      0|    SECStatus secrv;
 1064|      0|    secrv = CERT_SerialNumberFromDERCert(&cc->derCert, &derSerial);
 1065|      0|    if (secrv == SECFailure) {
  ------------------
  |  Branch (1065:9): [True: 0, False: 0]
  ------------------
 1066|      0|        nssArena_Destroy(arena);
 1067|      0|        return NULL;
 1068|      0|    }
 1069|      0|    nssItem_Create(arena, &c->serial, derSerial.len, derSerial.data);
 1070|      0|    PORT_Free(derSerial.data);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1071|       |
 1072|      0|    if (cc->emailAddr && cc->emailAddr[0]) {
  ------------------
  |  Branch (1072:9): [True: 0, False: 0]
  |  Branch (1072:26): [True: 0, False: 0]
  ------------------
 1073|      0|        c->email = nssUTF8_Create(arena,
 1074|      0|                                  nssStringType_PrintableString,
 1075|      0|                                  (NSSUTF8 *)cc->emailAddr,
 1076|      0|                                  PORT_Strlen(cc->emailAddr));
  ------------------
  |  |  190|      0|#define PORT_Strlen(s) strlen(s)
  ------------------
 1077|      0|    }
 1078|      0|    if (cc->slot) {
  ------------------
  |  Branch (1078:9): [True: 0, False: 0]
  ------------------
 1079|      0|        instance = nss_ZNEW(arena, nssCryptokiInstance);
  ------------------
  |  |  348|      0|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
 1080|      0|        if (!instance) {
  ------------------
  |  Branch (1080:13): [True: 0, False: 0]
  ------------------
 1081|      0|            nssArena_Destroy(arena);
 1082|      0|            return NULL;
 1083|      0|        }
 1084|      0|        instance->token = PK11Slot_GetNSSToken(cc->slot);
 1085|      0|        if (!instance->token) {
  ------------------
  |  Branch (1085:13): [True: 0, False: 0]
  ------------------
 1086|      0|            nssArena_Destroy(arena);
 1087|      0|            return NULL;
 1088|      0|        }
 1089|      0|        instance->handle = cc->pkcs11ID;
 1090|      0|        instance->isTokenObject = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1091|      0|        if (cc->nickname) {
  ------------------
  |  Branch (1091:13): [True: 0, False: 0]
  ------------------
 1092|      0|            instance->label = nssUTF8_Create(arena,
 1093|      0|                                             nssStringType_UTF8String,
 1094|      0|                                             (NSSUTF8 *)cc->nickname,
 1095|      0|                                             PORT_Strlen(cc->nickname));
  ------------------
  |  |  190|      0|#define PORT_Strlen(s) strlen(s)
  ------------------
 1096|      0|        }
 1097|      0|        nssPKIObject_AddInstance(&c->object, instance);
 1098|      0|    }
 1099|      0|    c->decoding = create_decoded_pkix_cert_from_nss3cert(NULL, cc);
 1100|      0|    CERT_LockCertTempPerm(cc);
 1101|      0|    cc->nssCertificate = c;
 1102|      0|    CERT_UnlockCertTempPerm(cc);
 1103|      0|    return c;
 1104|      0|}
pki3hack.c:nss3certificate_getIssuerIdentifier:
  291|    163|{
  292|    163|    CERTCertificate *c = (CERTCertificate *)dc->data;
  293|    163|    return (void *)c->authKeyID;
  294|    163|}
pki3hack.c:nss3certificate_matchIdentifier:
  298|    163|{
  299|    163|    CERTCertificate *c = (CERTCertificate *)dc->data;
  300|    163|    CERTAuthKeyID *authKeyID = (CERTAuthKeyID *)id;
  301|    163|    SECItem skid;
  302|    163|    nssCertIDMatch match = nssCertIDMatch_Unknown;
  303|       |
  304|       |    /* keyIdentifier */
  305|    163|    if (authKeyID->keyID.len > 0 &&
  ------------------
  |  Branch (305:9): [True: 145, False: 18]
  ------------------
  306|    163|        CERT_FindSubjectKeyIDExtension(c, &skid) == SECSuccess) {
  ------------------
  |  Branch (306:9): [True: 61, False: 84]
  ------------------
  307|     61|        PRBool skiEqual;
  308|     61|        skiEqual = SECITEM_ItemsAreEqual(&authKeyID->keyID, &skid);
  ------------------
  |  |  109|     61|#define SECITEM_ItemsAreEqual SECITEM_ItemsAreEqual_Util
  ------------------
  309|     61|        PORT_Free(skid.data);
  ------------------
  |  |   60|     61|#define PORT_Free PORT_Free_Util
  ------------------
  310|     61|        if (skiEqual) {
  ------------------
  |  Branch (310:13): [True: 34, False: 27]
  ------------------
  311|       |            /* change the state to positive match, but keep going */
  312|     34|            match = nssCertIDMatch_Yes;
  313|     34|        } else {
  314|       |            /* exit immediately on failure */
  315|     27|            return nssCertIDMatch_No;
  316|     27|        }
  317|     61|    }
  318|       |
  319|       |    /* issuer/serial (treated as pair) */
  320|    136|    if (authKeyID->authCertIssuer) {
  ------------------
  |  Branch (320:9): [True: 54, False: 82]
  ------------------
  321|     54|        SECItem *caName = NULL;
  322|     54|        SECItem *caSN = &authKeyID->authCertSerialNumber;
  323|       |
  324|     54|        caName = (SECItem *)CERT_GetGeneralNameByType(
  325|     54|            authKeyID->authCertIssuer,
  326|     54|            certDirectoryName, PR_TRUE);
  ------------------
  |  |  437|     54|#define PR_TRUE 1
  ------------------
  327|     54|        if (caName != NULL &&
  ------------------
  |  Branch (327:13): [True: 39, False: 15]
  ------------------
  328|     54|            SECITEM_ItemsAreEqual(&c->derIssuer, caName) &&
  ------------------
  |  |  109|     39|#define SECITEM_ItemsAreEqual SECITEM_ItemsAreEqual_Util
  ------------------
  |  Branch (328:13): [True: 17, False: 22]
  ------------------
  329|     54|            SECITEM_ItemsAreEqual(&c->serialNumber, caSN)) {
  ------------------
  |  |  109|     17|#define SECITEM_ItemsAreEqual SECITEM_ItemsAreEqual_Util
  ------------------
  |  Branch (329:13): [True: 6, False: 11]
  ------------------
  330|      6|            match = nssCertIDMatch_Yes;
  331|     48|        } else {
  332|     48|            match = nssCertIDMatch_Unknown;
  333|     48|        }
  334|     54|    }
  335|    136|    return match;
  336|    163|}
pki3hack.c:nss3certificate_isValidIssuer:
  340|    136|{
  341|    136|    CERTCertificate *c = (CERTCertificate *)dc->data;
  342|    136|    unsigned int ignore;
  343|    136|    return CERT_IsCACert(c, &ignore);
  344|    136|}
pki3hack.c:nss3certificate_matchUsage:
  380|     16|{
  381|     16|    CERTCertificate *cc;
  382|     16|    unsigned int requiredKeyUsage = 0;
  383|     16|    unsigned int requiredCertType = 0;
  384|     16|    SECStatus secrv;
  385|     16|    PRBool match;
  386|     16|    PRBool ca;
  387|       |
  388|       |    /* This is for NSS 3.3 functions that do not specify a usage */
  389|     16|    if (usage->anyUsage) {
  ------------------
  |  Branch (389:9): [True: 0, False: 16]
  ------------------
  390|      0|        return PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  391|      0|    }
  392|     16|    ca = usage->nss3lookingForCA;
  393|     16|    secrv = CERT_KeyUsageAndTypeForCertUsage(usage->nss3usage, ca,
  394|     16|                                             &requiredKeyUsage,
  395|     16|                                             &requiredCertType);
  396|     16|    if (secrv != SECSuccess) {
  ------------------
  |  Branch (396:9): [True: 0, False: 16]
  ------------------
  397|      0|        return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  398|      0|    }
  399|     16|    cc = (CERTCertificate *)dc->data;
  400|     16|    secrv = CERT_CheckKeyUsage(cc, requiredKeyUsage);
  401|     16|    match = (PRBool)(secrv == SECSuccess);
  402|     16|    if (match) {
  ------------------
  |  Branch (402:9): [True: 14, False: 2]
  ------------------
  403|     14|        unsigned int certType = 0;
  404|     14|        if (ca) {
  ------------------
  |  Branch (404:13): [True: 14, False: 0]
  ------------------
  405|     14|            (void)CERT_IsCACert(cc, &certType);
  406|     14|        } else {
  407|      0|            certType = cc->nsCertType;
  408|      0|        }
  409|     14|        if (!(certType & requiredCertType)) {
  ------------------
  |  Branch (409:13): [True: 1, False: 13]
  ------------------
  410|      1|            match = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  411|      1|        }
  412|     14|    }
  413|     16|    return match;
  414|     16|}
pki3hack.c:get_cert_instance:
  643|  5.75k|{
  644|  5.75k|    nssCryptokiObject *instance, **ci;
  645|  5.75k|    nssCryptokiObject **instances = nssPKIObject_GetInstances(&c->object);
  646|  5.75k|    if (!instances) {
  ------------------
  |  Branch (646:9): [True: 5.75k, False: 0]
  ------------------
  647|  5.75k|        return NULL;
  648|  5.75k|    }
  649|      0|    instance = NULL;
  650|      0|    for (ci = instances; *ci; ci++) {
  ------------------
  |  Branch (650:26): [True: 0, False: 0]
  ------------------
  651|      0|        if (!instance) {
  ------------------
  |  Branch (651:13): [True: 0, False: 0]
  ------------------
  652|      0|            instance = nssCryptokiObject_Clone(*ci);
  653|      0|        } else {
  654|       |            /* This only really works for two instances...  But 3.4 can't
  655|       |             * handle more anyway.  The logic is, if there are multiple
  656|       |             * instances, prefer the one that is not internal (e.g., on
  657|       |             * a hardware device.
  658|       |             */
  659|      0|            if (PK11_IsInternal(instance->token->pk11slot)) {
  ------------------
  |  Branch (659:17): [True: 0, False: 0]
  ------------------
  660|      0|                nssCryptokiObject_Destroy(instance);
  661|      0|                instance = nssCryptokiObject_Clone(*ci);
  662|      0|            }
  663|      0|        }
  664|      0|    }
  665|      0|    nssCryptokiObjectArray_Destroy(instances);
  666|      0|    return instance;
  667|  5.75k|}
pki3hack.c:stan_GetCERTCertificate:
  889|  23.2k|{
  890|  23.2k|    nssDecodedCert *dc = NULL;
  891|  23.2k|    CERTCertificate *cc = NULL;
  892|  23.2k|    CERTCertTrust certTrust;
  893|       |
  894|       |    /* make sure object does not go away until we finish */
  895|  23.2k|    nssPKIObject_AddRef(&c->object);
  896|  23.2k|    nssPKIObject_Lock(&c->object);
  897|       |
  898|  23.2k|    dc = c->decoding;
  899|  23.2k|    if (!dc) {
  ------------------
  |  Branch (899:9): [True: 6.16k, False: 17.1k]
  ------------------
  900|  6.16k|        dc = nssDecodedPKIXCertificate_Create(NULL, &c->encoding);
  901|  6.16k|        if (!dc) {
  ------------------
  |  Branch (901:13): [True: 411, False: 5.75k]
  ------------------
  902|    411|            goto loser;
  903|    411|        }
  904|  5.75k|        cc = (CERTCertificate *)dc->data;
  905|  5.75k|        PORT_Assert(cc); /* software error */
  ------------------
  |  |  120|  5.75k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  5.75k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5.75k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  906|  5.75k|        if (!cc) {
  ------------------
  |  Branch (906:13): [True: 0, False: 5.75k]
  ------------------
  907|      0|            nssDecodedPKIXCertificate_Destroy(dc);
  908|      0|            nss_SetError(NSS_ERROR_INTERNAL_ERROR);
  909|      0|            goto loser;
  910|      0|        }
  911|  5.75k|        PORT_Assert(!c->decoding);
  ------------------
  |  |  120|  5.75k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  5.75k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 5.75k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  912|  5.75k|        if (!c->decoding) {
  ------------------
  |  Branch (912:13): [True: 5.75k, False: 0]
  ------------------
  913|  5.75k|            c->decoding = dc;
  914|  5.75k|        } else {
  915|       |            /* this should never happen. Fail. */
  916|      0|            nssDecodedPKIXCertificate_Destroy(dc);
  917|      0|            nss_SetError(NSS_ERROR_INTERNAL_ERROR);
  918|      0|            goto loser;
  919|      0|        }
  920|  5.75k|    }
  921|  22.8k|    cc = (CERTCertificate *)dc->data;
  922|  22.8k|    PORT_Assert(cc);
  ------------------
  |  |  120|  22.8k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  22.8k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 22.8k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  923|  22.8k|    if (!cc) {
  ------------------
  |  Branch (923:9): [True: 0, False: 22.8k]
  ------------------
  924|      0|        nss_SetError(NSS_ERROR_INTERNAL_ERROR);
  925|      0|        goto loser;
  926|      0|    }
  927|  22.8k|    CERT_LockCertTempPerm(cc);
  928|  22.8k|    NSSCertificate *nssCert = cc->nssCertificate;
  929|  22.8k|    CERT_UnlockCertTempPerm(cc);
  930|  22.8k|    if (!nssCert || forceUpdate) {
  ------------------
  |  Branch (930:9): [True: 5.75k, False: 17.1k]
  |  Branch (930:21): [True: 0, False: 17.1k]
  ------------------
  931|  5.75k|        fill_CERTCertificateFields(c, cc, forceUpdate);
  932|  17.1k|    } else if (CERT_GetCertTrust(cc, &certTrust) != SECSuccess) {
  ------------------
  |  Branch (932:16): [True: 17.1k, False: 0]
  ------------------
  933|  17.1k|        CERTCertTrust *trust;
  934|  17.1k|        if (!c->object.cryptoContext) {
  ------------------
  |  Branch (934:13): [True: 0, False: 17.1k]
  ------------------
  935|       |            /* If it's a perm cert, it might have been stored before the
  936|       |             * trust, so look for the trust again.
  937|       |             */
  938|      0|            trust = nssTrust_GetCERTCertTrustForCert(c, cc);
  939|  17.1k|        } else {
  940|       |            /* If it's a temp cert, it might have been stored before the
  941|       |             * builtin trust module is loaded, so look for the trust
  942|       |             * again, but don't set the empty trust if it is not found.
  943|       |             */
  944|  17.1k|            NSSTrust *t = nssTrustDomain_FindTrustForCertificate(c->object.cryptoContext->td, c);
  945|  17.1k|            if (!t) {
  ------------------
  |  Branch (945:17): [True: 17.1k, False: 0]
  ------------------
  946|  17.1k|                goto loser;
  947|  17.1k|            }
  948|      0|            trust = cert_trust_from_stan_trust(t, cc->arena);
  949|      0|            nssTrust_Destroy(t);
  950|      0|            if (!trust) {
  ------------------
  |  Branch (950:17): [True: 0, False: 0]
  ------------------
  951|      0|                goto loser;
  952|      0|            }
  953|      0|        }
  954|       |
  955|      0|        CERT_LockCertTrust(cc);
  956|      0|        cc->trust = trust;
  957|      0|        CERT_UnlockCertTrust(cc);
  958|      0|    }
  959|       |
  960|  23.2k|loser:
  961|  23.2k|    nssPKIObject_Unlock(&c->object);
  962|  23.2k|    nssPKIObject_Destroy(&c->object);
  963|  23.2k|    return cc;
  964|  22.8k|}
pki3hack.c:fill_CERTCertificateFields:
  731|  5.75k|{
  732|  5.75k|    CERTCertTrust *trust = NULL;
  733|  5.75k|    NSSTrust *nssTrust;
  734|  5.75k|    NSSCryptoContext *context = c->object.cryptoContext;
  735|  5.75k|    nssCryptokiInstance *instance;
  736|  5.75k|    NSSUTF8 *stanNick = NULL;
  737|       |
  738|       |    /* We are holding the base class object's lock on entry of this function
  739|       |     * This lock protects writes to fields of the CERTCertificate .
  740|       |     * It is also needed by some functions to compute values such as trust.
  741|       |     */
  742|  5.75k|    instance = get_cert_instance(c);
  743|       |
  744|  5.75k|    if (instance) {
  ------------------
  |  Branch (744:9): [True: 0, False: 5.75k]
  ------------------
  745|      0|        stanNick = instance->label;
  746|  5.75k|    } else if (context) {
  ------------------
  |  Branch (746:16): [True: 5.75k, False: 0]
  ------------------
  747|  5.75k|        stanNick = c->object.tempName;
  748|  5.75k|    }
  749|       |    /* fill other fields needed by NSS3 functions using CERTCertificate */
  750|  5.75k|    if ((!cc->nickname && stanNick) || forced) {
  ------------------
  |  Branch (750:10): [True: 5.75k, False: 0]
  |  Branch (750:27): [True: 0, False: 5.75k]
  |  Branch (750:40): [True: 0, False: 5.75k]
  ------------------
  751|      0|        PRStatus nssrv;
  752|      0|        int nicklen, tokenlen, len;
  753|      0|        NSSUTF8 *tokenName = NULL;
  754|      0|        char *nick;
  755|      0|        if (instance &&
  ------------------
  |  Branch (755:13): [True: 0, False: 0]
  ------------------
  756|      0|            (!PK11_IsInternalKeySlot(instance->token->pk11slot) ||
  ------------------
  |  Branch (756:14): [True: 0, False: 0]
  ------------------
  757|      0|             (stanNick && PORT_Strchr(stanNick, ':') != NULL))) {
  ------------------
  |  |  186|      0|#define PORT_Strchr strchr
  ------------------
  |  Branch (757:15): [True: 0, False: 0]
  |  Branch (757:27): [True: 0, False: 0]
  ------------------
  758|      0|            tokenName = nssToken_GetName(instance->token);
  759|      0|            tokenlen = nssUTF8_Size(tokenName, &nssrv);
  760|      0|        } else {
  761|       |            /* don't use token name for internal slot; 3.3 didn't */
  762|      0|            tokenlen = 0;
  763|      0|        }
  764|      0|        if (stanNick) {
  ------------------
  |  Branch (764:13): [True: 0, False: 0]
  ------------------
  765|      0|            nicklen = nssUTF8_Size(stanNick, &nssrv);
  766|      0|            len = tokenlen + nicklen;
  767|      0|            nick = PORT_ArenaAlloc(cc->arena, len);
  ------------------
  |  |   53|      0|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  768|      0|            if (tokenName) {
  ------------------
  |  Branch (768:17): [True: 0, False: 0]
  ------------------
  769|      0|                memcpy(nick, tokenName, tokenlen - 1);
  770|      0|                nick[tokenlen - 1] = ':';
  771|      0|                memcpy(nick + tokenlen, stanNick, nicklen - 1);
  772|      0|            } else {
  773|      0|                memcpy(nick, stanNick, nicklen - 1);
  774|      0|            }
  775|      0|            nick[len - 1] = '\0';
  776|      0|            cc->nickname = nick;
  777|      0|        } else {
  778|      0|            cc->nickname = NULL;
  779|      0|        }
  780|      0|    }
  781|  5.75k|    if (context) {
  ------------------
  |  Branch (781:9): [True: 5.75k, False: 0]
  ------------------
  782|       |        /* trust */
  783|  5.75k|        nssTrust = nssCryptoContext_FindTrustForCertificate(context, c);
  784|  5.75k|        if (!nssTrust) {
  ------------------
  |  Branch (784:13): [True: 5.75k, False: 0]
  ------------------
  785|       |            /* chicken and egg issue:
  786|       |             *
  787|       |             * c->issuer and c->serial are empty at this point, but
  788|       |             * nssTrustDomain_FindTrustForCertificate use them to look up
  789|       |             * up the trust object, so we point them to cc->derIssuer and
  790|       |             * cc->serialNumber.
  791|       |             *
  792|       |             * Our caller will fill these in with proper arena copies when we
  793|       |             * return. */
  794|  5.75k|            c->issuer.data = cc->derIssuer.data;
  795|  5.75k|            c->issuer.size = cc->derIssuer.len;
  796|  5.75k|            c->serial.data = cc->serialNumber.data;
  797|  5.75k|            c->serial.size = cc->serialNumber.len;
  798|  5.75k|            nssTrust = nssTrustDomain_FindTrustForCertificate(context->td, c);
  799|  5.75k|        }
  800|  5.75k|        if (nssTrust) {
  ------------------
  |  Branch (800:13): [True: 0, False: 5.75k]
  ------------------
  801|      0|            trust = cert_trust_from_stan_trust(nssTrust, cc->arena);
  802|      0|            if (trust) {
  ------------------
  |  Branch (802:17): [True: 0, False: 0]
  ------------------
  803|       |                /* we should destroy cc->trust before replacing it, but it's
  804|       |                   allocated in cc->arena, so memory growth will occur on each
  805|       |                   refresh */
  806|      0|                CERT_LockCertTrust(cc);
  807|      0|                cc->trust = trust;
  808|      0|                CERT_UnlockCertTrust(cc);
  809|      0|            }
  810|      0|            nssTrust_Destroy(nssTrust);
  811|      0|        }
  812|  5.75k|    } else if (instance) {
  ------------------
  |  Branch (812:16): [True: 0, False: 0]
  ------------------
  813|       |        /* slot */
  814|      0|        if (cc->slot != instance->token->pk11slot) {
  ------------------
  |  Branch (814:13): [True: 0, False: 0]
  ------------------
  815|      0|            if (cc->slot) {
  ------------------
  |  Branch (815:17): [True: 0, False: 0]
  ------------------
  816|      0|                PK11_FreeSlot(cc->slot);
  817|      0|            }
  818|      0|            cc->slot = PK11_ReferenceSlot(instance->token->pk11slot);
  819|      0|        }
  820|      0|        cc->ownSlot = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  821|       |        /* pkcs11ID */
  822|      0|        cc->pkcs11ID = instance->handle;
  823|       |        /* trust */
  824|      0|        trust = nssTrust_GetCERTCertTrustForCert(c, cc);
  825|      0|        if (trust) {
  ------------------
  |  Branch (825:13): [True: 0, False: 0]
  ------------------
  826|       |            /* we should destroy cc->trust before replacing it, but it's
  827|       |               allocated in cc->arena, so memory growth will occur on each
  828|       |               refresh */
  829|      0|            CERT_LockCertTrust(cc);
  830|      0|            cc->trust = trust;
  831|      0|            CERT_UnlockCertTrust(cc);
  832|      0|        }
  833|       |        /* Read the distrust fields from a nssckbi/builtins certificate and
  834|       |         * fill the fields in CERTCertificate structure when any valid date
  835|       |         * is found. */
  836|      0|        if (PK11_IsReadOnly(cc->slot) && PK11_HasRootCerts(cc->slot)) {
  ------------------
  |  Branch (836:13): [True: 0, False: 0]
  |  Branch (836:42): [True: 0, False: 0]
  ------------------
  837|       |            /* The values are hard-coded and readonly. Read just once. */
  838|      0|            if (cc->distrust == NULL) {
  ------------------
  |  Branch (838:17): [True: 0, False: 0]
  ------------------
  839|      0|                CERTCertDistrust distrustModel;
  840|      0|                SECItem model = { siUTCTime, NULL, 0 };
  841|      0|                distrustModel.serverDistrustAfter = model;
  842|      0|                distrustModel.emailDistrustAfter = model;
  843|      0|                SECStatus rServer = PK11_ReadAttribute(
  844|      0|                    cc->slot, cc->pkcs11ID, CKA_NSS_SERVER_DISTRUST_AFTER,
  ------------------
  |  |  105|      0|#define CKA_NSS_SERVER_DISTRUST_AFTER (CKA_NSS + 35)
  |  |  ------------------
  |  |  |  |   77|      0|#define CKA_NSS (CKA_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  692|      0|#define CKA_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKA_NSS (CKA_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  845|      0|                    cc->arena, &distrustModel.serverDistrustAfter);
  846|      0|                SECStatus rEmail = PK11_ReadAttribute(
  847|      0|                    cc->slot, cc->pkcs11ID, CKA_NSS_EMAIL_DISTRUST_AFTER,
  ------------------
  |  |  106|      0|#define CKA_NSS_EMAIL_DISTRUST_AFTER (CKA_NSS + 36)
  |  |  ------------------
  |  |  |  |   77|      0|#define CKA_NSS (CKA_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  692|      0|#define CKA_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKA_NSS (CKA_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  848|      0|                    cc->arena, &distrustModel.emailDistrustAfter);
  849|       |                /* Only allocate the Distrust structure if a valid date is found.
  850|       |                 * The result length of a encoded valid timestamp is exactly 13 */
  851|      0|                const unsigned int kDistrustFieldSize = 13;
  852|      0|                if ((rServer == SECSuccess && rEmail == SECSuccess) &&
  ------------------
  |  Branch (852:22): [True: 0, False: 0]
  |  Branch (852:47): [True: 0, False: 0]
  ------------------
  853|      0|                    (distrustModel.serverDistrustAfter.len == kDistrustFieldSize ||
  ------------------
  |  Branch (853:22): [True: 0, False: 0]
  ------------------
  854|      0|                     distrustModel.emailDistrustAfter.len == kDistrustFieldSize)) {
  ------------------
  |  Branch (854:22): [True: 0, False: 0]
  ------------------
  855|      0|                    CERTCertDistrust *tmpPtr = PORT_ArenaAlloc(
  ------------------
  |  |   53|      0|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  856|      0|                        cc->arena, sizeof(CERTCertDistrust));
  857|      0|                    PORT_Memcpy(tmpPtr, &distrustModel,
  ------------------
  |  |  180|      0|#define PORT_Memcpy memcpy
  ------------------
  858|      0|                                sizeof(CERTCertDistrust));
  859|      0|                    cc->distrust = tmpPtr;
  860|      0|                }
  861|      0|            }
  862|      0|        }
  863|      0|    }
  864|  5.75k|    if (instance) {
  ------------------
  |  Branch (864:9): [True: 0, False: 5.75k]
  ------------------
  865|      0|        nssCryptokiObject_Destroy(instance);
  866|      0|    }
  867|       |    /* database handle is now the trust domain */
  868|  5.75k|    cc->dbhandle = c->object.trustDomain;
  869|       |    /* subjectList ? */
  870|       |    /* istemp and isperm are supported in NSS 3.4 */
  871|  5.75k|    CERT_LockCertTempPerm(cc);
  872|  5.75k|    cc->istemp = PR_FALSE; /* CERT_NewTemp will override this */
  ------------------
  |  |  438|  5.75k|#define PR_FALSE 0
  ------------------
  873|  5.75k|    cc->isperm = PR_TRUE;  /* by default */
  ------------------
  |  |  437|  5.75k|#define PR_TRUE 1
  ------------------
  874|       |    /* pointer back */
  875|  5.75k|    cc->nssCertificate = c;
  876|  5.75k|    CERT_UnlockCertTempPerm(cc);
  877|  5.75k|    if (trust) {
  ------------------
  |  Branch (877:9): [True: 0, False: 5.75k]
  ------------------
  878|       |        /* force the cert type to be recomputed to include trust info */
  879|      0|        PRUint32 nsCertType = cert_ComputeCertType(cc);
  880|       |
  881|       |        /* Assert that it is safe to cast &cc->nsCertType to "PRInt32 *" */
  882|      0|        PORT_Assert(sizeof(cc->nsCertType) == sizeof(PRInt32));
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  883|      0|        PR_ATOMIC_SET((PRInt32 *)&cc->nsCertType, nsCertType);
  ------------------
  |  |  124|      0|#define PR_ATOMIC_SET(val, newval) __sync_lock_test_and_set(val, newval)
  ------------------
  884|      0|    }
  885|  5.75k|}

nssPKIObject_Lock:
   19|  29.5k|{
   20|  29.5k|    switch (object->lockType) {
   21|  29.5k|        case nssPKIMonitor:
  ------------------
  |  Branch (21:9): [True: 29.5k, False: 0]
  ------------------
   22|  29.5k|            PZ_EnterMonitor(object->sync.mlock);
  ------------------
  |  |  256|  29.5k|#define PZ_EnterMonitor(m) PR_EnterMonitor((m))
  ------------------
   23|  29.5k|            break;
   24|      0|        case nssPKILock:
  ------------------
  |  Branch (24:9): [True: 0, False: 29.5k]
  ------------------
   25|      0|            PZ_Lock(object->sync.lock);
  ------------------
  |  |  245|      0|#define PZ_Lock(k) PR_Lock((k))
  ------------------
   26|      0|            break;
   27|      0|        default:
  ------------------
  |  Branch (27:9): [True: 0, False: 29.5k]
  ------------------
   28|      0|            PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   29|  29.5k|    }
   30|  29.5k|}
nssPKIObject_Unlock:
   34|  29.5k|{
   35|  29.5k|    switch (object->lockType) {
   36|  29.5k|        case nssPKIMonitor:
  ------------------
  |  Branch (36:9): [True: 29.5k, False: 0]
  ------------------
   37|  29.5k|            PZ_ExitMonitor(object->sync.mlock);
  ------------------
  |  |  257|  29.5k|#define PZ_ExitMonitor(m) PR_ExitMonitor((m))
  ------------------
   38|  29.5k|            break;
   39|      0|        case nssPKILock:
  ------------------
  |  Branch (39:9): [True: 0, False: 29.5k]
  ------------------
   40|      0|            PZ_Unlock(object->sync.lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
   41|      0|            break;
   42|      0|        default:
  ------------------
  |  Branch (42:9): [True: 0, False: 29.5k]
  ------------------
   43|      0|            PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   44|  29.5k|    }
   45|  29.5k|}
nssPKIObject_NewLock:
   49|  6.16k|{
   50|  6.16k|    object->lockType = lockType;
   51|  6.16k|    switch (lockType) {
   52|  6.16k|        case nssPKIMonitor:
  ------------------
  |  Branch (52:9): [True: 6.16k, False: 0]
  ------------------
   53|  6.16k|            object->sync.mlock = PZ_NewMonitor(nssILockSSL);
  ------------------
  |  |  254|  6.16k|#define PZ_NewMonitor(t) PR_NewMonitor()
  ------------------
   54|  6.16k|            return (object->sync.mlock ? PR_SUCCESS : PR_FAILURE);
  ------------------
  |  Branch (54:21): [True: 6.16k, False: 0]
  ------------------
   55|      0|        case nssPKILock:
  ------------------
  |  Branch (55:9): [True: 0, False: 6.16k]
  ------------------
   56|      0|            object->sync.lock = PZ_NewLock(nssILockSSL);
  ------------------
  |  |  243|      0|#define PZ_NewLock(t) PR_NewLock()
  ------------------
   57|      0|            return (object->sync.lock ? PR_SUCCESS : PR_FAILURE);
  ------------------
  |  Branch (57:21): [True: 0, False: 0]
  ------------------
   58|      0|        default:
  ------------------
  |  Branch (58:9): [True: 0, False: 6.16k]
  ------------------
   59|      0|            PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   60|      0|            return PR_FAILURE;
   61|  6.16k|    }
   62|  6.16k|}
nssPKIObject_DestroyLock:
   66|  6.16k|{
   67|  6.16k|    switch (object->lockType) {
   68|  6.16k|        case nssPKIMonitor:
  ------------------
  |  Branch (68:9): [True: 6.16k, False: 0]
  ------------------
   69|  6.16k|            PZ_DestroyMonitor(object->sync.mlock);
  ------------------
  |  |  255|  6.16k|#define PZ_DestroyMonitor(m) PR_DestroyMonitor((m))
  ------------------
   70|  6.16k|            object->sync.mlock = NULL;
   71|  6.16k|            break;
   72|      0|        case nssPKILock:
  ------------------
  |  Branch (72:9): [True: 0, False: 6.16k]
  ------------------
   73|      0|            PZ_DestroyLock(object->sync.lock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
   74|      0|            object->sync.lock = NULL;
   75|      0|            break;
   76|      0|        default:
  ------------------
  |  Branch (76:9): [True: 0, False: 6.16k]
  ------------------
   77|      0|            PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   78|  6.16k|    }
   79|  6.16k|}
nssPKIObject_Create:
   88|  6.16k|{
   89|  6.16k|    NSSArena *arena;
   90|  6.16k|    nssArenaMark *mark = NULL;
   91|  6.16k|    nssPKIObject *object;
   92|  6.16k|    if (arenaOpt) {
  ------------------
  |  Branch (92:9): [True: 0, False: 6.16k]
  ------------------
   93|      0|        arena = arenaOpt;
   94|      0|        mark = nssArena_Mark(arena);
   95|  6.16k|    } else {
   96|  6.16k|        arena = nssArena_Create();
   97|  6.16k|        if (!arena) {
  ------------------
  |  Branch (97:13): [True: 0, False: 6.16k]
  ------------------
   98|      0|            return (nssPKIObject *)NULL;
   99|      0|        }
  100|  6.16k|    }
  101|  6.16k|    object = nss_ZNEW(arena, nssPKIObject);
  ------------------
  |  |  348|  6.16k|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
  102|  6.16k|    if (!object) {
  ------------------
  |  Branch (102:9): [True: 0, False: 6.16k]
  ------------------
  103|      0|        goto loser;
  104|      0|    }
  105|  6.16k|    object->arena = arena;
  106|  6.16k|    object->trustDomain = td; /* XXX */
  107|  6.16k|    object->cryptoContext = cc;
  108|  6.16k|    if (PR_SUCCESS != nssPKIObject_NewLock(object, lockType)) {
  ------------------
  |  Branch (108:9): [True: 0, False: 6.16k]
  ------------------
  109|      0|        goto loser;
  110|      0|    }
  111|  6.16k|    if (instanceOpt) {
  ------------------
  |  Branch (111:9): [True: 0, False: 6.16k]
  ------------------
  112|      0|        if (nssPKIObject_AddInstance(object, instanceOpt) != PR_SUCCESS) {
  ------------------
  |  Branch (112:13): [True: 0, False: 0]
  ------------------
  113|      0|            goto loser;
  114|      0|        }
  115|      0|    }
  116|  6.16k|    PR_ATOMIC_INCREMENT(&object->refCount);
  ------------------
  |  |  122|  6.16k|#define PR_ATOMIC_INCREMENT(val) __sync_add_and_fetch(val, 1)
  ------------------
  117|  6.16k|    if (mark) {
  ------------------
  |  Branch (117:9): [True: 0, False: 6.16k]
  ------------------
  118|      0|        nssArena_Unmark(arena, mark);
  119|      0|    }
  120|  6.16k|    return object;
  121|      0|loser:
  122|      0|    if (mark) {
  ------------------
  |  Branch (122:9): [True: 0, False: 0]
  ------------------
  123|      0|        nssArena_Release(arena, mark);
  124|      0|    } else {
  125|      0|        nssArena_Destroy(arena);
  126|      0|    }
  127|      0|    return (nssPKIObject *)NULL;
  128|  6.16k|}
nssPKIObject_Destroy:
  133|  23.6k|{
  134|  23.6k|    PRUint32 i;
  135|  23.6k|    PR_ASSERT(object->refCount > 0);
  ------------------
  |  |  208|  23.6k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 23.6k, False: 0]
  |  |  ------------------
  ------------------
  136|  23.6k|    if (PR_ATOMIC_DECREMENT(&object->refCount) == 0) {
  ------------------
  |  |  123|  23.6k|#define PR_ATOMIC_DECREMENT(val) __sync_sub_and_fetch(val, 1)
  ------------------
  |  Branch (136:9): [True: 411, False: 23.2k]
  ------------------
  137|    411|        for (i = 0; i < object->numInstances; i++) {
  ------------------
  |  Branch (137:21): [True: 0, False: 411]
  ------------------
  138|      0|            nssCryptokiObject_Destroy(object->instances[i]);
  139|      0|        }
  140|    411|        nssPKIObject_DestroyLock(object);
  141|    411|        nssArena_Destroy(object->arena);
  142|    411|        return PR_TRUE;
  ------------------
  |  |  437|    411|#define PR_TRUE 1
  ------------------
  143|    411|    }
  144|  23.2k|    return PR_FALSE;
  ------------------
  |  |  438|  23.2k|#define PR_FALSE 0
  ------------------
  145|  23.6k|}
nssPKIObject_AddRef:
  150|  47.0k|{
  151|  47.0k|    PR_ATOMIC_INCREMENT(&object->refCount);
  ------------------
  |  |  122|  47.0k|#define PR_ATOMIC_INCREMENT(val) __sync_add_and_fetch(val, 1)
  ------------------
  152|  47.0k|    return object;
  153|  47.0k|}
nssPKIObject_GetInstances:
  333|  5.75k|{
  334|  5.75k|    nssCryptokiObject **instances = NULL;
  335|  5.75k|    PRUint32 i;
  336|       |
  337|  5.75k|    nssPKIObject_Lock(object);
  338|  5.75k|    if (object->numInstances == 0) {
  ------------------
  |  Branch (338:9): [True: 5.75k, False: 0]
  ------------------
  339|  5.75k|        nssPKIObject_Unlock(object);
  340|  5.75k|        return (nssCryptokiObject **)NULL;
  341|  5.75k|    }
  342|      0|    instances = nss_ZNEWARRAY(NULL, nssCryptokiObject *,
  ------------------
  |  |  371|      0|    ((type *)nss_ZAlloc((arenaOpt), sizeof(type) * (quantity)))
  ------------------
  343|      0|                              object->numInstances + 1);
  344|      0|    if (instances) {
  ------------------
  |  Branch (344:9): [True: 0, False: 0]
  ------------------
  345|      0|        for (i = 0; i < object->numInstances; i++) {
  ------------------
  |  Branch (345:21): [True: 0, False: 0]
  ------------------
  346|      0|            instances[i] = nssCryptokiObject_Clone(object->instances[i]);
  347|      0|        }
  348|      0|    }
  349|      0|    nssPKIObject_Unlock(object);
  350|      0|    return instances;
  351|  5.75k|}
nssCertificateArray_Destroy:
  356|  1.29k|{
  357|  1.29k|    if (certs) {
  ------------------
  |  Branch (357:9): [True: 163, False: 1.13k]
  ------------------
  358|    163|        NSSCertificate **certp;
  359|    179|        for (certp = certs; *certp; certp++) {
  ------------------
  |  Branch (359:29): [True: 16, False: 163]
  ------------------
  360|     16|            if ((*certp)->decoding) {
  ------------------
  |  Branch (360:17): [True: 16, False: 0]
  ------------------
  361|     16|                CERTCertificate *cc = STAN_GetCERTCertificate(*certp);
  362|     16|                if (cc) {
  ------------------
  |  Branch (362:21): [True: 16, False: 0]
  ------------------
  363|     16|                    CERT_DestroyCertificate(cc);
  364|     16|                }
  365|     16|                continue;
  366|     16|            }
  367|      0|            nssCertificate_Destroy(*certp);
  368|      0|        }
  369|    163|        nss_ZFreeIf(certs);
  370|    163|    }
  371|  1.29k|}
nssCertificateArray_Join:
  384|  1.13k|{
  385|  1.13k|    if (certs1 && certs2) {
  ------------------
  |  Branch (385:9): [True: 163, False: 969]
  |  Branch (385:19): [True: 0, False: 163]
  ------------------
  386|      0|        NSSCertificate **certs, **cp;
  387|      0|        PRUint32 count = 0;
  388|      0|        PRUint32 count1 = 0;
  389|      0|        cp = certs1;
  390|      0|        while (*cp++)
  ------------------
  |  Branch (390:16): [True: 0, False: 0]
  ------------------
  391|      0|            count1++;
  392|      0|        count = count1;
  393|      0|        cp = certs2;
  394|      0|        while (*cp++)
  ------------------
  |  Branch (394:16): [True: 0, False: 0]
  ------------------
  395|      0|            count++;
  396|      0|        certs = nss_ZREALLOCARRAY(certs1, NSSCertificate *, count + 1);
  ------------------
  |  |  391|      0|    ((type *)nss_ZRealloc((p), sizeof(type) * (quantity)))
  ------------------
  397|      0|        if (!certs) {
  ------------------
  |  Branch (397:13): [True: 0, False: 0]
  ------------------
  398|      0|            nss_ZFreeIf(certs1);
  399|      0|            nss_ZFreeIf(certs2);
  400|      0|            return (NSSCertificate **)NULL;
  401|      0|        }
  402|      0|        for (cp = certs2; *cp; cp++, count1++) {
  ------------------
  |  Branch (402:27): [True: 0, False: 0]
  ------------------
  403|      0|            certs[count1] = *cp;
  404|      0|        }
  405|      0|        nss_ZFreeIf(certs2);
  406|      0|        return certs;
  407|  1.13k|    } else if (certs1) {
  ------------------
  |  Branch (407:16): [True: 163, False: 969]
  ------------------
  408|    163|        return certs1;
  409|    969|    } else {
  410|    969|        return certs2;
  411|    969|    }
  412|  1.13k|}
nssCertificateArray_FindBestCertificate:
  420|    163|{
  421|    163|    NSSCertificate *bestCert = NULL;
  422|    163|    nssDecodedCert *bestdc = NULL;
  423|    163|    NSSTime *time, sTime;
  424|    163|    PRBool bestCertMatches = PR_FALSE;
  ------------------
  |  |  438|    163|#define PR_FALSE 0
  ------------------
  425|    163|    PRBool thisCertMatches;
  426|    163|    PRBool bestCertIsValidAtTime = PR_FALSE;
  ------------------
  |  |  438|    163|#define PR_FALSE 0
  ------------------
  427|    163|    PRBool bestCertIsTrusted = PR_FALSE;
  ------------------
  |  |  438|    163|#define PR_FALSE 0
  ------------------
  428|       |
  429|    163|    if (timeOpt) {
  ------------------
  |  Branch (429:9): [True: 163, False: 0]
  ------------------
  430|    163|        time = timeOpt;
  431|    163|    } else {
  432|      0|        NSSTime_Now(&sTime);
  433|      0|        time = &sTime;
  434|      0|    }
  435|    163|    if (!certs) {
  ------------------
  |  Branch (435:9): [True: 0, False: 163]
  ------------------
  436|      0|        return (NSSCertificate *)NULL;
  437|      0|    }
  438|    179|    for (; *certs; certs++) {
  ------------------
  |  Branch (438:12): [True: 16, False: 163]
  ------------------
  439|     16|        nssDecodedCert *dc;
  440|     16|        NSSCertificate *c = *certs;
  441|     16|        dc = nssCertificate_GetDecoding(c);
  442|     16|        if (!dc)
  ------------------
  |  Branch (442:13): [True: 0, False: 16]
  ------------------
  443|      0|            continue;
  444|     16|        thisCertMatches = dc->matchUsage(dc, usage);
  445|     16|        if (!bestCert) {
  ------------------
  |  Branch (445:13): [True: 16, False: 0]
  ------------------
  446|       |            /* always take the first cert, but remember whether or not
  447|       |             * the usage matched
  448|       |             */
  449|     16|            bestCert = nssCertificate_AddRef(c);
  450|     16|            bestCertMatches = thisCertMatches;
  451|     16|            bestdc = dc;
  452|     16|            continue;
  453|     16|        } else {
  454|      0|            if (bestCertMatches && !thisCertMatches) {
  ------------------
  |  Branch (454:17): [True: 0, False: 0]
  |  Branch (454:36): [True: 0, False: 0]
  ------------------
  455|       |                /* if already have a cert for this usage, and if this cert
  456|       |                 * doesn't have the correct usage, continue
  457|       |                 */
  458|      0|                continue;
  459|      0|            } else if (!bestCertMatches && thisCertMatches) {
  ------------------
  |  Branch (459:24): [True: 0, False: 0]
  |  Branch (459:44): [True: 0, False: 0]
  ------------------
  460|       |                /* this one does match usage, replace the other */
  461|      0|                nssCertificate_Destroy(bestCert);
  462|      0|                bestCert = nssCertificate_AddRef(c);
  463|      0|                bestCertMatches = thisCertMatches;
  464|      0|                bestdc = dc;
  465|      0|                continue;
  466|      0|            }
  467|       |            /* this cert match as well as any cert we've found so far,
  468|       |             * defer to time/policies
  469|       |             * */
  470|      0|        }
  471|       |        /* time */
  472|      0|        if (bestCertIsValidAtTime || bestdc->isValidAtTime(bestdc, time)) {
  ------------------
  |  Branch (472:13): [True: 0, False: 0]
  |  Branch (472:38): [True: 0, False: 0]
  ------------------
  473|       |            /* The current best cert is valid at time */
  474|      0|            bestCertIsValidAtTime = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  475|      0|            if (!dc->isValidAtTime(dc, time)) {
  ------------------
  |  Branch (475:17): [True: 0, False: 0]
  ------------------
  476|       |                /* If the new cert isn't valid at time, it's not better */
  477|      0|                continue;
  478|      0|            }
  479|      0|        } else {
  480|       |            /* The current best cert is not valid at time */
  481|      0|            if (dc->isValidAtTime(dc, time)) {
  ------------------
  |  Branch (481:17): [True: 0, False: 0]
  ------------------
  482|       |                /* If the new cert is valid at time, it's better */
  483|      0|                nssCertificate_Destroy(bestCert);
  484|      0|                bestCert = nssCertificate_AddRef(c);
  485|      0|                bestdc = dc;
  486|      0|                bestCertIsValidAtTime = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  487|      0|                continue;
  488|      0|            }
  489|      0|        }
  490|       |        /* Either they are both valid at time, or neither valid.
  491|       |         * If only one is trusted for this usage, take it.
  492|       |         */
  493|      0|        if (bestCertIsTrusted || bestdc->isTrustedForUsage(bestdc, usage)) {
  ------------------
  |  Branch (493:13): [True: 0, False: 0]
  |  Branch (493:34): [True: 0, False: 0]
  ------------------
  494|      0|            bestCertIsTrusted = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  495|      0|            if (!dc->isTrustedForUsage(dc, usage)) {
  ------------------
  |  Branch (495:17): [True: 0, False: 0]
  ------------------
  496|      0|                continue;
  497|      0|            }
  498|      0|        } else {
  499|       |            /* The current best cert is not trusted */
  500|      0|            if (dc->isTrustedForUsage(dc, usage)) {
  ------------------
  |  Branch (500:17): [True: 0, False: 0]
  ------------------
  501|       |                /* If the new cert is trusted, it's better */
  502|      0|                nssCertificate_Destroy(bestCert);
  503|      0|                bestCert = nssCertificate_AddRef(c);
  504|      0|                bestdc = dc;
  505|      0|                bestCertIsTrusted = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  506|      0|                continue;
  507|      0|            }
  508|      0|        }
  509|       |        /* Otherwise, take the newer one. */
  510|      0|        if (!bestdc->isNewerThan(bestdc, dc)) {
  ------------------
  |  Branch (510:13): [True: 0, False: 0]
  ------------------
  511|      0|            nssCertificate_Destroy(bestCert);
  512|      0|            bestCert = nssCertificate_AddRef(c);
  513|      0|            bestdc = dc;
  514|      0|            continue;
  515|      0|        }
  516|       |        /* policies */
  517|       |        /* XXX later -- defer to policies */
  518|      0|    }
  519|    163|    return bestCert;
  520|    163|}
nssPKIObjectCollection_Destroy:
  639|  6.78k|{
  640|  6.78k|    if (collection) {
  ------------------
  |  Branch (640:9): [True: 6.78k, False: 0]
  ------------------
  641|  6.78k|        PRCList *link;
  642|  6.78k|        pkiObjectCollectionNode *node;
  643|       |        /* first destroy any objects in the collection */
  644|  6.78k|        link = PR_NEXT_LINK(&collection->head);
  ------------------
  |  |   47|  6.78k|        ((_e)->next)
  ------------------
  645|  12.4k|        while (link != &collection->head) {
  ------------------
  |  Branch (645:16): [True: 5.67k, False: 6.78k]
  ------------------
  646|  5.67k|            node = (pkiObjectCollectionNode *)link;
  647|  5.67k|            if (node->haveObject) {
  ------------------
  |  Branch (647:17): [True: 5.67k, False: 0]
  ------------------
  648|  5.67k|                (*collection->destroyObject)(node->object);
  649|  5.67k|            } else {
  650|      0|                nssPKIObject_Destroy(node->object);
  651|      0|            }
  652|  5.67k|            link = PR_NEXT_LINK(link);
  ------------------
  |  |   47|  5.67k|        ((_e)->next)
  ------------------
  653|  5.67k|        }
  654|       |        /* then destroy it */
  655|  6.78k|        nssArena_Destroy(collection->arena);
  656|  6.78k|    }
  657|  6.78k|}
nssPKIObjectCollection_AddObject:
  670|  5.67k|{
  671|  5.67k|    pkiObjectCollectionNode *node;
  672|  5.67k|    node = nss_ZNEW(collection->arena, pkiObjectCollectionNode);
  ------------------
  |  |  348|  5.67k|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
  673|  5.67k|    if (!node) {
  ------------------
  |  Branch (673:9): [True: 0, False: 5.67k]
  ------------------
  674|      0|        return PR_FAILURE;
  675|      0|    }
  676|  5.67k|    node->haveObject = PR_TRUE;
  ------------------
  |  |  437|  5.67k|#define PR_TRUE 1
  ------------------
  677|  5.67k|    node->object = nssPKIObject_AddRef(object);
  678|  5.67k|    (*collection->getUIDFromObject)(object, node->uid);
  679|  5.67k|    PR_INIT_CLIST(&node->link);
  ------------------
  |  |  100|  5.67k|    PR_BEGIN_MACRO     \
  |  |  ------------------
  |  |  |  |  123|  5.67k|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  101|  5.67k|    (_l)->next = (_l); \
  |  |  102|  5.67k|    (_l)->prev = (_l); \
  |  |  103|  5.67k|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|  5.67k|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  680|  5.67k|    PR_INSERT_BEFORE(&node->link, &collection->head);
  ------------------
  |  |   25|  5.67k|    PR_BEGIN_MACRO       \
  |  |  ------------------
  |  |  |  |  123|  5.67k|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |   26|  5.67k|    (_e)->next = (_l);   \
  |  |   27|  5.67k|    (_e)->prev = (_l)->prev; \
  |  |   28|  5.67k|    (_l)->prev->next = (_e); \
  |  |   29|  5.67k|    (_l)->prev = (_e);   \
  |  |   30|  5.67k|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|  5.67k|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  681|  5.67k|    collection->size++;
  682|  5.67k|    return PR_SUCCESS;
  683|  5.67k|}
nssCertificateCollection_Create:
 1034|  6.78k|{
 1035|  6.78k|    nssPKIObjectCollection *collection;
 1036|  6.78k|    collection = nssPKIObjectCollection_Create(td, NULL, nssPKIMonitor);
 1037|  6.78k|    if (!collection) {
  ------------------
  |  Branch (1037:9): [True: 0, False: 6.78k]
  ------------------
 1038|      0|        return NULL;
 1039|      0|    }
 1040|  6.78k|    collection->objectType = pkiObjectType_Certificate;
 1041|  6.78k|    collection->destroyObject = cert_destroyObject;
 1042|  6.78k|    collection->getUIDFromObject = cert_getUIDFromObject;
 1043|  6.78k|    collection->getUIDFromInstance = cert_getUIDFromInstance;
 1044|  6.78k|    collection->createObject = cert_createObject;
 1045|  6.78k|    if (certsOpt) {
  ------------------
  |  Branch (1045:9): [True: 0, False: 6.78k]
  ------------------
 1046|      0|        for (; *certsOpt; certsOpt++) {
  ------------------
  |  Branch (1046:16): [True: 0, False: 0]
  ------------------
 1047|      0|            nssPKIObject *object = (nssPKIObject *)(*certsOpt);
 1048|      0|            (void)nssPKIObjectCollection_AddObject(collection, object);
 1049|      0|        }
 1050|      0|    }
 1051|  6.78k|    return collection;
 1052|  6.78k|}
nssPKIObjectCollection_GetCertificates:
 1060|  6.78k|{
 1061|  6.78k|    PRStatus status;
 1062|  6.78k|    PRUint32 rvSize;
 1063|  6.78k|    PRBool allocated = PR_FALSE;
  ------------------
  |  |  438|  6.78k|#define PR_FALSE 0
  ------------------
 1064|  6.78k|    if (collection->size == 0) {
  ------------------
  |  Branch (1064:9): [True: 1.13k, False: 5.65k]
  ------------------
 1065|  1.13k|        return (NSSCertificate **)NULL;
 1066|  1.13k|    }
 1067|  5.65k|    if (maximumOpt == 0) {
  ------------------
  |  Branch (1067:9): [True: 0, False: 5.65k]
  ------------------
 1068|      0|        rvSize = collection->size;
 1069|  5.65k|    } else {
 1070|  5.65k|        rvSize = PR_MIN(collection->size, maximumOpt);
  ------------------
  |  |  158|  5.65k|#define PR_MIN(x,y)     ((x)<(y)?(x):(y))
  |  |  ------------------
  |  |  |  Branch (158:26): [True: 5.63k, False: 16]
  |  |  ------------------
  ------------------
 1071|  5.65k|    }
 1072|  5.65k|    if (!rvOpt) {
  ------------------
  |  Branch (1072:9): [True: 0, False: 5.65k]
  ------------------
 1073|      0|        rvOpt = nss_ZNEWARRAY(arenaOpt, NSSCertificate *, rvSize + 1);
  ------------------
  |  |  371|      0|    ((type *)nss_ZAlloc((arenaOpt), sizeof(type) * (quantity)))
  ------------------
 1074|      0|        if (!rvOpt) {
  ------------------
  |  Branch (1074:13): [True: 0, False: 0]
  ------------------
 1075|      0|            return (NSSCertificate **)NULL;
 1076|      0|        }
 1077|      0|        allocated = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1078|      0|    }
 1079|  5.65k|    status = nssPKIObjectCollection_GetObjects(collection,
 1080|  5.65k|                                               (nssPKIObject **)rvOpt,
 1081|  5.65k|                                               rvSize);
 1082|  5.65k|    if (status != PR_SUCCESS) {
  ------------------
  |  Branch (1082:9): [True: 0, False: 5.65k]
  ------------------
 1083|      0|        if (allocated) {
  ------------------
  |  Branch (1083:13): [True: 0, False: 0]
  ------------------
 1084|      0|            nss_ZFreeIf(rvOpt);
 1085|      0|        }
 1086|      0|        return (NSSCertificate **)NULL;
 1087|      0|    }
 1088|  5.65k|    return rvOpt;
 1089|  5.65k|}
NSSTime_SetPRTime:
 1212|  5.65k|{
 1213|  5.65k|    NSSTime *rvTime;
 1214|  5.65k|    rvTime = (timeOpt) ? timeOpt : nss_ZNEW(NULL, NSSTime);
  ------------------
  |  |  348|  11.3k|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
  |  Branch (1214:14): [True: 0, False: 5.65k]
  ------------------
 1215|  5.65k|    if (rvTime) {
  ------------------
  |  Branch (1215:9): [True: 5.65k, False: 0]
  ------------------
 1216|  5.65k|        rvTime->prTime = prTime;
 1217|  5.65k|    }
 1218|  5.65k|    return rvTime;
 1219|  5.65k|}
pkibase.c:nssPKIObjectCollection_Create:
  614|  6.78k|{
  615|  6.78k|    NSSArena *arena;
  616|  6.78k|    nssPKIObjectCollection *rvCollection = NULL;
  617|  6.78k|    arena = nssArena_Create();
  618|  6.78k|    if (!arena) {
  ------------------
  |  Branch (618:9): [True: 0, False: 6.78k]
  ------------------
  619|      0|        return (nssPKIObjectCollection *)NULL;
  620|      0|    }
  621|  6.78k|    rvCollection = nss_ZNEW(arena, nssPKIObjectCollection);
  ------------------
  |  |  348|  6.78k|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
  622|  6.78k|    if (!rvCollection) {
  ------------------
  |  Branch (622:9): [True: 0, False: 6.78k]
  ------------------
  623|      0|        goto loser;
  624|      0|    }
  625|  6.78k|    PR_INIT_CLIST(&rvCollection->head);
  ------------------
  |  |  100|  13.5k|    PR_BEGIN_MACRO     \
  |  |  ------------------
  |  |  |  |  123|  6.78k|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  101|  13.5k|    (_l)->next = (_l); \
  |  |  102|  13.5k|    (_l)->prev = (_l); \
  |  |  103|  13.5k|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|  6.78k|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  626|  6.78k|    rvCollection->arena = arena;
  627|  6.78k|    rvCollection->td = td; /* XXX */
  628|  6.78k|    rvCollection->cc = ccOpt;
  629|  6.78k|    rvCollection->lockType = lockType;
  630|  6.78k|    return rvCollection;
  631|      0|loser:
  632|      0|    nssArena_Destroy(arena);
  633|      0|    return (nssPKIObjectCollection *)NULL;
  634|  6.78k|}
pkibase.c:cert_destroyObject:
  957|  5.67k|{
  958|  5.67k|    NSSCertificate *c = (NSSCertificate *)o;
  959|  5.67k|    if (c->decoding) {
  ------------------
  |  Branch (959:9): [True: 5.67k, False: 0]
  ------------------
  960|  5.67k|        CERTCertificate *cc = STAN_GetCERTCertificate(c);
  961|  5.67k|        if (cc) {
  ------------------
  |  Branch (961:13): [True: 5.67k, False: 0]
  ------------------
  962|  5.67k|            CERT_DestroyCertificate(cc);
  963|  5.67k|            return;
  964|  5.67k|        } /* else destroy it as NSSCertificate below */
  965|  5.67k|    }
  966|      0|    nssCertificate_Destroy(c);
  967|      0|}
pkibase.c:cert_getUIDFromObject:
  971|  5.67k|{
  972|  5.67k|    NSSCertificate *c = (NSSCertificate *)o;
  973|       |    /* The builtins are still returning decoded serial numbers.  Until
  974|       |     * this compatibility issue is resolved, use the full DER of the
  975|       |     * cert to uniquely identify it.
  976|       |     */
  977|  5.67k|    NSSDER *derCert;
  978|  5.67k|    derCert = nssCertificate_GetEncoding(c);
  979|  5.67k|    uid[0].data = NULL;
  980|  5.67k|    uid[0].size = 0;
  981|  5.67k|    uid[1].data = NULL;
  982|  5.67k|    uid[1].size = 0;
  983|  5.67k|    if (derCert != NULL) {
  ------------------
  |  Branch (983:9): [True: 5.67k, False: 0]
  ------------------
  984|  5.67k|        uid[0] = *derCert;
  985|  5.67k|    }
  986|  5.67k|    return PR_SUCCESS;
  987|  5.67k|}
pkibase.c:nssPKIObjectCollection_GetObjects:
  846|  5.65k|{
  847|  5.65k|    PRUint32 i = 0;
  848|  5.65k|    PRCList *link = PR_NEXT_LINK(&collection->head);
  ------------------
  |  |   47|  5.65k|        ((_e)->next)
  ------------------
  849|  5.65k|    pkiObjectCollectionNode *node;
  850|  5.65k|    int error = 0;
  851|  11.3k|    while ((i < rvSize) && (link != &collection->head)) {
  ------------------
  |  Branch (851:12): [True: 5.67k, False: 5.65k]
  |  Branch (851:28): [True: 5.67k, False: 0]
  ------------------
  852|  5.67k|        node = (pkiObjectCollectionNode *)link;
  853|  5.67k|        if (!node->haveObject) {
  ------------------
  |  Branch (853:13): [True: 0, False: 5.67k]
  ------------------
  854|       |            /* Convert the proto-object to an object */
  855|      0|            node->object = (*collection->createObject)(node->object);
  856|      0|            if (!node->object) {
  ------------------
  |  Branch (856:17): [True: 0, False: 0]
  ------------------
  857|      0|                link = PR_NEXT_LINK(link);
  ------------------
  |  |   47|      0|        ((_e)->next)
  ------------------
  858|       |                /*remove bogus object from list*/
  859|      0|                nssPKIObjectCollection_RemoveNode(collection, node);
  860|      0|                error++;
  861|      0|                continue;
  862|      0|            }
  863|      0|            node->haveObject = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  864|      0|        }
  865|  5.67k|        rvObjects[i++] = nssPKIObject_AddRef(node->object);
  866|  5.67k|        link = PR_NEXT_LINK(link);
  ------------------
  |  |   47|  5.67k|        ((_e)->next)
  ------------------
  867|  5.67k|    }
  868|  5.65k|    if (!error && *rvObjects == NULL) {
  ------------------
  |  Branch (868:9): [True: 5.65k, False: 0]
  |  Branch (868:19): [True: 0, False: 5.65k]
  ------------------
  869|      0|        nss_SetError(NSS_ERROR_NOT_FOUND);
  870|      0|    }
  871|  5.65k|    return PR_SUCCESS;
  872|  5.65k|}

nssCertificateStore_Create:
   64|      1|{
   65|      1|    NSSArena *arena;
   66|      1|    nssCertificateStore *store;
   67|      1|    PRBool i_alloced_arena;
   68|      1|    if (arenaOpt) {
  ------------------
  |  Branch (68:9): [True: 1, False: 0]
  ------------------
   69|      1|        arena = arenaOpt;
   70|      1|        i_alloced_arena = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
   71|      1|    } else {
   72|      0|        arena = nssArena_Create();
   73|      0|        if (!arena) {
  ------------------
  |  Branch (73:13): [True: 0, False: 0]
  ------------------
   74|      0|            return NULL;
   75|      0|        }
   76|      0|        i_alloced_arena = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
   77|      0|    }
   78|      1|    store = nss_ZNEW(arena, nssCertificateStore);
  ------------------
  |  |  348|      1|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
   79|      1|    if (!store) {
  ------------------
  |  Branch (79:9): [True: 0, False: 1]
  ------------------
   80|      0|        goto loser;
   81|      0|    }
   82|      1|    store->lock = PZ_NewLock(nssILockOther);
  ------------------
  |  |  243|      1|#define PZ_NewLock(t) PR_NewLock()
  ------------------
   83|      1|    if (!store->lock) {
  ------------------
  |  Branch (83:9): [True: 0, False: 1]
  ------------------
   84|      0|        goto loser;
   85|      0|    }
   86|       |    /* Create the issuer/serial --> {cert, trust, S/MIME profile } hash */
   87|      1|    store->issuer_and_serial = nssHash_CreateCertificate(arena, 0);
   88|      1|    if (!store->issuer_and_serial) {
  ------------------
  |  Branch (88:9): [True: 0, False: 1]
  ------------------
   89|      0|        goto loser;
   90|      0|    }
   91|       |    /* Create the subject DER --> subject list hash */
   92|      1|    store->subject = nssHash_CreateItem(arena, 0);
   93|      1|    if (!store->subject) {
  ------------------
  |  Branch (93:9): [True: 0, False: 1]
  ------------------
   94|      0|        goto loser;
   95|      0|    }
   96|      1|    store->arena = arena;
   97|      1|    store->i_alloced_arena = i_alloced_arena;
   98|      1|    return store;
   99|      0|loser:
  100|      0|    if (store) {
  ------------------
  |  Branch (100:9): [True: 0, False: 0]
  ------------------
  101|      0|        if (store->lock) {
  ------------------
  |  Branch (101:13): [True: 0, False: 0]
  ------------------
  102|      0|            PZ_DestroyLock(store->lock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  103|      0|        }
  104|      0|        if (store->issuer_and_serial) {
  ------------------
  |  Branch (104:13): [True: 0, False: 0]
  ------------------
  105|      0|            nssHash_Destroy(store->issuer_and_serial);
  106|      0|        }
  107|      0|        if (store->subject) {
  ------------------
  |  Branch (107:13): [True: 0, False: 0]
  ------------------
  108|      0|            nssHash_Destroy(store->subject);
  109|      0|        }
  110|      0|    }
  111|      0|    if (i_alloced_arena) {
  ------------------
  |  Branch (111:9): [True: 0, False: 0]
  ------------------
  112|      0|        nssArena_Destroy(arena);
  113|      0|    }
  114|      0|    return NULL;
  115|      1|}
nssCertificateStore_Destroy:
  121|      1|{
  122|      1|    if (nssHash_Count(store->issuer_and_serial) > 0) {
  ------------------
  |  Branch (122:9): [True: 0, False: 1]
  ------------------
  123|      0|        nss_SetError(NSS_ERROR_BUSY);
  124|      0|        return PR_FAILURE;
  125|      0|    }
  126|      1|    PZ_DestroyLock(store->lock);
  ------------------
  |  |  244|      1|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  127|      1|    nssHash_Destroy(store->issuer_and_serial);
  128|      1|    nssHash_Destroy(store->subject);
  129|      1|    if (store->i_alloced_arena) {
  ------------------
  |  Branch (129:9): [True: 0, False: 1]
  ------------------
  130|      0|        nssArena_Destroy(store->arena);
  131|      1|    } else {
  132|      1|        nss_ZFreeIf(store);
  133|      1|    }
  134|      1|    return PR_SUCCESS;
  135|      1|}
nssCertificateStore_FindOrAdd:
  211|  5.75k|{
  212|  5.75k|    PRStatus nssrv;
  213|  5.75k|    NSSCertificate *rvCert = NULL;
  214|       |
  215|  5.75k|    PZ_Lock(store->lock);
  ------------------
  |  |  245|  5.75k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  216|  5.75k|    rvCert = nssCertStore_FindCertByIssuerAndSerialNumberLocked(
  217|  5.75k|        store, &c->issuer, &c->serial);
  218|  5.75k|    if (!rvCert) {
  ------------------
  |  Branch (218:9): [True: 5.75k, False: 0]
  ------------------
  219|  5.75k|        nssrv = nssCertificateStore_AddLocked(store, c);
  220|  5.75k|        if (PR_SUCCESS == nssrv) {
  ------------------
  |  Branch (220:13): [True: 5.75k, False: 0]
  ------------------
  221|  5.75k|            rvCert = nssCertificate_AddRef(c);
  222|  5.75k|        }
  223|  5.75k|    }
  224|  5.75k|    PZ_Unlock(store->lock);
  ------------------
  |  |  246|  5.75k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  225|  5.75k|    return rvCert;
  226|  5.75k|}
nssCertificateStore_RemoveCertLOCKED:
  278|  5.75k|{
  279|  5.75k|    certificate_hash_entry *entry;
  280|  5.75k|    entry = (certificate_hash_entry *)
  281|  5.75k|        nssHash_Lookup(store->issuer_and_serial, cert);
  282|  5.75k|    if (entry && entry->cert == cert) {
  ------------------
  |  Branch (282:9): [True: 5.75k, False: 0]
  |  Branch (282:18): [True: 5.75k, False: 0]
  ------------------
  283|  5.75k|        remove_certificate_entry(store, cert);
  284|  5.75k|        remove_subject_entry(store, cert);
  285|  5.75k|    }
  286|  5.75k|}
nssCertificateStore_Lock:
  290|  29.5k|{
  291|  29.5k|#ifdef DEBUG
  292|  29.5k|    PORT_Assert(out);
  ------------------
  |  |  120|  29.5k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  293|  29.5k|    out->store = store;
  294|  29.5k|    out->lock = store->lock;
  295|  29.5k|    out->locked = PR_TRUE;
  ------------------
  |  |  437|  29.5k|#define PR_TRUE 1
  ------------------
  296|  29.5k|    PZ_Lock(out->lock);
  ------------------
  |  |  245|  29.5k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  297|       |#else
  298|       |    PZ_Lock(store->lock);
  299|       |#endif
  300|  29.5k|}
nssCertificateStore_Unlock:
  306|  29.5k|{
  307|  29.5k|#ifdef DEBUG
  308|  29.5k|    PORT_Assert(in);
  ------------------
  |  |  120|  29.5k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|  29.5k|    PORT_Assert(out);
  ------------------
  |  |  120|  29.5k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  310|  29.5k|    out->store = store;
  311|  29.5k|    out->lock = store->lock;
  312|  29.5k|    PORT_Assert(!out->locked);
  ------------------
  |  |  120|  29.5k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  313|  29.5k|    out->unlocked = PR_TRUE;
  ------------------
  |  |  437|  29.5k|#define PR_TRUE 1
  ------------------
  314|       |
  315|  29.5k|    PORT_Assert(in->store == out->store);
  ------------------
  |  |  120|  29.5k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|  29.5k|    PORT_Assert(in->lock == out->lock);
  ------------------
  |  |  120|  29.5k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|  29.5k|    PORT_Assert(in->locked);
  ------------------
  |  |  120|  29.5k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  318|  29.5k|    PORT_Assert(!in->unlocked);
  ------------------
  |  |  120|  29.5k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  29.5k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 29.5k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  319|       |
  320|  29.5k|    PZ_Unlock(out->lock);
  ------------------
  |  |  246|  29.5k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  321|       |#else
  322|       |    PZ_Unlock(store->lock);
  323|       |#endif
  324|  29.5k|}
nssCertificateStore_FindCertificatesBySubject:
  360|  1.13k|{
  361|  1.13k|    NSSCertificate **rvArray = NULL;
  362|  1.13k|    nssList *subjectList;
  363|  1.13k|    PZ_Lock(store->lock);
  ------------------
  |  |  245|  1.13k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  364|  1.13k|    subjectList = (nssList *)nssHash_Lookup(store->subject, subject);
  365|  1.13k|    if (subjectList) {
  ------------------
  |  Branch (365:9): [True: 163, False: 969]
  ------------------
  366|    163|        nssCertificateList_AddReferences(subjectList);
  367|    163|        rvArray = get_array_from_list(subjectList,
  368|    163|                                      rvOpt, maximumOpt, arenaOpt);
  369|    163|    }
  370|  1.13k|    PZ_Unlock(store->lock);
  ------------------
  |  |  246|  1.13k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  371|  1.13k|    return rvArray;
  372|  1.13k|}
nssCertificateStore_FindCertificateByIssuerAndSerialNumber:
  520|  5.79k|{
  521|  5.79k|    NSSCertificate *rvCert = NULL;
  522|       |
  523|  5.79k|    PZ_Lock(store->lock);
  ------------------
  |  |  245|  5.79k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  524|  5.79k|    rvCert = nssCertStore_FindCertByIssuerAndSerialNumberLocked(
  525|  5.79k|        store, issuer, serial);
  526|  5.79k|    PZ_Unlock(store->lock);
  ------------------
  |  |  246|  5.79k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  527|  5.79k|    return rvCert;
  528|  5.79k|}
nssCertificateStore_FindCertificateByEncodedCertificate:
  534|  6.16k|{
  535|  6.16k|    PRStatus nssrv = PR_FAILURE;
  536|  6.16k|    NSSDER issuer, serial;
  537|  6.16k|    NSSCertificate *rvCert = NULL;
  538|  6.16k|    nssrv = nssPKIX509_GetIssuerAndSerialFromDER(encoding, &issuer, &serial);
  539|  6.16k|    if (nssrv != PR_SUCCESS) {
  ------------------
  |  Branch (539:9): [True: 368, False: 5.79k]
  ------------------
  540|    368|        return NULL;
  541|    368|    }
  542|  5.79k|    rvCert = nssCertificateStore_FindCertificateByIssuerAndSerialNumber(store,
  543|  5.79k|                                                                        &issuer,
  544|  5.79k|                                                                        &serial);
  545|  5.79k|    PORT_Free(issuer.data);
  ------------------
  |  |   60|  5.79k|#define PORT_Free PORT_Free_Util
  ------------------
  546|  5.79k|    PORT_Free(serial.data);
  ------------------
  |  |   60|  5.79k|#define PORT_Free PORT_Free_Util
  ------------------
  547|  5.79k|    return rvCert;
  548|  6.16k|}
nssCertificateStore_FindTrustForCertificate:
  576|  5.75k|{
  577|  5.75k|    certificate_hash_entry *entry;
  578|  5.75k|    NSSTrust *rvTrust = NULL;
  579|  5.75k|    PZ_Lock(store->lock);
  ------------------
  |  |  245|  5.75k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  580|  5.75k|    entry = (certificate_hash_entry *)
  581|  5.75k|        nssHash_Lookup(store->issuer_and_serial, cert);
  582|  5.75k|    if (entry && entry->trust) {
  ------------------
  |  Branch (582:9): [True: 0, False: 5.75k]
  |  Branch (582:18): [True: 0, False: 0]
  ------------------
  583|      0|        rvTrust = nssTrust_AddRef(entry->trust);
  584|      0|    }
  585|  5.75k|    PZ_Unlock(store->lock);
  ------------------
  |  |  246|  5.75k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  586|  5.75k|    return rvTrust;
  587|  5.75k|}
nssHash_CreateCertificate:
  658|      2|{
  659|      2|    return nssHash_Create(arenaOpt,
  660|      2|                          numBuckets,
  661|      2|                          nss_certificate_hash,
  662|      2|                          nss_compare_certs,
  663|      2|                          PL_CompareValues);
  664|      2|}
pkistore.c:nssCertificateStore_AddLocked:
  196|  5.75k|{
  197|  5.75k|    PRStatus nssrv = add_certificate_entry(store, cert);
  198|  5.75k|    if (nssrv == PR_SUCCESS) {
  ------------------
  |  Branch (198:9): [True: 5.75k, False: 0]
  ------------------
  199|  5.75k|        nssrv = add_subject_entry(store, cert);
  200|  5.75k|        if (nssrv == PR_FAILURE) {
  ------------------
  |  Branch (200:13): [True: 0, False: 5.75k]
  ------------------
  201|      0|            remove_certificate_entry(store, cert);
  202|      0|        }
  203|  5.75k|    }
  204|  5.75k|    return nssrv;
  205|  5.75k|}
pkistore.c:add_certificate_entry:
  141|  5.75k|{
  142|  5.75k|    PRStatus nssrv;
  143|  5.75k|    certificate_hash_entry *entry;
  144|  5.75k|    entry = nss_ZNEW(cert->object.arena, certificate_hash_entry);
  ------------------
  |  |  348|  5.75k|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
  145|  5.75k|    if (!entry) {
  ------------------
  |  Branch (145:9): [True: 0, False: 5.75k]
  ------------------
  146|      0|        return PR_FAILURE;
  147|      0|    }
  148|  5.75k|    entry->cert = cert;
  149|  5.75k|    nssrv = nssHash_Add(store->issuer_and_serial, cert, entry);
  150|  5.75k|    if (nssrv != PR_SUCCESS) {
  ------------------
  |  Branch (150:9): [True: 0, False: 5.75k]
  ------------------
  151|      0|        nss_ZFreeIf(entry);
  152|      0|    }
  153|  5.75k|    return nssrv;
  154|  5.75k|}
pkistore.c:add_subject_entry:
  160|  5.75k|{
  161|  5.75k|    PRStatus nssrv;
  162|  5.75k|    nssList *subjectList;
  163|  5.75k|    subjectList = (nssList *)nssHash_Lookup(store->subject, &cert->subject);
  164|  5.75k|    if (subjectList) {
  ------------------
  |  Branch (164:9): [True: 0, False: 5.75k]
  ------------------
  165|       |        /* The subject is already in, add this cert to the list */
  166|      0|        nssrv = nssList_AddUnique(subjectList, cert);
  167|  5.75k|    } else {
  168|       |        /* Create a new subject list for the subject */
  169|  5.75k|        subjectList = nssList_Create(NULL, PR_FALSE);
  ------------------
  |  |  438|  5.75k|#define PR_FALSE 0
  ------------------
  170|  5.75k|        if (!subjectList) {
  ------------------
  |  Branch (170:13): [True: 0, False: 5.75k]
  ------------------
  171|      0|            return PR_FAILURE;
  172|      0|        }
  173|  5.75k|        nssList_SetSortFunction(subjectList, nssCertificate_SubjectListSort);
  174|       |        /* Add the cert entry to this list of subjects */
  175|  5.75k|        nssrv = nssList_Add(subjectList, cert);
  176|  5.75k|        if (nssrv != PR_SUCCESS) {
  ------------------
  |  Branch (176:13): [True: 0, False: 5.75k]
  ------------------
  177|      0|            return nssrv;
  178|      0|        }
  179|       |        /* Add the subject list to the cache */
  180|  5.75k|        nssrv = nssHash_Add(store->subject, &cert->subject, subjectList);
  181|  5.75k|    }
  182|  5.75k|    return nssrv;
  183|  5.75k|}
pkistore.c:remove_certificate_entry:
  232|  5.75k|{
  233|  5.75k|    certificate_hash_entry *entry;
  234|  5.75k|    entry = (certificate_hash_entry *)
  235|  5.75k|        nssHash_Lookup(store->issuer_and_serial, cert);
  236|  5.75k|    if (entry) {
  ------------------
  |  Branch (236:9): [True: 5.75k, False: 0]
  ------------------
  237|  5.75k|        nssHash_Remove(store->issuer_and_serial, cert);
  238|  5.75k|        if (entry->trust) {
  ------------------
  |  Branch (238:13): [True: 0, False: 5.75k]
  ------------------
  239|      0|            nssTrust_Destroy(entry->trust);
  240|      0|        }
  241|  5.75k|        if (entry->profile) {
  ------------------
  |  Branch (241:13): [True: 0, False: 5.75k]
  ------------------
  242|      0|            nssSMIMEProfile_Destroy(entry->profile);
  243|      0|        }
  244|  5.75k|        nss_ZFreeIf(entry);
  245|  5.75k|    }
  246|  5.75k|}
pkistore.c:remove_subject_entry:
  252|  5.75k|{
  253|  5.75k|    nssList *subjectList;
  254|       |    /* Get the subject list for the cert's subject */
  255|  5.75k|    subjectList = (nssList *)nssHash_Lookup(store->subject, &cert->subject);
  256|  5.75k|    if (subjectList) {
  ------------------
  |  Branch (256:9): [True: 5.75k, False: 0]
  ------------------
  257|       |        /* Remove the cert from the subject hash */
  258|  5.75k|        nssList_Remove(subjectList, cert);
  259|  5.75k|        nssHash_Remove(store->subject, &cert->subject);
  260|  5.75k|        if (nssList_Count(subjectList) == 0) {
  ------------------
  |  Branch (260:13): [True: 5.75k, False: 0]
  ------------------
  261|  5.75k|            nssList_Destroy(subjectList);
  262|  5.75k|        } else {
  263|       |            /* The cert being released may have keyed the subject entry.
  264|       |             * Since there are still subject certs around, get another and
  265|       |             * rekey the entry just in case.
  266|       |             */
  267|      0|            NSSCertificate *subjectCert;
  268|      0|            (void)nssList_GetArray(subjectList, (void **)&subjectCert, 1);
  269|      0|            nssHash_Add(store->subject, &subjectCert->subject, subjectList);
  270|      0|        }
  271|  5.75k|    }
  272|  5.75k|}
pkistore.c:get_array_from_list:
  332|    163|{
  333|    163|    PRUint32 count;
  334|    163|    NSSCertificate **rvArray = NULL;
  335|    163|    count = nssList_Count(certList);
  336|    163|    if (count == 0) {
  ------------------
  |  Branch (336:9): [True: 0, False: 163]
  ------------------
  337|      0|        return NULL;
  338|      0|    }
  339|    163|    if (maximumOpt > 0) {
  ------------------
  |  Branch (339:9): [True: 0, False: 163]
  ------------------
  340|      0|        count = PR_MIN(maximumOpt, count);
  ------------------
  |  |  158|      0|#define PR_MIN(x,y)     ((x)<(y)?(x):(y))
  |  |  ------------------
  |  |  |  Branch (158:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  341|      0|    }
  342|    163|    if (rvOpt) {
  ------------------
  |  Branch (342:9): [True: 0, False: 163]
  ------------------
  343|      0|        nssList_GetArray(certList, (void **)rvOpt, count);
  344|    163|    } else {
  345|    163|        rvArray = nss_ZNEWARRAY(arenaOpt, NSSCertificate *, count + 1);
  ------------------
  |  |  371|    163|    ((type *)nss_ZAlloc((arenaOpt), sizeof(type) * (quantity)))
  ------------------
  346|    163|        if (rvArray) {
  ------------------
  |  Branch (346:13): [True: 163, False: 0]
  ------------------
  347|    163|            nssList_GetArray(certList, (void **)rvArray, count);
  348|    163|        }
  349|    163|    }
  350|    163|    return rvArray;
  351|    163|}
pkistore.c:nssCertStore_FindCertByIssuerAndSerialNumberLocked:
  500|  11.5k|{
  501|  11.5k|    certificate_hash_entry *entry;
  502|  11.5k|    NSSCertificate *rvCert = NULL;
  503|  11.5k|    NSSCertificate index;
  504|       |
  505|  11.5k|    index.issuer = *issuer;
  506|  11.5k|    index.serial = *serial;
  507|  11.5k|    entry = (certificate_hash_entry *)
  508|  11.5k|        nssHash_Lookup(store->issuer_and_serial, &index);
  509|  11.5k|    if (entry) {
  ------------------
  |  Branch (509:9): [True: 0, False: 11.5k]
  ------------------
  510|      0|        rvCert = nssCertificate_AddRef(entry->cert);
  511|      0|    }
  512|  11.5k|    return rvCert;
  513|  11.5k|}
pkistore.c:nss_certificate_hash:
  632|  46.1k|{
  633|  46.1k|    unsigned int i;
  634|  46.1k|    PLHashNumber h;
  635|  46.1k|    NSSCertificate *c = (NSSCertificate *)key;
  636|  46.1k|    h = 0;
  637|  1.17M|    for (i = 0; i < c->issuer.size; i++)
  ------------------
  |  Branch (637:17): [True: 1.12M, False: 46.1k]
  ------------------
  638|  1.12M|        h = PR_ROTATE_LEFT32(h, 4) ^ ((unsigned char *)c->issuer.data)[i];
  ------------------
  |  |  147|  1.12M|#define PR_ROTATE_LEFT32(a, bits) (((a) << (bits)) | ((a) >> (32 - (bits))))
  ------------------
  639|   205k|    for (i = 0; i < c->serial.size; i++)
  ------------------
  |  Branch (639:17): [True: 159k, False: 46.1k]
  ------------------
  640|   159k|        h = PR_ROTATE_LEFT32(h, 4) ^ ((unsigned char *)c->serial.data)[i];
  ------------------
  |  |  147|   159k|#define PR_ROTATE_LEFT32(a, bits) (((a) << (bits)) | ((a) >> (32 - (bits))))
  ------------------
  641|  46.1k|    return h;
  642|  46.1k|}
pkistore.c:nss_compare_certs:
  646|  17.2k|{
  647|  17.2k|    PRStatus ignore;
  648|  17.2k|    NSSCertificate *c1 = (NSSCertificate *)v1;
  649|  17.2k|    NSSCertificate *c2 = (NSSCertificate *)v2;
  650|  17.2k|    return (int)(nssItem_Equal(&c1->issuer, &c2->issuer, &ignore) &&
  ------------------
  |  Branch (650:18): [True: 17.2k, False: 0]
  ------------------
  651|  17.2k|                 nssItem_Equal(&c1->serial, &c2->serial, &ignore));
  ------------------
  |  Branch (651:18): [True: 17.2k, False: 0]
  ------------------
  652|  17.2k|}

nssTrustDomain_InitializeCache:
  121|      1|{
  122|      1|    NSSArena *arena;
  123|      1|    nssTDCertificateCache *cache = td->cache;
  124|       |#ifdef DEBUG_CACHE
  125|       |    s_log = PR_NewLogModule("nss_cache");
  126|       |    PR_ASSERT(s_log);
  127|       |#endif
  128|      1|    PR_ASSERT(!cache);
  ------------------
  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  129|      1|    arena = nssArena_Create();
  130|      1|    if (!arena) {
  ------------------
  |  Branch (130:9): [True: 0, False: 1]
  ------------------
  131|      0|        return PR_FAILURE;
  132|      0|    }
  133|      1|    cache = nss_ZNEW(arena, nssTDCertificateCache);
  ------------------
  |  |  348|      1|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
  134|      1|    if (!cache) {
  ------------------
  |  Branch (134:9): [True: 0, False: 1]
  ------------------
  135|      0|        nssArena_Destroy(arena);
  136|      0|        return PR_FAILURE;
  137|      0|    }
  138|      1|    cache->lock = PZ_NewLock(nssILockCache);
  ------------------
  |  |  243|      1|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  139|      1|    if (!cache->lock) {
  ------------------
  |  Branch (139:9): [True: 0, False: 1]
  ------------------
  140|      0|        nssArena_Destroy(arena);
  141|      0|        return PR_FAILURE;
  142|      0|    }
  143|       |    /* Create the issuer and serial DER --> certificate hash */
  144|      1|    cache->issuerAndSN = nssHash_CreateCertificate(arena, cacheSize);
  145|      1|    if (!cache->issuerAndSN) {
  ------------------
  |  Branch (145:9): [True: 0, False: 1]
  ------------------
  146|      0|        goto loser;
  147|      0|    }
  148|       |    /* Create the subject DER --> subject list hash */
  149|      1|    cache->subject = nssHash_CreateItem(arena, cacheSize);
  150|      1|    if (!cache->subject) {
  ------------------
  |  Branch (150:9): [True: 0, False: 1]
  ------------------
  151|      0|        goto loser;
  152|      0|    }
  153|       |    /* Create the nickname --> subject list hash */
  154|      1|    cache->nickname = nssHash_CreateString(arena, cacheSize);
  155|      1|    if (!cache->nickname) {
  ------------------
  |  Branch (155:9): [True: 0, False: 1]
  ------------------
  156|      0|        goto loser;
  157|      0|    }
  158|       |    /* Create the email --> list of subject lists hash */
  159|      1|    cache->email = nssHash_CreateString(arena, cacheSize);
  160|      1|    if (!cache->email) {
  ------------------
  |  Branch (160:9): [True: 0, False: 1]
  ------------------
  161|      0|        goto loser;
  162|      0|    }
  163|      1|    cache->arena = arena;
  164|      1|    td->cache = cache;
  165|       |#ifdef DEBUG_CACHE
  166|       |    PR_LOG(s_log, PR_LOG_DEBUG, ("Cache initialized."));
  167|       |#endif
  168|      1|    return PR_SUCCESS;
  169|      0|loser:
  170|      0|    PZ_DestroyLock(cache->lock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  171|      0|    nssArena_Destroy(arena);
  172|      0|    td->cache = NULL;
  173|       |#ifdef DEBUG_CACHE
  174|       |    PR_LOG(s_log, PR_LOG_DEBUG, ("Cache initialization failed."));
  175|       |#endif
  176|      0|    return PR_FAILURE;
  177|      1|}
nssTrustDomain_DestroyCache:
  191|      1|{
  192|      1|    if (!td->cache) {
  ------------------
  |  Branch (192:9): [True: 0, False: 1]
  ------------------
  193|      0|        nss_SetError(NSS_ERROR_INTERNAL_ERROR);
  194|      0|        return PR_FAILURE;
  195|      0|    }
  196|      1|    if (nssHash_Count(td->cache->issuerAndSN) > 0) {
  ------------------
  |  Branch (196:9): [True: 0, False: 1]
  ------------------
  197|      0|        nss_SetError(NSS_ERROR_BUSY);
  198|      0|        return PR_FAILURE;
  199|      0|    }
  200|      1|    PZ_DestroyLock(td->cache->lock);
  ------------------
  |  |  244|      1|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  201|      1|    nssHash_Destroy(td->cache->issuerAndSN);
  202|      1|    nssHash_Destroy(td->cache->subject);
  203|      1|    nssHash_Destroy(td->cache->nickname);
  204|      1|    nssHash_Destroy(td->cache->email);
  205|      1|    nssArena_Destroy(td->cache->arena);
  206|      1|    td->cache = NULL;
  207|       |#ifdef DEBUG_CACHE
  208|       |    PR_LOG(s_log, PR_LOG_DEBUG, ("Cache destroyed."));
  209|       |#endif
  210|      1|    return PR_SUCCESS;
  211|      1|}
nssTrustDomain_GetCertsForSubjectFromCache:
  898|  1.13k|{
  899|  1.13k|    NSSCertificate **rvArray = NULL;
  900|  1.13k|    cache_entry *ce;
  901|       |#ifdef DEBUG_CACHE
  902|       |    log_item_dump("looking for cert by subject", subject);
  903|       |#endif
  904|  1.13k|    PZ_Lock(td->cache->lock);
  ------------------
  |  |  245|  1.13k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  905|  1.13k|    ce = (cache_entry *)nssHash_Lookup(td->cache->subject, subject);
  906|  1.13k|    if (ce) {
  ------------------
  |  Branch (906:9): [True: 0, False: 1.13k]
  ------------------
  907|      0|        ce->hits++;
  908|      0|        ce->lastHit = PR_Now();
  909|       |#ifdef DEBUG_CACHE
  910|       |        PR_LOG(s_log, PR_LOG_DEBUG, ("... found, %d hits", ce->hits));
  911|       |#endif
  912|      0|        rvArray = collect_subject_certs(ce->entry.list, certListOpt);
  913|      0|    }
  914|  1.13k|    PZ_Unlock(td->cache->lock);
  ------------------
  |  |  246|  1.13k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  915|  1.13k|    return rvArray;
  916|  1.13k|}
nssTrustDomain_GetCertForIssuerAndSNFromCache:
 1017|  5.79k|{
 1018|  5.79k|    NSSCertificate certkey;
 1019|  5.79k|    NSSCertificate *rvCert = NULL;
 1020|  5.79k|    cache_entry *ce;
 1021|  5.79k|    certkey.issuer.data = issuer->data;
 1022|  5.79k|    certkey.issuer.size = issuer->size;
 1023|  5.79k|    certkey.serial.data = serial->data;
 1024|  5.79k|    certkey.serial.size = serial->size;
 1025|       |#ifdef DEBUG_CACHE
 1026|       |    log_item_dump("looking for cert by issuer/sn, issuer", issuer);
 1027|       |    log_item_dump("                               serial", serial);
 1028|       |#endif
 1029|  5.79k|    PZ_Lock(td->cache->lock);
  ------------------
  |  |  245|  5.79k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 1030|  5.79k|    ce = (cache_entry *)nssHash_Lookup(td->cache->issuerAndSN, &certkey);
 1031|  5.79k|    if (ce) {
  ------------------
  |  Branch (1031:9): [True: 0, False: 5.79k]
  ------------------
 1032|      0|        ce->hits++;
 1033|      0|        ce->lastHit = PR_Now();
 1034|      0|        rvCert = nssCertificate_AddRef(ce->entry.cert);
 1035|       |#ifdef DEBUG_CACHE
 1036|       |        PR_LOG(s_log, PR_LOG_DEBUG, ("... found, %d hits", ce->hits));
 1037|       |#endif
 1038|      0|    }
 1039|  5.79k|    PZ_Unlock(td->cache->lock);
  ------------------
  |  |  246|  5.79k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1040|  5.79k|    return rvCert;
 1041|  5.79k|}

NSSTrustDomain_Create:
   32|      1|{
   33|      1|    NSSArena *arena;
   34|      1|    NSSTrustDomain *rvTD;
   35|      1|    arena = NSSArena_Create();
   36|      1|    if (!arena) {
  ------------------
  |  Branch (36:9): [True: 0, False: 1]
  ------------------
   37|      0|        return (NSSTrustDomain *)NULL;
   38|      0|    }
   39|      1|    rvTD = nss_ZNEW(arena, NSSTrustDomain);
  ------------------
  |  |  348|      1|#define nss_ZNEW(arenaOpt, type) ((type *)nss_ZAlloc((arenaOpt), sizeof(type)))
  ------------------
   40|      1|    if (!rvTD) {
  ------------------
  |  Branch (40:9): [True: 0, False: 1]
  ------------------
   41|      0|        goto loser;
   42|      0|    }
   43|       |    /* protect the token list and the token iterator */
   44|      1|    rvTD->tokensLock = NSSRWLock_New(100, "tokens");
  ------------------
  |  |   49|      1|#define NSSRWLock_New NSSRWLock_New_Util
  ------------------
   45|      1|    if (!rvTD->tokensLock) {
  ------------------
  |  Branch (45:9): [True: 0, False: 1]
  ------------------
   46|      0|        goto loser;
   47|      0|    }
   48|      1|    nssTrustDomain_InitializeCache(rvTD, NSSTRUSTDOMAIN_DEFAULT_CACHE_SIZE);
  ------------------
  |  |   20|      1|#define NSSTRUSTDOMAIN_DEFAULT_CACHE_SIZE 32
  ------------------
   49|      1|    rvTD->arena = arena;
   50|      1|    rvTD->refCount = 1;
   51|      1|    rvTD->statusConfig = NULL;
   52|      1|    return rvTD;
   53|      0|loser:
   54|      0|    if (rvTD && rvTD->tokensLock) {
  ------------------
  |  Branch (54:9): [True: 0, False: 0]
  |  Branch (54:17): [True: 0, False: 0]
  ------------------
   55|      0|        NSSRWLock_Destroy(rvTD->tokensLock);
  ------------------
  |  |   45|      0|#define NSSRWLock_Destroy NSSRWLock_Destroy_Util
  ------------------
   56|      0|    }
   57|      0|    nssArena_Destroy(arena);
   58|      0|    return (NSSTrustDomain *)NULL;
   59|      1|}
NSSTrustDomain_Destroy:
   78|      1|{
   79|      1|    PRStatus status = PR_SUCCESS;
   80|      1|    if (--td->refCount == 0) {
  ------------------
  |  Branch (80:9): [True: 1, False: 0]
  ------------------
   81|       |        /* Destroy each token in the list of tokens */
   82|      1|        if (td->tokens) {
  ------------------
  |  Branch (82:13): [True: 1, False: 0]
  ------------------
   83|      1|            nssListIterator_Destroy(td->tokens);
   84|      1|            td->tokens = NULL;
   85|      1|        }
   86|      1|        if (td->tokenList) {
  ------------------
  |  Branch (86:13): [True: 1, False: 0]
  ------------------
   87|      1|            nssList_Clear(td->tokenList, token_destructor);
   88|      1|            nssList_Destroy(td->tokenList);
   89|      1|            td->tokenList = NULL;
   90|      1|        }
   91|      1|        NSSRWLock_Destroy(td->tokensLock);
  ------------------
  |  |   45|      1|#define NSSRWLock_Destroy NSSRWLock_Destroy_Util
  ------------------
   92|      1|        td->tokensLock = NULL;
   93|      1|        status = nssTrustDomain_DestroyCache(td);
   94|      1|        if (status == PR_FAILURE) {
  ------------------
  |  Branch (94:13): [True: 0, False: 1]
  ------------------
   95|      0|            return status;
   96|      0|        }
   97|      1|        if (td->statusConfig) {
  ------------------
  |  Branch (97:13): [True: 0, False: 1]
  ------------------
   98|      0|            td->statusConfig->statusDestroy(td->statusConfig);
   99|      0|            td->statusConfig = NULL;
  100|      0|        }
  101|       |        /* Destroy the trust domain */
  102|      1|        nssArena_Destroy(td->arena);
  103|      1|    }
  104|      1|    return status;
  105|      1|}
nssTrustDomain_FindCertificatesBySubject:
  579|  1.13k|{
  580|  1.13k|    NSSToken *token = NULL;
  581|  1.13k|    NSSSlot **slots = NULL;
  582|  1.13k|    NSSSlot **slotp;
  583|  1.13k|    NSSCertificate **rvCerts = NULL;
  584|  1.13k|    nssPKIObjectCollection *collection = NULL;
  585|  1.13k|    nssUpdateLevel updateLevel;
  586|  1.13k|    nssList *subjectList;
  587|  1.13k|    PRUint32 numRemaining = maximumOpt;
  588|  1.13k|    PRUint32 collectionCount = 0;
  589|  1.13k|    PRUint32 errors = 0;
  590|       |
  591|       |    /* look in cache */
  592|  1.13k|    subjectList = nssList_Create(NULL, PR_FALSE);
  ------------------
  |  |  438|  1.13k|#define PR_FALSE 0
  ------------------
  593|  1.13k|    if (!subjectList) {
  ------------------
  |  Branch (593:9): [True: 0, False: 1.13k]
  ------------------
  594|      0|        return NULL;
  595|      0|    }
  596|  1.13k|    (void)nssTrustDomain_GetCertsForSubjectFromCache(td, subject, subjectList);
  597|  1.13k|    rvCerts = get_certs_from_list(subjectList);
  598|  1.13k|    collection = nssCertificateCollection_Create(td, rvCerts);
  599|  1.13k|    nssCertificateArray_Destroy(rvCerts);
  600|  1.13k|    nssList_Destroy(subjectList);
  601|  1.13k|    if (!collection) {
  ------------------
  |  Branch (601:9): [True: 0, False: 1.13k]
  ------------------
  602|      0|        return (NSSCertificate **)NULL;
  603|      0|    }
  604|  1.13k|    slots = nssTrustDomain_GetActiveSlots(td, &updateLevel);
  605|  1.13k|    if (!slots) {
  ------------------
  |  Branch (605:9): [True: 0, False: 1.13k]
  ------------------
  606|      0|        goto loser;
  607|      0|    }
  608|  3.39k|    for (slotp = slots; *slotp; slotp++) {
  ------------------
  |  Branch (608:25): [True: 2.26k, False: 1.13k]
  ------------------
  609|  2.26k|        token = nssSlot_GetToken(*slotp);
  610|  2.26k|        if (token) {
  ------------------
  |  Branch (610:13): [True: 2.26k, False: 0]
  ------------------
  611|  2.26k|            nssSession *session;
  612|  2.26k|            nssCryptokiObject **instances = NULL;
  613|  2.26k|            nssTokenSearchType tokenOnly = nssTokenSearchType_TokenOnly;
  614|  2.26k|            PRStatus status = PR_FAILURE;
  615|       |
  616|  2.26k|            session = nssTrustDomain_GetSessionForToken(td, token);
  617|  2.26k|            if (session) {
  ------------------
  |  Branch (617:17): [True: 2.26k, False: 0]
  ------------------
  618|  2.26k|                instances = nssToken_FindCertificatesBySubject(token,
  619|  2.26k|                                                               session,
  620|  2.26k|                                                               subject,
  621|  2.26k|                                                               tokenOnly,
  622|  2.26k|                                                               numRemaining,
  623|  2.26k|                                                               &status);
  624|  2.26k|            }
  625|  2.26k|            (void)nssToken_Destroy(token);
  626|  2.26k|            if (status != PR_SUCCESS) {
  ------------------
  |  Branch (626:17): [True: 0, False: 2.26k]
  ------------------
  627|      0|                errors++;
  628|      0|                continue;
  629|      0|            }
  630|  2.26k|            if (instances) {
  ------------------
  |  Branch (630:17): [True: 0, False: 2.26k]
  ------------------
  631|      0|                status = nssPKIObjectCollection_AddInstances(collection,
  632|      0|                                                             instances, 0);
  633|      0|                nss_ZFreeIf(instances);
  634|      0|                if (status != PR_SUCCESS) {
  ------------------
  |  Branch (634:21): [True: 0, False: 0]
  ------------------
  635|      0|                    errors++;
  636|      0|                    continue;
  637|      0|                }
  638|      0|                collectionCount = nssPKIObjectCollection_Count(collection);
  639|      0|                if (maximumOpt > 0) {
  ------------------
  |  Branch (639:21): [True: 0, False: 0]
  ------------------
  640|      0|                    if (collectionCount >= maximumOpt)
  ------------------
  |  Branch (640:25): [True: 0, False: 0]
  ------------------
  641|      0|                        break;
  642|      0|                    numRemaining = maximumOpt - collectionCount;
  643|      0|                }
  644|      0|            }
  645|  2.26k|        }
  646|  2.26k|    }
  647|  1.13k|    if (!collectionCount && errors)
  ------------------
  |  Branch (647:9): [True: 1.13k, False: 0]
  |  Branch (647:29): [True: 0, False: 1.13k]
  ------------------
  648|      0|        goto loser;
  649|  1.13k|    rvCerts = nssPKIObjectCollection_GetCertificates(collection,
  650|  1.13k|                                                     rvOpt, maximumOpt,
  651|  1.13k|                                                     arenaOpt);
  652|  1.13k|    nssPKIObjectCollection_Destroy(collection);
  653|  1.13k|    nssSlotArray_Destroy(slots);
  654|  1.13k|    return rvCerts;
  655|      0|loser:
  656|      0|    if (slots) {
  ------------------
  |  Branch (656:9): [True: 0, False: 0]
  ------------------
  657|      0|        nssSlotArray_Destroy(slots);
  658|      0|    }
  659|      0|    if (collection) {
  ------------------
  |  Branch (659:9): [True: 0, False: 0]
  ------------------
  660|      0|        nssPKIObjectCollection_Destroy(collection);
  661|      0|    }
  662|      0|    return (NSSCertificate **)NULL;
  663|  1.13k|}
nssTrustDomain_FindCertificateByIssuerAndSerialNumber:
  751|  5.79k|{
  752|  5.79k|    NSSSlot **slots = NULL;
  753|  5.79k|    NSSSlot **slotp;
  754|  5.79k|    NSSCertificate *rvCert = NULL;
  755|  5.79k|    nssPKIObjectCollection *collection = NULL;
  756|  5.79k|    nssUpdateLevel updateLevel;
  757|       |
  758|       |    /* see if this search is already cached */
  759|  5.79k|    rvCert = nssTrustDomain_GetCertForIssuerAndSNFromCache(td,
  760|  5.79k|                                                           issuer,
  761|  5.79k|                                                           serial);
  762|  5.79k|    if (rvCert) {
  ------------------
  |  Branch (762:9): [True: 0, False: 5.79k]
  ------------------
  763|      0|        return rvCert;
  764|      0|    }
  765|  5.79k|    slots = nssTrustDomain_GetActiveSlots(td, &updateLevel);
  766|  5.79k|    if (slots) {
  ------------------
  |  Branch (766:9): [True: 5.79k, False: 0]
  ------------------
  767|  17.3k|        for (slotp = slots; *slotp; slotp++) {
  ------------------
  |  Branch (767:29): [True: 11.5k, False: 5.79k]
  ------------------
  768|  11.5k|            NSSToken *token = nssSlot_GetToken(*slotp);
  769|  11.5k|            nssSession *session;
  770|  11.5k|            nssCryptokiObject *instance;
  771|  11.5k|            nssTokenSearchType tokenOnly = nssTokenSearchType_TokenOnly;
  772|  11.5k|            PRStatus status = PR_FAILURE;
  773|       |
  774|  11.5k|            if (!token)
  ------------------
  |  Branch (774:17): [True: 0, False: 11.5k]
  ------------------
  775|      0|                continue;
  776|  11.5k|            session = nssTrustDomain_GetSessionForToken(td, token);
  777|  11.5k|            if (session) {
  ------------------
  |  Branch (777:17): [True: 11.5k, False: 0]
  ------------------
  778|  11.5k|                instance = nssToken_FindCertificateByIssuerAndSerialNumber(
  779|  11.5k|                    token,
  780|  11.5k|                    session,
  781|  11.5k|                    issuer,
  782|  11.5k|                    serial,
  783|  11.5k|                    tokenOnly,
  784|  11.5k|                    &status);
  785|  11.5k|            }
  786|  11.5k|            (void)nssToken_Destroy(token);
  787|  11.5k|            if (status != PR_SUCCESS) {
  ------------------
  |  Branch (787:17): [True: 0, False: 11.5k]
  ------------------
  788|      0|                continue;
  789|      0|            }
  790|  11.5k|            if (instance) {
  ------------------
  |  Branch (790:17): [True: 0, False: 11.5k]
  ------------------
  791|      0|                if (!collection) {
  ------------------
  |  Branch (791:21): [True: 0, False: 0]
  ------------------
  792|      0|                    collection = nssCertificateCollection_Create(td, NULL);
  793|      0|                    if (!collection) {
  ------------------
  |  Branch (793:25): [True: 0, False: 0]
  ------------------
  794|      0|                        break; /* don't keep looping if out if memory */
  795|      0|                    }
  796|      0|                }
  797|      0|                status = nssPKIObjectCollection_AddInstances(collection,
  798|      0|                                                             &instance, 1);
  799|      0|                if (status == PR_SUCCESS) {
  ------------------
  |  Branch (799:21): [True: 0, False: 0]
  ------------------
  800|      0|                    (void)nssPKIObjectCollection_GetCertificates(
  801|      0|                        collection, &rvCert, 1, NULL);
  802|      0|                }
  803|      0|                if (rvCert) {
  ------------------
  |  Branch (803:21): [True: 0, False: 0]
  ------------------
  804|      0|                    break; /* found one cert, all done */
  805|      0|                }
  806|      0|            }
  807|  11.5k|        }
  808|  5.79k|    }
  809|  5.79k|    if (collection) {
  ------------------
  |  Branch (809:9): [True: 0, False: 5.79k]
  ------------------
  810|      0|        nssPKIObjectCollection_Destroy(collection);
  811|      0|    }
  812|  5.79k|    if (slots) {
  ------------------
  |  Branch (812:9): [True: 5.79k, False: 0]
  ------------------
  813|  5.79k|        nssSlotArray_Destroy(slots);
  814|  5.79k|    }
  815|  5.79k|    return rvCert;
  816|  5.79k|}
nssTrustDomain_FindCertificateByEncodedCertificate:
  833|  6.16k|{
  834|  6.16k|    PRStatus status;
  835|  6.16k|    NSSCertificate *rvCert = NULL;
  836|  6.16k|    NSSDER issuer = { 0 };
  837|  6.16k|    NSSDER serial = { 0 };
  838|       |    /* XXX this is not generic...  will any cert crack into issuer/serial? */
  839|  6.16k|    status = nssPKIX509_GetIssuerAndSerialFromDER(ber, &issuer, &serial);
  840|  6.16k|    if (status != PR_SUCCESS) {
  ------------------
  |  Branch (840:9): [True: 368, False: 5.79k]
  ------------------
  841|    368|        return NULL;
  842|    368|    }
  843|  5.79k|    rvCert = nssTrustDomain_FindCertificateByIssuerAndSerialNumber(td,
  844|  5.79k|                                                                   &issuer,
  845|  5.79k|                                                                   &serial);
  846|  5.79k|    PORT_Free(issuer.data);
  ------------------
  |  |   60|  5.79k|#define PORT_Free PORT_Free_Util
  ------------------
  847|  5.79k|    PORT_Free(serial.data);
  ------------------
  |  |   60|  5.79k|#define PORT_Free PORT_Free_Util
  ------------------
  848|  5.79k|    return rvCert;
  849|  6.16k|}
NSSTrustDomain_FindCertificateByEncodedCertificate:
  855|  6.16k|{
  856|  6.16k|    return nssTrustDomain_FindCertificateByEncodedCertificate(td, ber);
  857|  6.16k|}
nssTrustDomain_FindTrustForCertificate:
 1051|  22.8k|{
 1052|  22.8k|    NSSSlot **slots;
 1053|  22.8k|    NSSSlot **slotp;
 1054|  22.8k|    nssCryptokiObject *to = NULL;
 1055|  22.8k|    nssPKIObject *pkio = NULL;
 1056|  22.8k|    NSSTrust *rvt = NULL;
 1057|  22.8k|    nssUpdateLevel updateLevel;
 1058|  22.8k|    slots = nssTrustDomain_GetActiveSlots(td, &updateLevel);
 1059|  22.8k|    if (!slots) {
  ------------------
  |  Branch (1059:9): [True: 0, False: 22.8k]
  ------------------
 1060|      0|        return (NSSTrust *)NULL;
 1061|      0|    }
 1062|  68.6k|    for (slotp = slots; *slotp; slotp++) {
  ------------------
  |  Branch (1062:25): [True: 45.7k, False: 22.8k]
  ------------------
 1063|  45.7k|        NSSToken *token = nssSlot_GetToken(*slotp);
 1064|       |
 1065|  45.7k|        if (token) {
  ------------------
  |  Branch (1065:13): [True: 45.7k, False: 0]
  ------------------
 1066|  45.7k|            to = nssToken_FindTrustForCertificate(token, NULL,
 1067|  45.7k|                                                  &c->encoding,
 1068|  45.7k|                                                  &c->issuer,
 1069|  45.7k|                                                  &c->serial,
 1070|  45.7k|                                                  nssTokenSearchType_TokenOnly);
 1071|  45.7k|            if (to) {
  ------------------
  |  Branch (1071:17): [True: 0, False: 45.7k]
  ------------------
 1072|      0|                PRStatus status;
 1073|      0|                if (!pkio) {
  ------------------
  |  Branch (1073:21): [True: 0, False: 0]
  ------------------
 1074|      0|                    pkio = nssPKIObject_Create(NULL, to, td, NULL, nssPKILock);
 1075|      0|                    status = pkio ? PR_SUCCESS : PR_FAILURE;
  ------------------
  |  Branch (1075:30): [True: 0, False: 0]
  ------------------
 1076|      0|                } else {
 1077|      0|                    status = nssPKIObject_AddInstance(pkio, to);
 1078|      0|                }
 1079|      0|                if (status != PR_SUCCESS) {
  ------------------
  |  Branch (1079:21): [True: 0, False: 0]
  ------------------
 1080|      0|                    nssCryptokiObject_Destroy(to);
 1081|      0|                }
 1082|      0|            }
 1083|  45.7k|            (void)nssToken_Destroy(token);
 1084|  45.7k|        }
 1085|  45.7k|    }
 1086|  22.8k|    if (pkio) {
  ------------------
  |  Branch (1086:9): [True: 0, False: 22.8k]
  ------------------
 1087|      0|        rvt = nssTrust_Create(pkio, &c->encoding);
 1088|      0|        if (rvt) {
  ------------------
  |  Branch (1088:13): [True: 0, False: 0]
  ------------------
 1089|      0|            pkio = NULL; /* rvt object now owns the pkio reference */
 1090|      0|        }
 1091|      0|    }
 1092|  22.8k|    nssSlotArray_Destroy(slots);
 1093|  22.8k|    if (pkio) {
  ------------------
  |  Branch (1093:9): [True: 0, False: 22.8k]
  ------------------
 1094|      0|        nssPKIObject_Destroy(pkio);
 1095|      0|    }
 1096|  22.8k|    return rvt;
 1097|  22.8k|}
nssTrustDomain_CreateCryptoContext:
 1202|      1|{
 1203|      1|    return nssCryptoContext_Create(td, uhhOpt);
 1204|      1|}
NSSTrustDomain_CreateCryptoContext:
 1210|      1|{
 1211|      1|    return nssTrustDomain_CreateCryptoContext(td, uhhOpt);
 1212|      1|}
trustdomain.c:token_destructor:
   63|      2|{
   64|      2|    NSSToken *tok = (NSSToken *)t;
   65|       |    /* Remove the token list's reference to the token */
   66|      2|    (void)nssToken_Destroy(tok);
   67|       |
   68|       |    /* Signal that the slot should not give out any more references to the
   69|       |     * token. The token might still have a positive refcount after this call.
   70|       |     * The token has a reference to the slot, so the slot will not be destroyed
   71|       |     * until after the token's refcount drops to 0. */
   72|      2|    PK11Slot_SetNSSToken(tok->pk11slot, NULL);
   73|      2|}
trustdomain.c:get_certs_from_list:
  406|  1.13k|{
  407|  1.13k|    PRUint32 count = nssList_Count(list);
  408|  1.13k|    NSSCertificate **certs = NULL;
  409|  1.13k|    if (count > 0) {
  ------------------
  |  Branch (409:9): [True: 0, False: 1.13k]
  ------------------
  410|      0|        certs = nss_ZNEWARRAY(NULL, NSSCertificate *, count + 1);
  ------------------
  |  |  371|      0|    ((type *)nss_ZAlloc((arenaOpt), sizeof(type) * (quantity)))
  ------------------
  411|      0|        if (certs) {
  ------------------
  |  Branch (411:13): [True: 0, False: 0]
  ------------------
  412|      0|            nssList_GetArray(list, (void **)certs, count);
  413|      0|        }
  414|      0|    }
  415|  1.13k|    return certs;
  416|  1.13k|}
trustdomain.c:nssTrustDomain_GetActiveSlots:
  112|  29.7k|{
  113|  29.7k|    PRUint32 count;
  114|  29.7k|    NSSSlot **slots = NULL;
  115|  29.7k|    NSSToken **tp, **tokens;
  116|  29.7k|    *updateLevel = 1;
  117|  29.7k|    if (!td->tokenList) {
  ------------------
  |  Branch (117:9): [True: 0, False: 29.7k]
  ------------------
  118|      0|        return NULL;
  119|      0|    }
  120|  29.7k|    NSSRWLock_LockRead(td->tokensLock);
  ------------------
  |  |   47|  29.7k|#define NSSRWLock_LockRead NSSRWLock_LockRead_Util
  ------------------
  121|  29.7k|    count = nssList_Count(td->tokenList);
  122|  29.7k|    tokens = nss_ZNEWARRAY(NULL, NSSToken *, count + 1);
  ------------------
  |  |  371|  29.7k|    ((type *)nss_ZAlloc((arenaOpt), sizeof(type) * (quantity)))
  ------------------
  123|  29.7k|    if (!tokens) {
  ------------------
  |  Branch (123:9): [True: 0, False: 29.7k]
  ------------------
  124|      0|        NSSRWLock_UnlockRead(td->tokensLock);
  ------------------
  |  |   50|      0|#define NSSRWLock_UnlockRead NSSRWLock_UnlockRead_Util
  ------------------
  125|      0|        return NULL;
  126|      0|    }
  127|  29.7k|    slots = nss_ZNEWARRAY(NULL, NSSSlot *, count + 1);
  ------------------
  |  |  371|  29.7k|    ((type *)nss_ZAlloc((arenaOpt), sizeof(type) * (quantity)))
  ------------------
  128|  29.7k|    if (!slots) {
  ------------------
  |  Branch (128:9): [True: 0, False: 29.7k]
  ------------------
  129|      0|        NSSRWLock_UnlockRead(td->tokensLock);
  ------------------
  |  |   50|      0|#define NSSRWLock_UnlockRead NSSRWLock_UnlockRead_Util
  ------------------
  130|      0|        nss_ZFreeIf(tokens);
  131|      0|        return NULL;
  132|      0|    }
  133|  29.7k|    nssList_GetArray(td->tokenList, (void **)tokens, count);
  134|  29.7k|    count = 0;
  135|  89.3k|    for (tp = tokens; *tp; tp++) {
  ------------------
  |  Branch (135:23): [True: 59.5k, False: 29.7k]
  ------------------
  136|  59.5k|        NSSSlot *slot = nssToken_GetSlot(*tp);
  137|  59.5k|        if (!PK11_IsDisabled(slot->pk11slot)) {
  ------------------
  |  Branch (137:13): [True: 59.5k, False: 0]
  ------------------
  138|  59.5k|            slots[count++] = slot;
  139|  59.5k|        } else {
  140|      0|            nssSlot_Destroy(slot);
  141|      0|        }
  142|  59.5k|    }
  143|  29.7k|    NSSRWLock_UnlockRead(td->tokensLock);
  ------------------
  |  |   50|  29.7k|#define NSSRWLock_UnlockRead NSSRWLock_UnlockRead_Util
  ------------------
  144|  29.7k|    nss_ZFreeIf(tokens);
  145|  29.7k|    if (!count) {
  ------------------
  |  Branch (145:9): [True: 0, False: 29.7k]
  ------------------
  146|      0|        nss_ZFreeIf(slots);
  147|      0|        slots = NULL;
  148|      0|    }
  149|  29.7k|    return slots;
  150|  29.7k|}
trustdomain.c:nssTrustDomain_GetSessionForToken:
  157|  13.8k|{
  158|  13.8k|    return nssToken_GetDefaultSession(token);
  159|  13.8k|}

nsslowkey_DestroyPublicKey:
  222|  4.38k|{
  223|  4.38k|    if (pubk && pubk->arena) {
  ------------------
  |  Branch (223:9): [True: 4.38k, False: 0]
  |  Branch (223:17): [True: 4.38k, False: 0]
  ------------------
  224|  4.38k|        PORT_FreeArena(pubk->arena, PR_TRUE);
  ------------------
  |  |   61|  4.38k|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(pubk->arena, PR_TRUE);
  ------------------
  |  |  437|  4.38k|#define PR_TRUE 1
  ------------------
  225|  4.38k|    }
  226|  4.38k|}

sftk_PBELockInit:
  585|      1|{
  586|      1|    if (!PBECache.lock) {
  ------------------
  |  Branch (586:9): [True: 1, False: 0]
  ------------------
  587|      1|        PBECache.lock = PZ_NewLock(nssIPBECacheLock);
  ------------------
  |  |  243|      1|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  588|      1|    }
  589|      1|}
sftk_PBELockShutdown:
  716|      1|{
  717|      1|    int i;
  718|      1|    if (PBECache.lock) {
  ------------------
  |  Branch (718:9): [True: 1, False: 0]
  ------------------
  719|      1|        PZ_DestroyLock(PBECache.lock);
  ------------------
  |  |  244|      1|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  720|      1|        PBECache.lock = 0;
  721|      1|    }
  722|      1|    sftk_clearPBECommonCacheItemsLocked(&PBECache.cacheKDF1.common);
  723|    151|    for (i = 0; i < KDF2_CACHE_COUNT; i++) {
  ------------------
  |  |  569|    151|#define KDF2_CACHE_COUNT 150
  ------------------
  |  Branch (723:17): [True: 150, False: 1]
  ------------------
  724|    150|        sftk_clearPBECommonCacheItemsLocked(&PBECache.cacheKDF2.common[i]);
  725|    150|    }
  726|      1|    PBECache.cacheKDF2.next = 0;
  727|      1|}
lowpbe.c:sftk_clearPBECommonCacheItemsLocked:
  593|    151|{
  594|    151|    if (item->hash) {
  ------------------
  |  Branch (594:9): [True: 0, False: 151]
  ------------------
  595|      0|        SECITEM_ZfreeItem(item->hash, PR_TRUE);
  ------------------
  |  |  110|      0|#define SECITEM_ZfreeItem SECITEM_ZfreeItem_Util
  ------------------
                      SECITEM_ZfreeItem(item->hash, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  596|      0|        item->hash = NULL;
  597|      0|    }
  598|    151|    if (item->salt) {
  ------------------
  |  Branch (598:9): [True: 0, False: 151]
  ------------------
  599|      0|        SECITEM_ZfreeItem(item->salt, PR_TRUE);
  ------------------
  |  |  110|      0|#define SECITEM_ZfreeItem SECITEM_ZfreeItem_Util
  ------------------
                      SECITEM_ZfreeItem(item->salt, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  600|      0|        item->salt = NULL;
  601|      0|    }
  602|    151|    if (item->pwItem) {
  ------------------
  |  Branch (602:9): [True: 0, False: 151]
  ------------------
  603|      0|        SECITEM_ZfreeItem(item->pwItem, PR_TRUE);
  ------------------
  |  |  110|      0|#define SECITEM_ZfreeItem SECITEM_ZfreeItem_Util
  ------------------
                      SECITEM_ZfreeItem(item->pwItem, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  604|      0|        item->pwItem = NULL;
  605|      0|    }
  606|    151|}

SFTKFree_nsslowkey_DestroyPublicKey:
  678|  4.38k|    {                              \
  679|  4.38k|        ctxtype *p = vp;           \
  680|  4.38k|        mmm(p);                    \
  681|  4.38k|    }
sftk_defaultAttribute:
  793|  62.1k|{
  794|  62.1k|    if (!sftk_hasAttribute(object, type)) {
  ------------------
  |  Branch (794:9): [True: 47.3k, False: 14.7k]
  ------------------
  795|  47.3k|        return sftk_AddAttributeType(object, type, value, len);
  796|  47.3k|    }
  797|  14.7k|    return CKR_OK;
  ------------------
  |  | 1388|  14.7k|#define CKR_OK 0x00000000UL
  ------------------
  798|  62.1k|}
sftk_handleObject:
 1756|  4.44k|{
 1757|  4.44k|    SFTKSlot *slot = session->slot;
 1758|  4.44k|    SFTKAttribute *attribute;
 1759|  4.44k|    CK_BBOOL ckfalse = CK_FALSE;
  ------------------
  |  |   23|  4.44k|#define CK_FALSE 0
  ------------------
 1760|  4.44k|    CK_BBOOL cktrue = CK_TRUE;
  ------------------
  |  |   22|  4.44k|#define CK_TRUE 1
  ------------------
 1761|  4.44k|    PRBool isLoggedIn, needLogin;
 1762|  4.44k|    CK_RV crv;
 1763|       |
 1764|       |    /* make sure all the base object types are defined. If not set the
 1765|       |     * defaults */
 1766|  4.44k|    crv = sftk_defaultAttribute(object, CKA_TOKEN, &ckfalse, sizeof(CK_BBOOL));
  ------------------
  |  |  512|  4.44k|#define CKA_TOKEN 0x00000001UL
  ------------------
 1767|  4.44k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1767:9): [True: 0, False: 4.44k]
  ------------------
 1768|      0|        return crv;
 1769|  4.44k|    crv = sftk_defaultAttribute(object, CKA_PRIVATE, &ckfalse, sizeof(CK_BBOOL));
  ------------------
  |  |  513|  4.44k|#define CKA_PRIVATE 0x00000002UL
  ------------------
 1770|  4.44k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1770:9): [True: 0, False: 4.44k]
  ------------------
 1771|      0|        return crv;
 1772|  4.44k|    crv = sftk_defaultAttribute(object, CKA_LABEL, NULL, 0);
  ------------------
  |  |  514|  4.44k|#define CKA_LABEL 0x00000003UL
  ------------------
 1773|  4.44k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1773:9): [True: 0, False: 4.44k]
  ------------------
 1774|      0|        return crv;
 1775|  4.44k|    crv = sftk_defaultAttribute(object, CKA_MODIFIABLE, &cktrue, sizeof(CK_BBOOL));
  ------------------
  |  |  593|  4.44k|#define CKA_MODIFIABLE 0x00000170UL
  ------------------
 1776|  4.44k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1776:9): [True: 0, False: 4.44k]
  ------------------
 1777|      0|        return crv;
 1778|       |
 1779|  4.44k|    PZ_Lock(slot->slotLock);
  ------------------
  |  |  245|  4.44k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 1780|  4.44k|    isLoggedIn = slot->isLoggedIn;
 1781|  4.44k|    needLogin = slot->needLogin;
 1782|  4.44k|    PZ_Unlock(slot->slotLock);
  ------------------
  |  |  246|  4.44k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1783|       |
 1784|       |    /* don't create a private object if we aren't logged in */
 1785|  4.44k|    if (!isLoggedIn && needLogin && sftk_isTrue(object, CKA_PRIVATE)) {
  ------------------
  |  |  513|      0|#define CKA_PRIVATE 0x00000002UL
  ------------------
  |  Branch (1785:9): [True: 4.44k, False: 0]
  |  Branch (1785:24): [True: 0, False: 4.44k]
  |  Branch (1785:37): [True: 0, False: 0]
  ------------------
 1786|      0|        return CKR_USER_NOT_LOGGED_IN;
  ------------------
  |  | 1486|      0|#define CKR_USER_NOT_LOGGED_IN 0x00000101UL
  ------------------
 1787|      0|    }
 1788|       |
 1789|  4.44k|    if (((session->info.flags & CKF_RW_SESSION) == 0) &&
  ------------------
  |  |  302|  4.44k|#define CKF_RW_SESSION 0x00000002UL     /* session is r/w */
  ------------------
  |  Branch (1789:9): [True: 4.44k, False: 0]
  ------------------
 1790|  4.44k|        (sftk_isTrue(object, CKA_TOKEN))) {
  ------------------
  |  |  512|  4.44k|#define CKA_TOKEN 0x00000001UL
  ------------------
  |  Branch (1790:9): [True: 0, False: 4.44k]
  ------------------
 1791|      0|        return CKR_SESSION_READ_ONLY;
  ------------------
  |  | 1467|      0|#define CKR_SESSION_READ_ONLY 0x000000B5UL
  ------------------
 1792|      0|    }
 1793|       |
 1794|       |    /* Assign a unique SESSION object handle to every new object,
 1795|       |     * whether it is a session object or a token object.
 1796|       |     * At this point, all new objects are structured as session objects.
 1797|       |     * Objects with the CKA_TOKEN attribute true will be turned into
 1798|       |     * token objects and will have a token object handle assigned to
 1799|       |     * them by a call to sftk_mkHandle in the handler for each object
 1800|       |     * class, invoked below.
 1801|       |     *
 1802|       |     * It may be helpful to note/remember that
 1803|       |     * sftk_narrowToXxxObject uses sftk_isToken,
 1804|       |     * sftk_isToken examines the sign bit of the object's handle, but
 1805|       |     * sftk_isTrue(...,CKA_TOKEN) examines the CKA_TOKEN attribute.
 1806|       |     */
 1807|  4.44k|    object->handle = sftk_getNextHandle(slot);
 1808|       |
 1809|       |    /* get the object class */
 1810|  4.44k|    attribute = sftk_FindAttribute(object, CKA_CLASS);
  ------------------
  |  |  511|  4.44k|#define CKA_CLASS 0x00000000UL
  ------------------
 1811|  4.44k|    if (attribute == NULL) {
  ------------------
  |  Branch (1811:9): [True: 0, False: 4.44k]
  ------------------
 1812|      0|        return CKR_TEMPLATE_INCOMPLETE;
  ------------------
  |  | 1477|      0|#define CKR_TEMPLATE_INCOMPLETE 0x000000D0UL
  ------------------
 1813|      0|    }
 1814|  4.44k|    object->objclass = *(CK_OBJECT_CLASS *)attribute->attrib.pValue;
 1815|  4.44k|    sftk_FreeAttribute(attribute);
 1816|       |
 1817|       |    /* Now handle the specific object class.
 1818|       |     * At this point, all objects are session objects, and the session
 1819|       |     * number must be passed to the object class handlers.
 1820|       |     */
 1821|  4.44k|    switch (object->objclass) {
 1822|      0|        case CKO_DATA:
  ------------------
  |  |  325|      0|#define CKO_DATA 0x00000000UL
  ------------------
  |  Branch (1822:9): [True: 0, False: 4.44k]
  ------------------
 1823|      0|            crv = sftk_handleDataObject(session, object);
 1824|      0|            break;
 1825|      0|        case CKO_CERTIFICATE:
  ------------------
  |  |  326|      0|#define CKO_CERTIFICATE 0x00000001UL
  ------------------
  |  Branch (1825:9): [True: 0, False: 4.44k]
  ------------------
 1826|      0|            crv = sftk_handleCertObject(session, object);
 1827|      0|            break;
 1828|      0|        case CKO_NSS_TRUST:
  ------------------
  |  |   37|      0|#define CKO_NSS_TRUST (CKO_NSS + 3)
  |  |  ------------------
  |  |  |  |   33|      0|#define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  335|      0|#define CKO_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1828:9): [True: 0, False: 4.44k]
  ------------------
 1829|      0|            crv = sftk_handleTrustObject(session, object);
 1830|      0|            break;
 1831|      0|        case CKO_NSS_CRL:
  ------------------
  |  |   35|      0|#define CKO_NSS_CRL (CKO_NSS + 1)
  |  |  ------------------
  |  |  |  |   33|      0|#define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  335|      0|#define CKO_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1831:9): [True: 0, False: 4.44k]
  ------------------
 1832|      0|            crv = sftk_handleCrlObject(session, object);
 1833|      0|            break;
 1834|      0|        case CKO_NSS_SMIME:
  ------------------
  |  |   36|      0|#define CKO_NSS_SMIME (CKO_NSS + 2)
  |  |  ------------------
  |  |  |  |   33|      0|#define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  335|      0|#define CKO_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1834:9): [True: 0, False: 4.44k]
  ------------------
 1835|      0|            crv = sftk_handleSMimeObject(session, object);
 1836|      0|            break;
 1837|      0|        case CKO_PRIVATE_KEY:
  ------------------
  |  |  328|      0|#define CKO_PRIVATE_KEY 0x00000003UL
  ------------------
  |  Branch (1837:9): [True: 0, False: 4.44k]
  ------------------
 1838|  4.44k|        case CKO_PUBLIC_KEY:
  ------------------
  |  |  327|  4.44k|#define CKO_PUBLIC_KEY 0x00000002UL
  ------------------
  |  Branch (1838:9): [True: 4.44k, False: 0]
  ------------------
 1839|  4.44k|        case CKO_SECRET_KEY:
  ------------------
  |  |  329|  4.44k|#define CKO_SECRET_KEY 0x00000004UL
  ------------------
  |  Branch (1839:9): [True: 0, False: 4.44k]
  ------------------
 1840|  4.44k|            crv = sftk_handleKeyObject(session, object);
 1841|  4.44k|            break;
 1842|      0|        case CKO_DOMAIN_PARAMETERS:
  ------------------
  |  |  331|      0|#define CKO_DOMAIN_PARAMETERS 0x00000006UL
  ------------------
  |  Branch (1842:9): [True: 0, False: 4.44k]
  ------------------
 1843|      0|            crv = sftk_handleKeyParameterObject(session, object);
 1844|      0|            break;
 1845|      0|        default:
  ------------------
  |  Branch (1845:9): [True: 0, False: 4.44k]
  ------------------
 1846|      0|            crv = CKR_ATTRIBUTE_VALUE_INVALID;
  ------------------
  |  | 1409|      0|#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
  ------------------
 1847|      0|            break;
 1848|  4.44k|    }
 1849|       |
 1850|       |    /* can't fail from here on out unless the pk_handlXXX functions have
 1851|       |     * failed the request */
 1852|  4.44k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1852:9): [True: 120, False: 4.32k]
  ------------------
 1853|    120|        return crv;
 1854|    120|    }
 1855|       |
 1856|       |    /* Now link the object into the slot and session structures.
 1857|       |     * If the object has a true CKA_TOKEN attribute, the above object
 1858|       |     * class handlers will have set the sign bit in the object handle,
 1859|       |     * causing the following test to be true.
 1860|       |     */
 1861|  4.32k|    if (sftk_isToken(object->handle)) {
  ------------------
  |  |  504|  4.32k|#define sftk_isToken(id) (((id)&SFTK_TOKEN_MASK) == SFTK_TOKEN_MAGIC)
  |  |  ------------------
  |  |  |  |  478|  4.32k|#define SFTK_TOKEN_MASK 0x80000000L
  |  |  ------------------
  |  |               #define sftk_isToken(id) (((id)&SFTK_TOKEN_MASK) == SFTK_TOKEN_MAGIC)
  |  |  ------------------
  |  |  |  |  479|  4.32k|#define SFTK_TOKEN_MAGIC 0x80000000L
  |  |  ------------------
  |  |  |  Branch (504:26): [True: 0, False: 4.32k]
  |  |  ------------------
  ------------------
 1862|      0|        sftk_convertSessionToToken(object);
 1863|  4.32k|    } else {
 1864|  4.32k|        object->slot = slot;
 1865|  4.32k|        sftk_AddObject(session, object);
 1866|  4.32k|    }
 1867|       |
 1868|  4.32k|    return CKR_OK;
  ------------------
  |  | 1388|  4.32k|#define CKR_OK 0x00000000UL
  ------------------
 1869|  4.44k|}
sftk_GetPubKey:
 1878|  8.73k|{
 1879|  8.73k|    NSSLOWKEYPublicKey *pubKey;
 1880|  8.73k|    PLArenaPool *arena;
 1881|  8.73k|    CK_RV crv;
 1882|       |
 1883|  8.73k|    if (object->objclass != CKO_PUBLIC_KEY) {
  ------------------
  |  |  327|  8.73k|#define CKO_PUBLIC_KEY 0x00000002UL
  ------------------
  |  Branch (1883:9): [True: 0, False: 8.73k]
  ------------------
 1884|      0|        *crvp = CKR_KEY_TYPE_INCONSISTENT;
  ------------------
  |  | 1433|      0|#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
  ------------------
 1885|      0|        return NULL;
 1886|      0|    }
 1887|       |
 1888|  8.73k|    if (sftk_isToken(object->handle)) {
  ------------------
  |  |  504|  8.73k|#define sftk_isToken(id) (((id)&SFTK_TOKEN_MASK) == SFTK_TOKEN_MAGIC)
  |  |  ------------------
  |  |  |  |  478|  8.73k|#define SFTK_TOKEN_MASK 0x80000000L
  |  |  ------------------
  |  |               #define sftk_isToken(id) (((id)&SFTK_TOKEN_MASK) == SFTK_TOKEN_MAGIC)
  |  |  ------------------
  |  |  |  |  479|  8.73k|#define SFTK_TOKEN_MAGIC 0x80000000L
  |  |  ------------------
  |  |  |  Branch (504:26): [True: 0, False: 8.73k]
  |  |  ------------------
  ------------------
 1889|       |        /* ferret out the token object handle */
 1890|      0|    }
 1891|       |
 1892|       |    /* If we already have a key, use it */
 1893|  8.73k|    if (object->objectInfo) {
  ------------------
  |  Branch (1893:9): [True: 4.31k, False: 4.42k]
  ------------------
 1894|  4.31k|        *crvp = CKR_OK;
  ------------------
  |  | 1388|  4.31k|#define CKR_OK 0x00000000UL
  ------------------
 1895|  4.31k|        return (NSSLOWKEYPublicKey *)object->objectInfo;
 1896|  4.31k|    }
 1897|       |
 1898|       |    /* allocate the structure */
 1899|  4.42k|    arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   63|  4.42k|#define PORT_NewArena PORT_NewArena_Util
  ------------------
                  arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE);
  ------------------
  |  |   60|  4.42k|#define DER_DEFAULT_CHUNKSIZE (2048)
  ------------------
 1900|  4.42k|    if (arena == NULL) {
  ------------------
  |  Branch (1900:9): [True: 0, False: 4.42k]
  ------------------
 1901|      0|        *crvp = CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 1902|      0|        return NULL;
 1903|      0|    }
 1904|       |
 1905|  4.42k|    pubKey = (NSSLOWKEYPublicKey *)
 1906|  4.42k|        PORT_ArenaAlloc(arena, sizeof(NSSLOWKEYPublicKey));
  ------------------
  |  |   53|  4.42k|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
 1907|  4.42k|    if (pubKey == NULL) {
  ------------------
  |  Branch (1907:9): [True: 0, False: 4.42k]
  ------------------
 1908|      0|        PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |   61|      0|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(arena, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1909|      0|        *crvp = CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 1910|      0|        return NULL;
 1911|      0|    }
 1912|       |
 1913|       |    /* fill in the structure */
 1914|  4.42k|    pubKey->arena = arena;
 1915|  4.42k|    switch (key_type) {
 1916|  2.77k|        case CKK_RSA:
  ------------------
  |  |  372|  2.77k|#define CKK_RSA 0x00000000UL
  ------------------
  |  Branch (1916:9): [True: 2.77k, False: 1.65k]
  ------------------
 1917|  2.77k|            pubKey->keyType = NSSLOWKEYRSAKey;
 1918|  2.77k|            crv = sftk_Attribute2SSecItem(arena, &pubKey->u.rsa.modulus,
 1919|  2.77k|                                          object, CKA_MODULUS);
  ------------------
  |  |  558|  2.77k|#define CKA_MODULUS 0x00000120UL
  ------------------
 1920|  2.77k|            if (crv != CKR_OK)
  ------------------
  |  | 1388|  2.77k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1920:17): [True: 0, False: 2.77k]
  ------------------
 1921|      0|                break;
 1922|  2.77k|            crv = sftk_Attribute2SSecItem(arena, &pubKey->u.rsa.publicExponent,
 1923|  2.77k|                                          object, CKA_PUBLIC_EXPONENT);
  ------------------
  |  |  560|  2.77k|#define CKA_PUBLIC_EXPONENT 0x00000122UL
  ------------------
 1924|  2.77k|            break;
 1925|  1.33k|        case CKK_DSA:
  ------------------
  |  |  373|  1.33k|#define CKK_DSA 0x00000001UL
  ------------------
  |  Branch (1925:9): [True: 1.33k, False: 3.09k]
  ------------------
 1926|  1.33k|            pubKey->keyType = NSSLOWKEYDSAKey;
 1927|  1.33k|            crv = sftk_Attribute2SSecItem(arena, &pubKey->u.dsa.params.prime,
 1928|  1.33k|                                          object, CKA_PRIME);
  ------------------
  |  |  569|  1.33k|#define CKA_PRIME 0x00000130UL
  ------------------
 1929|  1.33k|            if (crv != CKR_OK)
  ------------------
  |  | 1388|  1.33k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1929:17): [True: 0, False: 1.33k]
  ------------------
 1930|      0|                break;
 1931|  1.33k|            crv = sftk_Attribute2SSecItem(arena, &pubKey->u.dsa.params.subPrime,
 1932|  1.33k|                                          object, CKA_SUBPRIME);
  ------------------
  |  |  570|  1.33k|#define CKA_SUBPRIME 0x00000131UL
  ------------------
 1933|  1.33k|            if (crv != CKR_OK)
  ------------------
  |  | 1388|  1.33k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1933:17): [True: 0, False: 1.33k]
  ------------------
 1934|      0|                break;
 1935|  1.33k|            crv = sftk_Attribute2SSecItem(arena, &pubKey->u.dsa.params.base,
 1936|  1.33k|                                          object, CKA_BASE);
  ------------------
  |  |  571|  1.33k|#define CKA_BASE 0x00000132UL
  ------------------
 1937|  1.33k|            if (crv != CKR_OK)
  ------------------
  |  | 1388|  1.33k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1937:17): [True: 0, False: 1.33k]
  ------------------
 1938|      0|                break;
 1939|  1.33k|            crv = sftk_Attribute2SSecItem(arena, &pubKey->u.dsa.publicValue,
 1940|  1.33k|                                          object, CKA_VALUE);
  ------------------
  |  |  516|  1.33k|#define CKA_VALUE 0x00000011UL
  ------------------
 1941|  1.33k|            break;
 1942|      0|        case CKK_DH:
  ------------------
  |  |  374|      0|#define CKK_DH 0x00000002UL
  ------------------
  |  Branch (1942:9): [True: 0, False: 4.42k]
  ------------------
 1943|      0|            pubKey->keyType = NSSLOWKEYDHKey;
 1944|      0|            crv = sftk_Attribute2SSecItem(arena, &pubKey->u.dh.prime,
 1945|      0|                                          object, CKA_PRIME);
  ------------------
  |  |  569|      0|#define CKA_PRIME 0x00000130UL
  ------------------
 1946|      0|            if (crv != CKR_OK)
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1946:17): [True: 0, False: 0]
  ------------------
 1947|      0|                break;
 1948|      0|            crv = sftk_Attribute2SSecItem(arena, &pubKey->u.dh.base,
 1949|      0|                                          object, CKA_BASE);
  ------------------
  |  |  571|      0|#define CKA_BASE 0x00000132UL
  ------------------
 1950|      0|            if (crv != CKR_OK)
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1950:17): [True: 0, False: 0]
  ------------------
 1951|      0|                break;
 1952|      0|            crv = sftk_Attribute2SSecItem(arena, &pubKey->u.dh.publicValue,
 1953|      0|                                          object, CKA_VALUE);
  ------------------
  |  |  516|      0|#define CKA_VALUE 0x00000011UL
  ------------------
 1954|      0|            break;
 1955|      0|        case CKK_EC_EDWARDS:
  ------------------
  |  |  448|      0|#define CKK_EC_EDWARDS 0x00000040UL
  ------------------
  |  Branch (1955:9): [True: 0, False: 4.42k]
  ------------------
 1956|      0|        case CKK_EC_MONTGOMERY:
  ------------------
  |  |  449|      0|#define CKK_EC_MONTGOMERY 0x00000041UL
  ------------------
  |  Branch (1956:9): [True: 0, False: 4.42k]
  ------------------
 1957|    323|        case CKK_EC:
  ------------------
  |  |  379|    323|#define CKK_EC 0x00000003UL
  ------------------
  |  Branch (1957:9): [True: 323, False: 4.10k]
  ------------------
 1958|    323|            pubKey->keyType = NSSLOWKEYECKey;
 1959|    323|            crv = sftk_Attribute2SSecItem(arena,
 1960|    323|                                          &pubKey->u.ec.ecParams.DEREncoding,
 1961|    323|                                          object, CKA_EC_PARAMS);
  ------------------
  |  |  602|    323|#define CKA_EC_PARAMS 0x00000180UL
  ------------------
 1962|    323|            if (crv != CKR_OK)
  ------------------
  |  | 1388|    323|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1962:17): [True: 0, False: 323]
  ------------------
 1963|      0|                break;
 1964|       |
 1965|       |            /* Fill out the rest of the ecParams structure
 1966|       |             * based on the encoded params
 1967|       |             */
 1968|    323|            if (EC_FillParams(arena, &pubKey->u.ec.ecParams.DEREncoding,
  ------------------
  |  Branch (1968:17): [True: 26, False: 297]
  ------------------
 1969|    323|                              &pubKey->u.ec.ecParams) != SECSuccess) {
 1970|     26|                crv = CKR_DOMAIN_PARAMS_INVALID;
  ------------------
  |  | 1508|     26|#define CKR_DOMAIN_PARAMS_INVALID 0x00000130UL
  ------------------
 1971|     26|                break;
 1972|     26|            }
 1973|       |
 1974|    297|            crv = sftk_Attribute2SSecItem(arena, &pubKey->u.ec.publicValue,
 1975|    297|                                          object, CKA_EC_POINT);
  ------------------
  |  |  604|    297|#define CKA_EC_POINT 0x00000181UL
  ------------------
 1976|    297|            if (crv == CKR_OK) {
  ------------------
  |  | 1388|    297|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1976:17): [True: 297, False: 0]
  ------------------
 1977|    297|                unsigned int keyLen = EC_GetPointSize(&pubKey->u.ec.ecParams);
 1978|       |
 1979|       |                /* special note: We can't just use the first byte to distinguish
 1980|       |                 * between EC_POINT_FORM_UNCOMPRESSED and SEC_ASN1_OCTET_STRING.
 1981|       |                 * Both are 0x04. */
 1982|       |
 1983|       |                /* Handle the non-DER encoded case.
 1984|       |                 * Some curves are always pressumed to be non-DER.
 1985|       |                 */
 1986|    297|                if (pubKey->u.ec.ecParams.type != ec_params_named ||
  ------------------
  |  Branch (1986:21): [True: 0, False: 297]
  ------------------
 1987|    297|                    (pubKey->u.ec.publicValue.len == keyLen &&
  ------------------
  |  Branch (1987:22): [True: 0, False: 297]
  ------------------
 1988|    297|                     pubKey->u.ec.publicValue.data[0] == EC_POINT_FORM_UNCOMPRESSED)) {
  ------------------
  |  |   92|      0|#define EC_POINT_FORM_UNCOMPRESSED 0x04
  ------------------
  |  Branch (1988:22): [True: 0, False: 0]
  ------------------
 1989|      0|                    break; /* key was not DER encoded, no need to unwrap */
 1990|      0|                }
 1991|       |
 1992|       |                /* handle the encoded case */
 1993|    297|                if ((pubKey->u.ec.publicValue.data[0] == SEC_ASN1_OCTET_STRING) &&
  ------------------
  |  |   80|    297|#define SEC_ASN1_OCTET_STRING 0x04
  ------------------
  |  Branch (1993:21): [True: 297, False: 0]
  ------------------
 1994|    297|                    pubKey->u.ec.publicValue.len > keyLen) {
  ------------------
  |  Branch (1994:21): [True: 294, False: 3]
  ------------------
 1995|    294|                    SECItem publicValue;
 1996|    294|                    SECStatus rv;
 1997|       |
 1998|    294|                    rv = SEC_QuickDERDecodeItem(arena, &publicValue,
  ------------------
  |  |  102|    294|#define SEC_QuickDERDecodeItem SEC_QuickDERDecodeItem_Util
  ------------------
 1999|    294|                                                SEC_ASN1_GET(SEC_OctetStringTemplate),
  ------------------
  |  |  188|    294|#define SEC_ASN1_GET(x) x
  ------------------
 2000|    294|                                                &pubKey->u.ec.publicValue);
 2001|       |                    /* nope, didn't decode correctly */
 2002|    294|                    if ((rv != SECSuccess) || (publicValue.len != keyLen)) {
  ------------------
  |  Branch (2002:25): [True: 0, False: 294]
  |  Branch (2002:47): [True: 1, False: 293]
  ------------------
 2003|      1|                        crv = CKR_ATTRIBUTE_VALUE_INVALID;
  ------------------
  |  | 1409|      1|#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
  ------------------
 2004|      1|                        break;
 2005|      1|                    }
 2006|       |                    /* we don't handle compressed points except in the case of ECCurve25519 */
 2007|    293|                    if (publicValue.data[0] != EC_POINT_FORM_UNCOMPRESSED) {
  ------------------
  |  |   92|    293|#define EC_POINT_FORM_UNCOMPRESSED 0x04
  ------------------
  |  Branch (2007:25): [True: 12, False: 281]
  ------------------
 2008|     12|                        crv = CKR_ATTRIBUTE_VALUE_INVALID;
  ------------------
  |  | 1409|     12|#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
  ------------------
 2009|     12|                        break;
 2010|     12|                    }
 2011|       |                    /* replace our previous with the decoded key */
 2012|    281|                    pubKey->u.ec.publicValue = publicValue;
 2013|    281|                    break;
 2014|    293|                }
 2015|      3|                crv = CKR_ATTRIBUTE_VALUE_INVALID;
  ------------------
  |  | 1409|      3|#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
  ------------------
 2016|      3|            }
 2017|      3|            break;
 2018|      3|        case CKK_NSS_KYBER:
  ------------------
  |  |   58|      0|#define CKK_NSS_KYBER (CKK_NSS + 5)
  |  |  ------------------
  |  |  |  |   49|      0|#define CKK_NSS (CKK_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  458|      0|#define CKK_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKK_NSS (CKK_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2018:9): [True: 0, False: 4.42k]
  ------------------
 2019|      0|        case CKK_NSS_ML_KEM:
  ------------------
  |  |   59|      0|#define CKK_NSS_ML_KEM (CKK_NSS + 6)
  |  |  ------------------
  |  |  |  |   49|      0|#define CKK_NSS (CKK_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  458|      0|#define CKK_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKK_NSS (CKK_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2019:9): [True: 0, False: 4.42k]
  ------------------
 2020|      0|            crv = CKR_OK;
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
 2021|      0|            break;
 2022|      0|        default:
  ------------------
  |  Branch (2022:9): [True: 0, False: 4.42k]
  ------------------
 2023|      0|            crv = CKR_KEY_TYPE_INCONSISTENT;
  ------------------
  |  | 1433|      0|#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
  ------------------
 2024|      0|            break;
 2025|  4.42k|    }
 2026|  4.42k|    *crvp = crv;
 2027|  4.42k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  4.42k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (2027:9): [True: 42, False: 4.38k]
  ------------------
 2028|     42|        PORT_FreeArena(arena, PR_TRUE);
  ------------------
  |  |   61|     42|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(arena, PR_TRUE);
  ------------------
  |  |  437|     42|#define PR_TRUE 1
  ------------------
 2029|     42|        return NULL;
 2030|     42|    }
 2031|       |
 2032|  4.38k|    object->objectInfo = pubKey;
 2033|  4.38k|    object->infoFree = SFTKFree_nsslowkey_DestroyPublicKey;
 2034|  4.38k|    return pubKey;
 2035|  4.42k|}
NSC_GetInterface:
 2642|      2|{
 2643|      2|    int i;
 2644|      5|    for (i = 0; i < NSS_INTERFACE_COUNT; i++) {
  ------------------
  |  |  191|      5|#define NSS_INTERFACE_COUNT 5
  ------------------
  |  Branch (2644:17): [True: 5, False: 0]
  ------------------
 2645|      5|        CK_INTERFACE_PTR interface = &nss_interfaces[i];
 2646|      5|        if (pInterfaceName && PORT_Strcmp((char *)pInterfaceName, (char *)interface->pInterfaceName) != 0) {
  ------------------
  |  |  188|      5|#define PORT_Strcmp strcmp
  ------------------
  |  Branch (2646:13): [True: 5, False: 0]
  |  Branch (2646:31): [True: 3, False: 2]
  ------------------
 2647|      3|            continue;
 2648|      3|        }
 2649|      2|        if (pVersion && PORT_Memcmp(pVersion, (CK_VERSION *)interface->pFunctionList, sizeof(CK_VERSION)) != 0) {
  ------------------
  |  |  179|      0|#define PORT_Memcmp memcmp
  ------------------
  |  Branch (2649:13): [True: 0, False: 2]
  |  Branch (2649:25): [True: 0, False: 0]
  ------------------
 2650|      0|            continue;
 2651|      0|        }
 2652|      2|        if (flags & ((interface->flags & flags) != flags)) {
  ------------------
  |  Branch (2652:13): [True: 0, False: 2]
  ------------------
 2653|      0|            continue;
 2654|      0|        }
 2655|      2|        *ppInterface = interface;
 2656|      2|        return CKR_OK;
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
 2657|      2|    }
 2658|      0|    return CKR_ARGUMENTS_BAD;
  ------------------
  |  | 1401|      0|#define CKR_ARGUMENTS_BAD 0x00000007UL
  ------------------
 2659|      2|}
sftk_getDefTokName:
 2689|      2|{
 2690|      2|    static char buf[33];
 2691|       |
 2692|      2|    switch (slotID) {
 2693|      1|        case NETSCAPE_SLOT_ID:
  ------------------
  |  |  498|      1|#define NETSCAPE_SLOT_ID 1
  ------------------
  |  Branch (2693:9): [True: 1, False: 1]
  ------------------
 2694|      1|            return "NSS Generic Crypto Services     ";
 2695|      1|        case PRIVATE_KEY_SLOT_ID:
  ------------------
  |  |  499|      1|#define PRIVATE_KEY_SLOT_ID 2
  ------------------
  |  Branch (2695:9): [True: 1, False: 1]
  ------------------
 2696|      1|            return "NSS Certificate DB              ";
 2697|      0|        case FIPS_SLOT_ID:
  ------------------
  |  |  500|      0|#define FIPS_SLOT_ID 3
  ------------------
  |  Branch (2697:9): [True: 0, False: 2]
  ------------------
 2698|      0|            return "NSS FIPS 140-2 Certificate DB   ";
 2699|      0|        default:
  ------------------
  |  Branch (2699:9): [True: 0, False: 2]
  ------------------
 2700|      0|            break;
 2701|      2|    }
 2702|      0|    snprintf(buf, sizeof(buf), "NSS Application Token %08x  ", (unsigned int)slotID);
 2703|      0|    return buf;
 2704|      2|}
sftk_getDefSlotName:
 2708|      2|{
 2709|      2|    static char buf[65];
 2710|       |
 2711|      2|    switch (slotID) {
 2712|      1|        case NETSCAPE_SLOT_ID:
  ------------------
  |  |  498|      1|#define NETSCAPE_SLOT_ID 1
  ------------------
  |  Branch (2712:9): [True: 1, False: 1]
  ------------------
 2713|      1|            return "NSS Internal Cryptographic Services                             ";
 2714|      1|        case PRIVATE_KEY_SLOT_ID:
  ------------------
  |  |  499|      1|#define PRIVATE_KEY_SLOT_ID 2
  ------------------
  |  Branch (2714:9): [True: 1, False: 1]
  ------------------
 2715|      1|            return "NSS User Private Key and Certificate Services                   ";
 2716|      0|        case FIPS_SLOT_ID:
  ------------------
  |  |  500|      0|#define FIPS_SLOT_ID 3
  ------------------
  |  Branch (2716:9): [True: 0, False: 2]
  ------------------
 2717|      0|            return "NSS FIPS 140-2 User Private Key Services                        ";
 2718|      0|        default:
  ------------------
  |  Branch (2718:9): [True: 0, False: 2]
  ------------------
 2719|      0|            break;
 2720|      2|    }
 2721|      0|    snprintf(buf, sizeof(buf),
 2722|      0|             "NSS Application Slot %08x                                   ",
 2723|      0|             (unsigned int)slotID);
 2724|      0|    return buf;
 2725|      2|}
sftk_SlotFromID:
 2747|   328k|{
 2748|   328k|    SFTKSlot *slot;
 2749|   328k|    unsigned int index = sftk_GetModuleIndex(slotID);
 2750|       |
 2751|   328k|    if (nscSlotHashTable[index] == NULL)
  ------------------
  |  Branch (2751:9): [True: 0, False: 328k]
  ------------------
 2752|      0|        return NULL;
 2753|   328k|    slot = (SFTKSlot *)PL_HashTableLookupConst(nscSlotHashTable[index],
 2754|   328k|                                               (void *)(uintptr_t)slotID);
 2755|       |    /* cleared slots shouldn't 'show up' */
 2756|   328k|    if (slot && !all && !slot->present)
  ------------------
  |  Branch (2756:9): [True: 328k, False: 0]
  |  Branch (2756:17): [True: 328k, False: 2]
  |  Branch (2756:25): [True: 0, False: 328k]
  ------------------
 2757|      0|        slot = NULL;
 2758|   328k|    return slot;
 2759|   328k|}
sftk_SlotIDFromSessionHandle:
 2763|   308k|{
 2764|   308k|    CK_ULONG slotIDIndex = (handle >> 24) & 0x7f;
 2765|   308k|    CK_ULONG moduleIndex = (handle >> 31) & 1;
 2766|       |
 2767|   308k|    if (slotIDIndex >= nscSlotCount[moduleIndex]) {
  ------------------
  |  Branch (2767:9): [True: 0, False: 308k]
  ------------------
 2768|      0|        return (CK_SLOT_ID)-1;
 2769|      0|    }
 2770|   308k|    return nscSlotList[moduleIndex][slotIDIndex];
 2771|   308k|}
sftk_SlotFromSessionHandle:
 2775|   308k|{
 2776|   308k|    return sftk_SlotFromID(sftk_SlotIDFromSessionHandle(handle), PR_FALSE);
  ------------------
  |  |  438|   308k|#define PR_FALSE 0
  ------------------
 2777|   308k|}
SFTK_SlotReInit:
 2861|      2|{
 2862|      2|    PRBool needLogin = !params->noKeyDB;
 2863|      2|    CK_RV crv;
 2864|       |
 2865|      2|    slot->hasTokens = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 2866|      2|    slot->sessionIDConflict = 0;
 2867|      2|    slot->sessionCount = 0;
 2868|      2|    slot->rwSessionCount = 0;
 2869|      2|    slot->needLogin = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 2870|      2|    slot->isLoggedIn = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 2871|      2|    slot->ssoLoggedIn = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 2872|      2|    slot->DB_loaded = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 2873|      2|    slot->certDB = NULL;
 2874|      2|    slot->keyDB = NULL;
 2875|      2|    slot->minimumPinLen = 0;
 2876|      2|    slot->readOnly = params->readOnly;
 2877|      2|    sftk_setStringName(params->tokdes ? params->tokdes : sftk_getDefTokName(slot->slotID), slot->tokDescription,
  ------------------
  |  Branch (2877:24): [True: 0, False: 2]
  ------------------
 2878|      2|                       sizeof(slot->tokDescription), PR_TRUE);
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
 2879|      2|    sftk_setStringName(params->updtokdes ? params->updtokdes : " ",
  ------------------
  |  Branch (2879:24): [True: 1, False: 1]
  ------------------
 2880|      2|                       slot->updateTokDescription,
 2881|      2|                       sizeof(slot->updateTokDescription), PR_TRUE);
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
 2882|       |
 2883|      2|    if ((!params->noCertDB) || (!params->noKeyDB)) {
  ------------------
  |  Branch (2883:9): [True: 0, False: 2]
  |  Branch (2883:32): [True: 0, False: 2]
  ------------------
 2884|      0|        SFTKDBHandle *certHandle = NULL;
 2885|      0|        SFTKDBHandle *keyHandle = NULL;
 2886|      0|        crv = sftk_DBInit(params->configdir ? params->configdir : configdir,
  ------------------
  |  Branch (2886:27): [True: 0, False: 0]
  ------------------
 2887|      0|                          params->certPrefix, params->keyPrefix,
 2888|      0|                          params->updatedir ? params->updatedir : updatedir,
  ------------------
  |  Branch (2888:27): [True: 0, False: 0]
  ------------------
 2889|      0|                          params->updCertPrefix, params->updKeyPrefix,
 2890|      0|                          params->updateID ? params->updateID : updateID,
  ------------------
  |  Branch (2890:27): [True: 0, False: 0]
  ------------------
 2891|      0|                          params->readOnly, params->noCertDB, params->noKeyDB,
 2892|      0|                          params->forceOpen,
 2893|      0|                          moduleIndex == NSC_FIPS_MODULE,
  ------------------
  |  |   54|      0|#define NSC_FIPS_MODULE 1
  ------------------
 2894|      0|                          &certHandle, &keyHandle);
 2895|      0|        if (crv != CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (2895:13): [True: 0, False: 0]
  ------------------
 2896|      0|            goto loser;
 2897|      0|        }
 2898|       |
 2899|      0|        slot->certDB = certHandle;
 2900|      0|        slot->keyDB = keyHandle;
 2901|      0|    }
 2902|      2|    if (needLogin) {
  ------------------
  |  Branch (2902:9): [True: 0, False: 2]
  ------------------
 2903|       |        /* if the data base is initialized with a null password,remember that */
 2904|      0|        slot->needLogin =
 2905|      0|            (PRBool)!sftk_hasNullPassword(slot, slot->keyDB);
 2906|      0|        if ((params->minPW >= 0) && (params->minPW <= SFTK_MAX_PIN)) {
  ------------------
  |  |  493|      0|#define SFTK_MAX_PIN 500
  ------------------
  |  Branch (2906:13): [True: 0, False: 0]
  |  Branch (2906:37): [True: 0, False: 0]
  ------------------
 2907|      0|            slot->minimumPinLen = params->minPW;
 2908|      0|        }
 2909|      0|        if ((slot->minimumPinLen == 0) && (params->pwRequired)) {
  ------------------
  |  Branch (2909:13): [True: 0, False: 0]
  |  Branch (2909:43): [True: 0, False: 0]
  ------------------
 2910|      0|            slot->minimumPinLen = 1;
 2911|      0|        }
 2912|       |        /* Make sure the pin len is set to the Minimum allowed value for fips
 2913|       |         * when in FIPS mode. NOTE: we don't set it if the database has not
 2914|       |         * been initialized yet so that we can init into level1 mode if needed
 2915|       |         */
 2916|      0|        if ((sftkdb_HasPasswordSet(slot->keyDB) == SECSuccess) &&
  ------------------
  |  Branch (2916:13): [True: 0, False: 0]
  ------------------
 2917|      0|            (moduleIndex == NSC_FIPS_MODULE) &&
  ------------------
  |  |   54|      0|#define NSC_FIPS_MODULE 1
  ------------------
  |  Branch (2917:13): [True: 0, False: 0]
  ------------------
 2918|      0|            (slot->minimumPinLen < FIPS_MIN_PIN)) {
  ------------------
  |  |  495|      0|#define FIPS_MIN_PIN 7
  ------------------
  |  Branch (2918:13): [True: 0, False: 0]
  ------------------
 2919|      0|            slot->minimumPinLen = FIPS_MIN_PIN;
  ------------------
  |  |  495|      0|#define FIPS_MIN_PIN 7
  ------------------
 2920|      0|        }
 2921|      0|    }
 2922|       |
 2923|      2|    slot->present = PR_TRUE;
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
 2924|      2|    return CKR_OK;
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
 2925|       |
 2926|      0|loser:
 2927|      0|    SFTK_ShutdownSlot(slot);
 2928|      0|    return crv;
 2929|      2|}
SFTK_SlotInit:
 2937|      2|{
 2938|      2|    unsigned int i;
 2939|      2|    CK_SLOT_ID slotID = params->slotID;
 2940|      2|    SFTKSlot *slot;
 2941|      2|    CK_RV crv = CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      2|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 2942|       |
 2943|       |    /*
 2944|       |     * first we initialize everything that is 'permanent' with this slot.
 2945|       |     * that is everything we aren't going to shutdown if we close this slot
 2946|       |     * and open it up again with different databases */
 2947|       |
 2948|      2|    slot = PORT_ZNew(SFTKSlot);
  ------------------
  |  |  148|      2|#define PORT_ZNew(type) (type *)PORT_ZAlloc(sizeof(type))
  |  |  ------------------
  |  |  |  |   72|      2|#define PORT_ZAlloc PORT_ZAlloc_Util
  |  |  ------------------
  ------------------
 2949|       |
 2950|      2|    if (slot == NULL) {
  ------------------
  |  Branch (2950:9): [True: 0, False: 2]
  ------------------
 2951|      0|        return CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 2952|      0|    }
 2953|       |
 2954|      2|    slot->optimizeSpace = params->optimizeSpace;
 2955|      2|    if (slot->optimizeSpace) {
  ------------------
  |  Branch (2955:9): [True: 2, False: 0]
  ------------------
 2956|      2|        slot->sessObjHashSize = SPACE_SESSION_OBJECT_HASH_SIZE;
  ------------------
  |  |   66|      2|#define SPACE_SESSION_OBJECT_HASH_SIZE 32
  ------------------
 2957|      2|        slot->sessHashSize = SPACE_SESSION_HASH_SIZE;
  ------------------
  |  |   67|      2|#define SPACE_SESSION_HASH_SIZE 32
  ------------------
 2958|      2|        slot->numSessionLocks = 1;
 2959|      2|    } else {
 2960|      0|        slot->sessObjHashSize = TIME_SESSION_OBJECT_HASH_SIZE;
  ------------------
  |  |   69|      0|#define TIME_SESSION_OBJECT_HASH_SIZE 1024
  ------------------
 2961|      0|        slot->sessHashSize = TIME_SESSION_HASH_SIZE;
  ------------------
  |  |   70|      0|#define TIME_SESSION_HASH_SIZE 1024
  ------------------
 2962|      0|        slot->numSessionLocks = slot->sessHashSize / BUCKETS_PER_SESSION_LOCK;
  ------------------
  |  |   93|      0|#define BUCKETS_PER_SESSION_LOCK (1 << (LOG2_BUCKETS_PER_SESSION_LOCK))
  |  |  ------------------
  |  |  |  |   92|      0|#define LOG2_BUCKETS_PER_SESSION_LOCK 1
  |  |  ------------------
  ------------------
 2963|      0|    }
 2964|      2|    slot->sessionLockMask = slot->numSessionLocks - 1;
 2965|       |
 2966|      2|    slot->slotLock = PZ_NewLock(nssILockSession);
  ------------------
  |  |  243|      2|#define PZ_NewLock(t) PR_NewLock()
  ------------------
 2967|      2|    if (slot->slotLock == NULL)
  ------------------
  |  Branch (2967:9): [True: 0, False: 2]
  ------------------
 2968|      0|        goto mem_loser;
 2969|      2|    slot->sessionLock = PORT_ZNewArray(PZLock *, slot->numSessionLocks);
  ------------------
  |  |  159|      2|    (type *)PORT_ZAlloc(sizeof(type) * (num))
  |  |  ------------------
  |  |  |  |   72|      2|#define PORT_ZAlloc PORT_ZAlloc_Util
  |  |  ------------------
  ------------------
 2970|      2|    if (slot->sessionLock == NULL)
  ------------------
  |  Branch (2970:9): [True: 0, False: 2]
  ------------------
 2971|      0|        goto mem_loser;
 2972|      4|    for (i = 0; i < slot->numSessionLocks; i++) {
  ------------------
  |  Branch (2972:17): [True: 2, False: 2]
  ------------------
 2973|      2|        slot->sessionLock[i] = PZ_NewLock(nssILockSession);
  ------------------
  |  |  243|      2|#define PZ_NewLock(t) PR_NewLock()
  ------------------
 2974|      2|        if (slot->sessionLock[i] == NULL)
  ------------------
  |  Branch (2974:13): [True: 0, False: 2]
  ------------------
 2975|      0|            goto mem_loser;
 2976|      2|    }
 2977|      2|    slot->objectLock = PZ_NewLock(nssILockObject);
  ------------------
  |  |  243|      2|#define PZ_NewLock(t) PR_NewLock()
  ------------------
 2978|      2|    if (slot->objectLock == NULL)
  ------------------
  |  Branch (2978:9): [True: 0, False: 2]
  ------------------
 2979|      0|        goto mem_loser;
 2980|      2|    slot->pwCheckLock = PR_NewLock();
 2981|      2|    if (slot->pwCheckLock == NULL)
  ------------------
  |  Branch (2981:9): [True: 0, False: 2]
  ------------------
 2982|      0|        goto mem_loser;
 2983|      2|    slot->head = PORT_ZNewArray(SFTKSession *, slot->sessHashSize);
  ------------------
  |  |  159|      2|    (type *)PORT_ZAlloc(sizeof(type) * (num))
  |  |  ------------------
  |  |  |  |   72|      2|#define PORT_ZAlloc PORT_ZAlloc_Util
  |  |  ------------------
  ------------------
 2984|      2|    if (slot->head == NULL)
  ------------------
  |  Branch (2984:9): [True: 0, False: 2]
  ------------------
 2985|      0|        goto mem_loser;
 2986|      2|    slot->sessObjHashTable = PORT_ZNewArray(SFTKObject *, slot->sessObjHashSize);
  ------------------
  |  |  159|      2|    (type *)PORT_ZAlloc(sizeof(type) * (num))
  |  |  ------------------
  |  |  |  |   72|      2|#define PORT_ZAlloc PORT_ZAlloc_Util
  |  |  ------------------
  ------------------
 2987|      2|    if (slot->sessObjHashTable == NULL)
  ------------------
  |  Branch (2987:9): [True: 0, False: 2]
  ------------------
 2988|      0|        goto mem_loser;
 2989|      2|    slot->tokObjHashTable = PL_NewHashTable(64, sftk_HashNumber, PL_CompareValues,
 2990|      2|                                            SECITEM_HashCompare, NULL, 0);
 2991|      2|    if (slot->tokObjHashTable == NULL)
  ------------------
  |  Branch (2991:9): [True: 0, False: 2]
  ------------------
 2992|      0|        goto mem_loser;
 2993|       |
 2994|      2|    slot->sessionIDCount = 0;
 2995|      2|    slot->sessionObjectHandleCount = NSC_MIN_SESSION_OBJECT_HANDLE;
  ------------------
  |  |   52|      2|#define NSC_MIN_SESSION_OBJECT_HANDLE 1U
  ------------------
 2996|      2|    slot->slotID = slotID;
 2997|      2|    sftk_setStringName(params->slotdes ? params->slotdes : sftk_getDefSlotName(slotID), slot->slotDescription,
  ------------------
  |  Branch (2997:24): [True: 0, False: 2]
  ------------------
 2998|      2|                       sizeof(slot->slotDescription), PR_TRUE);
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
 2999|      2|    crv = sftk_InitSession(&slot->moduleObjects, slot, slotID, NULL, NULL,
 3000|      2|                           CKF_SERIAL_SESSION);
  ------------------
  |  |  303|      2|#define CKF_SERIAL_SESSION 0x00000004UL /* no parallel */
  ------------------
 3001|      2|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3001:9): [True: 0, False: 2]
  ------------------
 3002|      0|        goto loser;
 3003|      0|    }
 3004|       |
 3005|       |    /* call the reinit code to set everything that changes between token
 3006|       |     * init calls */
 3007|      2|    crv = SFTK_SlotReInit(slot, configdir, updatedir, updateID,
 3008|      2|                          params, moduleIndex);
 3009|      2|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3009:9): [True: 0, False: 2]
  ------------------
 3010|      0|        goto loser;
 3011|      0|    }
 3012|      2|    if (sftk_isFIPS(slotID)) {
  ------------------
  |  |  506|      2|    (((id) == FIPS_SLOT_ID) || ((id) >= SFTK_MIN_FIPS_USER_SLOT_ID))
  |  |  ------------------
  |  |  |  |  500|      2|#define FIPS_SLOT_ID 3
  |  |  ------------------
  |  |                   (((id) == FIPS_SLOT_ID) || ((id) >= SFTK_MIN_FIPS_USER_SLOT_ID))
  |  |  ------------------
  |  |  |  |  567|      2|#define SFTK_MIN_FIPS_USER_SLOT_ID 101
  |  |  ------------------
  |  |  |  Branch (506:6): [True: 0, False: 2]
  |  |  |  Branch (506:32): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3013|      0|        crv = sftk_CreateValidationObjects(slot);
 3014|      0|        if (crv != CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3014:13): [True: 0, False: 0]
  ------------------
 3015|      0|            goto loser;
 3016|      0|        }
 3017|      0|    }
 3018|      2|    crv = sftk_RegisterSlot(slot, moduleIndex);
 3019|      2|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3019:9): [True: 0, False: 2]
  ------------------
 3020|      0|        goto loser;
 3021|      0|    }
 3022|      2|    return CKR_OK;
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
 3023|       |
 3024|      0|mem_loser:
 3025|      0|    crv = CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 3026|      0|loser:
 3027|      0|    SFTK_DestroySlotData(slot);
 3028|      0|    return crv;
 3029|      0|}
sftk_CloseAllSessions:
 3033|      6|{
 3034|      6|    SFTKSession *session;
 3035|      6|    unsigned int i;
 3036|      6|    SFTKDBHandle *handle;
 3037|       |
 3038|       |    /* first log out the card */
 3039|       |    /* special case - if we are in a middle of upgrade, we want to close the
 3040|       |     * sessions to fake a token removal to tell the upper level code we have
 3041|       |     * switched from one database to another, but we don't want to
 3042|       |     * explicity logout in case we can continue the upgrade with the
 3043|       |     * existing password if possible.
 3044|       |     */
 3045|      6|    if (logout) {
  ------------------
  |  Branch (3045:9): [True: 6, False: 0]
  ------------------
 3046|      6|        handle = sftk_getKeyDB(slot);
 3047|      6|        SKIP_AFTER_FORK(PZ_Lock(slot->slotLock));
  ------------------
  |  |  256|      6|#define SKIP_AFTER_FORK(x) x
  ------------------
 3048|      6|        slot->isLoggedIn = PR_FALSE;
  ------------------
  |  |  438|      6|#define PR_FALSE 0
  ------------------
 3049|      6|        if (slot->needLogin && handle) {
  ------------------
  |  Branch (3049:13): [True: 0, False: 6]
  |  Branch (3049:32): [True: 0, False: 0]
  ------------------
 3050|      0|            sftkdb_ClearPassword(handle);
 3051|      0|        }
 3052|      6|        SKIP_AFTER_FORK(PZ_Unlock(slot->slotLock));
  ------------------
  |  |  256|      6|#define SKIP_AFTER_FORK(x) x
  ------------------
 3053|      6|        if (handle) {
  ------------------
  |  Branch (3053:13): [True: 0, False: 6]
  ------------------
 3054|      0|            sftk_freeDB(handle);
 3055|      0|        }
 3056|      6|    }
 3057|       |
 3058|       |    /* now close all the current sessions */
 3059|       |    /* NOTE: If you try to open new sessions before NSC_CloseAllSessions
 3060|       |     * completes, some of those new sessions may or may not be closed by
 3061|       |     * NSC_CloseAllSessions... but any session running when this code starts
 3062|       |     * will guarrenteed be close, and no session will be partially closed */
 3063|    198|    for (i = 0; i < slot->sessHashSize; i++) {
  ------------------
  |  Branch (3063:17): [True: 192, False: 6]
  ------------------
 3064|    192|        PZLock *lock = SFTK_SESSION_LOCK(slot, i);
  ------------------
  |  |  185|    192|#define PZLock PRLock
  ------------------
                      PZLock *lock = SFTK_SESSION_LOCK(slot, i);
  ------------------
  |  |  583|    192|    ((slot)->sessionLock[(handle) & (slot)->sessionLockMask])
  ------------------
 3065|    194|        do {
 3066|    194|            SKIP_AFTER_FORK(PZ_Lock(lock));
  ------------------
  |  |  256|    194|#define SKIP_AFTER_FORK(x) x
  ------------------
 3067|    194|            session = slot->head[i];
 3068|       |            /* hand deque */
 3069|       |            /* this duplicates function of NSC_close session functions, but
 3070|       |             * because we know that we are freeing all the sessions, we can
 3071|       |             * do more efficient processing */
 3072|    194|            if (session) {
  ------------------
  |  Branch (3072:17): [True: 2, False: 192]
  ------------------
 3073|      2|                slot->head[i] = session->next;
 3074|      2|                if (session->next)
  ------------------
  |  Branch (3074:21): [True: 0, False: 2]
  ------------------
 3075|      0|                    session->next->prev = NULL;
 3076|      2|                session->next = session->prev = NULL;
 3077|      2|                SKIP_AFTER_FORK(PZ_Unlock(lock));
  ------------------
  |  |  256|      2|#define SKIP_AFTER_FORK(x) x
  ------------------
 3078|      2|                SKIP_AFTER_FORK(PZ_Lock(slot->slotLock));
  ------------------
  |  |  256|      2|#define SKIP_AFTER_FORK(x) x
  ------------------
 3079|      2|                --slot->sessionCount;
 3080|      2|                SKIP_AFTER_FORK(PZ_Unlock(slot->slotLock));
  ------------------
  |  |  256|      2|#define SKIP_AFTER_FORK(x) x
  ------------------
 3081|      2|                if (session->info.flags & CKF_RW_SESSION) {
  ------------------
  |  |  302|      2|#define CKF_RW_SESSION 0x00000002UL     /* session is r/w */
  ------------------
  |  Branch (3081:21): [True: 0, False: 2]
  ------------------
 3082|      0|                    (void)PR_ATOMIC_DECREMENT(&slot->rwSessionCount);
  ------------------
  |  |  123|      0|#define PR_ATOMIC_DECREMENT(val) __sync_sub_and_fetch(val, 1)
  ------------------
 3083|      0|                }
 3084|    192|            } else {
 3085|    192|                SKIP_AFTER_FORK(PZ_Unlock(lock));
  ------------------
  |  |  256|    192|#define SKIP_AFTER_FORK(x) x
  ------------------
 3086|    192|            }
 3087|    194|            if (session) {
  ------------------
  |  Branch (3087:17): [True: 2, False: 192]
  ------------------
 3088|      2|                sftk_DestroySession(session);
 3089|      2|            }
 3090|    194|        } while (session != NULL);
  ------------------
  |  Branch (3090:18): [True: 2, False: 192]
  ------------------
 3091|    192|    }
 3092|      6|    return CKR_OK;
  ------------------
  |  | 1388|      6|#define CKR_OK 0x00000000UL
  ------------------
 3093|      6|}
SFTK_ShutdownSlot:
 3126|      2|{
 3127|       |    /* make sure no new PK11 calls work except C_GetSlotInfo */
 3128|      2|    slot->present = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 3129|       |
 3130|       |    /* close all outstanding sessions
 3131|       |     * the sessHashSize variable guarentees we have all the session
 3132|       |     * mechanism set up */
 3133|      2|    if (slot->head) {
  ------------------
  |  Branch (3133:9): [True: 2, False: 0]
  ------------------
 3134|      2|        sftk_CloseAllSessions(slot, PR_TRUE);
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
 3135|      2|    }
 3136|       |
 3137|       |    /* clear all objects.. session objects are cleared as a result of
 3138|       |     * closing all the sessions. We just need to clear the token object
 3139|       |     * cache. slot->tokObjHashTable guarentees we have the token
 3140|       |     * infrastructure set up. */
 3141|      2|    if (slot->tokObjHashTable) {
  ------------------
  |  Branch (3141:9): [True: 2, False: 0]
  ------------------
 3142|      2|        SFTK_ClearTokenKeyHashTable(slot);
 3143|      2|    }
 3144|       |
 3145|       |    /* clear the slot description for the next guy */
 3146|      2|    PORT_Memset(slot->tokDescription, 0, sizeof(slot->tokDescription));
  ------------------
  |  |  182|      2|#define PORT_Memset memset
  ------------------
 3147|       |
 3148|       |    /* now shut down the databases. */
 3149|      2|    sftk_DBShutdown(slot);
 3150|      2|    return CKR_OK;
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
 3151|      2|}
SFTK_DestroySlotData:
 3158|      2|{
 3159|      2|    unsigned int i;
 3160|       |
 3161|      2|    SFTK_ShutdownSlot(slot);
 3162|       |
 3163|      2|    sftk_ClearSession(&slot->moduleObjects);
 3164|       |
 3165|      2|    if (slot->tokObjHashTable) {
  ------------------
  |  Branch (3165:9): [True: 2, False: 0]
  ------------------
 3166|      2|        PL_HashTableDestroy(slot->tokObjHashTable);
 3167|      2|        slot->tokObjHashTable = NULL;
 3168|      2|    }
 3169|       |
 3170|      2|    if (slot->sessObjHashTable) {
  ------------------
  |  Branch (3170:9): [True: 2, False: 0]
  ------------------
 3171|      2|        PORT_Free(slot->sessObjHashTable);
  ------------------
  |  |   60|      2|#define PORT_Free PORT_Free_Util
  ------------------
 3172|      2|        slot->sessObjHashTable = NULL;
 3173|      2|    }
 3174|      2|    slot->sessObjHashSize = 0;
 3175|       |
 3176|      2|    if (slot->head) {
  ------------------
  |  Branch (3176:9): [True: 2, False: 0]
  ------------------
 3177|      2|        PORT_Free(slot->head);
  ------------------
  |  |   60|      2|#define PORT_Free PORT_Free_Util
  ------------------
 3178|      2|        slot->head = NULL;
 3179|      2|    }
 3180|      2|    slot->sessHashSize = 0;
 3181|       |
 3182|       |    /* OK everything has been disassembled, now we can finally get rid
 3183|       |     * of the locks */
 3184|      2|    SKIP_AFTER_FORK(PZ_DestroyLock(slot->slotLock));
  ------------------
  |  |  256|      2|#define SKIP_AFTER_FORK(x) x
  ------------------
 3185|      2|    slot->slotLock = NULL;
 3186|      2|    if (slot->sessionLock) {
  ------------------
  |  Branch (3186:9): [True: 2, False: 0]
  ------------------
 3187|      4|        for (i = 0; i < slot->numSessionLocks; i++) {
  ------------------
  |  Branch (3187:21): [True: 2, False: 2]
  ------------------
 3188|      2|            if (slot->sessionLock[i]) {
  ------------------
  |  Branch (3188:17): [True: 2, False: 0]
  ------------------
 3189|      2|                SKIP_AFTER_FORK(PZ_DestroyLock(slot->sessionLock[i]));
  ------------------
  |  |  256|      2|#define SKIP_AFTER_FORK(x) x
  ------------------
 3190|      2|                slot->sessionLock[i] = NULL;
 3191|      2|            }
 3192|      2|        }
 3193|      2|        PORT_Free(slot->sessionLock);
  ------------------
  |  |   60|      2|#define PORT_Free PORT_Free_Util
  ------------------
 3194|      2|        slot->sessionLock = NULL;
 3195|      2|    }
 3196|      2|    if (slot->objectLock) {
  ------------------
  |  Branch (3196:9): [True: 2, False: 0]
  ------------------
 3197|      2|        SKIP_AFTER_FORK(PZ_DestroyLock(slot->objectLock));
  ------------------
  |  |  256|      2|#define SKIP_AFTER_FORK(x) x
  ------------------
 3198|      2|        slot->objectLock = NULL;
 3199|      2|    }
 3200|      2|    if (slot->pwCheckLock) {
  ------------------
  |  Branch (3200:9): [True: 2, False: 0]
  ------------------
 3201|      2|        SKIP_AFTER_FORK(PR_DestroyLock(slot->pwCheckLock));
  ------------------
  |  |  256|      2|#define SKIP_AFTER_FORK(x) x
  ------------------
 3202|      2|        slot->pwCheckLock = NULL;
 3203|      2|    }
 3204|      2|    PORT_Free(slot);
  ------------------
  |  |   60|      2|#define PORT_Free PORT_Free_Util
  ------------------
 3205|      2|    return CKR_OK;
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
 3206|      2|}
NSC_ModuleDBFunc:
 3213|      2|{
 3214|      2|#ifdef NSS_DISABLE_DBM
 3215|      2|    return NSSUTIL_DoModuleDBFunction(function, parameters, args);
 3216|       |#else
 3217|       |    char *secmod = NULL;
 3218|       |    char *appName = NULL;
 3219|       |    char *filename = NULL;
 3220|       |    NSSDBType dbType = NSS_DB_TYPE_NONE;
 3221|       |    PRBool rw;
 3222|       |    static char *success = "Success";
 3223|       |    char **rvstr = NULL;
 3224|       |
 3225|       |    rvstr = NSSUTIL_DoModuleDBFunction(function, parameters, args);
 3226|       |    if (rvstr != NULL) {
 3227|       |        return rvstr;
 3228|       |    }
 3229|       |
 3230|       |    if (PORT_GetError() != SEC_ERROR_LEGACY_DATABASE) {
 3231|       |        return NULL;
 3232|       |    }
 3233|       |
 3234|       |    /* The legacy database uses the old dbm, which is only linked with the
 3235|       |     * legacy DB handler, which is only callable from softoken */
 3236|       |
 3237|       |    secmod = _NSSUTIL_GetSecmodName(parameters, &dbType, &appName,
 3238|       |                                    &filename, &rw);
 3239|       |
 3240|       |    switch (function) {
 3241|       |        case SECMOD_MODULE_DB_FUNCTION_FIND:
 3242|       |            if (secmod == NULL) {
 3243|       |                PORT_SetError(SEC_ERROR_INVALID_ARGS);
 3244|       |                goto loser;
 3245|       |            }
 3246|       |            if (rw && (dbType != NSS_DB_TYPE_LEGACY) &&
 3247|       |                (dbType != NSS_DB_TYPE_MULTIACCESS)) {
 3248|       |                /* if we get here, we are trying to update the local database */
 3249|       |                /* force data from the legacy DB */
 3250|       |                char *oldSecmod = NULL;
 3251|       |                char *oldAppName = NULL;
 3252|       |                char *oldFilename = NULL;
 3253|       |                PRBool oldrw;
 3254|       |                char **strings = NULL;
 3255|       |                int i;
 3256|       |
 3257|       |                dbType = NSS_DB_TYPE_LEGACY;
 3258|       |                oldSecmod = _NSSUTIL_GetSecmodName(parameters, &dbType, &oldAppName,
 3259|       |                                                   &oldFilename, &oldrw);
 3260|       |                strings = sftkdbCall_ReadSecmodDB(appName, oldFilename, oldSecmod,
 3261|       |                                                  (char *)parameters, oldrw);
 3262|       |                if (strings) {
 3263|       |                    /* write out the strings */
 3264|       |                    for (i = 0; strings[i]; i++) {
 3265|       |                        NSSUTIL_DoModuleDBFunction(SECMOD_MODULE_DB_FUNCTION_ADD,
 3266|       |                                                   parameters, strings[i]);
 3267|       |                    }
 3268|       |                    sftkdbCall_ReleaseSecmodDBData(oldAppName, oldFilename, oldSecmod,
 3269|       |                                                   (char **)strings, oldrw);
 3270|       |                } else {
 3271|       |                    /* write out a dummy record */
 3272|       |                    NSSUTIL_DoModuleDBFunction(SECMOD_MODULE_DB_FUNCTION_ADD,
 3273|       |                                               parameters, " ");
 3274|       |                }
 3275|       |                if (oldSecmod) {
 3276|       |                    PR_smprintf_free(oldSecmod);
 3277|       |                }
 3278|       |                if (oldAppName) {
 3279|       |                    PORT_Free(oldAppName);
 3280|       |                }
 3281|       |                if (oldFilename) {
 3282|       |                    PORT_Free(oldFilename);
 3283|       |                }
 3284|       |                rvstr = NSSUTIL_DoModuleDBFunction(function, parameters, args);
 3285|       |                break;
 3286|       |            }
 3287|       |            rvstr = sftkdbCall_ReadSecmodDB(appName, filename, secmod,
 3288|       |                                            (char *)parameters, rw);
 3289|       |            break;
 3290|       |        case SECMOD_MODULE_DB_FUNCTION_ADD:
 3291|       |            if (secmod == NULL) {
 3292|       |                PORT_SetError(SEC_ERROR_INVALID_ARGS);
 3293|       |                goto loser;
 3294|       |            }
 3295|       |            rvstr = (sftkdbCall_AddSecmodDB(appName, filename, secmod,
 3296|       |                                            (char *)args, rw) == SECSuccess)
 3297|       |                        ? &success
 3298|       |                        : NULL;
 3299|       |            break;
 3300|       |        case SECMOD_MODULE_DB_FUNCTION_DEL:
 3301|       |            if (secmod == NULL) {
 3302|       |                PORT_SetError(SEC_ERROR_INVALID_ARGS);
 3303|       |                goto loser;
 3304|       |            }
 3305|       |            rvstr = (sftkdbCall_DeleteSecmodDB(appName, filename, secmod,
 3306|       |                                               (char *)args, rw) == SECSuccess)
 3307|       |                        ? &success
 3308|       |                        : NULL;
 3309|       |            break;
 3310|       |        case SECMOD_MODULE_DB_FUNCTION_RELEASE:
 3311|       |            rvstr = (sftkdbCall_ReleaseSecmodDBData(appName, filename, secmod,
 3312|       |                                                    (char **)args, rw) == SECSuccess)
 3313|       |                        ? &success
 3314|       |                        : NULL;
 3315|       |            break;
 3316|       |    }
 3317|       |
 3318|       |loser:
 3319|       |    if (secmod)
 3320|       |        PR_smprintf_free(secmod);
 3321|       |    if (appName)
 3322|       |        PORT_Free(appName);
 3323|       |    if (filename)
 3324|       |        PORT_Free(filename);
 3325|       |    return rvstr;
 3326|       |#endif /* NSS_DISABLE_DBM */
 3327|      2|}
nsc_CommonInitialize:
 3467|      1|{
 3468|      1|    CK_RV crv = CKR_OK;
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
 3469|      1|    SECStatus rv;
 3470|      1|    CK_C_INITIALIZE_ARGS *init_args = (CK_C_INITIALIZE_ARGS *)pReserved;
 3471|      1|    PRBool destroy_freelist_on_error = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
 3472|      1|    int i;
 3473|      1|    unsigned int moduleIndex = isFIPS ? NSC_FIPS_MODULE : NSC_NON_FIPS_MODULE;
  ------------------
  |  |   54|      0|#define NSC_FIPS_MODULE 1
  ------------------
                  unsigned int moduleIndex = isFIPS ? NSC_FIPS_MODULE : NSC_NON_FIPS_MODULE;
  ------------------
  |  |   55|      2|#define NSC_NON_FIPS_MODULE 0
  ------------------
  |  Branch (3473:32): [True: 0, False: 1]
  ------------------
 3474|       |
 3475|      1|    if (isFIPS) {
  ------------------
  |  Branch (3475:9): [True: 0, False: 1]
  ------------------
 3476|      0|        loginWaitTime = PR_SecondsToInterval(1);
 3477|      0|    }
 3478|       |
 3479|      1|    ENABLE_FORK_CHECK();
 3480|       |
 3481|      1|    sftk_PBELockInit();
 3482|       |
 3483|      1|    rv = SECOID_Init();
 3484|      1|    if (rv != SECSuccess) {
  ------------------
  |  Branch (3484:9): [True: 0, False: 1]
  ------------------
 3485|      0|        crv = CKR_DEVICE_ERROR;
  ------------------
  |  | 1416|      0|#define CKR_DEVICE_ERROR 0x00000030UL
  ------------------
 3486|      0|        return crv;
 3487|      0|    }
 3488|       |
 3489|      1|    rv = BL_Init(); /* initialize freebl engine */
 3490|      1|    if (rv != SECSuccess) {
  ------------------
  |  Branch (3490:9): [True: 0, False: 1]
  ------------------
 3491|      0|        crv = CKR_DEVICE_ERROR;
  ------------------
  |  | 1416|      0|#define CKR_DEVICE_ERROR 0x00000030UL
  ------------------
 3492|      0|        return crv;
 3493|      0|    }
 3494|       |
 3495|      1|    rv = RNG_RNGInit(); /* initialize random number generator */
 3496|      1|    if (rv != SECSuccess) {
  ------------------
  |  Branch (3496:9): [True: 0, False: 1]
  ------------------
 3497|      0|        crv = CKR_DEVICE_ERROR;
  ------------------
  |  | 1416|      0|#define CKR_DEVICE_ERROR 0x00000030UL
  ------------------
 3498|      0|        return crv;
 3499|      0|    }
 3500|       |
 3501|       |    /* NOTE:
 3502|       |     * we should be getting out mutexes from this list, not statically binding
 3503|       |     * them from NSPR. This should happen before we allow the internal to split
 3504|       |     * off from the rest on NSS.
 3505|       |     */
 3506|       |
 3507|       |    /* initialize the key and cert db's */
 3508|      1|    if (init_args && (!(init_args->flags & CKF_OS_LOCKING_OK))) {
  ------------------
  |  | 1627|      1|#define CKF_OS_LOCKING_OK 0x00000002UL
  ------------------
  |  Branch (3508:9): [True: 1, False: 0]
  |  Branch (3508:22): [True: 0, False: 1]
  ------------------
 3509|      0|        if (init_args->CreateMutex && init_args->DestroyMutex &&
  ------------------
  |  Branch (3509:13): [True: 0, False: 0]
  |  Branch (3509:39): [True: 0, False: 0]
  ------------------
 3510|      0|            init_args->LockMutex && init_args->UnlockMutex) {
  ------------------
  |  Branch (3510:13): [True: 0, False: 0]
  |  Branch (3510:37): [True: 0, False: 0]
  ------------------
 3511|       |            /* softoken always uses NSPR (ie. OS locking), and doesn't know how
 3512|       |             * to use the lock functions provided by the application.
 3513|       |             */
 3514|      0|            crv = CKR_CANT_LOCK;
  ------------------
  |  | 1404|      0|#define CKR_CANT_LOCK 0x0000000AUL
  ------------------
 3515|      0|            return crv;
 3516|      0|        }
 3517|      0|        if (init_args->CreateMutex || init_args->DestroyMutex ||
  ------------------
  |  Branch (3517:13): [True: 0, False: 0]
  |  Branch (3517:39): [True: 0, False: 0]
  ------------------
 3518|      0|            init_args->LockMutex || init_args->UnlockMutex) {
  ------------------
  |  Branch (3518:13): [True: 0, False: 0]
  |  Branch (3518:37): [True: 0, False: 0]
  ------------------
 3519|       |            /* only some of the lock functions were provided by the
 3520|       |             * application. This is invalid per PKCS#11 spec.
 3521|       |             */
 3522|      0|            crv = CKR_ARGUMENTS_BAD;
  ------------------
  |  | 1401|      0|#define CKR_ARGUMENTS_BAD 0x00000007UL
  ------------------
 3523|      0|            return crv;
 3524|      0|        }
 3525|      0|    }
 3526|       |
 3527|      1|    sftk_parameters paramStrings;
 3528|       |
 3529|       |    /* load and parse the library parameters */
 3530|      1|    crv = sftk_getParameters(init_args, isFIPS, &paramStrings);
 3531|      1|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3531:9): [True: 0, False: 1]
  ------------------
 3532|      0|        goto loser;
 3533|      0|    }
 3534|       |
 3535|      1|    crv = sftk_configure(paramStrings.man, paramStrings.libdes);
 3536|      1|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3536:9): [True: 0, False: 1]
  ------------------
 3537|      0|        goto loser;
 3538|      0|    }
 3539|       |
 3540|       |    /* if we have a peer already open, have him close his DB's so we
 3541|       |     * don't clobber each other. */
 3542|      1|    if ((isFIPS && nsc_init) || (!isFIPS && nsf_init)) {
  ------------------
  |  Branch (3542:10): [True: 0, False: 1]
  |  Branch (3542:20): [True: 0, False: 0]
  |  Branch (3542:34): [True: 1, False: 0]
  |  Branch (3542:45): [True: 0, False: 1]
  ------------------
 3543|      0|        sftk_closePeer(isFIPS);
 3544|      0|        if (sftk_audit_enabled) {
  ------------------
  |  Branch (3544:13): [True: 0, False: 0]
  ------------------
 3545|      0|            if (isFIPS && nsc_init) {
  ------------------
  |  Branch (3545:17): [True: 0, False: 0]
  |  Branch (3545:27): [True: 0, False: 0]
  ------------------
 3546|      0|                sftk_LogAuditMessage(NSS_AUDIT_INFO, NSS_AUDIT_FIPS_STATE,
 3547|      0|                                     "enabled FIPS mode");
 3548|      0|            } else {
 3549|      0|                sftk_LogAuditMessage(NSS_AUDIT_INFO, NSS_AUDIT_FIPS_STATE,
 3550|      0|                                     "disabled FIPS mode");
 3551|      0|            }
 3552|      0|        }
 3553|       |        /* if we have a peer open, we don't want to destroy the freelist
 3554|       |         * from under the peer if we fail, the free list will be
 3555|       |         * destroyed in that case when the C_Finalize is called for
 3556|       |         * the peer */
 3557|      0|        destroy_freelist_on_error = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 3558|      0|    }
 3559|       |    /* allow us to create objects in SFTK_SlotInit */
 3560|      1|    sftk_InitFreeLists();
 3561|       |
 3562|      3|    for (i = 0; i < paramStrings.token_count; i++) {
  ------------------
  |  Branch (3562:17): [True: 2, False: 1]
  ------------------
 3563|      2|        crv = SFTK_SlotInit(paramStrings.configdir,
 3564|      2|                            paramStrings.updatedir, paramStrings.updateID,
 3565|      2|                            &paramStrings.tokens[i], moduleIndex);
 3566|      2|        if (crv != CKR_OK) {
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3566:13): [True: 0, False: 2]
  ------------------
 3567|      0|            nscFreeAllSlots(moduleIndex);
 3568|      0|            break;
 3569|      0|        }
 3570|      2|    }
 3571|       |
 3572|      1|loser:
 3573|       |
 3574|      1|    sftk_freeParams(&paramStrings);
 3575|       |
 3576|      1|    if (destroy_freelist_on_error && (CKR_OK != crv)) {
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3576:9): [True: 1, False: 0]
  |  Branch (3576:38): [True: 0, False: 1]
  ------------------
 3577|       |        /* idempotent. If the list are already freed, this is a noop */
 3578|      0|        sftk_CleanupFreeLists();
 3579|      0|    }
 3580|       |
 3581|       |#ifndef NO_FORK_CHECK
 3582|       |    if (CKR_OK == crv) {
 3583|       |#if defined(CHECK_FORK_MIXED)
 3584|       |        /* Before Solaris 10, fork handlers are not unregistered at dlclose()
 3585|       |         * time. So, we only use pthread_atfork on Solaris 10 and later. For
 3586|       |         * earlier versions, we use PID checks.
 3587|       |         */
 3588|       |        char buf[200];
 3589|       |        int major = 0, minor = 0;
 3590|       |
 3591|       |        long rv = sysinfo(SI_RELEASE, buf, sizeof(buf));
 3592|       |        if (rv > 0 && rv < sizeof(buf)) {
 3593|       |            if (2 == sscanf(buf, "%d.%d", &major, &minor)) {
 3594|       |                /* Are we on Solaris 10 or greater ? */
 3595|       |                if (major > 5 || (5 == major && minor >= 10)) {
 3596|       |                    /* we are safe to use pthread_atfork */
 3597|       |                    usePthread_atfork = PR_TRUE;
 3598|       |                }
 3599|       |            }
 3600|       |        }
 3601|       |        if (usePthread_atfork) {
 3602|       |            pthread_atfork(NULL, NULL, ForkedChild);
 3603|       |        } else {
 3604|       |            myPid = getpid();
 3605|       |        }
 3606|       |
 3607|       |#elif defined(CHECK_FORK_PTHREAD)
 3608|       |        pthread_atfork(NULL, NULL, ForkedChild);
 3609|       |#elif defined(CHECK_FORK_GETPID)
 3610|       |        myPid = getpid();
 3611|       |#else
 3612|       |#error Incorrect fork check method.
 3613|       |#endif
 3614|       |    }
 3615|       |#endif
 3616|      1|    return crv;
 3617|      1|}
NSC_Initialize:
 3621|      1|{
 3622|      1|    CK_RV crv;
 3623|       |
 3624|      1|    sftk_ForkReset(pReserved, &crv);
 3625|       |
 3626|      1|    if (nsc_init) {
  ------------------
  |  Branch (3626:9): [True: 0, False: 1]
  ------------------
 3627|      0|        return CKR_CRYPTOKI_ALREADY_INITIALIZED;
  ------------------
  |  | 1521|      0|#define CKR_CRYPTOKI_ALREADY_INITIALIZED 0x00000191UL
  ------------------
 3628|      0|    }
 3629|      1|    crv = nsc_CommonInitialize(pReserved, PR_FALSE);
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
 3630|      1|    nsc_init = (PRBool)(crv == CKR_OK);
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
 3631|      1|    return crv;
 3632|      1|}
nsc_CommonFinalize:
 3638|      1|{
 3639|       |    /* propagate the fork status to freebl and util */
 3640|      1|    BL_SetForkState(parentForkedAfterC_Initialize);
 3641|      1|    UTIL_SetForkState(parentForkedAfterC_Initialize);
 3642|       |
 3643|      1|    nscFreeAllSlots(isFIPS ? NSC_FIPS_MODULE : NSC_NON_FIPS_MODULE);
  ------------------
  |  |   54|      0|#define NSC_FIPS_MODULE 1
  ------------------
                  nscFreeAllSlots(isFIPS ? NSC_FIPS_MODULE : NSC_NON_FIPS_MODULE);
  ------------------
  |  |   55|      2|#define NSC_NON_FIPS_MODULE 0
  ------------------
  |  Branch (3643:21): [True: 0, False: 1]
  ------------------
 3644|       |
 3645|       |    /* don't muck with the globals if our peer is still initialized */
 3646|      1|    if (isFIPS && nsc_init) {
  ------------------
  |  Branch (3646:9): [True: 0, False: 1]
  |  Branch (3646:19): [True: 0, False: 0]
  ------------------
 3647|      0|        return CKR_OK;
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
 3648|      0|    }
 3649|      1|    if (!isFIPS && nsf_init) {
  ------------------
  |  Branch (3649:9): [True: 1, False: 0]
  |  Branch (3649:20): [True: 0, False: 1]
  ------------------
 3650|      0|        return CKR_OK;
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
 3651|      0|    }
 3652|       |
 3653|      1|    sftk_CleanupFreeLists();
 3654|      1|    sftkdb_Shutdown();
 3655|       |
 3656|       |    /* This function does not discard all our previously aquired entropy. */
 3657|      1|    RNG_RNGShutdown();
 3658|       |
 3659|       |    /* tell freeBL to clean up after itself */
 3660|      1|    BL_Cleanup();
 3661|       |
 3662|       |    /* reset fork status in freebl. We must do this before BL_Unload so that
 3663|       |     * this call doesn't force freebl to be reloaded. */
 3664|      1|    BL_SetForkState(PR_FALSE);
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
 3665|       |
 3666|       |#ifndef NSS_STATIC_SOFTOKEN
 3667|       |    /* unload freeBL shared library from memory. This may only decrement the
 3668|       |     * OS refcount if it's been loaded multiple times, eg. by libssl */
 3669|       |    BL_Unload();
 3670|       |#endif
 3671|       |
 3672|       |    /* clean up the default OID table */
 3673|      1|    SECOID_Shutdown();
 3674|       |
 3675|      1|    sftk_PBELockShutdown();
 3676|       |
 3677|       |    /* reset fork status in util */
 3678|      1|    UTIL_SetForkState(PR_FALSE);
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
 3679|       |
 3680|      1|    nsc_init = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
 3681|       |
 3682|       |#ifndef NO_FORK_CHECK
 3683|       |#ifdef CHECK_FORK_MIXED
 3684|       |    if (!usePthread_atfork) {
 3685|       |        myPid = 0; /* allow CHECK_FORK in the next softoken initialization to
 3686|       |                    * succeed */
 3687|       |    } else {
 3688|       |        forked = PR_FALSE; /* allow reinitialization */
 3689|       |    }
 3690|       |#elif defined(CHECK_FORK_GETPID)
 3691|       |    myPid = 0; /* allow reinitialization */
 3692|       |#elif defined(CHECK_FORK_PTHREAD)
 3693|       |    forked = PR_FALSE; /* allow reinitialization */
 3694|       |#endif
 3695|       |#endif
 3696|      1|    return CKR_OK;
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
 3697|      1|}
sftk_ForkReset:
 3703|      2|{
 3704|       |#ifndef NO_FORK_CHECK
 3705|       |    if (PARENT_FORKED()) {
 3706|       |        parentForkedAfterC_Initialize = PR_TRUE;
 3707|       |        if (nsc_init) {
 3708|       |            /* finalize non-FIPS token */
 3709|       |            *crv = nsc_CommonFinalize(pReserved, PR_FALSE);
 3710|       |            PORT_Assert(CKR_OK == *crv);
 3711|       |            nsc_init = (PRBool) !(*crv == CKR_OK);
 3712|       |        }
 3713|       |        if (nsf_init) {
 3714|       |            /* finalize FIPS token */
 3715|       |            *crv = nsc_CommonFinalize(pReserved, PR_TRUE);
 3716|       |            PORT_Assert(CKR_OK == *crv);
 3717|       |            nsf_init = (PRBool) !(*crv == CKR_OK);
 3718|       |        }
 3719|       |        parentForkedAfterC_Initialize = PR_FALSE;
 3720|       |        return PR_TRUE;
 3721|       |    }
 3722|       |#endif
 3723|      2|    return PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 3724|      2|}
NSC_Finalize:
 3730|      1|{
 3731|      1|    CK_RV crv;
 3732|       |
 3733|       |    /* reset entire PKCS#11 module upon fork */
 3734|      1|    if (sftk_ForkReset(pReserved, &crv)) {
  ------------------
  |  Branch (3734:9): [True: 0, False: 1]
  ------------------
 3735|      0|        return crv;
 3736|      0|    }
 3737|       |
 3738|      1|    if (!nsc_init) {
  ------------------
  |  Branch (3738:9): [True: 0, False: 1]
  ------------------
 3739|      0|        return CKR_OK;
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
 3740|      0|    }
 3741|       |
 3742|      1|    crv = nsc_CommonFinalize(pReserved, PR_FALSE);
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
 3743|       |
 3744|      1|    nsc_init = (PRBool) !(crv == CKR_OK);
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
 3745|       |
 3746|      1|    return crv;
 3747|      1|}
NSC_GetInfo:
 3754|      1|{
 3755|      1|#define NSS_VERSION_VARIABLE __nss_softokn_version
 3756|      1|#include "verref.h"
  ------------------
  |  |    1|       |/* This Source Code Form is subject to the terms of the Mozilla Public
  |  |    2|       | * License, v. 2.0. If a copy of the MPL was not distributed with this
  |  |    3|       | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  |  |    4|       |
  |  |    5|       |/* This header is used inline in a function to ensure that a version string
  |  |    6|       | * symbol is linked in and not optimized out. A volatile reference is added to
  |  |    7|       | * the variable identified by NSS_VERSION_VARIABLE.
  |  |    8|       | *
  |  |    9|       | * Use this as follows:
  |  |   10|       | *
  |  |   11|       | * #define NSS_VERSION_VARIABLE __nss_ssl_version
  |  |   12|       | * #include "verref.h"
  |  |   13|       | */
  |  |   14|       |
  |  |   15|       |/* Suppress unused variable warnings. */
  |  |   16|       |#ifdef _MSC_VER
  |  |   17|       |#pragma warning(push)
  |  |   18|       |#pragma warning(disable : 4101)
  |  |   19|       |#endif
  |  |   20|       |/* This works for both gcc and clang */
  |  |   21|      1|#if defined(__GNUC__) && !defined(NSS_NO_GCC48)
  |  |   22|      1|#pragma GCC diagnostic push
  |  |   23|      1|#pragma GCC diagnostic ignored "-Wunused-variable"
  |  |   24|      1|#endif
  |  |   25|       |
  |  |   26|       |#ifndef NSS_VERSION_VARIABLE
  |  |   27|       |#error NSS_VERSION_VARIABLE must be set before including "verref.h"
  |  |   28|       |#endif
  |  |   29|      1|{
  |  |   30|      1|    extern const char NSS_VERSION_VARIABLE[];
  |  |   31|      1|#if defined(__GNUC__) || defined(__clang__)
  |  |   32|      1|    __attribute__((unused))
  |  |   33|      1|#endif
  |  |   34|      1|    volatile const char _nss_version_c = NSS_VERSION_VARIABLE[0];
  |  |  ------------------
  |  |  |  | 3755|      1|#define NSS_VERSION_VARIABLE __nss_softokn_version
  |  |  ------------------
  |  |   35|      1|}
  |  |   36|      1|#undef NSS_VERSION_VARIABLE
  |  |   37|       |
  |  |   38|       |#ifdef _MSC_VER
  |  |   39|       |#pragma warning(pop)
  |  |   40|       |#endif
  |  |   41|      1|#if defined(__GNUC__) && !defined(NSS_NO_GCC48)
  |  |   42|      1|#pragma GCC diagnostic pop
  |  |   43|      1|#endif
  ------------------
 3757|       |
 3758|      1|    CHECK_FORK();
 3759|       |
 3760|      1|    pInfo->cryptokiVersion.major = CRYPTOKI_VERSION_MAJOR;
  ------------------
  |  |   37|      1|#define CRYPTOKI_VERSION_MAJOR 3
  ------------------
 3761|      1|    pInfo->cryptokiVersion.minor = CRYPTOKI_VERSION_MINOR;
  ------------------
  |  |   38|      1|#define CRYPTOKI_VERSION_MINOR 1
  ------------------
 3762|      1|    PORT_Memcpy(pInfo->manufacturerID, manufacturerID, 32);
  ------------------
  |  |  180|      1|#define PORT_Memcpy memcpy
  ------------------
 3763|      1|    pInfo->libraryVersion.major = SOFTOKEN_VMAJOR;
  ------------------
  |  |   21|      1|#define SOFTOKEN_VMAJOR 3
  ------------------
 3764|      1|    pInfo->libraryVersion.minor = SOFTOKEN_VMINOR;
  ------------------
  |  |   22|      1|#define SOFTOKEN_VMINOR 111
  ------------------
 3765|      1|    PORT_Memcpy(pInfo->libraryDescription, libraryDescription, 32);
  ------------------
  |  |  180|      1|#define PORT_Memcpy memcpy
  ------------------
 3766|      1|    pInfo->flags = 0;
 3767|      1|    return CKR_OK;
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
 3768|      1|}
nsc_CommonGetSlotList:
 3791|      2|{
 3792|      2|    *pulCount = nscSlotCount[moduleIndex];
 3793|      2|    if (pSlotList != NULL) {
  ------------------
  |  Branch (3793:9): [True: 1, False: 1]
  ------------------
 3794|      1|        PORT_Memcpy(pSlotList, nscSlotList[moduleIndex],
  ------------------
  |  |  180|      1|#define PORT_Memcpy memcpy
  ------------------
 3795|      1|                    nscSlotCount[moduleIndex] * sizeof(CK_SLOT_ID));
 3796|      1|    }
 3797|      2|    return CKR_OK;
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
 3798|      2|}
NSC_GetSlotList:
 3804|      2|{
 3805|      2|    CHECK_FORK();
 3806|      2|    return nsc_CommonGetSlotList(tokenPresent, pSlotList, pulCount,
 3807|      2|                                 NSC_NON_FIPS_MODULE);
  ------------------
  |  |   55|      2|#define NSC_NON_FIPS_MODULE 0
  ------------------
 3808|      2|}
NSC_GetSlotInfo:
 3813|      2|{
 3814|      2|    SFTKSlot *slot = sftk_SlotFromID(slotID, PR_TRUE);
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
 3815|       |
 3816|      2|    CHECK_FORK();
 3817|       |
 3818|      2|    if (slot == NULL)
  ------------------
  |  Branch (3818:9): [True: 0, False: 2]
  ------------------
 3819|      0|        return CKR_SLOT_ID_INVALID;
  ------------------
  |  | 1391|      0|#define CKR_SLOT_ID_INVALID 0x00000003UL
  ------------------
 3820|       |
 3821|      2|    PORT_Memcpy(pInfo->manufacturerID, manufacturerID,
  ------------------
  |  |  180|      2|#define PORT_Memcpy memcpy
  ------------------
 3822|      2|                sizeof(pInfo->manufacturerID));
 3823|      2|    PORT_Memcpy(pInfo->slotDescription, slot->slotDescription,
  ------------------
  |  |  180|      2|#define PORT_Memcpy memcpy
  ------------------
 3824|      2|                sizeof(pInfo->slotDescription));
 3825|      2|    pInfo->flags = (slot->present) ? CKF_TOKEN_PRESENT : 0;
  ------------------
  |  |  131|      2|#define CKF_TOKEN_PRESENT 0x00000001UL    /* a token is there */
  ------------------
  |  Branch (3825:20): [True: 2, False: 0]
  ------------------
 3826|       |
 3827|       |    /* all user defined slots are defined as removable */
 3828|      2|    if (slotID >= SFTK_MIN_USER_SLOT_ID) {
  ------------------
  |  |  565|      2|#define SFTK_MIN_USER_SLOT_ID 4
  ------------------
  |  Branch (3828:9): [True: 0, False: 2]
  ------------------
 3829|      0|        pInfo->flags |= CKF_REMOVABLE_DEVICE;
  ------------------
  |  |  132|      0|#define CKF_REMOVABLE_DEVICE 0x00000002UL /* removable devices*/
  ------------------
 3830|      2|    } else {
 3831|       |        /* In the case where we are doing a merge update, we need
 3832|       |         * the DB slot to be removable so the token name can change
 3833|       |         * appropriately. */
 3834|      2|        SFTKDBHandle *handle = sftk_getKeyDB(slot);
 3835|      2|        if (handle) {
  ------------------
  |  Branch (3835:13): [True: 0, False: 2]
  ------------------
 3836|      0|            if (sftkdb_InUpdateMerge(handle)) {
  ------------------
  |  Branch (3836:17): [True: 0, False: 0]
  ------------------
 3837|      0|                pInfo->flags |= CKF_REMOVABLE_DEVICE;
  ------------------
  |  |  132|      0|#define CKF_REMOVABLE_DEVICE 0x00000002UL /* removable devices*/
  ------------------
 3838|      0|            }
 3839|      0|            sftk_freeDB(handle);
 3840|      0|        }
 3841|      2|    }
 3842|       |
 3843|       |    /* If there is no key database, this is for example the case when NSS was
 3844|       |     * initialized with NSS_NoDbInit(), then there won't be any point in
 3845|       |     * requesting a PIN. Set the CKF_USER_PIN_INITIALIZED bit so that
 3846|       |     * PK11_NeedUserInit() doesn't indicate that a PIN is needed.
 3847|       |     */
 3848|      2|    if (slot->keyDB == NULL) {
  ------------------
  |  Branch (3848:9): [True: 2, False: 0]
  ------------------
 3849|      2|        pInfo->flags |= CKF_USER_PIN_INITIALIZED;
  ------------------
  |  |  178|      2|#define CKF_USER_PIN_INITIALIZED 0x00000008UL /* normal user's \
  ------------------
 3850|      2|    }
 3851|       |
 3852|       |    /* ok we really should read it out of the keydb file. */
 3853|       |    /* pInfo->hardwareVersion.major = NSSLOWKEY_DB_FILE_VERSION; */
 3854|      2|    pInfo->hardwareVersion.major = SOFTOKEN_VMAJOR;
  ------------------
  |  |   21|      2|#define SOFTOKEN_VMAJOR 3
  ------------------
 3855|      2|    pInfo->hardwareVersion.minor = SOFTOKEN_VMINOR;
  ------------------
  |  |   22|      2|#define SOFTOKEN_VMINOR 111
  ------------------
 3856|      2|    pInfo->firmwareVersion.major = SOFTOKEN_VPATCH;
  ------------------
  |  |   23|      2|#define SOFTOKEN_VPATCH 0
  ------------------
 3857|      2|    pInfo->firmwareVersion.minor = SOFTOKEN_VBUILD;
  ------------------
  |  |   24|      2|#define SOFTOKEN_VBUILD 0
  ------------------
 3858|      2|    return CKR_OK;
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
 3859|      2|}
NSC_GetTokenInfo:
 3898|      2|{
 3899|      2|    SFTKSlot *slot;
 3900|      2|    SFTKDBHandle *handle;
 3901|       |
 3902|      2|    CHECK_FORK();
 3903|       |
 3904|      2|    if (!nsc_init && !nsf_init)
  ------------------
  |  Branch (3904:9): [True: 0, False: 2]
  |  Branch (3904:22): [True: 0, False: 0]
  ------------------
 3905|      0|        return CKR_CRYPTOKI_NOT_INITIALIZED;
  ------------------
  |  | 1520|      0|#define CKR_CRYPTOKI_NOT_INITIALIZED 0x00000190UL
  ------------------
 3906|      2|    slot = sftk_SlotFromID(slotID, PR_FALSE);
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 3907|      2|    if (slot == NULL)
  ------------------
  |  Branch (3907:9): [True: 0, False: 2]
  ------------------
 3908|      0|        return CKR_SLOT_ID_INVALID;
  ------------------
  |  | 1391|      0|#define CKR_SLOT_ID_INVALID 0x00000003UL
  ------------------
 3909|       |
 3910|      2|    PORT_Memcpy(pInfo->manufacturerID, manufacturerID, 32);
  ------------------
  |  |  180|      2|#define PORT_Memcpy memcpy
  ------------------
 3911|      2|    PORT_Memcpy(pInfo->model, "NSS 3           ", 16);
  ------------------
  |  |  180|      2|#define PORT_Memcpy memcpy
  ------------------
 3912|      2|    PORT_Memcpy(pInfo->serialNumber, "0000000000000000", 16);
  ------------------
  |  |  180|      2|#define PORT_Memcpy memcpy
  ------------------
 3913|      2|    PORT_Memcpy(pInfo->utcTime, "0000000000000000", 16);
  ------------------
  |  |  180|      2|#define PORT_Memcpy memcpy
  ------------------
 3914|      2|    pInfo->ulMaxSessionCount = 0;   /* arbitrarily large */
 3915|      2|    pInfo->ulMaxRwSessionCount = 0; /* arbitarily large */
 3916|      2|    PZ_Lock(slot->slotLock);        /* Protect sessionCount / rwSessioncount */
  ------------------
  |  |  245|      2|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 3917|      2|    pInfo->ulSessionCount = slot->sessionCount;
 3918|      2|    pInfo->ulRwSessionCount = slot->rwSessionCount;
 3919|      2|    PZ_Unlock(slot->slotLock); /* Unlock before sftk_getKeyDB */
  ------------------
  |  |  246|      2|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 3920|      2|    pInfo->firmwareVersion.major = 0;
 3921|      2|    pInfo->firmwareVersion.minor = 0;
 3922|      2|    PORT_Memcpy(pInfo->label, slot->tokDescription, sizeof(pInfo->label));
  ------------------
  |  |  180|      2|#define PORT_Memcpy memcpy
  ------------------
 3923|      2|    handle = sftk_getKeyDB(slot);
 3924|      2|    pInfo->flags = CKF_RNG | CKF_DUAL_CRYPTO_OPERATIONS;
  ------------------
  |  |  171|      2|#define CKF_RNG 0x00000001UL                  /* has random # \
  ------------------
                  pInfo->flags = CKF_RNG | CKF_DUAL_CRYPTO_OPERATIONS;
  ------------------
  |  |  202|      2|#define CKF_DUAL_CRYPTO_OPERATIONS 0x00000200UL
  ------------------
 3925|      2|    if (handle == NULL) {
  ------------------
  |  Branch (3925:9): [True: 2, False: 0]
  ------------------
 3926|      2|        pInfo->flags |= CKF_WRITE_PROTECTED;
  ------------------
  |  |  173|      2|#define CKF_WRITE_PROTECTED 0x00000002UL      /* token is \
  ------------------
 3927|      2|        pInfo->ulMaxPinLen = 0;
 3928|      2|        pInfo->ulMinPinLen = 0;
 3929|      2|        pInfo->ulTotalPublicMemory = 0;
 3930|      2|        pInfo->ulFreePublicMemory = 0;
 3931|      2|        pInfo->ulTotalPrivateMemory = 0;
 3932|      2|        pInfo->ulFreePrivateMemory = 0;
 3933|      2|        pInfo->hardwareVersion.major = 4;
 3934|      2|        pInfo->hardwareVersion.minor = 0;
 3935|      2|    } else {
 3936|       |        /*
 3937|       |         * we have three possible states which we may be in:
 3938|       |         *   (1) No DB password has been initialized. This also means we
 3939|       |         *   have no keys in the key db.
 3940|       |         *   (2) Password initialized to NULL. This means we have keys, but
 3941|       |         *   the user has chosen not use a password.
 3942|       |         *   (3) Finally we have an initialized password whicn is not NULL, and
 3943|       |         *   we will need to prompt for it.
 3944|       |         */
 3945|      0|        if (sftkdb_HasPasswordSet(handle) == SECFailure) {
  ------------------
  |  Branch (3945:13): [True: 0, False: 0]
  ------------------
 3946|      0|            pInfo->flags |= CKF_LOGIN_REQUIRED;
  ------------------
  |  |  176|      0|#define CKF_LOGIN_REQUIRED 0x00000004UL       /* user must \
  ------------------
 3947|      0|        } else if (!sftk_checkNeedLogin(slot, handle)) {
  ------------------
  |  Branch (3947:20): [True: 0, False: 0]
  ------------------
 3948|      0|            pInfo->flags |= CKF_USER_PIN_INITIALIZED;
  ------------------
  |  |  178|      0|#define CKF_USER_PIN_INITIALIZED 0x00000008UL /* normal user's \
  ------------------
 3949|      0|        } else {
 3950|      0|            pInfo->flags |= CKF_LOGIN_REQUIRED | CKF_USER_PIN_INITIALIZED;
  ------------------
  |  |  176|      0|#define CKF_LOGIN_REQUIRED 0x00000004UL       /* user must \
  ------------------
                          pInfo->flags |= CKF_LOGIN_REQUIRED | CKF_USER_PIN_INITIALIZED;
  ------------------
  |  |  178|      0|#define CKF_USER_PIN_INITIALIZED 0x00000008UL /* normal user's \
  ------------------
 3951|       |            /*
 3952|       |             * if we are doing a merge style update, and we need to get the password
 3953|       |             * of our source database (the database we are updating from), make sure we
 3954|       |             * return a token name that will match the database we are prompting for.
 3955|       |             */
 3956|      0|            if (sftkdb_NeedUpdateDBPassword(handle)) {
  ------------------
  |  Branch (3956:17): [True: 0, False: 0]
  ------------------
 3957|       |                /* if we have an update tok description, use it. otherwise
 3958|       |                 * use the updateID for this database */
 3959|      0|                if (!sftk_isBlank(slot->updateTokDescription,
  ------------------
  |  Branch (3959:21): [True: 0, False: 0]
  ------------------
 3960|      0|                                  sizeof(pInfo->label))) {
 3961|      0|                    PORT_Memcpy(pInfo->label, slot->updateTokDescription,
  ------------------
  |  |  180|      0|#define PORT_Memcpy memcpy
  ------------------
 3962|      0|                                sizeof(pInfo->label));
 3963|      0|                } else {
 3964|       |                    /* build from updateID */
 3965|      0|                    const char *updateID = sftkdb_GetUpdateID(handle);
 3966|      0|                    if (updateID) {
  ------------------
  |  Branch (3966:25): [True: 0, False: 0]
  ------------------
 3967|      0|                        sftk_setStringName(updateID, (char *)pInfo->label,
 3968|      0|                                           sizeof(pInfo->label), PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 3969|      0|                    }
 3970|      0|                }
 3971|      0|            }
 3972|      0|        }
 3973|      0|        pInfo->ulMaxPinLen = SFTK_MAX_PIN;
  ------------------
  |  |  493|      0|#define SFTK_MAX_PIN 500
  ------------------
 3974|      0|        pInfo->ulMinPinLen = (CK_ULONG)slot->minimumPinLen;
 3975|      0|        pInfo->ulTotalPublicMemory = 1;
 3976|      0|        pInfo->ulFreePublicMemory = 1;
 3977|      0|        pInfo->ulTotalPrivateMemory = 1;
 3978|      0|        pInfo->ulFreePrivateMemory = 1;
 3979|       |#ifdef SHDB_FIXME
 3980|       |        pInfo->hardwareVersion.major = CERT_DB_FILE_VERSION;
 3981|       |        pInfo->hardwareVersion.minor = handle->version;
 3982|       |#else
 3983|      0|        pInfo->hardwareVersion.major = 0;
 3984|      0|        pInfo->hardwareVersion.minor = 0;
 3985|      0|#endif
 3986|      0|        sftk_freeDB(handle);
 3987|      0|    }
 3988|       |    /*
 3989|       |     * CKF_LOGIN_REQUIRED CKF_USER_PIN_INITIALIZED  how CKF_TOKEN_INITIALIZED
 3990|       |     *                                              should be set
 3991|       |     *         0                   0                           1
 3992|       |     *         1                   0                           0
 3993|       |     *         0                   1                           1
 3994|       |     *         1                   1                           1
 3995|       |     */
 3996|      2|    if (!(pInfo->flags & CKF_LOGIN_REQUIRED) ||
  ------------------
  |  |  176|      2|#define CKF_LOGIN_REQUIRED 0x00000004UL       /* user must \
  ------------------
  |  Branch (3996:9): [True: 2, False: 0]
  ------------------
 3997|      2|        (pInfo->flags & CKF_USER_PIN_INITIALIZED)) {
  ------------------
  |  |  178|      0|#define CKF_USER_PIN_INITIALIZED 0x00000008UL /* normal user's \
  ------------------
  |  Branch (3997:9): [True: 0, False: 0]
  ------------------
 3998|      2|        pInfo->flags |= CKF_TOKEN_INITIALIZED;
  ------------------
  |  |  209|      2|#define CKF_TOKEN_INITIALIZED 0x00000400UL
  ------------------
 3999|      2|    }
 4000|      2|    return CKR_OK;
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
 4001|      2|}
NSC_GetMechanismList:
 4008|      4|{
 4009|      4|    CK_ULONG i;
 4010|       |
 4011|      4|    CHECK_FORK();
 4012|       |
 4013|      4|    switch (slotID) {
 4014|       |        /* default: */
 4015|      2|        case NETSCAPE_SLOT_ID:
  ------------------
  |  |  498|      2|#define NETSCAPE_SLOT_ID 1
  ------------------
  |  Branch (4015:9): [True: 2, False: 2]
  ------------------
 4016|      2|            *pulCount = mechanismCount;
 4017|      2|            if (pMechanismList != NULL) {
  ------------------
  |  Branch (4017:17): [True: 1, False: 1]
  ------------------
 4018|    231|                for (i = 0; i < mechanismCount; i++) {
  ------------------
  |  Branch (4018:29): [True: 230, False: 1]
  ------------------
 4019|    230|                    pMechanismList[i] = mechanisms[i].type;
 4020|    230|                }
 4021|      1|            }
 4022|      2|            break;
 4023|      2|        default:
  ------------------
  |  Branch (4023:9): [True: 2, False: 2]
  ------------------
 4024|      2|            *pulCount = 0;
 4025|    462|            for (i = 0; i < mechanismCount; i++) {
  ------------------
  |  Branch (4025:25): [True: 460, False: 2]
  ------------------
 4026|    460|                if (mechanisms[i].privkey) {
  ------------------
  |  Branch (4026:21): [True: 354, False: 106]
  ------------------
 4027|    354|                    (*pulCount)++;
 4028|    354|                    if (pMechanismList != NULL) {
  ------------------
  |  Branch (4028:25): [True: 177, False: 177]
  ------------------
 4029|    177|                        *pMechanismList++ = mechanisms[i].type;
 4030|    177|                    }
 4031|    354|                }
 4032|    460|            }
 4033|      2|            break;
 4034|      4|    }
 4035|      4|    return CKR_OK;
  ------------------
  |  | 1388|      4|#define CKR_OK 0x00000000UL
  ------------------
 4036|      4|}
NSC_GetMechanismInfo:
 4043|  4.44k|{
 4044|  4.44k|    PRBool isPrivateKey;
 4045|  4.44k|    CK_ULONG i;
 4046|       |
 4047|  4.44k|    CHECK_FORK();
 4048|       |
 4049|  4.44k|    switch (slotID) {
 4050|     37|        case NETSCAPE_SLOT_ID:
  ------------------
  |  |  498|     37|#define NETSCAPE_SLOT_ID 1
  ------------------
  |  Branch (4050:9): [True: 37, False: 4.40k]
  ------------------
 4051|     37|            isPrivateKey = PR_FALSE;
  ------------------
  |  |  438|     37|#define PR_FALSE 0
  ------------------
 4052|     37|            break;
 4053|  4.40k|        default:
  ------------------
  |  Branch (4053:9): [True: 4.40k, False: 37]
  ------------------
 4054|  4.40k|            isPrivateKey = PR_TRUE;
  ------------------
  |  |  437|  4.40k|#define PR_TRUE 1
  ------------------
 4055|  4.40k|            break;
 4056|  4.44k|    }
 4057|  69.9k|    for (i = 0; i < mechanismCount; i++) {
  ------------------
  |  Branch (4057:17): [True: 69.9k, False: 0]
  ------------------
 4058|  69.9k|        if (type == mechanisms[i].type) {
  ------------------
  |  Branch (4058:13): [True: 4.44k, False: 65.5k]
  ------------------
 4059|  4.44k|            if (isPrivateKey && !mechanisms[i].privkey) {
  ------------------
  |  Branch (4059:17): [True: 4.40k, False: 37]
  |  Branch (4059:33): [True: 0, False: 4.40k]
  ------------------
 4060|      0|                return CKR_MECHANISM_INVALID;
  ------------------
  |  | 1447|      0|#define CKR_MECHANISM_INVALID 0x00000070UL
  ------------------
 4061|      0|            }
 4062|  4.44k|            PORT_Memcpy(pInfo, &mechanisms[i].info, sizeof(CK_MECHANISM_INFO));
  ------------------
  |  |  180|  4.44k|#define PORT_Memcpy memcpy
  ------------------
 4063|  4.44k|            return CKR_OK;
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
 4064|  4.44k|        }
 4065|  69.9k|    }
 4066|      0|    return CKR_MECHANISM_INVALID;
  ------------------
  |  | 1447|      0|#define CKR_MECHANISM_INVALID 0x00000070UL
  ------------------
 4067|  4.44k|}
NSC_OpenSession:
 4381|  9.99k|{
 4382|  9.99k|    SFTKSlot *slot;
 4383|  9.99k|    CK_SESSION_HANDLE sessionID;
 4384|  9.99k|    SFTKSession *session;
 4385|  9.99k|    SFTKSession *sameID;
 4386|       |
 4387|  9.99k|    CHECK_FORK();
 4388|       |
 4389|  9.99k|    slot = sftk_SlotFromID(slotID, PR_FALSE);
  ------------------
  |  |  438|  9.99k|#define PR_FALSE 0
  ------------------
 4390|  9.99k|    if (slot == NULL)
  ------------------
  |  Branch (4390:9): [True: 0, False: 9.99k]
  ------------------
 4391|      0|        return CKR_SLOT_ID_INVALID;
  ------------------
  |  | 1391|      0|#define CKR_SLOT_ID_INVALID 0x00000003UL
  ------------------
 4392|       |
 4393|       |    /* new session (we only have serial sessions) */
 4394|  9.99k|    session = sftk_NewSession(slotID, Notify, pApplication,
 4395|  9.99k|                              flags | CKF_SERIAL_SESSION);
  ------------------
  |  |  303|  9.99k|#define CKF_SERIAL_SESSION 0x00000004UL /* no parallel */
  ------------------
 4396|  9.99k|    if (session == NULL)
  ------------------
  |  Branch (4396:9): [True: 0, False: 9.99k]
  ------------------
 4397|      0|        return CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 4398|       |
 4399|  9.99k|    if (slot->readOnly && (flags & CKF_RW_SESSION)) {
  ------------------
  |  |  302|  4.32k|#define CKF_RW_SESSION 0x00000002UL     /* session is r/w */
  ------------------
  |  Branch (4399:9): [True: 4.32k, False: 5.67k]
  |  Branch (4399:27): [True: 0, False: 4.32k]
  ------------------
 4400|       |        /* NETSCAPE_SLOT_ID is Read ONLY */
 4401|      0|        session->info.flags &= ~CKF_RW_SESSION;
  ------------------
  |  |  302|      0|#define CKF_RW_SESSION 0x00000002UL     /* session is r/w */
  ------------------
 4402|      0|    }
 4403|  9.99k|    PZ_Lock(slot->slotLock);
  ------------------
  |  |  245|  9.99k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 4404|  9.99k|    ++slot->sessionCount;
 4405|  9.99k|    PZ_Unlock(slot->slotLock);
  ------------------
  |  |  246|  9.99k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 4406|  9.99k|    if (session->info.flags & CKF_RW_SESSION) {
  ------------------
  |  |  302|  9.99k|#define CKF_RW_SESSION 0x00000002UL     /* session is r/w */
  ------------------
  |  Branch (4406:9): [True: 0, False: 9.99k]
  ------------------
 4407|      0|        (void)PR_ATOMIC_INCREMENT(&slot->rwSessionCount);
  ------------------
  |  |  122|      0|#define PR_ATOMIC_INCREMENT(val) __sync_add_and_fetch(val, 1)
  ------------------
 4408|      0|    }
 4409|       |
 4410|  9.99k|    do {
 4411|  9.99k|        PZLock *lock;
  ------------------
  |  |  185|  9.99k|#define PZLock PRLock
  ------------------
 4412|  9.99k|        do {
 4413|  9.99k|            sessionID = (PR_ATOMIC_INCREMENT(&slot->sessionIDCount) & 0xffffff) | (slot->index << 24);
  ------------------
  |  |  122|  9.99k|#define PR_ATOMIC_INCREMENT(val) __sync_add_and_fetch(val, 1)
  ------------------
 4414|  9.99k|        } while (sessionID == CK_INVALID_HANDLE);
  ------------------
  |  |   78|  9.99k|#define CK_INVALID_HANDLE 0
  ------------------
  |  Branch (4414:18): [True: 0, False: 9.99k]
  ------------------
 4415|  9.99k|        lock = SFTK_SESSION_LOCK(slot, sessionID);
  ------------------
  |  |  583|  9.99k|    ((slot)->sessionLock[(handle) & (slot)->sessionLockMask])
  ------------------
 4416|  9.99k|        PZ_Lock(lock);
  ------------------
  |  |  245|  9.99k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 4417|  9.99k|        sftkqueue_find(sameID, sessionID, slot->head, slot->sessHashSize);
  ------------------
  |  |  524|  10.3k|    for ((element) = (head)[sftk_hash(id, hash_size)]; (element) != NULL; \
  |  |  ------------------
  |  |  |  |  513|  9.99k|    ((PRUint32)((value)*SHMULTIPLIER) & (size - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  509|  9.99k|#define SHMULTIPLIER 1791398085
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (524:56): [True: 311, False: 9.99k]
  |  |  ------------------
  |  |  525|  9.99k|         (element) = (element)->next) {                                   \
  |  |  526|    311|        if ((element)->handle == (id)) {                                  \
  |  |  ------------------
  |  |  |  Branch (526:13): [True: 0, False: 311]
  |  |  ------------------
  |  |  527|      0|            break;                                                        \
  |  |  528|      0|        }                                                                 \
  |  |  529|    311|    }
  ------------------
 4418|  9.99k|        if (sameID == NULL) {
  ------------------
  |  Branch (4418:13): [True: 9.99k, False: 0]
  ------------------
 4419|  9.99k|            session->handle = sessionID;
 4420|  9.99k|            sftk_update_state(slot, session);
 4421|  9.99k|            sftkqueue_add(session, sessionID, slot->head, slot->sessHashSize);
  ------------------
  |  |  515|  9.99k|    {                                               \
  |  |  516|  9.99k|        int tmp = sftk_hash(id, hash_size);         \
  |  |  ------------------
  |  |  |  |  513|  9.99k|    ((PRUint32)((value)*SHMULTIPLIER) & (size - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  509|  9.99k|#define SHMULTIPLIER 1791398085
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  517|  9.99k|        (element)->next = (head)[tmp];              \
  |  |  518|  9.99k|        (element)->prev = NULL;                     \
  |  |  519|  9.99k|        if ((head)[tmp])                            \
  |  |  ------------------
  |  |  |  Branch (519:13): [True: 311, False: 9.68k]
  |  |  ------------------
  |  |  520|  9.99k|            (head)[tmp]->prev = (element);          \
  |  |  521|  9.99k|        (head)[tmp] = (element);                    \
  |  |  522|  9.99k|    }
  ------------------
 4422|  9.99k|        } else {
 4423|      0|            slot->sessionIDConflict++; /* for debugging */
 4424|      0|        }
 4425|  9.99k|        PZ_Unlock(lock);
  ------------------
  |  |  246|  9.99k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 4426|  9.99k|    } while (sameID != NULL);
  ------------------
  |  Branch (4426:14): [True: 0, False: 9.99k]
  ------------------
 4427|       |
 4428|  9.99k|    *phSession = sessionID;
 4429|  9.99k|    return CKR_OK;
  ------------------
  |  | 1388|  9.99k|#define CKR_OK 0x00000000UL
  ------------------
 4430|  9.99k|}
NSC_CloseSession:
 4435|  9.99k|{
 4436|  9.99k|    SFTKSlot *slot;
 4437|  9.99k|    SFTKSession *session;
 4438|  9.99k|    PRBool sessionFound;
 4439|  9.99k|    PZLock *lock;
  ------------------
  |  |  185|  9.99k|#define PZLock PRLock
  ------------------
 4440|       |
 4441|  9.99k|    CHECK_FORK();
 4442|       |
 4443|  9.99k|    session = sftk_SessionFromHandle(hSession);
 4444|  9.99k|    if (session == NULL)
  ------------------
  |  Branch (4444:9): [True: 0, False: 9.99k]
  ------------------
 4445|      0|        return CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
 4446|  9.99k|    slot = sftk_SlotFromSession(session);
  ------------------
  |  |  503|  9.99k|#define sftk_SlotFromSession(sp) ((sp)->slot)
  ------------------
 4447|  9.99k|    sessionFound = PR_FALSE;
  ------------------
  |  |  438|  9.99k|#define PR_FALSE 0
  ------------------
 4448|       |
 4449|       |    /* lock */
 4450|  9.99k|    lock = SFTK_SESSION_LOCK(slot, hSession);
  ------------------
  |  |  583|  9.99k|    ((slot)->sessionLock[(handle) & (slot)->sessionLockMask])
  ------------------
 4451|  9.99k|    PZ_Lock(lock);
  ------------------
  |  |  245|  9.99k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 4452|  9.99k|    if (sftkqueue_is_queued(session, hSession, slot->head, slot->sessHashSize)) {
  ------------------
  |  |  531|  9.99k|    (((element)->next) || ((element)->prev) ||            \
  |  |  ------------------
  |  |  |  Branch (531:6): [True: 311, False: 9.68k]
  |  |  |  Branch (531:27): [True: 0, False: 9.68k]
  |  |  ------------------
  |  |  532|  9.99k|     ((head)[sftk_hash(id, hash_size)] == (element)))
  |  |  ------------------
  |  |  |  |  513|  9.68k|    ((PRUint32)((value)*SHMULTIPLIER) & (size - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  509|  9.68k|#define SHMULTIPLIER 1791398085
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (532:6): [True: 9.68k, False: 0]
  |  |  ------------------
  ------------------
 4453|  9.99k|        sessionFound = PR_TRUE;
  ------------------
  |  |  437|  9.99k|#define PR_TRUE 1
  ------------------
 4454|  9.99k|        sftkqueue_delete(session, hSession, slot->head, slot->sessHashSize);
  ------------------
  |  |  534|  9.99k|    if ((element)->next)                                      \
  |  |  ------------------
  |  |  |  Branch (534:9): [True: 311, False: 9.68k]
  |  |  ------------------
  |  |  535|  9.99k|        (element)->next->prev = (element)->prev;              \
  |  |  536|  9.99k|    if ((element)->prev)                                      \
  |  |  ------------------
  |  |  |  Branch (536:9): [True: 0, False: 9.99k]
  |  |  ------------------
  |  |  537|  9.99k|        (element)->prev->next = (element)->next;              \
  |  |  538|  9.99k|    else                                                      \
  |  |  539|  9.99k|        (head)[sftk_hash(id, hash_size)] = ((element)->next); \
  |  |  ------------------
  |  |  |  |  513|  9.99k|    ((PRUint32)((value)*SHMULTIPLIER) & (size - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  509|  9.99k|#define SHMULTIPLIER 1791398085
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  540|  9.99k|    (element)->next = NULL;                                   \
  |  |  541|  9.99k|    (element)->prev = NULL;
  ------------------
 4455|  9.99k|    }
 4456|  9.99k|    PZ_Unlock(lock);
  ------------------
  |  |  246|  9.99k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 4457|       |
 4458|  9.99k|    if (sessionFound) {
  ------------------
  |  Branch (4458:9): [True: 9.99k, False: 0]
  ------------------
 4459|  9.99k|        SFTKDBHandle *handle;
 4460|  9.99k|        handle = sftk_getKeyDB(slot);
 4461|  9.99k|        PZ_Lock(slot->slotLock);
  ------------------
  |  |  245|  9.99k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 4462|  9.99k|        if (--slot->sessionCount == 0) {
  ------------------
  |  Branch (4462:13): [True: 0, False: 9.99k]
  ------------------
 4463|      0|            slot->isLoggedIn = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 4464|      0|            if (slot->needLogin && handle) {
  ------------------
  |  Branch (4464:17): [True: 0, False: 0]
  |  Branch (4464:36): [True: 0, False: 0]
  ------------------
 4465|      0|                sftkdb_ClearPassword(handle);
 4466|      0|            }
 4467|      0|        }
 4468|  9.99k|        PZ_Unlock(slot->slotLock);
  ------------------
  |  |  246|  9.99k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 4469|  9.99k|        if (handle) {
  ------------------
  |  Branch (4469:13): [True: 0, False: 9.99k]
  ------------------
 4470|      0|            sftk_freeDB(handle);
 4471|      0|        }
 4472|  9.99k|        if (session->info.flags & CKF_RW_SESSION) {
  ------------------
  |  |  302|  9.99k|#define CKF_RW_SESSION 0x00000002UL     /* session is r/w */
  ------------------
  |  Branch (4472:13): [True: 0, False: 9.99k]
  ------------------
 4473|      0|            (void)PR_ATOMIC_DECREMENT(&slot->rwSessionCount);
  ------------------
  |  |  123|      0|#define PR_ATOMIC_DECREMENT(val) __sync_sub_and_fetch(val, 1)
  ------------------
 4474|      0|        }
 4475|  9.99k|        sftk_DestroySession(session);
 4476|  9.99k|        session = NULL;
 4477|  9.99k|    }
 4478|       |
 4479|  9.99k|    return CKR_OK;
  ------------------
  |  | 1388|  9.99k|#define CKR_OK 0x00000000UL
  ------------------
 4480|  9.99k|}
NSC_CloseAllSessions:
 4485|      4|{
 4486|      4|    SFTKSlot *slot;
 4487|       |
 4488|       |#ifndef NO_FORK_CHECK
 4489|       |    /* skip fork check if we are being called from C_Initialize or C_Finalize */
 4490|       |    if (!parentForkedAfterC_Initialize) {
 4491|       |        CHECK_FORK();
 4492|       |    }
 4493|       |#endif
 4494|       |
 4495|      4|    slot = sftk_SlotFromID(slotID, PR_FALSE);
  ------------------
  |  |  438|      4|#define PR_FALSE 0
  ------------------
 4496|      4|    if (slot == NULL)
  ------------------
  |  Branch (4496:9): [True: 0, False: 4]
  ------------------
 4497|      0|        return CKR_SLOT_ID_INVALID;
  ------------------
  |  | 1391|      0|#define CKR_SLOT_ID_INVALID 0x00000003UL
  ------------------
 4498|       |
 4499|      4|    return sftk_CloseAllSessions(slot, PR_TRUE);
  ------------------
  |  |  437|      4|#define PR_TRUE 1
  ------------------
 4500|      4|}
NSC_CreateObject:
 4815|  4.44k|{
 4816|  4.44k|    SFTKSlot *slot = sftk_SlotFromSessionHandle(hSession);
 4817|  4.44k|    SFTKSession *session;
 4818|  4.44k|    SFTKObject *object;
 4819|       |    /* make sure class isn't randomly CKO_NSS_NEWSLOT or
 4820|       |     * CKO_NETSCPE_DELSLOT. */
 4821|  4.44k|    CK_OBJECT_CLASS class = CKO_VENDOR_DEFINED;
  ------------------
  |  |  335|  4.44k|#define CKO_VENDOR_DEFINED 0x80000000UL
  ------------------
 4822|  4.44k|    CK_RV crv;
 4823|  4.44k|    int i;
 4824|       |
 4825|  4.44k|    CHECK_FORK();
 4826|       |
 4827|  4.44k|    *phObject = CK_INVALID_HANDLE;
  ------------------
  |  |   78|  4.44k|#define CK_INVALID_HANDLE 0
  ------------------
 4828|       |
 4829|  4.44k|    if (slot == NULL) {
  ------------------
  |  Branch (4829:9): [True: 0, False: 4.44k]
  ------------------
 4830|      0|        return CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
 4831|      0|    }
 4832|       |    /*
 4833|       |     * now lets create an object to hang the attributes off of
 4834|       |     */
 4835|  4.44k|    object = sftk_NewObject(slot); /* fill in the handle later */
 4836|  4.44k|    if (object == NULL) {
  ------------------
  |  Branch (4836:9): [True: 0, False: 4.44k]
  ------------------
 4837|      0|        return CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 4838|      0|    }
 4839|       |
 4840|       |    /*
 4841|       |     * sftk_NewObject will set object->isFIPS to PR_TRUE if the slot is FIPS.
 4842|       |     * We don't need to worry about that here, as FC_CreateObject will always
 4843|       |     * disallow the import of secret and private keys, regardless of isFIPS
 4844|       |     * approval status. Therefore, at this point we know that the key is a
 4845|       |     * public key, which is acceptable to be imported in plaintext.
 4846|       |     */
 4847|       |
 4848|       |    /*
 4849|       |     * load the template values into the object
 4850|       |     */
 4851|  39.6k|    for (i = 0; i < (int)ulCount; i++) {
  ------------------
  |  Branch (4851:17): [True: 35.2k, False: 4.44k]
  ------------------
 4852|  35.2k|        crv = sftk_AddAttributeType(object, sftk_attr_expand(&pTemplate[i]));
  ------------------
  |  |  587|  35.2k|#define sftk_attr_expand(ap) (ap)->type, (ap)->pValue, (ap)->ulValueLen
  ------------------
 4853|  35.2k|        if (crv != CKR_OK) {
  ------------------
  |  | 1388|  35.2k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (4853:13): [True: 0, False: 35.2k]
  ------------------
 4854|      0|            sftk_FreeObject(object);
 4855|      0|            return crv;
 4856|      0|        }
 4857|  35.2k|        if ((pTemplate[i].type == CKA_CLASS) && pTemplate[i].pValue) {
  ------------------
  |  |  511|  35.2k|#define CKA_CLASS 0x00000000UL
  ------------------
  |  Branch (4857:13): [True: 4.44k, False: 30.7k]
  |  Branch (4857:49): [True: 4.44k, False: 0]
  ------------------
 4858|  4.44k|            class = *(CK_OBJECT_CLASS *)pTemplate[i].pValue;
 4859|  4.44k|        }
 4860|  35.2k|    }
 4861|       |
 4862|       |    /* get the session */
 4863|  4.44k|    session = sftk_SessionFromHandle(hSession);
 4864|  4.44k|    if (session == NULL) {
  ------------------
  |  Branch (4864:9): [True: 0, False: 4.44k]
  ------------------
 4865|      0|        sftk_FreeObject(object);
 4866|      0|        return CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
 4867|      0|    }
 4868|       |
 4869|       |    /*
 4870|       |     * handle pseudo objects (CKO_NEWSLOT)
 4871|       |     */
 4872|  4.44k|    if ((class == CKO_NSS_NEWSLOT) || (class == CKO_NSS_DELSLOT)) {
  ------------------
  |  |   39|  4.44k|#define CKO_NSS_NEWSLOT (CKO_NSS + 5)
  |  |  ------------------
  |  |  |  |   33|  4.44k|#define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  335|  4.44k|#define CKO_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  4.44k|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  if ((class == CKO_NSS_NEWSLOT) || (class == CKO_NSS_DELSLOT)) {
  ------------------
  |  |   40|  4.44k|#define CKO_NSS_DELSLOT (CKO_NSS + 6)
  |  |  ------------------
  |  |  |  |   33|  4.44k|#define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  335|  4.44k|#define CKO_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  4.44k|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (4872:9): [True: 0, False: 4.44k]
  |  Branch (4872:39): [True: 0, False: 4.44k]
  ------------------
 4873|      0|        crv = sftk_CreateNewSlot(slot, class, object);
 4874|      0|        goto done;
 4875|      0|    }
 4876|       |
 4877|       |    /*
 4878|       |     * handle the base object stuff
 4879|       |     */
 4880|  4.44k|    crv = sftk_handleObject(object, session);
 4881|  4.44k|    *phObject = object->handle;
 4882|  4.44k|done:
 4883|  4.44k|    sftk_FreeSession(session);
 4884|  4.44k|    sftk_FreeObject(object);
 4885|       |
 4886|  4.44k|    return crv;
 4887|  4.44k|}
NSC_GetAttributeValue:
 5033|  4.32k|{
 5034|  4.32k|    SFTKSlot *slot = sftk_SlotFromSessionHandle(hSession);
 5035|  4.32k|    SFTKSession *session;
 5036|  4.32k|    SFTKObject *object;
 5037|  4.32k|    SFTKAttribute *attribute;
 5038|  4.32k|    PRBool sensitive, isLoggedIn, needLogin;
 5039|  4.32k|    CK_RV crv;
 5040|  4.32k|    int i;
 5041|       |
 5042|  4.32k|    CHECK_FORK();
 5043|       |
 5044|  4.32k|    if (slot == NULL) {
  ------------------
  |  Branch (5044:9): [True: 0, False: 4.32k]
  ------------------
 5045|      0|        return CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
 5046|      0|    }
 5047|       |    /*
 5048|       |     * make sure we're allowed
 5049|       |     */
 5050|  4.32k|    session = sftk_SessionFromHandle(hSession);
 5051|  4.32k|    if (session == NULL) {
  ------------------
  |  Branch (5051:9): [True: 0, False: 4.32k]
  ------------------
 5052|      0|        return CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
 5053|      0|    }
 5054|       |
 5055|       |    /* short circuit everything for token objects */
 5056|  4.32k|    if (sftk_isToken(hObject)) {
  ------------------
  |  |  504|  4.32k|#define sftk_isToken(id) (((id)&SFTK_TOKEN_MASK) == SFTK_TOKEN_MAGIC)
  |  |  ------------------
  |  |  |  |  478|  4.32k|#define SFTK_TOKEN_MASK 0x80000000L
  |  |  ------------------
  |  |               #define sftk_isToken(id) (((id)&SFTK_TOKEN_MASK) == SFTK_TOKEN_MAGIC)
  |  |  ------------------
  |  |  |  |  479|  4.32k|#define SFTK_TOKEN_MAGIC 0x80000000L
  |  |  ------------------
  |  |  |  Branch (504:26): [True: 0, False: 4.32k]
  |  |  ------------------
  ------------------
 5057|      0|        crv = nsc_GetTokenAttributeValue(session, hObject, pTemplate, ulCount);
 5058|      0|        sftk_FreeSession(session);
 5059|      0|        return crv;
 5060|      0|    }
 5061|       |
 5062|       |    /* handle the session object */
 5063|  4.32k|    object = sftk_ObjectFromHandle(hObject, session);
 5064|  4.32k|    sftk_FreeSession(session);
 5065|  4.32k|    if (object == NULL) {
  ------------------
  |  Branch (5065:9): [True: 0, False: 4.32k]
  ------------------
 5066|      0|        return CKR_OBJECT_HANDLE_INVALID;
  ------------------
  |  | 1452|      0|#define CKR_OBJECT_HANDLE_INVALID 0x00000082UL
  ------------------
 5067|      0|    }
 5068|       |
 5069|  4.32k|    PZ_Lock(slot->slotLock);
  ------------------
  |  |  245|  4.32k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 5070|  4.32k|    isLoggedIn = slot->isLoggedIn;
 5071|  4.32k|    needLogin = slot->needLogin;
 5072|  4.32k|    PZ_Unlock(slot->slotLock);
  ------------------
  |  |  246|  4.32k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 5073|       |
 5074|       |    /* don't read a private object if we aren't logged in */
 5075|  4.32k|    if (!isLoggedIn && needLogin && sftk_isTrue(object, CKA_PRIVATE)) {
  ------------------
  |  |  513|      0|#define CKA_PRIVATE 0x00000002UL
  ------------------
  |  Branch (5075:9): [True: 4.32k, False: 0]
  |  Branch (5075:24): [True: 0, False: 4.32k]
  |  Branch (5075:37): [True: 0, False: 0]
  ------------------
 5076|      0|        sftk_FreeObject(object);
 5077|      0|        return CKR_USER_NOT_LOGGED_IN;
  ------------------
  |  | 1486|      0|#define CKR_USER_NOT_LOGGED_IN 0x00000101UL
  ------------------
 5078|      0|    }
 5079|       |
 5080|  4.32k|    crv = CKR_OK;
  ------------------
  |  | 1388|  4.32k|#define CKR_OK 0x00000000UL
  ------------------
 5081|  4.32k|    sensitive = sftk_isTrue(object, CKA_SENSITIVE);
  ------------------
  |  |  546|  4.32k|#define CKA_SENSITIVE 0x00000103UL
  ------------------
 5082|  8.64k|    for (i = 0; i < (int)ulCount; i++) {
  ------------------
  |  Branch (5082:17): [True: 4.32k, False: 4.32k]
  ------------------
 5083|       |        /* Make sure that this attribute is retrievable */
 5084|  4.32k|        if (sensitive && sftk_isSensitive(pTemplate[i].type, object->objclass)) {
  ------------------
  |  Branch (5084:13): [True: 0, False: 4.32k]
  |  Branch (5084:26): [True: 0, False: 0]
  ------------------
 5085|      0|            crv = CKR_ATTRIBUTE_SENSITIVE;
  ------------------
  |  | 1407|      0|#define CKR_ATTRIBUTE_SENSITIVE 0x00000011UL
  ------------------
 5086|      0|            pTemplate[i].ulValueLen = -1;
 5087|      0|            continue;
 5088|      0|        }
 5089|  4.32k|        attribute = sftk_FindAttribute(object, pTemplate[i].type);
 5090|  4.32k|        if (attribute == NULL) {
  ------------------
  |  Branch (5090:13): [True: 0, False: 4.32k]
  ------------------
 5091|      0|            crv = CKR_ATTRIBUTE_TYPE_INVALID;
  ------------------
  |  | 1408|      0|#define CKR_ATTRIBUTE_TYPE_INVALID 0x00000012UL
  ------------------
 5092|      0|            pTemplate[i].ulValueLen = -1;
 5093|      0|            continue;
 5094|      0|        }
 5095|  4.32k|        if (pTemplate[i].pValue != NULL) {
  ------------------
  |  Branch (5095:13): [True: 4.32k, False: 0]
  ------------------
 5096|  4.32k|            PORT_Memcpy(pTemplate[i].pValue, attribute->attrib.pValue,
  ------------------
  |  |  180|  4.32k|#define PORT_Memcpy memcpy
  ------------------
 5097|  4.32k|                        attribute->attrib.ulValueLen);
 5098|  4.32k|        }
 5099|  4.32k|        pTemplate[i].ulValueLen = attribute->attrib.ulValueLen;
 5100|  4.32k|        sftk_FreeAttribute(attribute);
 5101|  4.32k|    }
 5102|       |
 5103|  4.32k|    sftk_FreeObject(object);
 5104|  4.32k|    return crv;
 5105|  4.32k|}
sftk_emailhack:
 5250|  59.6k|{
 5251|  59.6k|    PRBool isCert = PR_FALSE;
  ------------------
  |  |  438|  59.6k|#define PR_FALSE 0
  ------------------
 5252|  59.6k|    int emailIndex = -1;
 5253|  59.6k|    unsigned int i;
 5254|  59.6k|    SFTKSearchResults smime_search;
 5255|  59.6k|    CK_ATTRIBUTE smime_template[2];
 5256|  59.6k|    CK_OBJECT_CLASS smime_class = CKO_NSS_SMIME;
  ------------------
  |  |   36|  59.6k|#define CKO_NSS_SMIME (CKO_NSS + 2)
  |  |  ------------------
  |  |  |  |   33|  59.6k|#define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  335|  59.6k|#define CKO_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKO_NSS (CKO_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  59.6k|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5257|  59.6k|    SFTKAttribute *attribute = NULL;
 5258|  59.6k|    SFTKObject *object = NULL;
 5259|  59.6k|    CK_RV crv = CKR_OK;
  ------------------
  |  | 1388|  59.6k|#define CKR_OK 0x00000000UL
  ------------------
 5260|       |
 5261|  59.6k|    smime_search.handles = NULL; /* paranoia, some one is bound to add a goto
 5262|       |                                  * loser before this gets initialized */
 5263|       |
 5264|       |    /* see if we are looking for email certs */
 5265|   158k|    for (i = 0; i < ulCount; i++) {
  ------------------
  |  Branch (5265:17): [True: 144k, False: 13.8k]
  ------------------
 5266|   144k|        if (pTemplate[i].type == CKA_CLASS) {
  ------------------
  |  |  511|   144k|#define CKA_CLASS 0x00000000UL
  ------------------
  |  Branch (5266:13): [True: 59.6k, False: 85.0k]
  ------------------
 5267|  59.6k|            if ((pTemplate[i].ulValueLen != sizeof(CK_OBJECT_CLASS) ||
  ------------------
  |  Branch (5267:18): [True: 0, False: 59.6k]
  ------------------
 5268|  59.6k|                 (*(CK_OBJECT_CLASS *)pTemplate[i].pValue) != CKO_CERTIFICATE)) {
  ------------------
  |  |  326|  59.6k|#define CKO_CERTIFICATE 0x00000001UL
  ------------------
  |  Branch (5268:18): [True: 45.7k, False: 13.8k]
  ------------------
 5269|       |                /* not a cert, skip out */
 5270|  45.7k|                break;
 5271|  45.7k|            }
 5272|  13.8k|            isCert = PR_TRUE;
  ------------------
  |  |  437|  13.8k|#define PR_TRUE 1
  ------------------
 5273|  85.0k|        } else if (pTemplate[i].type == CKA_NSS_EMAIL) {
  ------------------
  |  |   80|  85.0k|#define CKA_NSS_EMAIL (CKA_NSS + 2)
  |  |  ------------------
  |  |  |  |   77|  85.0k|#define CKA_NSS (CKA_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  692|  85.0k|#define CKA_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKA_NSS (CKA_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  85.0k|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5273:20): [True: 0, False: 85.0k]
  ------------------
 5274|      0|            emailIndex = i;
 5275|      0|        }
 5276|  98.9k|        if (isCert && (emailIndex != -1))
  ------------------
  |  Branch (5276:13): [True: 39.3k, False: 59.5k]
  |  Branch (5276:23): [True: 0, False: 39.3k]
  ------------------
 5277|      0|            break;
 5278|  98.9k|    }
 5279|       |
 5280|  59.6k|    if (!isCert || (emailIndex == -1)) {
  ------------------
  |  Branch (5280:9): [True: 45.7k, False: 13.8k]
  |  Branch (5280:20): [True: 13.8k, False: 0]
  ------------------
 5281|  59.6k|        return CKR_OK;
  ------------------
  |  | 1388|  59.6k|#define CKR_OK 0x00000000UL
  ------------------
 5282|  59.6k|    }
 5283|       |
 5284|       |    /* we are doing a cert and email search, find the SMimeEntry */
 5285|      0|    smime_template[0].type = CKA_CLASS;
  ------------------
  |  |  511|      0|#define CKA_CLASS 0x00000000UL
  ------------------
 5286|      0|    smime_template[0].pValue = &smime_class;
 5287|      0|    smime_template[0].ulValueLen = sizeof(smime_class);
 5288|      0|    smime_template[1] = pTemplate[emailIndex];
 5289|       |
 5290|      0|    smime_search.handles = (CK_OBJECT_HANDLE *)
 5291|      0|        PORT_Alloc(sizeof(CK_OBJECT_HANDLE) * NSC_SEARCH_BLOCK_SIZE);
  ------------------
  |  |   52|      0|#define PORT_Alloc PORT_Alloc_Util
  ------------------
                      PORT_Alloc(sizeof(CK_OBJECT_HANDLE) * NSC_SEARCH_BLOCK_SIZE);
  ------------------
  |  |   49|      0|#define NSC_SEARCH_BLOCK_SIZE 5
  ------------------
 5292|      0|    if (smime_search.handles == NULL) {
  ------------------
  |  Branch (5292:9): [True: 0, False: 0]
  ------------------
 5293|      0|        crv = CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 5294|      0|        goto loser;
 5295|      0|    }
 5296|      0|    smime_search.index = 0;
 5297|      0|    smime_search.size = 0;
 5298|      0|    smime_search.array_size = NSC_SEARCH_BLOCK_SIZE;
  ------------------
  |  |   49|      0|#define NSC_SEARCH_BLOCK_SIZE 5
  ------------------
 5299|       |
 5300|      0|    crv = sftk_searchDatabase(handle, &smime_search, smime_template, 2);
 5301|      0|    if (crv != CKR_OK || smime_search.size == 0) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (5301:9): [True: 0, False: 0]
  |  Branch (5301:26): [True: 0, False: 0]
  ------------------
 5302|      0|        goto loser;
 5303|      0|    }
 5304|       |
 5305|       |    /* get the SMime subject */
 5306|      0|    object = sftk_NewTokenObject(slot, NULL, smime_search.handles[0]);
 5307|      0|    if (object == NULL) {
  ------------------
  |  Branch (5307:9): [True: 0, False: 0]
  ------------------
 5308|      0|        crv = CKR_HOST_MEMORY; /* is there any other reason for this failure? */
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 5309|      0|        goto loser;
 5310|      0|    }
 5311|      0|    attribute = sftk_FindAttribute(object, CKA_SUBJECT);
  ------------------
  |  |  544|      0|#define CKA_SUBJECT 0x00000101UL
  ------------------
 5312|      0|    if (attribute == NULL) {
  ------------------
  |  Branch (5312:9): [True: 0, False: 0]
  ------------------
 5313|      0|        crv = CKR_ATTRIBUTE_TYPE_INVALID;
  ------------------
  |  | 1408|      0|#define CKR_ATTRIBUTE_TYPE_INVALID 0x00000012UL
  ------------------
 5314|      0|        goto loser;
 5315|      0|    }
 5316|       |
 5317|       |    /* now find the certs with that subject */
 5318|      0|    pTemplate[emailIndex] = attribute->attrib;
 5319|       |    /* now add the appropriate certs to the search list */
 5320|      0|    crv = sftk_searchDatabase(handle, search, pTemplate, ulCount);
 5321|      0|    pTemplate[emailIndex] = smime_template[1]; /* restore the user's template*/
 5322|       |
 5323|      0|loser:
 5324|      0|    if (attribute) {
  ------------------
  |  Branch (5324:9): [True: 0, False: 0]
  ------------------
 5325|      0|        sftk_FreeAttribute(attribute);
 5326|      0|    }
 5327|      0|    if (object) {
  ------------------
  |  Branch (5327:9): [True: 0, False: 0]
  ------------------
 5328|      0|        sftk_FreeObject(object);
 5329|      0|    }
 5330|      0|    if (smime_search.handles) {
  ------------------
  |  Branch (5330:9): [True: 0, False: 0]
  ------------------
 5331|      0|        PORT_Free(smime_search.handles);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 5332|      0|    }
 5333|       |
 5334|      0|    return crv;
 5335|      0|}
NSC_FindObjectsInit:
 5392|  59.6k|{
 5393|  59.6k|    SFTKSearchResults *search = NULL, *freeSearch = NULL;
 5394|  59.6k|    SFTKSession *session = NULL;
 5395|  59.6k|    SFTKSlot *slot = sftk_SlotFromSessionHandle(hSession);
 5396|  59.6k|    CK_RV crv = CKR_OK;
  ------------------
  |  | 1388|  59.6k|#define CKR_OK 0x00000000UL
  ------------------
 5397|  59.6k|    PRBool isLoggedIn;
 5398|       |
 5399|  59.6k|    CHECK_FORK();
 5400|       |
 5401|  59.6k|    if (slot == NULL) {
  ------------------
  |  Branch (5401:9): [True: 0, False: 59.6k]
  ------------------
 5402|      0|        return CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
 5403|      0|    }
 5404|  59.6k|    session = sftk_SessionFromHandle(hSession);
 5405|  59.6k|    if (session == NULL) {
  ------------------
  |  Branch (5405:9): [True: 0, False: 59.6k]
  ------------------
 5406|      0|        crv = CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
 5407|      0|        goto loser;
 5408|      0|    }
 5409|       |
 5410|  59.6k|    search = (SFTKSearchResults *)PORT_Alloc(sizeof(SFTKSearchResults));
  ------------------
  |  |   52|  59.6k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
 5411|  59.6k|    if (search == NULL) {
  ------------------
  |  Branch (5411:9): [True: 0, False: 59.6k]
  ------------------
 5412|      0|        crv = CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 5413|      0|        goto loser;
 5414|      0|    }
 5415|  59.6k|    search->handles = (CK_OBJECT_HANDLE *)
 5416|  59.6k|        PORT_Alloc(sizeof(CK_OBJECT_HANDLE) * NSC_SEARCH_BLOCK_SIZE);
  ------------------
  |  |   52|  59.6k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
                      PORT_Alloc(sizeof(CK_OBJECT_HANDLE) * NSC_SEARCH_BLOCK_SIZE);
  ------------------
  |  |   49|  59.6k|#define NSC_SEARCH_BLOCK_SIZE 5
  ------------------
 5417|  59.6k|    if (search->handles == NULL) {
  ------------------
  |  Branch (5417:9): [True: 0, False: 59.6k]
  ------------------
 5418|      0|        crv = CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 5419|      0|        goto loser;
 5420|      0|    }
 5421|  59.6k|    search->index = 0;
 5422|  59.6k|    search->size = 0;
 5423|  59.6k|    search->array_size = NSC_SEARCH_BLOCK_SIZE;
  ------------------
  |  |   49|  59.6k|#define NSC_SEARCH_BLOCK_SIZE 5
  ------------------
 5424|       |
 5425|  59.6k|    PZ_Lock(slot->slotLock);
  ------------------
  |  |  245|  59.6k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 5426|  59.6k|    isLoggedIn = (PRBool)((!slot->needLogin) || slot->isLoggedIn);
  ------------------
  |  Branch (5426:27): [True: 59.6k, False: 0]
  |  Branch (5426:49): [True: 0, False: 0]
  ------------------
 5427|  59.6k|    PZ_Unlock(slot->slotLock);
  ------------------
  |  |  246|  59.6k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 5428|       |
 5429|  59.6k|    PRBool validTokenAttribute = PR_FALSE;
  ------------------
  |  |  438|  59.6k|#define PR_FALSE 0
  ------------------
 5430|  59.6k|    PRBool tokenAttributeValue = PR_FALSE;
  ------------------
  |  |  438|  59.6k|#define PR_FALSE 0
  ------------------
 5431|  59.6k|    for (CK_ULONG i = 0; i < ulCount; i++) {
  ------------------
  |  Branch (5431:26): [True: 59.6k, False: 20]
  ------------------
 5432|  59.6k|        CK_ATTRIBUTE_PTR attr = &pTemplate[i];
 5433|  59.6k|        if (attr->type == CKA_TOKEN && attr->pValue && attr->ulValueLen == sizeof(CK_BBOOL)) {
  ------------------
  |  |  512|   119k|#define CKA_TOKEN 0x00000001UL
  ------------------
  |  Branch (5433:13): [True: 59.5k, False: 38]
  |  Branch (5433:40): [True: 59.5k, False: 0]
  |  Branch (5433:56): [True: 59.5k, False: 0]
  ------------------
 5434|  59.5k|            if (*(CK_BBOOL *)attr->pValue == CK_TRUE) {
  ------------------
  |  |   22|  59.5k|#define CK_TRUE 1
  ------------------
  |  Branch (5434:17): [True: 59.5k, False: 0]
  ------------------
 5435|  59.5k|                validTokenAttribute = PR_TRUE;
  ------------------
  |  |  437|  59.5k|#define PR_TRUE 1
  ------------------
 5436|  59.5k|                tokenAttributeValue = PR_TRUE;
  ------------------
  |  |  437|  59.5k|#define PR_TRUE 1
  ------------------
 5437|  59.5k|            } else if (*(CK_BBOOL *)attr->pValue == CK_FALSE) {
  ------------------
  |  |   23|      0|#define CK_FALSE 0
  ------------------
  |  Branch (5437:24): [True: 0, False: 0]
  ------------------
 5438|      0|                validTokenAttribute = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 5439|      0|                tokenAttributeValue = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 5440|      0|            }
 5441|  59.5k|            break;
 5442|  59.5k|        }
 5443|  59.6k|    }
 5444|       |
 5445|       |    // Search over the token object list if the template's CKA_TOKEN attribute is set to
 5446|       |    // CK_TRUE or if it is not set.
 5447|  59.6k|    if (validTokenAttribute == PR_FALSE || tokenAttributeValue == PR_TRUE) {
  ------------------
  |  |  438|   119k|#define PR_FALSE 0
  ------------------
                  if (validTokenAttribute == PR_FALSE || tokenAttributeValue == PR_TRUE) {
  ------------------
  |  |  437|  59.5k|#define PR_TRUE 1
  ------------------
  |  Branch (5447:9): [True: 20, False: 59.5k]
  |  Branch (5447:44): [True: 59.5k, False: 0]
  ------------------
 5448|  59.6k|        crv = sftk_searchTokenList(slot, search, pTemplate, ulCount, isLoggedIn);
 5449|  59.6k|        if (crv != CKR_OK) {
  ------------------
  |  | 1388|  59.6k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (5449:13): [True: 0, False: 59.6k]
  ------------------
 5450|      0|            goto loser;
 5451|      0|        }
 5452|  59.6k|    }
 5453|       |
 5454|       |    // Search over the session object list if the template's CKA_TOKEN attribute is set to
 5455|       |    // CK_FALSE or if it is not set.
 5456|  59.6k|    if (validTokenAttribute == PR_FALSE || tokenAttributeValue == PR_FALSE) {
  ------------------
  |  |  438|   119k|#define PR_FALSE 0
  ------------------
                  if (validTokenAttribute == PR_FALSE || tokenAttributeValue == PR_FALSE) {
  ------------------
  |  |  438|  59.5k|#define PR_FALSE 0
  ------------------
  |  Branch (5456:9): [True: 20, False: 59.5k]
  |  Branch (5456:44): [True: 0, False: 59.5k]
  ------------------
 5457|     20|        crv = sftk_searchObjectList(search, slot->sessObjHashTable,
 5458|     20|                                    slot->sessObjHashSize, slot->objectLock,
 5459|     20|                                    pTemplate, ulCount, isLoggedIn);
 5460|     20|        if (crv != CKR_OK) {
  ------------------
  |  | 1388|     20|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (5460:13): [True: 0, False: 20]
  ------------------
 5461|      0|            goto loser;
 5462|      0|        }
 5463|     20|    }
 5464|       |
 5465|  59.6k|    if ((freeSearch = session->search) != NULL) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 59.6k]
  ------------------
 5466|      0|        session->search = NULL;
 5467|      0|        sftk_FreeSearch(freeSearch);
 5468|      0|    }
 5469|  59.6k|    session->search = search;
 5470|  59.6k|    sftk_FreeSession(session);
 5471|  59.6k|    return CKR_OK;
  ------------------
  |  | 1388|  59.6k|#define CKR_OK 0x00000000UL
  ------------------
 5472|       |
 5473|      0|loser:
 5474|      0|    if (search) {
  ------------------
  |  Branch (5474:9): [True: 0, False: 0]
  ------------------
 5475|      0|        sftk_FreeSearch(search);
 5476|      0|    }
 5477|      0|    if (session) {
  ------------------
  |  Branch (5477:9): [True: 0, False: 0]
  ------------------
 5478|      0|        sftk_FreeSession(session);
 5479|      0|    }
 5480|      0|    return crv;
 5481|  59.6k|}
NSC_FindObjects:
 5489|  59.6k|{
 5490|  59.6k|    SFTKSession *session;
 5491|  59.6k|    SFTKSearchResults *search;
 5492|  59.6k|    int transfer;
 5493|  59.6k|    int left;
 5494|       |
 5495|  59.6k|    CHECK_FORK();
 5496|       |
 5497|  59.6k|    *pulObjectCount = 0;
 5498|  59.6k|    session = sftk_SessionFromHandle(hSession);
 5499|  59.6k|    if (session == NULL)
  ------------------
  |  Branch (5499:9): [True: 0, False: 59.6k]
  ------------------
 5500|      0|        return CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
 5501|  59.6k|    if (session->search == NULL) {
  ------------------
  |  Branch (5501:9): [True: 0, False: 59.6k]
  ------------------
 5502|      0|        sftk_FreeSession(session);
 5503|      0|        return CKR_OK;
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
 5504|      0|    }
 5505|  59.6k|    search = session->search;
 5506|  59.6k|    left = session->search->size - session->search->index;
 5507|  59.6k|    transfer = ((int)ulMaxObjectCount > left) ? left : ulMaxObjectCount;
  ------------------
  |  Branch (5507:16): [True: 59.6k, False: 0]
  ------------------
 5508|  59.6k|    if (transfer > 0) {
  ------------------
  |  Branch (5508:9): [True: 0, False: 59.6k]
  ------------------
 5509|      0|        PORT_Memcpy(phObject, &search->handles[search->index],
  ------------------
  |  |  180|      0|#define PORT_Memcpy memcpy
  ------------------
 5510|      0|                    transfer * sizeof(CK_OBJECT_HANDLE));
 5511|  59.6k|    } else {
 5512|  59.6k|        *phObject = CK_INVALID_HANDLE;
  ------------------
  |  |   78|  59.6k|#define CK_INVALID_HANDLE 0
  ------------------
 5513|  59.6k|    }
 5514|       |
 5515|  59.6k|    search->index += transfer;
 5516|  59.6k|    if (search->index == search->size) {
  ------------------
  |  Branch (5516:9): [True: 59.6k, False: 0]
  ------------------
 5517|  59.6k|        session->search = NULL;
 5518|  59.6k|        sftk_FreeSearch(search);
 5519|  59.6k|    }
 5520|  59.6k|    *pulObjectCount = transfer;
 5521|  59.6k|    sftk_FreeSession(session);
 5522|  59.6k|    return CKR_OK;
  ------------------
  |  | 1388|  59.6k|#define CKR_OK 0x00000000UL
  ------------------
 5523|  59.6k|}
NSC_FindObjectsFinal:
 5528|  59.6k|{
 5529|  59.6k|    SFTKSession *session;
 5530|  59.6k|    SFTKSearchResults *search;
 5531|       |
 5532|  59.6k|    CHECK_FORK();
 5533|       |
 5534|  59.6k|    session = sftk_SessionFromHandle(hSession);
 5535|  59.6k|    if (session == NULL)
  ------------------
  |  Branch (5535:9): [True: 0, False: 59.6k]
  ------------------
 5536|      0|        return CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
 5537|  59.6k|    search = session->search;
 5538|  59.6k|    session->search = NULL;
 5539|  59.6k|    sftk_FreeSession(session);
 5540|  59.6k|    if (search != NULL) {
  ------------------
  |  Branch (5540:9): [True: 0, False: 59.6k]
  ------------------
 5541|      0|        sftk_FreeSearch(search);
 5542|      0|    }
 5543|  59.6k|    return CKR_OK;
  ------------------
  |  | 1388|  59.6k|#define CKR_OK 0x00000000UL
  ------------------
 5544|  59.6k|}
pkcs11.c:sftk_handleKeyObject:
 1552|  4.44k|{
 1553|  4.44k|    SFTKAttribute *attribute;
 1554|  4.44k|    CK_KEY_TYPE key_type;
 1555|  4.44k|    CK_BBOOL ckfalse = CK_FALSE;
  ------------------
  |  |   23|  4.44k|#define CK_FALSE 0
  ------------------
 1556|  4.44k|    CK_RV crv;
 1557|       |
 1558|       |    /* verify the required fields */
 1559|  4.44k|    if (!sftk_hasAttribute(object, CKA_KEY_TYPE)) {
  ------------------
  |  |  543|  4.44k|#define CKA_KEY_TYPE 0x00000100UL
  ------------------
  |  Branch (1559:9): [True: 0, False: 4.44k]
  ------------------
 1560|      0|        return CKR_TEMPLATE_INCOMPLETE;
  ------------------
  |  | 1477|      0|#define CKR_TEMPLATE_INCOMPLETE 0x000000D0UL
  ------------------
 1561|      0|    }
 1562|       |
 1563|       |    /* now verify the common fields */
 1564|  4.44k|    crv = sftk_defaultAttribute(object, CKA_ID, NULL, 0);
  ------------------
  |  |  545|  4.44k|#define CKA_ID 0x00000102UL
  ------------------
 1565|  4.44k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1565:9): [True: 0, False: 4.44k]
  ------------------
 1566|      0|        return crv;
 1567|  4.44k|    crv = sftk_defaultAttribute(object, CKA_START_DATE, NULL, 0);
  ------------------
  |  |  556|  4.44k|#define CKA_START_DATE 0x00000110UL
  ------------------
 1568|  4.44k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1568:9): [True: 0, False: 4.44k]
  ------------------
 1569|      0|        return crv;
 1570|  4.44k|    crv = sftk_defaultAttribute(object, CKA_END_DATE, NULL, 0);
  ------------------
  |  |  557|  4.44k|#define CKA_END_DATE 0x00000111UL
  ------------------
 1571|  4.44k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1571:9): [True: 0, False: 4.44k]
  ------------------
 1572|      0|        return crv;
 1573|       |    /* CKA_DERIVE is common to all keys, but it's default value is
 1574|       |     * key dependent */
 1575|  4.44k|    crv = sftk_defaultAttribute(object, CKA_LOCAL, &ckfalse, sizeof(CK_BBOOL));
  ------------------
  |  |  586|  4.44k|#define CKA_LOCAL 0x00000163UL
  ------------------
 1576|  4.44k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1576:9): [True: 0, False: 4.44k]
  ------------------
 1577|      0|        return crv;
 1578|       |
 1579|       |    /* get the key type */
 1580|  4.44k|    attribute = sftk_FindAttribute(object, CKA_KEY_TYPE);
  ------------------
  |  |  543|  4.44k|#define CKA_KEY_TYPE 0x00000100UL
  ------------------
 1581|  4.44k|    if (!attribute) {
  ------------------
  |  Branch (1581:9): [True: 0, False: 4.44k]
  ------------------
 1582|      0|        return CKR_ATTRIBUTE_VALUE_INVALID;
  ------------------
  |  | 1409|      0|#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
  ------------------
 1583|      0|    }
 1584|  4.44k|    key_type = *(CK_KEY_TYPE *)attribute->attrib.pValue;
 1585|  4.44k|    sftk_FreeAttribute(attribute);
 1586|       |
 1587|  4.44k|    switch (object->objclass) {
 1588|  4.44k|        case CKO_PUBLIC_KEY:
  ------------------
  |  |  327|  4.44k|#define CKO_PUBLIC_KEY 0x00000002UL
  ------------------
  |  Branch (1588:9): [True: 4.44k, False: 0]
  ------------------
 1589|  4.44k|            return sftk_handlePublicKeyObject(session, object, key_type);
 1590|      0|        case CKO_PRIVATE_KEY:
  ------------------
  |  |  328|      0|#define CKO_PRIVATE_KEY 0x00000003UL
  ------------------
  |  Branch (1590:9): [True: 0, False: 4.44k]
  ------------------
 1591|      0|            return sftk_handlePrivateKeyObject(session, object, key_type);
 1592|      0|        case CKO_SECRET_KEY:
  ------------------
  |  |  329|      0|#define CKO_SECRET_KEY 0x00000004UL
  ------------------
  |  Branch (1592:9): [True: 0, False: 4.44k]
  ------------------
 1593|       |            /* make sure the required fields exist */
 1594|      0|            return sftk_handleSecretKeyObject(session, object, key_type,
 1595|      0|                                              (PRBool)(sftk_isFIPS(session->slot->slotID)));
  ------------------
  |  |  506|      0|    (((id) == FIPS_SLOT_ID) || ((id) >= SFTK_MIN_FIPS_USER_SLOT_ID))
  |  |  ------------------
  |  |  |  |  500|      0|#define FIPS_SLOT_ID 3
  |  |  ------------------
  |  |                   (((id) == FIPS_SLOT_ID) || ((id) >= SFTK_MIN_FIPS_USER_SLOT_ID))
  |  |  ------------------
  |  |  |  |  567|      0|#define SFTK_MIN_FIPS_USER_SLOT_ID 101
  |  |  ------------------
  |  |  |  Branch (506:6): [True: 0, False: 0]
  |  |  |  Branch (506:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1596|      0|        default:
  ------------------
  |  Branch (1596:9): [True: 0, False: 4.44k]
  ------------------
 1597|      0|            break;
 1598|  4.44k|    }
 1599|      0|    return CKR_ATTRIBUTE_VALUE_INVALID;
  ------------------
  |  | 1409|      0|#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
  ------------------
 1600|  4.44k|}
pkcs11.c:sftk_handlePublicKeyObject:
 1031|  4.44k|{
 1032|  4.44k|    CK_BBOOL encrypt = CK_TRUE;
  ------------------
  |  |   22|  4.44k|#define CK_TRUE 1
  ------------------
 1033|  4.44k|    CK_BBOOL recover = CK_TRUE;
  ------------------
  |  |   22|  4.44k|#define CK_TRUE 1
  ------------------
 1034|  4.44k|    CK_BBOOL wrap = CK_TRUE;
  ------------------
  |  |   22|  4.44k|#define CK_TRUE 1
  ------------------
 1035|  4.44k|    CK_BBOOL derive = CK_FALSE;
  ------------------
  |  |   23|  4.44k|#define CK_FALSE 0
  ------------------
 1036|  4.44k|    CK_BBOOL verify = CK_TRUE;
  ------------------
  |  |   22|  4.44k|#define CK_TRUE 1
  ------------------
 1037|  4.44k|    CK_RV crv;
 1038|       |
 1039|  4.44k|    switch (key_type) {
 1040|  2.77k|        case CKK_RSA:
  ------------------
  |  |  372|  2.77k|#define CKK_RSA 0x00000000UL
  ------------------
  |  Branch (1040:9): [True: 2.77k, False: 1.66k]
  ------------------
 1041|  2.77k|            crv = sftk_ConstrainAttribute(object, CKA_MODULUS,
  ------------------
  |  |  558|  2.77k|#define CKA_MODULUS 0x00000120UL
  ------------------
 1042|  2.77k|                                          RSA_MIN_MODULUS_BITS, 0, 0);
  ------------------
  |  |  151|  2.77k|#define RSA_MIN_MODULUS_BITS 128
  ------------------
 1043|  2.77k|            if (crv != CKR_OK) {
  ------------------
  |  | 1388|  2.77k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1043:17): [True: 0, False: 2.77k]
  ------------------
 1044|      0|                return crv;
 1045|      0|            }
 1046|  2.77k|            crv = sftk_ConstrainAttribute(object, CKA_PUBLIC_EXPONENT, 2, 0, 0);
  ------------------
  |  |  560|  2.77k|#define CKA_PUBLIC_EXPONENT 0x00000122UL
  ------------------
 1047|  2.77k|            if (crv != CKR_OK) {
  ------------------
  |  | 1388|  2.77k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1047:17): [True: 4, False: 2.77k]
  ------------------
 1048|      4|                return crv;
 1049|      4|            }
 1050|  2.77k|            break;
 1051|  2.77k|        case CKK_DSA:
  ------------------
  |  |  373|  1.34k|#define CKK_DSA 0x00000001UL
  ------------------
  |  Branch (1051:9): [True: 1.34k, False: 3.09k]
  ------------------
 1052|  1.34k|            crv = sftk_ConstrainAttribute(object, CKA_SUBPRIME,
  ------------------
  |  |  570|  1.34k|#define CKA_SUBPRIME 0x00000131UL
  ------------------
 1053|  1.34k|                                          DSA_MIN_Q_BITS, DSA_MAX_Q_BITS, 0);
  ------------------
  |  |  200|  1.34k|#define DSA_MIN_Q_BITS 160
  ------------------
                                                        DSA_MIN_Q_BITS, DSA_MAX_Q_BITS, 0);
  ------------------
  |  |  199|  1.34k|#define DSA_MAX_Q_BITS 256
  ------------------
 1054|  1.34k|            if (crv != CKR_OK) {
  ------------------
  |  | 1388|  1.34k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1054:17): [True: 3, False: 1.34k]
  ------------------
 1055|      3|                return crv;
 1056|      3|            }
 1057|  1.34k|            crv = sftk_ConstrainAttribute(object, CKA_PRIME,
  ------------------
  |  |  569|  1.34k|#define CKA_PRIME 0x00000130UL
  ------------------
 1058|  1.34k|                                          DSA_MIN_P_BITS, DSA_MAX_P_BITS, 64);
  ------------------
  |  |  198|  1.34k|#define DSA_MIN_P_BITS 512
  ------------------
                                                        DSA_MIN_P_BITS, DSA_MAX_P_BITS, 64);
  ------------------
  |  |  197|  1.34k|#define DSA_MAX_P_BITS 3072
  ------------------
 1059|  1.34k|            if (crv != CKR_OK) {
  ------------------
  |  | 1388|  1.34k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1059:17): [True: 11, False: 1.33k]
  ------------------
 1060|     11|                return crv;
 1061|     11|            }
 1062|  1.33k|            crv = sftk_ConstrainAttribute(object, CKA_BASE, 2, DSA_MAX_P_BITS, 0);
  ------------------
  |  |  571|  1.33k|#define CKA_BASE 0x00000132UL
  ------------------
                          crv = sftk_ConstrainAttribute(object, CKA_BASE, 2, DSA_MAX_P_BITS, 0);
  ------------------
  |  |  197|  1.33k|#define DSA_MAX_P_BITS 3072
  ------------------
 1063|  1.33k|            if (crv != CKR_OK) {
  ------------------
  |  | 1388|  1.33k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1063:17): [True: 0, False: 1.33k]
  ------------------
 1064|      0|                return crv;
 1065|      0|            }
 1066|  1.33k|            crv = sftk_ConstrainAttribute(object, CKA_VALUE, 2, DSA_MAX_P_BITS, 0);
  ------------------
  |  |  516|  1.33k|#define CKA_VALUE 0x00000011UL
  ------------------
                          crv = sftk_ConstrainAttribute(object, CKA_VALUE, 2, DSA_MAX_P_BITS, 0);
  ------------------
  |  |  197|  1.33k|#define DSA_MAX_P_BITS 3072
  ------------------
 1067|  1.33k|            if (crv != CKR_OK) {
  ------------------
  |  | 1388|  1.33k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1067:17): [True: 0, False: 1.33k]
  ------------------
 1068|      0|                return crv;
 1069|      0|            }
 1070|  1.33k|            encrypt = CK_FALSE;
  ------------------
  |  |   23|  1.33k|#define CK_FALSE 0
  ------------------
 1071|  1.33k|            recover = CK_FALSE;
  ------------------
  |  |   23|  1.33k|#define CK_FALSE 0
  ------------------
 1072|  1.33k|            wrap = CK_FALSE;
  ------------------
  |  |   23|  1.33k|#define CK_FALSE 0
  ------------------
 1073|  1.33k|            break;
 1074|      0|        case CKK_DH:
  ------------------
  |  |  374|      0|#define CKK_DH 0x00000002UL
  ------------------
  |  Branch (1074:9): [True: 0, False: 4.44k]
  ------------------
 1075|      0|            crv = sftk_ConstrainAttribute(object, CKA_PRIME,
  ------------------
  |  |  569|      0|#define CKA_PRIME 0x00000130UL
  ------------------
 1076|      0|                                          DH_MIN_P_BITS, DH_MAX_P_BITS, 0);
  ------------------
  |  |  154|      0|#define DH_MIN_P_BITS 128
  ------------------
                                                        DH_MIN_P_BITS, DH_MAX_P_BITS, 0);
  ------------------
  |  |  155|      0|#define DH_MAX_P_BITS 16384
  ------------------
 1077|      0|            if (crv != CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1077:17): [True: 0, False: 0]
  ------------------
 1078|      0|                return crv;
 1079|      0|            }
 1080|      0|            crv = sftk_ConstrainAttribute(object, CKA_BASE, 2, DH_MAX_P_BITS, 0);
  ------------------
  |  |  571|      0|#define CKA_BASE 0x00000132UL
  ------------------
                          crv = sftk_ConstrainAttribute(object, CKA_BASE, 2, DH_MAX_P_BITS, 0);
  ------------------
  |  |  155|      0|#define DH_MAX_P_BITS 16384
  ------------------
 1081|      0|            if (crv != CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1081:17): [True: 0, False: 0]
  ------------------
 1082|      0|                return crv;
 1083|      0|            }
 1084|      0|            crv = sftk_ConstrainAttribute(object, CKA_VALUE, 2, DH_MAX_P_BITS, 0);
  ------------------
  |  |  516|      0|#define CKA_VALUE 0x00000011UL
  ------------------
                          crv = sftk_ConstrainAttribute(object, CKA_VALUE, 2, DH_MAX_P_BITS, 0);
  ------------------
  |  |  155|      0|#define DH_MAX_P_BITS 16384
  ------------------
 1085|      0|            if (crv != CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1085:17): [True: 0, False: 0]
  ------------------
 1086|      0|                return crv;
 1087|      0|            }
 1088|      0|            verify = CK_FALSE;
  ------------------
  |  |   23|      0|#define CK_FALSE 0
  ------------------
 1089|      0|            derive = CK_TRUE;
  ------------------
  |  |   22|      0|#define CK_TRUE 1
  ------------------
 1090|      0|            encrypt = CK_FALSE;
  ------------------
  |  |   23|      0|#define CK_FALSE 0
  ------------------
 1091|      0|            recover = CK_FALSE;
  ------------------
  |  |   23|      0|#define CK_FALSE 0
  ------------------
 1092|      0|            wrap = CK_FALSE;
  ------------------
  |  |   23|      0|#define CK_FALSE 0
  ------------------
 1093|      0|            break;
 1094|      0|        case CKK_EC_MONTGOMERY:
  ------------------
  |  |  449|      0|#define CKK_EC_MONTGOMERY 0x00000041UL
  ------------------
  |  Branch (1094:9): [True: 0, False: 4.44k]
  ------------------
 1095|      0|        case CKK_EC_EDWARDS:
  ------------------
  |  |  448|      0|#define CKK_EC_EDWARDS 0x00000040UL
  ------------------
  |  Branch (1095:9): [True: 0, False: 4.44k]
  ------------------
 1096|    323|        case CKK_EC:
  ------------------
  |  |  379|    323|#define CKK_EC 0x00000003UL
  ------------------
  |  Branch (1096:9): [True: 323, False: 4.12k]
  ------------------
 1097|    323|            if (!sftk_hasAttribute(object, CKA_EC_PARAMS)) {
  ------------------
  |  |  602|    323|#define CKA_EC_PARAMS 0x00000180UL
  ------------------
  |  Branch (1097:17): [True: 0, False: 323]
  ------------------
 1098|      0|                return CKR_TEMPLATE_INCOMPLETE;
  ------------------
  |  | 1477|      0|#define CKR_TEMPLATE_INCOMPLETE 0x000000D0UL
  ------------------
 1099|      0|            }
 1100|    323|            if (!sftk_hasAttribute(object, CKA_EC_POINT)) {
  ------------------
  |  |  604|    323|#define CKA_EC_POINT 0x00000181UL
  ------------------
  |  Branch (1100:17): [True: 0, False: 323]
  ------------------
 1101|      0|                return CKR_TEMPLATE_INCOMPLETE;
  ------------------
  |  | 1477|      0|#define CKR_TEMPLATE_INCOMPLETE 0x000000D0UL
  ------------------
 1102|      0|            }
 1103|       |            /* for ECDSA and EDDSA. Change if the structure of any of them is modified. */
 1104|    323|            derive = (key_type == CKK_EC_EDWARDS) ? CK_FALSE : CK_TRUE;    /* CK_TRUE for ECDH */
  ------------------
  |  |  448|    323|#define CKK_EC_EDWARDS 0x00000040UL
  ------------------
                          derive = (key_type == CKK_EC_EDWARDS) ? CK_FALSE : CK_TRUE;    /* CK_TRUE for ECDH */
  ------------------
  |  |   23|      0|#define CK_FALSE 0
  ------------------
                          derive = (key_type == CKK_EC_EDWARDS) ? CK_FALSE : CK_TRUE;    /* CK_TRUE for ECDH */
  ------------------
  |  |   22|    646|#define CK_TRUE 1
  ------------------
  |  Branch (1104:22): [True: 0, False: 323]
  ------------------
 1105|    323|            verify = (key_type == CKK_EC_MONTGOMERY) ? CK_FALSE : CK_TRUE; /* for ECDSA and EDDSA */
  ------------------
  |  |  449|    323|#define CKK_EC_MONTGOMERY 0x00000041UL
  ------------------
                          verify = (key_type == CKK_EC_MONTGOMERY) ? CK_FALSE : CK_TRUE; /* for ECDSA and EDDSA */
  ------------------
  |  |   23|      0|#define CK_FALSE 0
  ------------------
                          verify = (key_type == CKK_EC_MONTGOMERY) ? CK_FALSE : CK_TRUE; /* for ECDSA and EDDSA */
  ------------------
  |  |   22|    646|#define CK_TRUE 1
  ------------------
  |  Branch (1105:22): [True: 0, False: 323]
  ------------------
 1106|    323|            encrypt = CK_FALSE;
  ------------------
  |  |   23|    323|#define CK_FALSE 0
  ------------------
 1107|    323|            recover = CK_FALSE;
  ------------------
  |  |   23|    323|#define CK_FALSE 0
  ------------------
 1108|    323|            wrap = CK_FALSE;
  ------------------
  |  |   23|    323|#define CK_FALSE 0
  ------------------
 1109|    323|            break;
 1110|      0|        case CKK_NSS_KYBER:
  ------------------
  |  |   58|      0|#define CKK_NSS_KYBER (CKK_NSS + 5)
  |  |  ------------------
  |  |  |  |   49|      0|#define CKK_NSS (CKK_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  458|      0|#define CKK_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKK_NSS (CKK_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1110:9): [True: 0, False: 4.44k]
  ------------------
 1111|      0|        case CKK_NSS_ML_KEM:
  ------------------
  |  |   59|      0|#define CKK_NSS_ML_KEM (CKK_NSS + 6)
  |  |  ------------------
  |  |  |  |   49|      0|#define CKK_NSS (CKK_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  458|      0|#define CKK_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKK_NSS (CKK_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1111:9): [True: 0, False: 4.44k]
  ------------------
 1112|      0|            if (!sftk_hasAttribute(object, CKA_NSS_PARAMETER_SET)) {
  ------------------
  |  |  113|      0|#define CKA_NSS_PARAMETER_SET (CKA_NSS + 40)
  |  |  ------------------
  |  |  |  |   77|      0|#define CKA_NSS (CKA_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  692|      0|#define CKA_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKA_NSS (CKA_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1112:17): [True: 0, False: 0]
  ------------------
 1113|      0|                return CKR_TEMPLATE_INCOMPLETE;
  ------------------
  |  | 1477|      0|#define CKR_TEMPLATE_INCOMPLETE 0x000000D0UL
  ------------------
 1114|      0|            }
 1115|      0|            derive = CK_FALSE;
  ------------------
  |  |   23|      0|#define CK_FALSE 0
  ------------------
 1116|      0|            verify = CK_FALSE;
  ------------------
  |  |   23|      0|#define CK_FALSE 0
  ------------------
 1117|      0|            encrypt = CK_FALSE;
  ------------------
  |  |   23|      0|#define CK_FALSE 0
  ------------------
 1118|      0|            recover = CK_FALSE;
  ------------------
  |  |   23|      0|#define CK_FALSE 0
  ------------------
 1119|      0|            wrap = CK_FALSE;
  ------------------
  |  |   23|      0|#define CK_FALSE 0
  ------------------
 1120|      0|            break;
 1121|      0|        default:
  ------------------
  |  Branch (1121:9): [True: 0, False: 4.44k]
  ------------------
 1122|      0|            return CKR_ATTRIBUTE_VALUE_INVALID;
  ------------------
  |  | 1409|      0|#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
  ------------------
 1123|  4.44k|    }
 1124|       |
 1125|       |    /* make sure the required fields exist */
 1126|  4.42k|    crv = sftk_defaultAttribute(object, CKA_SUBJECT, NULL, 0);
  ------------------
  |  |  544|  4.42k|#define CKA_SUBJECT 0x00000101UL
  ------------------
 1127|  4.42k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.42k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1127:9): [True: 0, False: 4.42k]
  ------------------
 1128|      0|        return crv;
 1129|  4.42k|    crv = sftk_defaultAttribute(object, CKA_ENCRYPT, &encrypt, sizeof(CK_BBOOL));
  ------------------
  |  |  547|  4.42k|#define CKA_ENCRYPT 0x00000104UL
  ------------------
 1130|  4.42k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.42k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1130:9): [True: 0, False: 4.42k]
  ------------------
 1131|      0|        return crv;
 1132|  4.42k|    crv = sftk_defaultAttribute(object, CKA_VERIFY, &verify, sizeof(CK_BBOOL));
  ------------------
  |  |  553|  4.42k|#define CKA_VERIFY 0x0000010AUL
  ------------------
 1133|  4.42k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.42k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1133:9): [True: 0, False: 4.42k]
  ------------------
 1134|      0|        return crv;
 1135|  4.42k|    crv = sftk_defaultAttribute(object, CKA_VERIFY_RECOVER,
  ------------------
  |  |  554|  4.42k|#define CKA_VERIFY_RECOVER 0x0000010BUL
  ------------------
 1136|  4.42k|                                &recover, sizeof(CK_BBOOL));
 1137|  4.42k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.42k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1137:9): [True: 0, False: 4.42k]
  ------------------
 1138|      0|        return crv;
 1139|  4.42k|    crv = sftk_defaultAttribute(object, CKA_WRAP, &wrap, sizeof(CK_BBOOL));
  ------------------
  |  |  549|  4.42k|#define CKA_WRAP 0x00000106UL
  ------------------
 1140|  4.42k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.42k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1140:9): [True: 0, False: 4.42k]
  ------------------
 1141|      0|        return crv;
 1142|  4.42k|    crv = sftk_defaultAttribute(object, CKA_DERIVE, &derive, sizeof(CK_BBOOL));
  ------------------
  |  |  555|  4.42k|#define CKA_DERIVE 0x0000010CUL
  ------------------
 1143|  4.42k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.42k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1143:9): [True: 0, False: 4.42k]
  ------------------
 1144|      0|        return crv;
 1145|       |
 1146|  4.42k|    object->objectInfo = sftk_GetPubKey(object, key_type, &crv);
 1147|  4.42k|    if (object->objectInfo == NULL) {
  ------------------
  |  Branch (1147:9): [True: 42, False: 4.38k]
  ------------------
 1148|     42|        return crv;
 1149|     42|    }
 1150|  4.38k|    object->infoFree = SFTKFree_nsslowkey_DestroyPublicKey;
 1151|       |
 1152|       |    /* Check that an imported EC key is valid */
 1153|  4.38k|    if (key_type == CKK_EC || key_type == CKK_EC_EDWARDS || key_type == CKK_EC_MONTGOMERY) {
  ------------------
  |  |  379|  8.76k|#define CKK_EC 0x00000003UL
  ------------------
                  if (key_type == CKK_EC || key_type == CKK_EC_EDWARDS || key_type == CKK_EC_MONTGOMERY) {
  ------------------
  |  |  448|  8.48k|#define CKK_EC_EDWARDS 0x00000040UL
  ------------------
                  if (key_type == CKK_EC || key_type == CKK_EC_EDWARDS || key_type == CKK_EC_MONTGOMERY) {
  ------------------
  |  |  449|  4.10k|#define CKK_EC_MONTGOMERY 0x00000041UL
  ------------------
  |  Branch (1153:9): [True: 281, False: 4.10k]
  |  Branch (1153:31): [True: 0, False: 4.10k]
  |  Branch (1153:61): [True: 0, False: 4.10k]
  ------------------
 1154|    281|        NSSLOWKEYPublicKey *pubKey = (NSSLOWKEYPublicKey *)object->objectInfo;
 1155|    281|        SECStatus rv = EC_ValidatePublicKey(&pubKey->u.ec.ecParams,
 1156|    281|                                            &pubKey->u.ec.publicValue);
 1157|       |
 1158|    281|        if (rv != SECSuccess) {
  ------------------
  |  Branch (1158:13): [True: 60, False: 221]
  ------------------
 1159|     60|            return CKR_TEMPLATE_INCONSISTENT;
  ------------------
  |  | 1478|     60|#define CKR_TEMPLATE_INCONSISTENT 0x000000D1UL
  ------------------
 1160|     60|        }
 1161|    281|    }
 1162|       |
 1163|  4.32k|    if (sftk_isTrue(object, CKA_TOKEN)) {
  ------------------
  |  |  512|  4.32k|#define CKA_TOKEN 0x00000001UL
  ------------------
  |  Branch (1163:9): [True: 0, False: 4.32k]
  ------------------
 1164|      0|        SFTKSlot *slot = session->slot;
 1165|      0|        SFTKDBHandle *certHandle = sftk_getCertDB(slot);
 1166|       |
 1167|      0|        if (certHandle == NULL) {
  ------------------
  |  Branch (1167:13): [True: 0, False: 0]
  ------------------
 1168|      0|            return CKR_TOKEN_WRITE_PROTECTED;
  ------------------
  |  | 1481|      0|#define CKR_TOKEN_WRITE_PROTECTED 0x000000E2UL
  ------------------
 1169|      0|        }
 1170|       |
 1171|      0|        crv = sftkdb_write(certHandle, object, &object->handle);
 1172|      0|        sftk_freeDB(certHandle);
 1173|      0|        return crv;
 1174|      0|    }
 1175|       |
 1176|  4.32k|    return CKR_OK;
  ------------------
  |  | 1388|  4.32k|#define CKR_OK 0x00000000UL
  ------------------
 1177|  4.32k|}
pkcs11.c:sftk_GetModuleIndex:
 2734|   328k|{
 2735|   328k|    if (sftk_isFIPS(slotID)) {
  ------------------
  |  |  506|   328k|    (((id) == FIPS_SLOT_ID) || ((id) >= SFTK_MIN_FIPS_USER_SLOT_ID))
  |  |  ------------------
  |  |  |  |  500|   328k|#define FIPS_SLOT_ID 3
  |  |  ------------------
  |  |                   (((id) == FIPS_SLOT_ID) || ((id) >= SFTK_MIN_FIPS_USER_SLOT_ID))
  |  |  ------------------
  |  |  |  |  567|   328k|#define SFTK_MIN_FIPS_USER_SLOT_ID 101
  |  |  ------------------
  |  |  |  Branch (506:6): [True: 0, False: 328k]
  |  |  |  Branch (506:32): [True: 0, False: 328k]
  |  |  ------------------
  ------------------
 2736|      0|        return NSC_FIPS_MODULE;
  ------------------
  |  |   54|      0|#define NSC_FIPS_MODULE 1
  ------------------
 2737|      0|    }
 2738|   328k|    return NSC_NON_FIPS_MODULE;
  ------------------
  |  |   55|   328k|#define NSC_NON_FIPS_MODULE 0
  ------------------
 2739|   328k|}
pkcs11.c:sftk_setStringName:
  688|      6|{
  689|      6|    int full_length, string_length;
  690|       |
  691|      6|    full_length = nullTerminate ? buffer_length - 1 : buffer_length;
  ------------------
  |  Branch (691:19): [True: 6, False: 0]
  ------------------
  692|      6|    string_length = PORT_Strlen(inString);
  ------------------
  |  |  190|      6|#define PORT_Strlen(s) strlen(s)
  ------------------
  693|       |    /*
  694|       |     *  shorten the string, respecting utf8 encoding
  695|       |     *  to do so, we work backward from the end
  696|       |     *  bytes looking from the end are either:
  697|       |     *    - ascii [0x00,0x7f]
  698|       |     *    - the [2-n]th byte of a multibyte sequence
  699|       |     *        [0x3F,0xBF], i.e, most significant 2 bits are '10'
  700|       |     *    - the first byte of a multibyte sequence [0xC0,0xFD],
  701|       |     *        i.e, most significant 2 bits are '11'
  702|       |     *
  703|       |     *    When the string is too long, we lop off any trailing '10' bytes,
  704|       |     *  if any. When these are all eliminated we lop off
  705|       |     *  one additional byte. Thus if we lopped any '10'
  706|       |     *  we'll be lopping a '11' byte (the first byte of the multibyte sequence),
  707|       |     *  otherwise we're lopping off an ascii character.
  708|       |     *
  709|       |     *    To test for '10' bytes, we first AND it with
  710|       |     *  11000000 (0xc0) so that we get 10000000 (0x80) if and only if
  711|       |     *  the byte starts with 10. We test for equality.
  712|       |     */
  713|      6|    while (string_length > full_length) {
  ------------------
  |  Branch (713:12): [True: 0, False: 6]
  ------------------
  714|       |        /* need to shorten */
  715|      0|        while (string_length > 0 &&
  ------------------
  |  Branch (715:16): [True: 0, False: 0]
  ------------------
  716|      0|               ((inString[string_length - 1] & (char)0xc0) == (char)0x80)) {
  ------------------
  |  Branch (716:16): [True: 0, False: 0]
  ------------------
  717|       |            /* lop off '10' byte */
  718|      0|            string_length--;
  719|      0|        }
  720|       |        /*
  721|       |         * test string_length in case bad data is received
  722|       |         * and string consisted of all '10' bytes,
  723|       |         * avoiding any infinite loop
  724|       |         */
  725|      0|        if (string_length) {
  ------------------
  |  Branch (725:13): [True: 0, False: 0]
  ------------------
  726|       |            /* remove either '11' byte or an asci byte */
  727|      0|            string_length--;
  728|      0|        }
  729|      0|    }
  730|      6|    PORT_Memset(buffer, ' ', full_length);
  ------------------
  |  |  182|      6|#define PORT_Memset memset
  ------------------
  731|      6|    if (nullTerminate) {
  ------------------
  |  Branch (731:9): [True: 6, False: 0]
  ------------------
  732|      6|        buffer[full_length] = 0;
  733|      6|    }
  734|      6|    PORT_Memcpy(buffer, inString, string_length);
  ------------------
  |  |  180|      6|#define PORT_Memcpy memcpy
  ------------------
  735|      6|    return buffer;
  736|      6|}
pkcs11.c:sftk_HashNumber:
 2678|   328k|{
 2679|   328k|    return (PLHashNumber)((char *)key - (char *)NULL);
 2680|   328k|}
pkcs11.c:sftk_RegisterSlot:
 2781|      2|{
 2782|      2|    PLHashEntry *entry;
 2783|      2|    unsigned int index;
 2784|       |
 2785|      2|    index = sftk_GetModuleIndex(slot->slotID);
 2786|       |
 2787|       |    /* make sure the slotID for this module is valid */
 2788|      2|    if (moduleIndex != index) {
  ------------------
  |  Branch (2788:9): [True: 0, False: 2]
  ------------------
 2789|      0|        return CKR_SLOT_ID_INVALID;
  ------------------
  |  | 1391|      0|#define CKR_SLOT_ID_INVALID 0x00000003UL
  ------------------
 2790|      0|    }
 2791|       |
 2792|      2|    if (nscSlotList[index] == NULL) {
  ------------------
  |  Branch (2792:9): [True: 1, False: 1]
  ------------------
 2793|      1|        nscSlotListSize[index] = NSC_SLOT_LIST_BLOCK_SIZE;
  ------------------
  |  |   50|      1|#define NSC_SLOT_LIST_BLOCK_SIZE 10
  ------------------
 2794|      1|        nscSlotList[index] = (CK_SLOT_ID *)
 2795|      1|            PORT_ZAlloc(nscSlotListSize[index] * sizeof(CK_SLOT_ID));
  ------------------
  |  |   72|      1|#define PORT_ZAlloc PORT_ZAlloc_Util
  ------------------
 2796|      1|        if (nscSlotList[index] == NULL) {
  ------------------
  |  Branch (2796:13): [True: 0, False: 1]
  ------------------
 2797|      0|            return CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 2798|      0|        }
 2799|      1|    }
 2800|      2|    if (nscSlotCount[index] >= nscSlotListSize[index]) {
  ------------------
  |  Branch (2800:9): [True: 0, False: 2]
  ------------------
 2801|      0|        CK_SLOT_ID *oldNscSlotList = nscSlotList[index];
 2802|      0|        CK_ULONG oldNscSlotListSize = nscSlotListSize[index];
 2803|      0|        nscSlotListSize[index] += NSC_SLOT_LIST_BLOCK_SIZE;
  ------------------
  |  |   50|      0|#define NSC_SLOT_LIST_BLOCK_SIZE 10
  ------------------
 2804|      0|        nscSlotList[index] = (CK_SLOT_ID *)PORT_Realloc(oldNscSlotList,
  ------------------
  |  |   64|      0|#define PORT_Realloc PORT_Realloc_Util
  ------------------
 2805|      0|                                                        nscSlotListSize[index] * sizeof(CK_SLOT_ID));
 2806|      0|        if (nscSlotList[index] == NULL) {
  ------------------
  |  Branch (2806:13): [True: 0, False: 0]
  ------------------
 2807|       |            /* evidently coverity doesn't know realloc does not
 2808|       |             * free var if it fails ! */
 2809|       |            /* coverity [use_after_free : FALSE] */
 2810|      0|            nscSlotList[index] = oldNscSlotList;
 2811|      0|            nscSlotListSize[index] = oldNscSlotListSize;
 2812|      0|            return CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 2813|      0|        }
 2814|      0|    }
 2815|       |
 2816|      2|    if (nscSlotHashTable[index] == NULL) {
  ------------------
  |  Branch (2816:9): [True: 1, False: 1]
  ------------------
 2817|      1|        nscSlotHashTable[index] = PL_NewHashTable(64, sftk_HashNumber,
 2818|      1|                                                  PL_CompareValues, PL_CompareValues, NULL, 0);
 2819|      1|        if (nscSlotHashTable[index] == NULL) {
  ------------------
  |  Branch (2819:13): [True: 0, False: 1]
  ------------------
 2820|      0|            return CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 2821|      0|        }
 2822|      1|    }
 2823|       |
 2824|      2|    entry = PL_HashTableAdd(nscSlotHashTable[index], (void *)(uintptr_t)slot->slotID, slot);
 2825|      2|    if (entry == NULL) {
  ------------------
  |  Branch (2825:9): [True: 0, False: 2]
  ------------------
 2826|      0|        return CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 2827|      0|    }
 2828|      2|    slot->index = (nscSlotCount[index] & 0x7f) | ((index << 7) & 0x80);
 2829|      2|    nscSlotList[index][nscSlotCount[index]++] = slot->slotID;
 2830|       |
 2831|      2|    return CKR_OK;
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
 2832|      2|}
pkcs11.c:sftk_DBShutdown:
 3107|      2|{
 3108|      2|    SFTKDBHandle *certHandle;
 3109|      2|    SFTKDBHandle *keyHandle;
 3110|      2|    SKIP_AFTER_FORK(PZ_Lock(slot->slotLock));
  ------------------
  |  |  256|      2|#define SKIP_AFTER_FORK(x) x
  ------------------
 3111|      2|    certHandle = slot->certDB;
 3112|      2|    slot->certDB = NULL;
 3113|      2|    keyHandle = slot->keyDB;
 3114|      2|    slot->keyDB = NULL;
 3115|      2|    SKIP_AFTER_FORK(PZ_Unlock(slot->slotLock));
  ------------------
  |  |  256|      2|#define SKIP_AFTER_FORK(x) x
  ------------------
 3116|      2|    if (certHandle) {
  ------------------
  |  Branch (3116:9): [True: 0, False: 2]
  ------------------
 3117|      0|        sftk_freeDB(certHandle);
 3118|      0|    }
 3119|      2|    if (keyHandle) {
  ------------------
  |  Branch (3119:9): [True: 0, False: 2]
  ------------------
 3120|      0|        sftk_freeDB(keyHandle);
 3121|      0|    }
 3122|      2|}
pkcs11.c:sftk_getParameters:
 3399|      1|{
 3400|      1|    CK_RV crv;
 3401|      1|    char *libParams;
 3402|      1|    const char *filename;
 3403|      1|    PRFileDesc *file_dc;
 3404|      1|    PRBool free_mem = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
 3405|       |
 3406|      1|    if (!init_args || !init_args->LibraryParameters) {
  ------------------
  |  Branch (3406:9): [True: 0, False: 1]
  |  Branch (3406:23): [True: 0, False: 1]
  ------------------
 3407|       |        /* Library parameters were not provided via C_Initialize_args*/
 3408|       |
 3409|       |        /* Enviromental value has precedence to configuration filename */
 3410|      0|        libParams = PR_GetEnvSecure("NSS_LIB_PARAMS");
 3411|       |
 3412|      0|        if (!libParams) {
  ------------------
  |  Branch (3412:13): [True: 0, False: 0]
  ------------------
 3413|       |            /* Load from config filename or use default */
 3414|      0|            filename = PR_GetEnvSecure("NSS_LIB_PARAMS_FILE");
 3415|      0|#ifdef XP_UNIX
 3416|       |            /* Use default configuration file for Linux only */
 3417|      0|            if (!filename)
  ------------------
  |  Branch (3417:17): [True: 0, False: 0]
  ------------------
 3418|      0|                filename = LIB_PARAM_DEFAULT_FILE_LOCATION;
  ------------------
  |  |   65|      0|#define LIB_PARAM_DEFAULT_FILE_LOCATION "/etc/nss/params.config"
  ------------------
 3419|      0|#endif
 3420|      0|            if (filename) {
  ------------------
  |  Branch (3420:17): [True: 0, False: 0]
  ------------------
 3421|      0|                file_dc = PR_OpenFile(filename, PR_RDONLY, 444);
  ------------------
  |  |  577|      0|#define PR_RDONLY       0x01
  ------------------
 3422|      0|                if (file_dc) {
  ------------------
  |  Branch (3422:21): [True: 0, False: 0]
  ------------------
 3423|       |                    /* file opened */
 3424|      0|                    PRInt32 len = PR_Available(file_dc);
 3425|      0|                    libParams = PORT_NewArray(char, len + 1);
  ------------------
  |  |  157|      0|    (type *)PORT_Alloc(sizeof(type) * (num))
  |  |  ------------------
  |  |  |  |   52|      0|#define PORT_Alloc PORT_Alloc_Util
  |  |  ------------------
  ------------------
 3426|      0|                    if (libParams) {
  ------------------
  |  Branch (3426:25): [True: 0, False: 0]
  ------------------
 3427|       |                        /* memory allocated */
 3428|      0|                        if (PR_Read(file_dc, libParams, len) == -1) {
  ------------------
  |  Branch (3428:29): [True: 0, False: 0]
  ------------------
 3429|      0|                            PORT_Free(libParams);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 3430|      0|                            libParams = NULL;
 3431|      0|                        } else {
 3432|      0|                            free_mem = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 3433|      0|                            libParams[len] = '\0';
 3434|      0|                        }
 3435|      0|                    }
 3436|       |
 3437|      0|                    PR_Close(file_dc);
 3438|      0|                }
 3439|      0|            }
 3440|      0|        }
 3441|       |
 3442|      0|        if (libParams == NULL)
  ------------------
  |  Branch (3442:13): [True: 0, False: 0]
  ------------------
 3443|      0|            libParams = LIB_PARAM_DEFAULT;
  ------------------
  |  |   68|      0|#define LIB_PARAM_DEFAULT " configdir='' certPrefix='' keyPrefix='' secmod='' flags=noCertDB,noModDB "
  ------------------
 3444|       |
 3445|      1|    } else {
 3446|       |        /* Use parameters provided with C_Initialize_args */
 3447|      1|        libParams = (char *)init_args->LibraryParameters;
 3448|      1|    }
 3449|       |
 3450|      1|    crv = sftk_parseParameters(libParams, paramStrings, isFIPS);
 3451|      1|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3451:9): [True: 0, False: 1]
  ------------------
 3452|      0|        crv = CKR_ARGUMENTS_BAD;
  ------------------
  |  | 1401|      0|#define CKR_ARGUMENTS_BAD 0x00000007UL
  ------------------
 3453|      0|        goto loser;
 3454|      0|    }
 3455|       |
 3456|      1|    crv = CKR_OK;
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
 3457|      1|loser:
 3458|      1|    if (free_mem)
  ------------------
  |  Branch (3458:9): [True: 0, False: 1]
  ------------------
 3459|      0|        PORT_Free(libParams);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 3460|       |
 3461|      1|    return crv;
 3462|      1|}
pkcs11.c:sftk_configure:
  742|      1|{
  743|       |
  744|       |    /* make sure the internationalization was done correctly... */
  745|      1|    if (man) {
  ------------------
  |  Branch (745:9): [True: 0, False: 1]
  ------------------
  746|      0|        manufacturerID = sftk_setStringName(man, manufacturerID_space,
  747|      0|                                            sizeof(manufacturerID_space), PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  748|      0|    }
  749|      1|    if (libdes) {
  ------------------
  |  Branch (749:9): [True: 0, False: 1]
  ------------------
  750|      0|        libraryDescription = sftk_setStringName(libdes,
  751|      0|                                                libraryDescription_space, sizeof(libraryDescription_space),
  752|      0|                                                PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  753|      0|    }
  754|       |
  755|      1|    return CKR_OK;
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
  756|      1|}
pkcs11.c:nscFreeAllSlots:
 3331|      1|{
 3332|       |    /* free all the slots */
 3333|      1|    SFTKSlot *slot = NULL;
 3334|      1|    CK_SLOT_ID slotID;
 3335|      1|    int i;
 3336|       |
 3337|      1|    if (nscSlotList[moduleIndex]) {
  ------------------
  |  Branch (3337:9): [True: 1, False: 0]
  ------------------
 3338|      1|        CK_ULONG tmpSlotCount = nscSlotCount[moduleIndex];
 3339|      1|        CK_SLOT_ID_PTR tmpSlotList = nscSlotList[moduleIndex];
 3340|      1|        PLHashTable *tmpSlotHashTable = nscSlotHashTable[moduleIndex];
 3341|       |
 3342|       |        /* first close all the session */
 3343|      3|        for (i = 0; i < (int)tmpSlotCount; i++) {
  ------------------
  |  Branch (3343:21): [True: 2, False: 1]
  ------------------
 3344|      2|            slotID = tmpSlotList[i];
 3345|      2|            (void)NSC_CloseAllSessions(slotID);
 3346|      2|        }
 3347|       |
 3348|       |        /* now clear out the statics */
 3349|      1|        nscSlotList[moduleIndex] = NULL;
 3350|      1|        nscSlotCount[moduleIndex] = 0;
 3351|      1|        nscSlotHashTable[moduleIndex] = NULL;
 3352|      1|        nscSlotListSize[moduleIndex] = 0;
 3353|       |
 3354|      3|        for (i = 0; i < (int)tmpSlotCount; i++) {
  ------------------
  |  Branch (3354:21): [True: 2, False: 1]
  ------------------
 3355|      2|            slotID = tmpSlotList[i];
 3356|      2|            slot = (SFTKSlot *)
 3357|      2|                PL_HashTableLookup(tmpSlotHashTable, (void *)(uintptr_t)slotID);
 3358|      2|            PORT_Assert(slot);
  ------------------
  |  |  120|      2|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      2|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3359|      2|            if (!slot)
  ------------------
  |  Branch (3359:17): [True: 0, False: 2]
  ------------------
 3360|      0|                continue;
 3361|      2|            SFTK_DestroySlotData(slot);
 3362|      2|            PL_HashTableRemove(tmpSlotHashTable, (void *)(uintptr_t)slotID);
 3363|      2|        }
 3364|      1|        PORT_Free(tmpSlotList);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
 3365|      1|        PL_HashTableDestroy(tmpSlotHashTable);
 3366|      1|    }
 3367|      1|}
pkcs11.c:sftk_searchDatabase:
 5216|  59.6k|{
 5217|  59.6k|    CK_RV crv;
 5218|  59.6k|    int objectListSize = search->array_size - search->size;
 5219|  59.6k|    CK_OBJECT_HANDLE *array = &search->handles[search->size];
 5220|  59.6k|    SDBFind *find;
 5221|  59.6k|    CK_ULONG count;
 5222|       |
 5223|  59.6k|    crv = sftkdb_FindObjectsInit(handle, pTemplate, ulCount, &find);
 5224|  59.6k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  59.6k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (5224:9): [True: 0, False: 59.6k]
  ------------------
 5225|      0|        return crv;
 5226|  59.6k|    do {
 5227|  59.6k|        crv = sftkdb_FindObjects(handle, find, array, objectListSize, &count);
 5228|  59.6k|        if ((crv != CKR_OK) || (count == 0))
  ------------------
  |  | 1388|  59.6k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (5228:13): [True: 0, False: 59.6k]
  |  Branch (5228:32): [True: 59.6k, False: 0]
  ------------------
 5229|  59.6k|            break;
 5230|      0|        search->size += count;
 5231|      0|        objectListSize -= count;
 5232|      0|        if (objectListSize > 0)
  ------------------
  |  Branch (5232:13): [True: 0, False: 0]
  ------------------
 5233|      0|            break;
 5234|      0|        crv = sftk_expandSearchList(search, NSC_SEARCH_BLOCK_SIZE);
  ------------------
  |  |   49|      0|#define NSC_SEARCH_BLOCK_SIZE 5
  ------------------
 5235|      0|        objectListSize = NSC_SEARCH_BLOCK_SIZE;
  ------------------
  |  |   49|      0|#define NSC_SEARCH_BLOCK_SIZE 5
  ------------------
 5236|      0|        array = &search->handles[search->size];
 5237|      0|    } while (crv == CKR_OK);
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (5237:14): [True: 0, False: 0]
  ------------------
 5238|      0|    sftkdb_FindObjectsFinal(handle, find);
 5239|       |
 5240|  59.6k|    return crv;
 5241|  59.6k|}
pkcs11.c:sftk_searchTokenList:
 5362|  59.6k|{
 5363|  59.6k|    CK_RV crv = CKR_OK;
  ------------------
  |  | 1388|  59.6k|#define CKR_OK 0x00000000UL
  ------------------
 5364|  59.6k|    CK_RV crv2;
 5365|  59.6k|    PRBool searchCertDB;
 5366|  59.6k|    PRBool searchKeyDB;
 5367|       |
 5368|  59.6k|    sftk_pruneSearch(pTemplate, ulCount, &searchCertDB, &searchKeyDB);
 5369|       |
 5370|  59.6k|    if (searchCertDB) {
  ------------------
  |  Branch (5370:9): [True: 59.6k, False: 0]
  ------------------
 5371|  59.6k|        SFTKDBHandle *certHandle = sftk_getCertDB(slot);
 5372|  59.6k|        crv = sftk_searchDatabase(certHandle, search, pTemplate, ulCount);
 5373|  59.6k|        crv2 = sftk_emailhack(slot, certHandle, search, pTemplate, ulCount);
 5374|  59.6k|        if (crv == CKR_OK)
  ------------------
  |  | 1388|  59.6k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (5374:13): [True: 59.6k, False: 0]
  ------------------
 5375|  59.6k|            crv = crv2;
 5376|  59.6k|        sftk_freeDB(certHandle);
 5377|  59.6k|    }
 5378|       |
 5379|  59.6k|    if (crv == CKR_OK && isLoggedIn && searchKeyDB) {
  ------------------
  |  | 1388|   119k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (5379:9): [True: 59.6k, False: 0]
  |  Branch (5379:26): [True: 59.6k, False: 0]
  |  Branch (5379:40): [True: 0, False: 59.6k]
  ------------------
 5380|      0|        SFTKDBHandle *keyHandle = sftk_getKeyDB(slot);
 5381|      0|        crv = sftk_searchDatabase(keyHandle, search, pTemplate, ulCount);
 5382|      0|        sftk_freeDB(keyHandle);
 5383|      0|    }
 5384|  59.6k|    return crv;
 5385|  59.6k|}
pkcs11.c:sftk_pruneSearch:
 5340|  59.6k|{
 5341|  59.6k|    CK_ULONG i;
 5342|       |
 5343|  59.6k|    *searchCertDB = PR_TRUE;
  ------------------
  |  |  437|  59.6k|#define PR_TRUE 1
  ------------------
 5344|  59.6k|    *searchKeyDB = PR_TRUE;
  ------------------
  |  |  437|  59.6k|#define PR_TRUE 1
  ------------------
 5345|   119k|    for (i = 0; i < ulCount; i++) {
  ------------------
  |  Branch (5345:17): [True: 119k, False: 0]
  ------------------
 5346|   119k|        if (pTemplate[i].type == CKA_CLASS && pTemplate[i].pValue != NULL) {
  ------------------
  |  |  511|   238k|#define CKA_CLASS 0x00000000UL
  ------------------
  |  Branch (5346:13): [True: 59.6k, False: 59.5k]
  |  Branch (5346:47): [True: 59.6k, False: 0]
  ------------------
 5347|  59.6k|            CK_OBJECT_CLASS class = *((CK_OBJECT_CLASS *)pTemplate[i].pValue);
 5348|  59.6k|            if (class == CKO_PRIVATE_KEY || class == CKO_SECRET_KEY) {
  ------------------
  |  |  328|   119k|#define CKO_PRIVATE_KEY 0x00000003UL
  ------------------
                          if (class == CKO_PRIVATE_KEY || class == CKO_SECRET_KEY) {
  ------------------
  |  |  329|  59.6k|#define CKO_SECRET_KEY 0x00000004UL
  ------------------
  |  Branch (5348:17): [True: 0, False: 59.6k]
  |  Branch (5348:45): [True: 0, False: 59.6k]
  ------------------
 5349|      0|                *searchCertDB = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 5350|  59.6k|            } else {
 5351|  59.6k|                *searchKeyDB = PR_FALSE;
  ------------------
  |  |  438|  59.6k|#define PR_FALSE 0
  ------------------
 5352|  59.6k|            }
 5353|  59.6k|            break;
 5354|  59.6k|        }
 5355|   119k|    }
 5356|  59.6k|}

NSC_DestroyObject:
  272|  4.32k|{
  273|  4.32k|    SFTKSlot *slot = sftk_SlotFromSessionHandle(hSession);
  274|  4.32k|    SFTKSession *session;
  275|  4.32k|    SFTKObject *object;
  276|  4.32k|    SFTKFreeStatus status;
  277|       |
  278|  4.32k|    CHECK_FORK();
  279|       |
  280|  4.32k|    if (slot == NULL) {
  ------------------
  |  Branch (280:9): [True: 0, False: 4.32k]
  ------------------
  281|      0|        return CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
  282|      0|    }
  283|       |    /*
  284|       |     * This whole block just makes sure we really can destroy the
  285|       |     * requested object.
  286|       |     */
  287|  4.32k|    session = sftk_SessionFromHandle(hSession);
  288|  4.32k|    if (session == NULL) {
  ------------------
  |  Branch (288:9): [True: 0, False: 4.32k]
  ------------------
  289|      0|        return CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
  290|      0|    }
  291|       |
  292|  4.32k|    object = sftk_ObjectFromHandle(hObject, session);
  293|  4.32k|    if (object == NULL) {
  ------------------
  |  Branch (293:9): [True: 0, False: 4.32k]
  ------------------
  294|      0|        sftk_FreeSession(session);
  295|      0|        return CKR_OBJECT_HANDLE_INVALID;
  ------------------
  |  | 1452|      0|#define CKR_OBJECT_HANDLE_INVALID 0x00000082UL
  ------------------
  296|      0|    }
  297|       |
  298|       |    /* don't destroy a private object if we aren't logged in */
  299|  4.32k|    if ((!slot->isLoggedIn) && (slot->needLogin) &&
  ------------------
  |  Branch (299:9): [True: 4.32k, False: 0]
  |  Branch (299:32): [True: 0, False: 4.32k]
  ------------------
  300|  4.32k|        (sftk_isTrue(object, CKA_PRIVATE))) {
  ------------------
  |  |  513|      0|#define CKA_PRIVATE 0x00000002UL
  ------------------
  |  Branch (300:9): [True: 0, False: 0]
  ------------------
  301|      0|        sftk_FreeSession(session);
  302|      0|        sftk_FreeObject(object);
  303|      0|        return CKR_USER_NOT_LOGGED_IN;
  ------------------
  |  | 1486|      0|#define CKR_USER_NOT_LOGGED_IN 0x00000101UL
  ------------------
  304|      0|    }
  305|       |
  306|       |    /* don't destroy a token object if we aren't in a rw session */
  307|       |
  308|  4.32k|    if (((session->info.flags & CKF_RW_SESSION) == 0) &&
  ------------------
  |  |  302|  4.32k|#define CKF_RW_SESSION 0x00000002UL     /* session is r/w */
  ------------------
  |  Branch (308:9): [True: 4.32k, False: 0]
  ------------------
  309|  4.32k|        (sftk_isTrue(object, CKA_TOKEN))) {
  ------------------
  |  |  512|  4.32k|#define CKA_TOKEN 0x00000001UL
  ------------------
  |  Branch (309:9): [True: 0, False: 4.32k]
  ------------------
  310|      0|        sftk_FreeSession(session);
  311|      0|        sftk_FreeObject(object);
  312|      0|        return CKR_SESSION_READ_ONLY;
  ------------------
  |  | 1467|      0|#define CKR_SESSION_READ_ONLY 0x000000B5UL
  ------------------
  313|      0|    }
  314|       |
  315|  4.32k|    sftk_DeleteObject(session, object);
  316|       |
  317|  4.32k|    sftk_FreeSession(session);
  318|       |
  319|       |    /*
  320|       |     * get some indication if the object is destroyed. Note: this is not
  321|       |     * 100%. Someone may have an object reference outstanding (though that
  322|       |     * should not be the case by here. Also note that the object is "half"
  323|       |     * destroyed. Our internal representation is destroyed, but it may still
  324|       |     * be in the data base.
  325|       |     */
  326|  4.32k|    status = sftk_FreeObject(object);
  327|       |
  328|  4.32k|    return (status != SFTK_DestroyFailure) ? CKR_OK : CKR_DEVICE_ERROR;
  ------------------
  |  | 1388|  4.32k|#define CKR_OK 0x00000000UL
  ------------------
                  return (status != SFTK_DestroyFailure) ? CKR_OK : CKR_DEVICE_ERROR;
  ------------------
  |  | 1416|      0|#define CKR_DEVICE_ERROR 0x00000030UL
  ------------------
  |  Branch (328:12): [True: 4.32k, False: 0]
  ------------------
  329|  4.32k|}
sftk_ReturnContextByType:
  376|  34.2k|{
  377|  34.2k|    switch (type) {
  ------------------
  |  Branch (377:13): [True: 0, False: 34.2k]
  ------------------
  378|      0|        case SFTK_ENCRYPT:
  ------------------
  |  Branch (378:9): [True: 0, False: 34.2k]
  ------------------
  379|      0|        case SFTK_DECRYPT:
  ------------------
  |  Branch (379:9): [True: 0, False: 34.2k]
  ------------------
  380|      0|        case SFTK_MESSAGE_ENCRYPT:
  ------------------
  |  Branch (380:9): [True: 0, False: 34.2k]
  ------------------
  381|      0|        case SFTK_MESSAGE_DECRYPT:
  ------------------
  |  Branch (381:9): [True: 0, False: 34.2k]
  ------------------
  382|      0|            return session->enc_context;
  383|  16.9k|        case SFTK_HASH:
  ------------------
  |  Branch (383:9): [True: 16.9k, False: 17.2k]
  ------------------
  384|  16.9k|            return session->hash_context;
  385|      0|        case SFTK_SIGN:
  ------------------
  |  Branch (385:9): [True: 0, False: 34.2k]
  ------------------
  386|      0|        case SFTK_SIGN_RECOVER:
  ------------------
  |  Branch (386:9): [True: 0, False: 34.2k]
  ------------------
  387|  17.2k|        case SFTK_VERIFY:
  ------------------
  |  Branch (387:9): [True: 17.2k, False: 16.9k]
  ------------------
  388|  17.2k|        case SFTK_VERIFY_RECOVER:
  ------------------
  |  Branch (388:9): [True: 6, False: 34.2k]
  ------------------
  389|  17.2k|        case SFTK_MESSAGE_SIGN:
  ------------------
  |  Branch (389:9): [True: 0, False: 34.2k]
  ------------------
  390|  17.2k|        case SFTK_MESSAGE_VERIFY:
  ------------------
  |  Branch (390:9): [True: 0, False: 34.2k]
  ------------------
  391|  17.2k|            return session->hash_context;
  392|  34.2k|    }
  393|      0|    return NULL;
  394|  34.2k|}
sftk_SetContextByType:
  402|  19.9k|{
  403|  19.9k|    switch (type) {
  ------------------
  |  Branch (403:13): [True: 0, False: 19.9k]
  ------------------
  404|      0|        case SFTK_ENCRYPT:
  ------------------
  |  Branch (404:9): [True: 0, False: 19.9k]
  ------------------
  405|      0|        case SFTK_DECRYPT:
  ------------------
  |  Branch (405:9): [True: 0, False: 19.9k]
  ------------------
  406|      0|        case SFTK_MESSAGE_ENCRYPT:
  ------------------
  |  Branch (406:9): [True: 0, False: 19.9k]
  ------------------
  407|      0|        case SFTK_MESSAGE_DECRYPT:
  ------------------
  |  Branch (407:9): [True: 0, False: 19.9k]
  ------------------
  408|      0|            session->enc_context = context;
  409|      0|            break;
  410|  11.3k|        case SFTK_HASH:
  ------------------
  |  Branch (410:9): [True: 11.3k, False: 8.62k]
  ------------------
  411|  11.3k|            session->hash_context = context;
  412|  11.3k|            break;
  413|      0|        case SFTK_SIGN:
  ------------------
  |  Branch (413:9): [True: 0, False: 19.9k]
  ------------------
  414|      0|        case SFTK_SIGN_RECOVER:
  ------------------
  |  Branch (414:9): [True: 0, False: 19.9k]
  ------------------
  415|  8.61k|        case SFTK_VERIFY:
  ------------------
  |  Branch (415:9): [True: 8.61k, False: 11.3k]
  ------------------
  416|  8.62k|        case SFTK_VERIFY_RECOVER:
  ------------------
  |  Branch (416:9): [True: 6, False: 19.9k]
  ------------------
  417|  8.62k|        case SFTK_MESSAGE_SIGN:
  ------------------
  |  Branch (417:9): [True: 0, False: 19.9k]
  ------------------
  418|  8.62k|        case SFTK_MESSAGE_VERIFY:
  ------------------
  |  Branch (418:9): [True: 0, False: 19.9k]
  ------------------
  419|  8.62k|            session->hash_context = context;
  420|  8.62k|            break;
  421|  19.9k|    }
  422|  19.9k|    return;
  423|  19.9k|}
sftk_GetContext:
  435|  24.2k|{
  436|  24.2k|    SFTKSession *session;
  437|  24.2k|    SFTKSessionContext *context;
  438|       |
  439|  24.2k|    session = sftk_SessionFromHandle(handle);
  440|  24.2k|    if (session == NULL)
  ------------------
  |  Branch (440:9): [True: 0, False: 24.2k]
  ------------------
  441|      0|        return CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
  442|  24.2k|    context = sftk_ReturnContextByType(session, type);
  443|       |    /* make sure the context is valid */
  444|  24.2k|    if ((context == NULL) || (context->type != type) || (needMulti && !(context->multi))) {
  ------------------
  |  Branch (444:9): [True: 0, False: 24.2k]
  |  Branch (444:30): [True: 0, False: 24.2k]
  |  Branch (444:58): [True: 19.9k, False: 4.31k]
  |  Branch (444:71): [True: 0, False: 19.9k]
  ------------------
  445|      0|        sftk_FreeSession(session);
  446|      0|        return CKR_OPERATION_NOT_INITIALIZED;
  ------------------
  |  | 1454|      0|#define CKR_OPERATION_NOT_INITIALIZED 0x00000091UL
  ------------------
  447|      0|    }
  448|  24.2k|    *contextPtr = context;
  449|  24.2k|    if (sessionPtr != NULL) {
  ------------------
  |  Branch (449:9): [True: 18.5k, False: 5.65k]
  ------------------
  450|  18.5k|        *sessionPtr = session;
  451|  18.5k|    } else {
  452|  5.65k|        sftk_FreeSession(session);
  453|  5.65k|    }
  454|  24.2k|    return CKR_OK;
  ------------------
  |  | 1388|  24.2k|#define CKR_OK 0x00000000UL
  ------------------
  455|  24.2k|}
sftk_TerminateOp:
  463|  9.97k|{
  464|  9.97k|    session->lastOpWasFIPS = context->isFIPS;
  465|  9.97k|    sftk_FreeContext(context);
  466|  9.97k|    sftk_SetContextByType(session, ctype, NULL);
  467|  9.97k|}
sftk_InitGeneric:
  483|  9.97k|{
  484|  9.97k|    SFTKObject *key = NULL;
  485|  9.97k|    SFTKAttribute *att;
  486|  9.97k|    SFTKSessionContext *context;
  487|       |
  488|       |    /* We can only init if there is not current context active */
  489|  9.97k|    if (sftk_ReturnContextByType(session, ctype) != NULL) {
  ------------------
  |  Branch (489:9): [True: 0, False: 9.97k]
  ------------------
  490|      0|        return CKR_OPERATION_ACTIVE;
  ------------------
  |  | 1453|      0|#define CKR_OPERATION_ACTIVE 0x00000090UL
  ------------------
  491|      0|    }
  492|       |
  493|       |    /* find the key */
  494|  9.97k|    if (keyPtr) {
  ------------------
  |  Branch (494:9): [True: 4.31k, False: 5.65k]
  ------------------
  495|  4.31k|        key = sftk_ObjectFromHandle(hKey, session);
  496|  4.31k|        if (key == NULL) {
  ------------------
  |  Branch (496:13): [True: 0, False: 4.31k]
  ------------------
  497|      0|            return CKR_KEY_HANDLE_INVALID;
  ------------------
  |  | 1428|      0|#define CKR_KEY_HANDLE_INVALID 0x00000060UL
  ------------------
  498|      0|        }
  499|       |
  500|       |        /* make sure it's a valid  key for this operation */
  501|  4.31k|        if (((key->objclass != CKO_SECRET_KEY) &&
  ------------------
  |  |  329|  4.31k|#define CKO_SECRET_KEY 0x00000004UL
  ------------------
  |  Branch (501:14): [True: 4.31k, False: 0]
  ------------------
  502|  4.31k|             (key->objclass != pubKeyType)) ||
  ------------------
  |  Branch (502:14): [True: 0, False: 4.31k]
  ------------------
  503|  4.31k|            !sftk_isTrue(key, operation)) {
  ------------------
  |  Branch (503:13): [True: 0, False: 4.31k]
  ------------------
  504|      0|            sftk_FreeObject(key);
  505|      0|            return CKR_KEY_TYPE_INCONSISTENT;
  ------------------
  |  | 1433|      0|#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
  ------------------
  506|      0|        }
  507|       |        /* get the key type */
  508|  4.31k|        att = sftk_FindAttribute(key, CKA_KEY_TYPE);
  ------------------
  |  |  543|  4.31k|#define CKA_KEY_TYPE 0x00000100UL
  ------------------
  509|  4.31k|        if (att == NULL) {
  ------------------
  |  Branch (509:13): [True: 0, False: 4.31k]
  ------------------
  510|      0|            sftk_FreeObject(key);
  511|      0|            return CKR_KEY_TYPE_INCONSISTENT;
  ------------------
  |  | 1433|      0|#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
  ------------------
  512|      0|        }
  513|  4.31k|        PORT_Assert(att->attrib.ulValueLen == sizeof(CK_KEY_TYPE));
  ------------------
  |  |  120|  4.31k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  4.31k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 4.31k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  514|  4.31k|        if (att->attrib.ulValueLen != sizeof(CK_KEY_TYPE)) {
  ------------------
  |  Branch (514:13): [True: 0, False: 4.31k]
  ------------------
  515|      0|            sftk_FreeAttribute(att);
  516|      0|            sftk_FreeObject(key);
  517|      0|            return CKR_ATTRIBUTE_VALUE_INVALID;
  ------------------
  |  | 1409|      0|#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
  ------------------
  518|      0|        }
  519|  4.31k|        PORT_Memcpy(keyTypePtr, att->attrib.pValue, sizeof(CK_KEY_TYPE));
  ------------------
  |  |  180|  4.31k|#define PORT_Memcpy memcpy
  ------------------
  520|  4.31k|        sftk_FreeAttribute(att);
  521|  4.31k|        *keyPtr = key;
  522|  4.31k|    }
  523|       |
  524|       |    /* allocate the context structure */
  525|  9.97k|    context = (SFTKSessionContext *)PORT_Alloc(sizeof(SFTKSessionContext));
  ------------------
  |  |   52|  9.97k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  526|  9.97k|    if (context == NULL) {
  ------------------
  |  Branch (526:9): [True: 0, False: 9.97k]
  ------------------
  527|      0|        if (key)
  ------------------
  |  Branch (527:13): [True: 0, False: 0]
  ------------------
  528|      0|            sftk_FreeObject(key);
  529|      0|        return CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
  530|      0|    }
  531|  9.97k|    context->type = ctype;
  532|  9.97k|    context->multi = PR_TRUE;
  ------------------
  |  |  437|  9.97k|#define PR_TRUE 1
  ------------------
  533|  9.97k|    context->rsa = PR_FALSE;
  ------------------
  |  |  438|  9.97k|#define PR_FALSE 0
  ------------------
  534|  9.97k|    context->cipherInfo = NULL;
  535|  9.97k|    context->hashInfo = NULL;
  536|  9.97k|    context->doPad = PR_FALSE;
  ------------------
  |  |  438|  9.97k|#define PR_FALSE 0
  ------------------
  537|  9.97k|    context->padDataLength = 0;
  538|  9.97k|    context->key = key;
  539|  9.97k|    context->blockSize = 0;
  540|  9.97k|    context->maxLen = 0;
  541|  9.97k|    context->isFIPS = sftk_operationIsFIPS(session->slot, pMechanism,
  542|  9.97k|                                           operation, key);
  543|  9.97k|    *contextPtr = context;
  544|  9.97k|    return CKR_OK;
  ------------------
  |  | 1388|  9.97k|#define CKR_OK 0x00000000UL
  ------------------
  545|  9.97k|}
NSC_DigestInit:
 1977|  5.65k|{
 1978|  5.65k|    SFTKSession *session;
 1979|  5.65k|    SFTKSessionContext *context;
 1980|  5.65k|    CK_RV crv = CKR_OK;
  ------------------
  |  | 1388|  5.65k|#define CKR_OK 0x00000000UL
  ------------------
 1981|       |
 1982|  5.65k|    CHECK_FORK();
 1983|       |
 1984|  5.65k|    session = sftk_SessionFromHandle(hSession);
 1985|  5.65k|    if (session == NULL)
  ------------------
  |  Branch (1985:9): [True: 0, False: 5.65k]
  ------------------
 1986|      0|        return CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
 1987|  5.65k|    crv = sftk_InitGeneric(session, pMechanism, &context, SFTK_HASH,
 1988|  5.65k|                           NULL, 0, NULL, 0, CKA_DIGEST);
  ------------------
  |  |   68|  5.65k|#define CKA_DIGEST 0x81000000L
  ------------------
 1989|  5.65k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  5.65k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1989:9): [True: 0, False: 5.65k]
  ------------------
 1990|      0|        sftk_FreeSession(session);
 1991|      0|        return crv;
 1992|      0|    }
 1993|       |
 1994|  5.65k|#define INIT_MECH(mmm)                                         \
 1995|  5.65k|    case CKM_##mmm: {                                          \
 1996|  5.65k|        mmm##Context *mmm##_ctx = mmm##_NewContext();          \
 1997|  5.65k|        context->cipherInfo = (void *)mmm##_ctx;               \
 1998|  5.65k|        context->cipherInfoLen = mmm##_FlattenSize(mmm##_ctx); \
 1999|  5.65k|        context->currentMech = CKM_##mmm;                      \
 2000|  5.65k|        context->hashUpdate = SFTKHash_##mmm##_Update;         \
 2001|  5.65k|        context->end = SFTKHash_##mmm##_End;                   \
 2002|  5.65k|        context->destroy = SFTKHash_##mmm##_DestroyContext;    \
 2003|  5.65k|        context->maxLen = mmm##_LENGTH;                        \
 2004|  5.65k|        if (mmm##_ctx)                                         \
 2005|  5.65k|            mmm##_Begin(mmm##_ctx);                            \
 2006|  5.65k|        else                                                   \
 2007|  5.65k|            crv = CKR_HOST_MEMORY;                             \
 2008|  5.65k|        break;                                                 \
 2009|  5.65k|    }
 2010|       |
 2011|  5.65k|    switch (pMechanism->mechanism) {
 2012|      0|        INIT_MECH(MD2)
  ------------------
  |  | 1995|      0|    case CKM_##mmm: {                                          \
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 0, False: 5.65k]
  |  |  ------------------
  |  | 1996|      0|        mmm##Context *mmm##_ctx = mmm##_NewContext();          \
  |  | 1997|      0|        context->cipherInfo = (void *)mmm##_ctx;               \
  |  | 1998|      0|        context->cipherInfoLen = mmm##_FlattenSize(mmm##_ctx); \
  |  | 1999|      0|        context->currentMech = CKM_##mmm;                      \
  |  | 2000|      0|        context->hashUpdate = SFTKHash_##mmm##_Update;         \
  |  | 2001|      0|        context->end = SFTKHash_##mmm##_End;                   \
  |  | 2002|      0|        context->destroy = SFTKHash_##mmm##_DestroyContext;    \
  |  | 2003|      0|        context->maxLen = mmm##_LENGTH;                        \
  |  | 2004|      0|        if (mmm##_ctx)                                         \
  |  | 2005|      0|            mmm##_Begin(mmm##_ctx);                            \
  |  | 2006|      0|        else                                                   \
  |  | 2007|      0|            crv = CKR_HOST_MEMORY;                             \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 2008|      0|        break;                                                 \
  |  | 2009|      0|    }
  ------------------
 2013|      0|        INIT_MECH(MD5)
  ------------------
  |  | 1995|      0|    case CKM_##mmm: {                                          \
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 0, False: 5.65k]
  |  |  ------------------
  |  | 1996|      0|        mmm##Context *mmm##_ctx = mmm##_NewContext();          \
  |  | 1997|      0|        context->cipherInfo = (void *)mmm##_ctx;               \
  |  | 1998|      0|        context->cipherInfoLen = mmm##_FlattenSize(mmm##_ctx); \
  |  | 1999|      0|        context->currentMech = CKM_##mmm;                      \
  |  | 2000|      0|        context->hashUpdate = SFTKHash_##mmm##_Update;         \
  |  | 2001|      0|        context->end = SFTKHash_##mmm##_End;                   \
  |  | 2002|      0|        context->destroy = SFTKHash_##mmm##_DestroyContext;    \
  |  | 2003|      0|        context->maxLen = mmm##_LENGTH;                        \
  |  | 2004|      0|        if (mmm##_ctx)                                         \
  |  | 2005|      0|            mmm##_Begin(mmm##_ctx);                            \
  |  | 2006|      0|        else                                                   \
  |  | 2007|      0|            crv = CKR_HOST_MEMORY;                             \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 2008|      0|        break;                                                 \
  |  | 2009|      0|    }
  ------------------
 2014|  5.61k|        INIT_MECH(SHA1)
  ------------------
  |  | 1995|  5.61k|    case CKM_##mmm: {                                          \
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 5.61k, False: 40]
  |  |  ------------------
  |  | 1996|  5.61k|        mmm##Context *mmm##_ctx = mmm##_NewContext();          \
  |  | 1997|  5.61k|        context->cipherInfo = (void *)mmm##_ctx;               \
  |  | 1998|  5.61k|        context->cipherInfoLen = mmm##_FlattenSize(mmm##_ctx); \
  |  | 1999|  5.61k|        context->currentMech = CKM_##mmm;                      \
  |  | 2000|  5.61k|        context->hashUpdate = SFTKHash_##mmm##_Update;         \
  |  | 2001|  5.61k|        context->end = SFTKHash_##mmm##_End;                   \
  |  | 2002|  5.61k|        context->destroy = SFTKHash_##mmm##_DestroyContext;    \
  |  | 2003|  5.61k|        context->maxLen = mmm##_LENGTH;                        \
  |  | 2004|  5.61k|        if (mmm##_ctx)                                         \
  |  | 2005|  5.61k|            mmm##_Begin(mmm##_ctx);                            \
  |  | 2006|  5.61k|        else                                                   \
  |  | 2007|  5.61k|            crv = CKR_HOST_MEMORY;                             \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 2008|  5.61k|        break;                                                 \
  |  | 2009|  5.61k|    }
  ------------------
 2015|      1|        INIT_MECH(SHA224)
  ------------------
  |  | 1995|      1|    case CKM_##mmm: {                                          \
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 1, False: 5.65k]
  |  |  ------------------
  |  | 1996|      1|        mmm##Context *mmm##_ctx = mmm##_NewContext();          \
  |  | 1997|      1|        context->cipherInfo = (void *)mmm##_ctx;               \
  |  | 1998|      1|        context->cipherInfoLen = mmm##_FlattenSize(mmm##_ctx); \
  |  | 1999|      1|        context->currentMech = CKM_##mmm;                      \
  |  | 2000|      1|        context->hashUpdate = SFTKHash_##mmm##_Update;         \
  |  | 2001|      1|        context->end = SFTKHash_##mmm##_End;                   \
  |  | 2002|      1|        context->destroy = SFTKHash_##mmm##_DestroyContext;    \
  |  | 2003|      1|        context->maxLen = mmm##_LENGTH;                        \
  |  | 2004|      1|        if (mmm##_ctx)                                         \
  |  | 2005|      1|            mmm##_Begin(mmm##_ctx);                            \
  |  | 2006|      1|        else                                                   \
  |  | 2007|      1|            crv = CKR_HOST_MEMORY;                             \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 2008|      1|        break;                                                 \
  |  | 2009|      1|    }
  ------------------
 2016|     35|        INIT_MECH(SHA256)
  ------------------
  |  | 1995|     35|    case CKM_##mmm: {                                          \
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 35, False: 5.62k]
  |  |  ------------------
  |  | 1996|     35|        mmm##Context *mmm##_ctx = mmm##_NewContext();          \
  |  | 1997|     35|        context->cipherInfo = (void *)mmm##_ctx;               \
  |  | 1998|     35|        context->cipherInfoLen = mmm##_FlattenSize(mmm##_ctx); \
  |  | 1999|     35|        context->currentMech = CKM_##mmm;                      \
  |  | 2000|     35|        context->hashUpdate = SFTKHash_##mmm##_Update;         \
  |  | 2001|     35|        context->end = SFTKHash_##mmm##_End;                   \
  |  | 2002|     35|        context->destroy = SFTKHash_##mmm##_DestroyContext;    \
  |  | 2003|     35|        context->maxLen = mmm##_LENGTH;                        \
  |  | 2004|     35|        if (mmm##_ctx)                                         \
  |  | 2005|     35|            mmm##_Begin(mmm##_ctx);                            \
  |  | 2006|     35|        else                                                   \
  |  | 2007|     35|            crv = CKR_HOST_MEMORY;                             \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 2008|     35|        break;                                                 \
  |  | 2009|     35|    }
  ------------------
 2017|      3|        INIT_MECH(SHA384)
  ------------------
  |  | 1995|      3|    case CKM_##mmm: {                                          \
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 3, False: 5.65k]
  |  |  ------------------
  |  | 1996|      3|        mmm##Context *mmm##_ctx = mmm##_NewContext();          \
  |  | 1997|      3|        context->cipherInfo = (void *)mmm##_ctx;               \
  |  | 1998|      3|        context->cipherInfoLen = mmm##_FlattenSize(mmm##_ctx); \
  |  | 1999|      3|        context->currentMech = CKM_##mmm;                      \
  |  | 2000|      3|        context->hashUpdate = SFTKHash_##mmm##_Update;         \
  |  | 2001|      3|        context->end = SFTKHash_##mmm##_End;                   \
  |  | 2002|      3|        context->destroy = SFTKHash_##mmm##_DestroyContext;    \
  |  | 2003|      3|        context->maxLen = mmm##_LENGTH;                        \
  |  | 2004|      3|        if (mmm##_ctx)                                         \
  |  | 2005|      3|            mmm##_Begin(mmm##_ctx);                            \
  |  | 2006|      3|        else                                                   \
  |  | 2007|      3|            crv = CKR_HOST_MEMORY;                             \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 2008|      3|        break;                                                 \
  |  | 2009|      3|    }
  ------------------
 2018|      1|        INIT_MECH(SHA512)
  ------------------
  |  | 1995|      1|    case CKM_##mmm: {                                          \
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 1, False: 5.65k]
  |  |  ------------------
  |  | 1996|      1|        mmm##Context *mmm##_ctx = mmm##_NewContext();          \
  |  | 1997|      1|        context->cipherInfo = (void *)mmm##_ctx;               \
  |  | 1998|      1|        context->cipherInfoLen = mmm##_FlattenSize(mmm##_ctx); \
  |  | 1999|      1|        context->currentMech = CKM_##mmm;                      \
  |  | 2000|      1|        context->hashUpdate = SFTKHash_##mmm##_Update;         \
  |  | 2001|      1|        context->end = SFTKHash_##mmm##_End;                   \
  |  | 2002|      1|        context->destroy = SFTKHash_##mmm##_DestroyContext;    \
  |  | 2003|      1|        context->maxLen = mmm##_LENGTH;                        \
  |  | 2004|      1|        if (mmm##_ctx)                                         \
  |  | 2005|      1|            mmm##_Begin(mmm##_ctx);                            \
  |  | 2006|      1|        else                                                   \
  |  | 2007|      1|            crv = CKR_HOST_MEMORY;                             \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 2008|      1|        break;                                                 \
  |  | 2009|      1|    }
  ------------------
 2019|      0|        INIT_MECH(SHA3_224)
  ------------------
  |  | 1995|      0|    case CKM_##mmm: {                                          \
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 0, False: 5.65k]
  |  |  ------------------
  |  | 1996|      0|        mmm##Context *mmm##_ctx = mmm##_NewContext();          \
  |  | 1997|      0|        context->cipherInfo = (void *)mmm##_ctx;               \
  |  | 1998|      0|        context->cipherInfoLen = mmm##_FlattenSize(mmm##_ctx); \
  |  | 1999|      0|        context->currentMech = CKM_##mmm;                      \
  |  | 2000|      0|        context->hashUpdate = SFTKHash_##mmm##_Update;         \
  |  | 2001|      0|        context->end = SFTKHash_##mmm##_End;                   \
  |  | 2002|      0|        context->destroy = SFTKHash_##mmm##_DestroyContext;    \
  |  | 2003|      0|        context->maxLen = mmm##_LENGTH;                        \
  |  | 2004|      0|        if (mmm##_ctx)                                         \
  |  | 2005|      0|            mmm##_Begin(mmm##_ctx);                            \
  |  | 2006|      0|        else                                                   \
  |  | 2007|      0|            crv = CKR_HOST_MEMORY;                             \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 2008|      0|        break;                                                 \
  |  | 2009|      0|    }
  ------------------
 2020|      0|        INIT_MECH(SHA3_256)
  ------------------
  |  | 1995|      0|    case CKM_##mmm: {                                          \
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 0, False: 5.65k]
  |  |  ------------------
  |  | 1996|      0|        mmm##Context *mmm##_ctx = mmm##_NewContext();          \
  |  | 1997|      0|        context->cipherInfo = (void *)mmm##_ctx;               \
  |  | 1998|      0|        context->cipherInfoLen = mmm##_FlattenSize(mmm##_ctx); \
  |  | 1999|      0|        context->currentMech = CKM_##mmm;                      \
  |  | 2000|      0|        context->hashUpdate = SFTKHash_##mmm##_Update;         \
  |  | 2001|      0|        context->end = SFTKHash_##mmm##_End;                   \
  |  | 2002|      0|        context->destroy = SFTKHash_##mmm##_DestroyContext;    \
  |  | 2003|      0|        context->maxLen = mmm##_LENGTH;                        \
  |  | 2004|      0|        if (mmm##_ctx)                                         \
  |  | 2005|      0|            mmm##_Begin(mmm##_ctx);                            \
  |  | 2006|      0|        else                                                   \
  |  | 2007|      0|            crv = CKR_HOST_MEMORY;                             \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 2008|      0|        break;                                                 \
  |  | 2009|      0|    }
  ------------------
 2021|      0|        INIT_MECH(SHA3_384)
  ------------------
  |  | 1995|      0|    case CKM_##mmm: {                                          \
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 0, False: 5.65k]
  |  |  ------------------
  |  | 1996|      0|        mmm##Context *mmm##_ctx = mmm##_NewContext();          \
  |  | 1997|      0|        context->cipherInfo = (void *)mmm##_ctx;               \
  |  | 1998|      0|        context->cipherInfoLen = mmm##_FlattenSize(mmm##_ctx); \
  |  | 1999|      0|        context->currentMech = CKM_##mmm;                      \
  |  | 2000|      0|        context->hashUpdate = SFTKHash_##mmm##_Update;         \
  |  | 2001|      0|        context->end = SFTKHash_##mmm##_End;                   \
  |  | 2002|      0|        context->destroy = SFTKHash_##mmm##_DestroyContext;    \
  |  | 2003|      0|        context->maxLen = mmm##_LENGTH;                        \
  |  | 2004|      0|        if (mmm##_ctx)                                         \
  |  | 2005|      0|            mmm##_Begin(mmm##_ctx);                            \
  |  | 2006|      0|        else                                                   \
  |  | 2007|      0|            crv = CKR_HOST_MEMORY;                             \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 2008|      0|        break;                                                 \
  |  | 2009|      0|    }
  ------------------
 2022|      0|        INIT_MECH(SHA3_512)
  ------------------
  |  | 1995|      0|    case CKM_##mmm: {                                          \
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 0, False: 5.65k]
  |  |  ------------------
  |  | 1996|      0|        mmm##Context *mmm##_ctx = mmm##_NewContext();          \
  |  | 1997|      0|        context->cipherInfo = (void *)mmm##_ctx;               \
  |  | 1998|      0|        context->cipherInfoLen = mmm##_FlattenSize(mmm##_ctx); \
  |  | 1999|      0|        context->currentMech = CKM_##mmm;                      \
  |  | 2000|      0|        context->hashUpdate = SFTKHash_##mmm##_Update;         \
  |  | 2001|      0|        context->end = SFTKHash_##mmm##_End;                   \
  |  | 2002|      0|        context->destroy = SFTKHash_##mmm##_DestroyContext;    \
  |  | 2003|      0|        context->maxLen = mmm##_LENGTH;                        \
  |  | 2004|      0|        if (mmm##_ctx)                                         \
  |  | 2005|      0|            mmm##_Begin(mmm##_ctx);                            \
  |  | 2006|      0|        else                                                   \
  |  | 2007|      0|            crv = CKR_HOST_MEMORY;                             \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 2008|      0|        break;                                                 \
  |  | 2009|      0|    }
  ------------------
 2023|       |
 2024|      0|        default:
  ------------------
  |  Branch (2024:9): [True: 0, False: 5.65k]
  ------------------
 2025|      0|            crv = CKR_MECHANISM_INVALID;
  ------------------
  |  | 1447|      0|#define CKR_MECHANISM_INVALID 0x00000070UL
  ------------------
 2026|      0|            break;
 2027|  5.65k|    }
 2028|       |
 2029|  5.65k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  5.65k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (2029:9): [True: 0, False: 5.65k]
  ------------------
 2030|      0|        sftk_FreeContext(context);
 2031|      0|        sftk_FreeSession(session);
 2032|      0|        return crv;
 2033|      0|    }
 2034|  5.65k|    sftk_SetContextByType(session, SFTK_HASH, context);
 2035|  5.65k|    sftk_FreeSession(session);
 2036|  5.65k|    return CKR_OK;
  ------------------
  |  | 1388|  5.65k|#define CKR_OK 0x00000000UL
  ------------------
 2037|  5.65k|}
NSC_DigestUpdate:
 2088|  5.65k|{
 2089|  5.65k|    SFTKSessionContext *context;
 2090|  5.65k|    CK_RV crv;
 2091|       |
 2092|  5.65k|    CHECK_FORK();
 2093|       |
 2094|       |    /* make sure we're legal */
 2095|  5.65k|    crv = sftk_GetContext(hSession, &context, SFTK_HASH, PR_TRUE, NULL);
  ------------------
  |  |  437|  5.65k|#define PR_TRUE 1
  ------------------
 2096|  5.65k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  5.65k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (2096:9): [True: 0, False: 5.65k]
  ------------------
 2097|      0|        return crv;
 2098|       |
 2099|  5.65k|#if (ULONG_MAX > UINT_MAX)
 2100|       |    /* The context->hashUpdate function takes an unsigned int for its data
 2101|       |     * length argument, but NSC_DigestUpdate takes an unsigned long. */
 2102|  5.65k|    while (ulPartLen > UINT_MAX) {
  ------------------
  |  Branch (2102:12): [True: 0, False: 5.65k]
  ------------------
 2103|      0|        (*context->hashUpdate)(context->cipherInfo, pPart, UINT_MAX);
 2104|      0|        pPart += UINT_MAX;
 2105|      0|        ulPartLen -= UINT_MAX;
 2106|      0|    }
 2107|  5.65k|#endif
 2108|  5.65k|    (*context->hashUpdate)(context->cipherInfo, pPart, ulPartLen);
 2109|       |
 2110|  5.65k|    return CKR_OK;
  ------------------
  |  | 1388|  5.65k|#define CKR_OK 0x00000000UL
  ------------------
 2111|  5.65k|}
NSC_DigestFinal:
 2117|  5.65k|{
 2118|  5.65k|    SFTKSession *session;
 2119|  5.65k|    SFTKSessionContext *context;
 2120|  5.65k|    unsigned int maxout = *pulDigestLen;
 2121|  5.65k|    unsigned int digestLen;
 2122|  5.65k|    CK_RV crv;
 2123|       |
 2124|  5.65k|    CHECK_FORK();
 2125|       |
 2126|       |    /* make sure we're legal */
 2127|  5.65k|    crv = sftk_GetContext(hSession, &context, SFTK_HASH, PR_TRUE, &session);
  ------------------
  |  |  437|  5.65k|#define PR_TRUE 1
  ------------------
 2128|  5.65k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  5.65k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (2128:9): [True: 0, False: 5.65k]
  ------------------
 2129|      0|        return crv;
 2130|       |
 2131|  5.65k|    if (pDigest != NULL) {
  ------------------
  |  Branch (2131:9): [True: 5.65k, False: 0]
  ------------------
 2132|  5.65k|        (*context->end)(context->cipherInfo, pDigest, &digestLen, maxout);
 2133|  5.65k|        *pulDigestLen = digestLen;
 2134|  5.65k|        sftk_TerminateOp(session, SFTK_HASH, context);
 2135|  5.65k|    } else {
 2136|      0|        *pulDigestLen = context->maxLen;
 2137|      0|    }
 2138|       |
 2139|  5.65k|    sftk_FreeSession(session);
 2140|  5.65k|    return CKR_OK;
  ------------------
  |  | 1388|  5.65k|#define CKR_OK 0x00000000UL
  ------------------
 2141|  5.65k|}
RSA_HashCheckSign:
 3620|  2.68k|{
 3621|  2.68k|    unsigned char *pkcs1DigestInfoData;
 3622|  2.68k|    SECItem pkcs1DigestInfo;
 3623|  2.68k|    SECItem digest;
 3624|  2.68k|    unsigned int bufferSize;
 3625|  2.68k|    SECStatus rv;
 3626|       |
 3627|       |    /* pkcs1DigestInfo.data must be less than key->u.rsa.modulus.len */
 3628|  2.68k|    bufferSize = key->u.rsa.modulus.len;
 3629|  2.68k|    pkcs1DigestInfoData = PORT_ZAlloc(bufferSize);
  ------------------
  |  |   72|  2.68k|#define PORT_ZAlloc PORT_ZAlloc_Util
  ------------------
 3630|  2.68k|    if (!pkcs1DigestInfoData) {
  ------------------
  |  Branch (3630:9): [True: 0, False: 2.68k]
  ------------------
 3631|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 3632|      0|        return SECFailure;
 3633|      0|    }
 3634|       |
 3635|  2.68k|    pkcs1DigestInfo.data = pkcs1DigestInfoData;
 3636|  2.68k|    pkcs1DigestInfo.len = bufferSize;
 3637|       |
 3638|       |    /* decrypt the block */
 3639|  2.68k|    rv = RSA_CheckSignRecover(&key->u.rsa, pkcs1DigestInfo.data,
 3640|  2.68k|                              &pkcs1DigestInfo.len, pkcs1DigestInfo.len,
 3641|  2.68k|                              sig, sigLen);
 3642|  2.68k|    if (rv != SECSuccess) {
  ------------------
  |  Branch (3642:9): [True: 2.56k, False: 115]
  ------------------
 3643|  2.56k|        PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|  2.56k|#define PORT_SetError PORT_SetError_Util
  ------------------
 3644|  2.56k|    } else {
 3645|    115|        digest.data = (PRUint8 *)digestData;
 3646|    115|        digest.len = digestLen;
 3647|    115|        rv = _SGN_VerifyPKCS1DigestInfo(
 3648|    115|            digestOid, &digest, &pkcs1DigestInfo,
 3649|    115|            PR_FALSE /*XXX: unsafeAllowMissingParameters*/);
  ------------------
  |  |  438|    115|#define PR_FALSE 0
  ------------------
 3650|    115|    }
 3651|       |
 3652|  2.68k|    PORT_ZFree(pkcs1DigestInfoData, bufferSize);
  ------------------
  |  |   75|  2.68k|#define PORT_ZFree PORT_ZFree_Util
  ------------------
 3653|  2.68k|    return rv;
 3654|  2.68k|}
NSC_VerifyInit:
 3715|  4.30k|{
 3716|  4.30k|    SFTKSession *session;
 3717|  4.30k|    SFTKObject *key;
 3718|  4.30k|    SFTKSessionContext *context;
 3719|  4.30k|    CK_KEY_TYPE key_type;
 3720|  4.30k|    CK_RV crv = CKR_OK;
  ------------------
  |  | 1388|  4.30k|#define CKR_OK 0x00000000UL
  ------------------
 3721|  4.30k|    NSSLOWKEYPublicKey *pubKey;
 3722|  4.30k|    SFTKHashVerifyInfo *info = NULL;
 3723|  4.30k|    SFTKPSSVerifyInfo *pinfo = NULL;
 3724|       |
 3725|  4.30k|    CHECK_FORK();
 3726|       |
 3727|       |    /* Block Cipher MACing Algorithms use a different Context init method..*/
 3728|  4.30k|    crv = sftk_InitCBCMac(hSession, pMechanism, hKey, CKA_VERIFY, SFTK_VERIFY);
  ------------------
  |  |  553|  4.30k|#define CKA_VERIFY 0x0000010AUL
  ------------------
 3729|  4.30k|    if (crv != CKR_FUNCTION_NOT_SUPPORTED)
  ------------------
  |  | 1426|  4.30k|#define CKR_FUNCTION_NOT_SUPPORTED 0x00000054UL
  ------------------
  |  Branch (3729:9): [True: 0, False: 4.30k]
  ------------------
 3730|      0|        return crv;
 3731|       |
 3732|  4.30k|    session = sftk_SessionFromHandle(hSession);
 3733|  4.30k|    if (session == NULL)
  ------------------
  |  Branch (3733:9): [True: 0, False: 4.30k]
  ------------------
 3734|      0|        return CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
 3735|  4.30k|    crv = sftk_InitGeneric(session, pMechanism, &context, SFTK_VERIFY, &key,
 3736|  4.30k|                           hKey, &key_type, CKO_PUBLIC_KEY, CKA_VERIFY);
  ------------------
  |  |  327|  4.30k|#define CKO_PUBLIC_KEY 0x00000002UL
  ------------------
                                         hKey, &key_type, CKO_PUBLIC_KEY, CKA_VERIFY);
  ------------------
  |  |  553|  4.30k|#define CKA_VERIFY 0x0000010AUL
  ------------------
 3737|  4.30k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  4.30k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3737:9): [True: 0, False: 4.30k]
  ------------------
 3738|      0|        sftk_FreeSession(session);
 3739|      0|        return crv;
 3740|      0|    }
 3741|       |
 3742|  4.30k|    context->multi = PR_FALSE;
  ------------------
  |  |  438|  4.30k|#define PR_FALSE 0
  ------------------
 3743|       |
 3744|  4.30k|#define INIT_RSA_VFY_MECH(mmm)                \
 3745|  4.30k|    case CKM_##mmm##_RSA_PKCS:                \
 3746|  4.30k|        context->multi = PR_TRUE;             \
 3747|  4.30k|        crv = sftk_doSub##mmm(context);       \
 3748|  4.30k|        if (crv != CKR_OK)                    \
 3749|  4.30k|            break;                            \
 3750|  4.30k|        context->verify = sftk_hashCheckSign; \
 3751|  4.30k|        info = PORT_New(SFTKHashVerifyInfo);  \
 3752|  4.30k|        if (info == NULL) {                   \
 3753|  4.30k|            crv = CKR_HOST_MEMORY;            \
 3754|  4.30k|            break;                            \
 3755|  4.30k|        }                                     \
 3756|  4.30k|        info->hashOid = SEC_OID_##mmm;        \
 3757|  4.30k|        goto finish_rsa;
 3758|       |
 3759|  4.30k|    switch (pMechanism->mechanism) {
 3760|      0|        INIT_RSA_VFY_MECH(MD5)
  ------------------
  |  | 3745|      0|    case CKM_##mmm##_RSA_PKCS:                \
  |  |  ------------------
  |  |  |  Branch (3745:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3746|      0|        context->multi = PR_TRUE;             \
  |  |  ------------------
  |  |  |  |  437|      0|#define PR_TRUE 1
  |  |  ------------------
  |  | 3747|      0|        crv = sftk_doSub##mmm(context);       \
  |  | 3748|      0|        if (crv != CKR_OK)                    \
  |  |  ------------------
  |  |  |  | 1388|      0|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3748:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3749|      0|            break;                            \
  |  | 3750|      0|        context->verify = sftk_hashCheckSign; \
  |  | 3751|      0|        info = PORT_New(SFTKHashVerifyInfo);  \
  |  |  ------------------
  |  |  |  |  151|      0|#define PORT_New(type) (type *)PORT_Alloc(sizeof(type))
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define PORT_Alloc PORT_Alloc_Util
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3752|      0|        if (info == NULL) {                   \
  |  |  ------------------
  |  |  |  Branch (3752:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3753|      0|            crv = CKR_HOST_MEMORY;            \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 3754|      0|            break;                            \
  |  | 3755|      0|        }                                     \
  |  | 3756|      0|        info->hashOid = SEC_OID_##mmm;        \
  |  | 3757|      0|        goto finish_rsa;
  ------------------
 3761|      0|        INIT_RSA_VFY_MECH(MD2)
  ------------------
  |  | 3745|      0|    case CKM_##mmm##_RSA_PKCS:                \
  |  |  ------------------
  |  |  |  Branch (3745:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3746|      0|        context->multi = PR_TRUE;             \
  |  |  ------------------
  |  |  |  |  437|      0|#define PR_TRUE 1
  |  |  ------------------
  |  | 3747|      0|        crv = sftk_doSub##mmm(context);       \
  |  | 3748|      0|        if (crv != CKR_OK)                    \
  |  |  ------------------
  |  |  |  | 1388|      0|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3748:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3749|      0|            break;                            \
  |  | 3750|      0|        context->verify = sftk_hashCheckSign; \
  |  | 3751|      0|        info = PORT_New(SFTKHashVerifyInfo);  \
  |  |  ------------------
  |  |  |  |  151|      0|#define PORT_New(type) (type *)PORT_Alloc(sizeof(type))
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|#define PORT_Alloc PORT_Alloc_Util
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3752|      0|        if (info == NULL) {                   \
  |  |  ------------------
  |  |  |  Branch (3752:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3753|      0|            crv = CKR_HOST_MEMORY;            \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 3754|      0|            break;                            \
  |  | 3755|      0|        }                                     \
  |  | 3756|      0|        info->hashOid = SEC_OID_##mmm;        \
  |  | 3757|      0|        goto finish_rsa;
  ------------------
 3762|      2|        INIT_RSA_VFY_MECH(SHA1)
  ------------------
  |  | 3745|      1|    case CKM_##mmm##_RSA_PKCS:                \
  |  |  ------------------
  |  |  |  Branch (3745:5): [True: 1, False: 4.30k]
  |  |  ------------------
  |  | 3746|      1|        context->multi = PR_TRUE;             \
  |  |  ------------------
  |  |  |  |  437|      1|#define PR_TRUE 1
  |  |  ------------------
  |  | 3747|      1|        crv = sftk_doSub##mmm(context);       \
  |  | 3748|      1|        if (crv != CKR_OK)                    \
  |  |  ------------------
  |  |  |  | 1388|      1|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3748:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 3749|      1|            break;                            \
  |  | 3750|      1|        context->verify = sftk_hashCheckSign; \
  |  | 3751|      1|        info = PORT_New(SFTKHashVerifyInfo);  \
  |  |  ------------------
  |  |  |  |  151|      1|#define PORT_New(type) (type *)PORT_Alloc(sizeof(type))
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      1|#define PORT_Alloc PORT_Alloc_Util
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3752|      1|        if (info == NULL) {                   \
  |  |  ------------------
  |  |  |  Branch (3752:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 3753|      0|            crv = CKR_HOST_MEMORY;            \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 3754|      0|            break;                            \
  |  | 3755|      0|        }                                     \
  |  | 3756|      1|        info->hashOid = SEC_OID_##mmm;        \
  |  | 3757|      1|        goto finish_rsa;
  ------------------
 3763|      2|        INIT_RSA_VFY_MECH(SHA224)
  ------------------
  |  | 3745|      1|    case CKM_##mmm##_RSA_PKCS:                \
  |  |  ------------------
  |  |  |  Branch (3745:5): [True: 1, False: 4.30k]
  |  |  ------------------
  |  | 3746|      1|        context->multi = PR_TRUE;             \
  |  |  ------------------
  |  |  |  |  437|      1|#define PR_TRUE 1
  |  |  ------------------
  |  | 3747|      1|        crv = sftk_doSub##mmm(context);       \
  |  | 3748|      1|        if (crv != CKR_OK)                    \
  |  |  ------------------
  |  |  |  | 1388|      1|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3748:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 3749|      1|            break;                            \
  |  | 3750|      1|        context->verify = sftk_hashCheckSign; \
  |  | 3751|      1|        info = PORT_New(SFTKHashVerifyInfo);  \
  |  |  ------------------
  |  |  |  |  151|      1|#define PORT_New(type) (type *)PORT_Alloc(sizeof(type))
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      1|#define PORT_Alloc PORT_Alloc_Util
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3752|      1|        if (info == NULL) {                   \
  |  |  ------------------
  |  |  |  Branch (3752:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 3753|      0|            crv = CKR_HOST_MEMORY;            \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 3754|      0|            break;                            \
  |  | 3755|      0|        }                                     \
  |  | 3756|      1|        info->hashOid = SEC_OID_##mmm;        \
  |  | 3757|      1|        goto finish_rsa;
  ------------------
 3764|  5.36k|        INIT_RSA_VFY_MECH(SHA256)
  ------------------
  |  | 3745|  2.68k|    case CKM_##mmm##_RSA_PKCS:                \
  |  |  ------------------
  |  |  |  Branch (3745:5): [True: 2.68k, False: 1.62k]
  |  |  ------------------
  |  | 3746|  2.68k|        context->multi = PR_TRUE;             \
  |  |  ------------------
  |  |  |  |  437|  2.68k|#define PR_TRUE 1
  |  |  ------------------
  |  | 3747|  2.68k|        crv = sftk_doSub##mmm(context);       \
  |  | 3748|  2.68k|        if (crv != CKR_OK)                    \
  |  |  ------------------
  |  |  |  | 1388|  2.68k|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3748:13): [True: 0, False: 2.68k]
  |  |  ------------------
  |  | 3749|  2.68k|            break;                            \
  |  | 3750|  2.68k|        context->verify = sftk_hashCheckSign; \
  |  | 3751|  2.68k|        info = PORT_New(SFTKHashVerifyInfo);  \
  |  |  ------------------
  |  |  |  |  151|  2.68k|#define PORT_New(type) (type *)PORT_Alloc(sizeof(type))
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|  2.68k|#define PORT_Alloc PORT_Alloc_Util
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3752|  2.68k|        if (info == NULL) {                   \
  |  |  ------------------
  |  |  |  Branch (3752:13): [True: 0, False: 2.68k]
  |  |  ------------------
  |  | 3753|      0|            crv = CKR_HOST_MEMORY;            \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 3754|      0|            break;                            \
  |  | 3755|      0|        }                                     \
  |  | 3756|  2.68k|        info->hashOid = SEC_OID_##mmm;        \
  |  | 3757|  2.68k|        goto finish_rsa;
  ------------------
 3765|      2|        INIT_RSA_VFY_MECH(SHA384)
  ------------------
  |  | 3745|      1|    case CKM_##mmm##_RSA_PKCS:                \
  |  |  ------------------
  |  |  |  Branch (3745:5): [True: 1, False: 4.30k]
  |  |  ------------------
  |  | 3746|      1|        context->multi = PR_TRUE;             \
  |  |  ------------------
  |  |  |  |  437|      1|#define PR_TRUE 1
  |  |  ------------------
  |  | 3747|      1|        crv = sftk_doSub##mmm(context);       \
  |  | 3748|      1|        if (crv != CKR_OK)                    \
  |  |  ------------------
  |  |  |  | 1388|      1|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3748:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 3749|      1|            break;                            \
  |  | 3750|      1|        context->verify = sftk_hashCheckSign; \
  |  | 3751|      1|        info = PORT_New(SFTKHashVerifyInfo);  \
  |  |  ------------------
  |  |  |  |  151|      1|#define PORT_New(type) (type *)PORT_Alloc(sizeof(type))
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      1|#define PORT_Alloc PORT_Alloc_Util
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3752|      1|        if (info == NULL) {                   \
  |  |  ------------------
  |  |  |  Branch (3752:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 3753|      0|            crv = CKR_HOST_MEMORY;            \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 3754|      0|            break;                            \
  |  | 3755|      0|        }                                     \
  |  | 3756|      1|        info->hashOid = SEC_OID_##mmm;        \
  |  | 3757|      1|        goto finish_rsa;
  ------------------
 3766|      2|        INIT_RSA_VFY_MECH(SHA512)
  ------------------
  |  | 3745|      1|    case CKM_##mmm##_RSA_PKCS:                \
  |  |  ------------------
  |  |  |  Branch (3745:5): [True: 1, False: 4.30k]
  |  |  ------------------
  |  | 3746|      1|        context->multi = PR_TRUE;             \
  |  |  ------------------
  |  |  |  |  437|      1|#define PR_TRUE 1
  |  |  ------------------
  |  | 3747|      1|        crv = sftk_doSub##mmm(context);       \
  |  | 3748|      1|        if (crv != CKR_OK)                    \
  |  |  ------------------
  |  |  |  | 1388|      1|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3748:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 3749|      1|            break;                            \
  |  | 3750|      1|        context->verify = sftk_hashCheckSign; \
  |  | 3751|      1|        info = PORT_New(SFTKHashVerifyInfo);  \
  |  |  ------------------
  |  |  |  |  151|      1|#define PORT_New(type) (type *)PORT_Alloc(sizeof(type))
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      1|#define PORT_Alloc PORT_Alloc_Util
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3752|      1|        if (info == NULL) {                   \
  |  |  ------------------
  |  |  |  Branch (3752:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 3753|      0|            crv = CKR_HOST_MEMORY;            \
  |  |  ------------------
  |  |  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  |  |  ------------------
  |  | 3754|      0|            break;                            \
  |  | 3755|      0|        }                                     \
  |  | 3756|      1|        info->hashOid = SEC_OID_##mmm;        \
  |  | 3757|      1|        goto finish_rsa;
  ------------------
 3767|       |
 3768|      0|        case CKM_RSA_PKCS:
  ------------------
  |  |  720|      0|#define CKM_RSA_PKCS 0x00000001UL
  ------------------
  |  Branch (3768:9): [True: 0, False: 4.30k]
  ------------------
 3769|      0|            context->verify = sftk_RSACheckSign;
 3770|      0|            goto finish_rsa;
 3771|      0|        case CKM_RSA_X_509:
  ------------------
  |  |  722|      0|#define CKM_RSA_X_509 0x00000003UL
  ------------------
  |  Branch (3771:9): [True: 0, False: 4.30k]
  ------------------
 3772|      0|            context->verify = sftk_RSACheckSignRaw;
 3773|  2.68k|        finish_rsa:
 3774|  2.68k|            if (key_type != CKK_RSA) {
  ------------------
  |  |  372|  2.68k|#define CKK_RSA 0x00000000UL
  ------------------
  |  Branch (3774:17): [True: 0, False: 2.68k]
  ------------------
 3775|      0|                crv = CKR_KEY_TYPE_INCONSISTENT;
  ------------------
  |  | 1433|      0|#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
  ------------------
 3776|      0|                break;
 3777|      0|            }
 3778|  2.68k|            context->rsa = PR_TRUE;
  ------------------
  |  |  437|  2.68k|#define PR_TRUE 1
  ------------------
 3779|  2.68k|            pubKey = sftk_GetPubKey(key, CKK_RSA, &crv);
  ------------------
  |  |  372|  2.68k|#define CKK_RSA 0x00000000UL
  ------------------
 3780|  2.68k|            if (pubKey == NULL) {
  ------------------
  |  Branch (3780:17): [True: 0, False: 2.68k]
  ------------------
 3781|      0|                crv = CKR_KEY_TYPE_INCONSISTENT;
  ------------------
  |  | 1433|      0|#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
  ------------------
 3782|      0|                break;
 3783|      0|            }
 3784|  2.68k|            if (info) {
  ------------------
  |  Branch (3784:17): [True: 2.68k, False: 0]
  ------------------
 3785|  2.68k|                info->key = pubKey;
 3786|  2.68k|                context->cipherInfo = info;
 3787|  2.68k|                context->destroy = sftk_Space;
 3788|  2.68k|            } else {
 3789|      0|                context->cipherInfo = pubKey;
 3790|      0|                context->destroy = sftk_Null;
 3791|      0|            }
 3792|  2.68k|            break;
 3793|       |
 3794|      9|            INIT_RSA_PSS_SIG_MECH(SHA1)
  ------------------
  |  | 2963|      3|    case CKM_##mmm##_RSA_PKCS_PSS:                                                            \
  |  |  ------------------
  |  |  |  Branch (2963:5): [True: 3, False: 4.30k]
  |  |  ------------------
  |  | 2964|      3|        context->multi = PR_TRUE;                                                             \
  |  |  ------------------
  |  |  |  |  437|      3|#define PR_TRUE 1
  |  |  ------------------
  |  | 2965|      3|        crv = sftk_doSub##mmm(context);                                                       \
  |  | 2966|      3|        if (crv != CKR_OK)                                                                    \
  |  |  ------------------
  |  |  |  | 1388|      3|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (2966:13): [True: 0, False: 3]
  |  |  ------------------
  |  | 2967|      3|            break;                                                                            \
  |  | 2968|      3|        if (pMechanism->ulParameterLen != sizeof(CK_RSA_PKCS_PSS_PARAMS)) {                   \
  |  |  ------------------
  |  |  |  Branch (2968:13): [True: 0, False: 3]
  |  |  ------------------
  |  | 2969|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                                                \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 2970|      0|            break;                                                                            \
  |  | 2971|      0|        }                                                                                     \
  |  | 2972|      3|        if (((const CK_RSA_PKCS_PSS_PARAMS *)pMechanism->pParameter)->hashAlg != CKM_##mmm) { \
  |  |  ------------------
  |  |  |  Branch (2972:13): [True: 0, False: 3]
  |  |  ------------------
  |  | 2973|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                                                \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 2974|      0|            break;                                                                            \
  |  | 2975|      0|        }                                                                                     \
  |  | 2976|      3|        goto finish_rsa_pss;
  ------------------
 3795|      3|            INIT_RSA_PSS_SIG_MECH(SHA224)
  ------------------
  |  | 2963|      0|    case CKM_##mmm##_RSA_PKCS_PSS:                                                            \
  |  |  ------------------
  |  |  |  Branch (2963:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 2964|      0|        context->multi = PR_TRUE;                                                             \
  |  |  ------------------
  |  |  |  |  437|      0|#define PR_TRUE 1
  |  |  ------------------
  |  | 2965|      0|        crv = sftk_doSub##mmm(context);                                                       \
  |  | 2966|      0|        if (crv != CKR_OK)                                                                    \
  |  |  ------------------
  |  |  |  | 1388|      0|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (2966:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2967|      0|            break;                                                                            \
  |  | 2968|      0|        if (pMechanism->ulParameterLen != sizeof(CK_RSA_PKCS_PSS_PARAMS)) {                   \
  |  |  ------------------
  |  |  |  Branch (2968:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2969|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                                                \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 2970|      0|            break;                                                                            \
  |  | 2971|      0|        }                                                                                     \
  |  | 2972|      0|        if (((const CK_RSA_PKCS_PSS_PARAMS *)pMechanism->pParameter)->hashAlg != CKM_##mmm) { \
  |  |  ------------------
  |  |  |  Branch (2972:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 2973|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                                                \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 2974|      0|            break;                                                                            \
  |  | 2975|      0|        }                                                                                     \
  |  | 2976|      0|        goto finish_rsa_pss;
  ------------------
 3796|    150|            INIT_RSA_PSS_SIG_MECH(SHA256)
  ------------------
  |  | 2963|     50|    case CKM_##mmm##_RSA_PKCS_PSS:                                                            \
  |  |  ------------------
  |  |  |  Branch (2963:5): [True: 50, False: 4.25k]
  |  |  ------------------
  |  | 2964|     50|        context->multi = PR_TRUE;                                                             \
  |  |  ------------------
  |  |  |  |  437|     50|#define PR_TRUE 1
  |  |  ------------------
  |  | 2965|     50|        crv = sftk_doSub##mmm(context);                                                       \
  |  | 2966|     50|        if (crv != CKR_OK)                                                                    \
  |  |  ------------------
  |  |  |  | 1388|     50|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (2966:13): [True: 0, False: 50]
  |  |  ------------------
  |  | 2967|     50|            break;                                                                            \
  |  | 2968|     50|        if (pMechanism->ulParameterLen != sizeof(CK_RSA_PKCS_PSS_PARAMS)) {                   \
  |  |  ------------------
  |  |  |  Branch (2968:13): [True: 0, False: 50]
  |  |  ------------------
  |  | 2969|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                                                \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 2970|      0|            break;                                                                            \
  |  | 2971|      0|        }                                                                                     \
  |  | 2972|     50|        if (((const CK_RSA_PKCS_PSS_PARAMS *)pMechanism->pParameter)->hashAlg != CKM_##mmm) { \
  |  |  ------------------
  |  |  |  Branch (2972:13): [True: 0, False: 50]
  |  |  ------------------
  |  | 2973|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                                                \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 2974|      0|            break;                                                                            \
  |  | 2975|      0|        }                                                                                     \
  |  | 2976|     50|        goto finish_rsa_pss;
  ------------------
 3797|     50|            INIT_RSA_PSS_SIG_MECH(SHA384)
  ------------------
  |  | 2963|      9|    case CKM_##mmm##_RSA_PKCS_PSS:                                                            \
  |  |  ------------------
  |  |  |  Branch (2963:5): [True: 9, False: 4.30k]
  |  |  ------------------
  |  | 2964|      9|        context->multi = PR_TRUE;                                                             \
  |  |  ------------------
  |  |  |  |  437|      9|#define PR_TRUE 1
  |  |  ------------------
  |  | 2965|      9|        crv = sftk_doSub##mmm(context);                                                       \
  |  | 2966|      9|        if (crv != CKR_OK)                                                                    \
  |  |  ------------------
  |  |  |  | 1388|      9|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (2966:13): [True: 0, False: 9]
  |  |  ------------------
  |  | 2967|      9|            break;                                                                            \
  |  | 2968|      9|        if (pMechanism->ulParameterLen != sizeof(CK_RSA_PKCS_PSS_PARAMS)) {                   \
  |  |  ------------------
  |  |  |  Branch (2968:13): [True: 0, False: 9]
  |  |  ------------------
  |  | 2969|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                                                \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 2970|      0|            break;                                                                            \
  |  | 2971|      0|        }                                                                                     \
  |  | 2972|      9|        if (((const CK_RSA_PKCS_PSS_PARAMS *)pMechanism->pParameter)->hashAlg != CKM_##mmm) { \
  |  |  ------------------
  |  |  |  Branch (2972:13): [True: 0, False: 9]
  |  |  ------------------
  |  | 2973|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                                                \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 2974|      0|            break;                                                                            \
  |  | 2975|      0|        }                                                                                     \
  |  | 2976|      9|        goto finish_rsa_pss;
  ------------------
 3798|     45|            INIT_RSA_PSS_SIG_MECH(SHA512)
  ------------------
  |  | 2963|     15|    case CKM_##mmm##_RSA_PKCS_PSS:                                                            \
  |  |  ------------------
  |  |  |  Branch (2963:5): [True: 15, False: 4.29k]
  |  |  ------------------
  |  | 2964|     15|        context->multi = PR_TRUE;                                                             \
  |  |  ------------------
  |  |  |  |  437|     15|#define PR_TRUE 1
  |  |  ------------------
  |  | 2965|     15|        crv = sftk_doSub##mmm(context);                                                       \
  |  | 2966|     15|        if (crv != CKR_OK)                                                                    \
  |  |  ------------------
  |  |  |  | 1388|     15|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (2966:13): [True: 0, False: 15]
  |  |  ------------------
  |  | 2967|     15|            break;                                                                            \
  |  | 2968|     15|        if (pMechanism->ulParameterLen != sizeof(CK_RSA_PKCS_PSS_PARAMS)) {                   \
  |  |  ------------------
  |  |  |  Branch (2968:13): [True: 0, False: 15]
  |  |  ------------------
  |  | 2969|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                                                \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 2970|      0|            break;                                                                            \
  |  | 2971|      0|        }                                                                                     \
  |  | 2972|     15|        if (((const CK_RSA_PKCS_PSS_PARAMS *)pMechanism->pParameter)->hashAlg != CKM_##mmm) { \
  |  |  ------------------
  |  |  |  Branch (2972:13): [True: 0, False: 15]
  |  |  ------------------
  |  | 2973|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                                                \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 2974|      0|            break;                                                                            \
  |  | 2975|      0|        }                                                                                     \
  |  | 2976|     15|        goto finish_rsa_pss;
  ------------------
 3799|     15|        case CKM_RSA_PKCS_PSS:
  ------------------
  |  |  741|      0|#define CKM_RSA_PKCS_PSS 0x0000000DUL
  ------------------
  |  Branch (3799:9): [True: 0, False: 4.30k]
  ------------------
 3800|     77|        finish_rsa_pss:
 3801|     77|            if (key_type != CKK_RSA) {
  ------------------
  |  |  372|     77|#define CKK_RSA 0x00000000UL
  ------------------
  |  Branch (3801:17): [True: 0, False: 77]
  ------------------
 3802|      0|                crv = CKR_KEY_TYPE_INCONSISTENT;
  ------------------
  |  | 1433|      0|#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
  ------------------
 3803|      0|                break;
 3804|      0|            }
 3805|     77|            context->rsa = PR_TRUE;
  ------------------
  |  |  437|     77|#define PR_TRUE 1
  ------------------
 3806|     77|            if (pMechanism->ulParameterLen != sizeof(CK_RSA_PKCS_PSS_PARAMS) ||
  ------------------
  |  Branch (3806:17): [True: 0, False: 77]
  ------------------
 3807|     77|                !sftk_ValidatePssParams((const CK_RSA_PKCS_PSS_PARAMS *)pMechanism->pParameter)) {
  ------------------
  |  Branch (3807:17): [True: 1, False: 76]
  ------------------
 3808|      1|                crv = CKR_MECHANISM_PARAM_INVALID;
  ------------------
  |  | 1448|      1|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  ------------------
 3809|      1|                break;
 3810|      1|            }
 3811|     76|            pinfo = PORT_New(SFTKPSSVerifyInfo);
  ------------------
  |  |  151|     76|#define PORT_New(type) (type *)PORT_Alloc(sizeof(type))
  |  |  ------------------
  |  |  |  |   52|     76|#define PORT_Alloc PORT_Alloc_Util
  |  |  ------------------
  ------------------
 3812|     76|            if (pinfo == NULL) {
  ------------------
  |  Branch (3812:17): [True: 0, False: 76]
  ------------------
 3813|      0|                crv = CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 3814|      0|                break;
 3815|      0|            }
 3816|     76|            pinfo->size = sizeof(SFTKPSSVerifyInfo);
 3817|     76|            pinfo->params = *(CK_RSA_PKCS_PSS_PARAMS *)pMechanism->pParameter;
 3818|     76|            pinfo->key = sftk_GetPubKey(key, CKK_RSA, &crv);
  ------------------
  |  |  372|     76|#define CKK_RSA 0x00000000UL
  ------------------
 3819|     76|            if (pinfo->key == NULL) {
  ------------------
  |  Branch (3819:17): [True: 0, False: 76]
  ------------------
 3820|      0|                crv = CKR_KEY_TYPE_INCONSISTENT;
  ------------------
  |  | 1433|      0|#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
  ------------------
 3821|      0|                break;
 3822|      0|            }
 3823|     76|            context->cipherInfo = pinfo;
 3824|     76|            context->destroy = sftk_ZSpace;
 3825|     76|            context->verify = sftk_RSACheckSignPSS;
 3826|     76|            break;
 3827|       |
 3828|      0|            INIT_DSA_SIG_MECH(SHA1)
  ------------------
  |  | 3013|      0|    case CKM_DSA_##mmm:                 \
  |  |  ------------------
  |  |  |  Branch (3013:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3014|      0|        context->multi = PR_TRUE;       \
  |  |  ------------------
  |  |  |  |  437|      0|#define PR_TRUE 1
  |  |  ------------------
  |  | 3015|      0|        crv = sftk_doSub##mmm(context); \
  |  | 3016|      0|        if (crv != CKR_OK)              \
  |  |  ------------------
  |  |  |  | 1388|      0|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3016:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3017|      0|            break;                      \
  |  | 3018|      0|        goto finish_dsa;
  ------------------
 3829|      1|            INIT_DSA_SIG_MECH(SHA224)
  ------------------
  |  | 3013|      1|    case CKM_DSA_##mmm:                 \
  |  |  ------------------
  |  |  |  Branch (3013:5): [True: 1, False: 4.30k]
  |  |  ------------------
  |  | 3014|      1|        context->multi = PR_TRUE;       \
  |  |  ------------------
  |  |  |  |  437|      1|#define PR_TRUE 1
  |  |  ------------------
  |  | 3015|      1|        crv = sftk_doSub##mmm(context); \
  |  | 3016|      1|        if (crv != CKR_OK)              \
  |  |  ------------------
  |  |  |  | 1388|      1|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3016:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 3017|      1|            break;                      \
  |  | 3018|      1|        goto finish_dsa;
  ------------------
 3830|  1.32k|            INIT_DSA_SIG_MECH(SHA256)
  ------------------
  |  | 3013|  1.32k|    case CKM_DSA_##mmm:                 \
  |  |  ------------------
  |  |  |  Branch (3013:5): [True: 1.32k, False: 2.98k]
  |  |  ------------------
  |  | 3014|  1.32k|        context->multi = PR_TRUE;       \
  |  |  ------------------
  |  |  |  |  437|  1.32k|#define PR_TRUE 1
  |  |  ------------------
  |  | 3015|  1.32k|        crv = sftk_doSub##mmm(context); \
  |  | 3016|  1.32k|        if (crv != CKR_OK)              \
  |  |  ------------------
  |  |  |  | 1388|  1.32k|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3016:13): [True: 0, False: 1.32k]
  |  |  ------------------
  |  | 3017|  1.32k|            break;                      \
  |  | 3018|  1.32k|        goto finish_dsa;
  ------------------
 3831|  1.32k|            INIT_DSA_SIG_MECH(SHA384)
  ------------------
  |  | 3013|      0|    case CKM_DSA_##mmm:                 \
  |  |  ------------------
  |  |  |  Branch (3013:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3014|      0|        context->multi = PR_TRUE;       \
  |  |  ------------------
  |  |  |  |  437|      0|#define PR_TRUE 1
  |  |  ------------------
  |  | 3015|      0|        crv = sftk_doSub##mmm(context); \
  |  | 3016|      0|        if (crv != CKR_OK)              \
  |  |  ------------------
  |  |  |  | 1388|      0|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3016:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3017|      0|            break;                      \
  |  | 3018|      0|        goto finish_dsa;
  ------------------
 3832|      0|            INIT_DSA_SIG_MECH(SHA512)
  ------------------
  |  | 3013|      0|    case CKM_DSA_##mmm:                 \
  |  |  ------------------
  |  |  |  Branch (3013:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3014|      0|        context->multi = PR_TRUE;       \
  |  |  ------------------
  |  |  |  |  437|      0|#define PR_TRUE 1
  |  |  ------------------
  |  | 3015|      0|        crv = sftk_doSub##mmm(context); \
  |  | 3016|      0|        if (crv != CKR_OK)              \
  |  |  ------------------
  |  |  |  | 1388|      0|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3016:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3017|      0|            break;                      \
  |  | 3018|      0|        goto finish_dsa;
  ------------------
 3833|      0|        case CKM_DSA:
  ------------------
  |  |  745|      0|#define CKM_DSA 0x00000011UL
  ------------------
  |  Branch (3833:9): [True: 0, False: 4.30k]
  ------------------
 3834|  1.33k|        finish_dsa:
 3835|  1.33k|            if (key_type != CKK_DSA) {
  ------------------
  |  |  373|  1.33k|#define CKK_DSA 0x00000001UL
  ------------------
  |  Branch (3835:17): [True: 0, False: 1.33k]
  ------------------
 3836|      0|                crv = CKR_KEY_TYPE_INCONSISTENT;
  ------------------
  |  | 1433|      0|#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
  ------------------
 3837|      0|                break;
 3838|      0|            }
 3839|  1.33k|            pubKey = sftk_GetPubKey(key, CKK_DSA, &crv);
  ------------------
  |  |  373|  1.33k|#define CKK_DSA 0x00000001UL
  ------------------
 3840|  1.33k|            if (pubKey == NULL) {
  ------------------
  |  Branch (3840:17): [True: 0, False: 1.33k]
  ------------------
 3841|      0|                break;
 3842|      0|            }
 3843|  1.33k|            context->cipherInfo = pubKey;
 3844|  1.33k|            context->verify = nsc_DSA_Verify_Stub;
 3845|  1.33k|            context->destroy = sftk_Null;
 3846|  1.33k|            break;
 3847|       |
 3848|      0|            INIT_ECDSA_SIG_MECH(SHA1)
  ------------------
  |  | 3042|      0|    case CKM_ECDSA_##mmm:               \
  |  |  ------------------
  |  |  |  Branch (3042:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3043|      0|        context->multi = PR_TRUE;       \
  |  |  ------------------
  |  |  |  |  437|      0|#define PR_TRUE 1
  |  |  ------------------
  |  | 3044|      0|        crv = sftk_doSub##mmm(context); \
  |  | 3045|      0|        if (crv != CKR_OK)              \
  |  |  ------------------
  |  |  |  | 1388|      0|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3045:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3046|      0|            break;                      \
  |  | 3047|      0|        goto finish_ecdsa;
  ------------------
 3849|      1|            INIT_ECDSA_SIG_MECH(SHA224)
  ------------------
  |  | 3042|      1|    case CKM_ECDSA_##mmm:               \
  |  |  ------------------
  |  |  |  Branch (3042:5): [True: 1, False: 4.30k]
  |  |  ------------------
  |  | 3043|      1|        context->multi = PR_TRUE;       \
  |  |  ------------------
  |  |  |  |  437|      1|#define PR_TRUE 1
  |  |  ------------------
  |  | 3044|      1|        crv = sftk_doSub##mmm(context); \
  |  | 3045|      1|        if (crv != CKR_OK)              \
  |  |  ------------------
  |  |  |  | 1388|      1|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3045:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 3046|      1|            break;                      \
  |  | 3047|      1|        goto finish_ecdsa;
  ------------------
 3850|    215|            INIT_ECDSA_SIG_MECH(SHA256)
  ------------------
  |  | 3042|    215|    case CKM_ECDSA_##mmm:               \
  |  |  ------------------
  |  |  |  Branch (3042:5): [True: 215, False: 4.09k]
  |  |  ------------------
  |  | 3043|    215|        context->multi = PR_TRUE;       \
  |  |  ------------------
  |  |  |  |  437|    215|#define PR_TRUE 1
  |  |  ------------------
  |  | 3044|    215|        crv = sftk_doSub##mmm(context); \
  |  | 3045|    215|        if (crv != CKR_OK)              \
  |  |  ------------------
  |  |  |  | 1388|    215|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3045:13): [True: 0, False: 215]
  |  |  ------------------
  |  | 3046|    215|            break;                      \
  |  | 3047|    215|        goto finish_ecdsa;
  ------------------
 3851|    215|            INIT_ECDSA_SIG_MECH(SHA384)
  ------------------
  |  | 3042|      1|    case CKM_ECDSA_##mmm:               \
  |  |  ------------------
  |  |  |  Branch (3042:5): [True: 1, False: 4.30k]
  |  |  ------------------
  |  | 3043|      1|        context->multi = PR_TRUE;       \
  |  |  ------------------
  |  |  |  |  437|      1|#define PR_TRUE 1
  |  |  ------------------
  |  | 3044|      1|        crv = sftk_doSub##mmm(context); \
  |  | 3045|      1|        if (crv != CKR_OK)              \
  |  |  ------------------
  |  |  |  | 1388|      1|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3045:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 3046|      1|            break;                      \
  |  | 3047|      1|        goto finish_ecdsa;
  ------------------
 3852|      1|            INIT_ECDSA_SIG_MECH(SHA512)
  ------------------
  |  | 3042|      1|    case CKM_ECDSA_##mmm:               \
  |  |  ------------------
  |  |  |  Branch (3042:5): [True: 1, False: 4.30k]
  |  |  ------------------
  |  | 3043|      1|        context->multi = PR_TRUE;       \
  |  |  ------------------
  |  |  |  |  437|      1|#define PR_TRUE 1
  |  |  ------------------
  |  | 3044|      1|        crv = sftk_doSub##mmm(context); \
  |  | 3045|      1|        if (crv != CKR_OK)              \
  |  |  ------------------
  |  |  |  | 1388|      1|#define CKR_OK 0x00000000UL
  |  |  ------------------
  |  |  |  Branch (3045:13): [True: 0, False: 1]
  |  |  ------------------
  |  | 3046|      1|            break;                      \
  |  | 3047|      1|        goto finish_ecdsa;
  ------------------
 3853|      1|        case CKM_ECDSA:
  ------------------
  |  | 1074|      0|#define CKM_ECDSA 0x00001041UL
  ------------------
  |  Branch (3853:9): [True: 0, False: 4.30k]
  ------------------
 3854|    218|        finish_ecdsa:
 3855|    218|            if (key_type != CKK_EC) {
  ------------------
  |  |  379|    218|#define CKK_EC 0x00000003UL
  ------------------
  |  Branch (3855:17): [True: 0, False: 218]
  ------------------
 3856|      0|                crv = CKR_KEY_TYPE_INCONSISTENT;
  ------------------
  |  | 1433|      0|#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
  ------------------
 3857|      0|                break;
 3858|      0|            }
 3859|    218|            pubKey = sftk_GetPubKey(key, CKK_EC, &crv);
  ------------------
  |  |  379|    218|#define CKK_EC 0x00000003UL
  ------------------
 3860|    218|            if (pubKey == NULL) {
  ------------------
  |  Branch (3860:17): [True: 0, False: 218]
  ------------------
 3861|      0|                crv = CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 3862|      0|                break;
 3863|      0|            }
 3864|    218|            context->cipherInfo = pubKey;
 3865|    218|            context->verify = nsc_ECDSAVerifyStub;
 3866|    218|            context->destroy = sftk_Null;
 3867|    218|            break;
 3868|       |
 3869|      0|            INIT_HMAC_MECH(MD2)
  ------------------
  |  | 3095|      0|    case CKM_##mmm##_HMAC_GENERAL:                                 \
  |  |  ------------------
  |  |  |  Branch (3095:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3096|      0|        PORT_Assert(pMechanism->pParameter);                       \
  |  |  ------------------
  |  |  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3097|      0|        if (!pMechanism->pParameter) {                             \
  |  |  ------------------
  |  |  |  Branch (3097:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3098|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                     \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 3099|      0|            break;                                                 \
  |  | 3100|      0|        }                                                          \
  |  | 3101|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3102|      0|                             *(CK_ULONG *)pMechanism->pParameter); \
  |  | 3103|      0|        break;                                                     \
  |  | 3104|      0|    case CKM_##mmm##_HMAC:                                         \
  |  |  ------------------
  |  |  |  Branch (3104:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3105|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3106|      0|                             mmm##_LENGTH);                        \
  |  | 3107|      0|        break;
  ------------------
 3870|      0|            INIT_HMAC_MECH(MD5)
  ------------------
  |  | 3095|      0|    case CKM_##mmm##_HMAC_GENERAL:                                 \
  |  |  ------------------
  |  |  |  Branch (3095:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3096|      0|        PORT_Assert(pMechanism->pParameter);                       \
  |  |  ------------------
  |  |  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3097|      0|        if (!pMechanism->pParameter) {                             \
  |  |  ------------------
  |  |  |  Branch (3097:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3098|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                     \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 3099|      0|            break;                                                 \
  |  | 3100|      0|        }                                                          \
  |  | 3101|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3102|      0|                             *(CK_ULONG *)pMechanism->pParameter); \
  |  | 3103|      0|        break;                                                     \
  |  | 3104|      0|    case CKM_##mmm##_HMAC:                                         \
  |  |  ------------------
  |  |  |  Branch (3104:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3105|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3106|      0|                             mmm##_LENGTH);                        \
  |  | 3107|      0|        break;
  ------------------
 3871|      0|            INIT_HMAC_MECH(SHA1)
  ------------------
  |  | 3095|      0|    case CKM_##mmm##_HMAC_GENERAL:                                 \
  |  |  ------------------
  |  |  |  Branch (3095:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3096|      0|        PORT_Assert(pMechanism->pParameter);                       \
  |  |  ------------------
  |  |  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3097|      0|        if (!pMechanism->pParameter) {                             \
  |  |  ------------------
  |  |  |  Branch (3097:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3098|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                     \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 3099|      0|            break;                                                 \
  |  | 3100|      0|        }                                                          \
  |  | 3101|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3102|      0|                             *(CK_ULONG *)pMechanism->pParameter); \
  |  | 3103|      0|        break;                                                     \
  |  | 3104|      0|    case CKM_##mmm##_HMAC:                                         \
  |  |  ------------------
  |  |  |  Branch (3104:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3105|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3106|      0|                             mmm##_LENGTH);                        \
  |  | 3107|      0|        break;
  ------------------
 3872|      0|            INIT_HMAC_MECH(SHA224)
  ------------------
  |  | 3095|      0|    case CKM_##mmm##_HMAC_GENERAL:                                 \
  |  |  ------------------
  |  |  |  Branch (3095:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3096|      0|        PORT_Assert(pMechanism->pParameter);                       \
  |  |  ------------------
  |  |  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3097|      0|        if (!pMechanism->pParameter) {                             \
  |  |  ------------------
  |  |  |  Branch (3097:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3098|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                     \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 3099|      0|            break;                                                 \
  |  | 3100|      0|        }                                                          \
  |  | 3101|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3102|      0|                             *(CK_ULONG *)pMechanism->pParameter); \
  |  | 3103|      0|        break;                                                     \
  |  | 3104|      0|    case CKM_##mmm##_HMAC:                                         \
  |  |  ------------------
  |  |  |  Branch (3104:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3105|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3106|      0|                             mmm##_LENGTH);                        \
  |  | 3107|      0|        break;
  ------------------
 3873|      0|            INIT_HMAC_MECH(SHA256)
  ------------------
  |  | 3095|      0|    case CKM_##mmm##_HMAC_GENERAL:                                 \
  |  |  ------------------
  |  |  |  Branch (3095:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3096|      0|        PORT_Assert(pMechanism->pParameter);                       \
  |  |  ------------------
  |  |  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3097|      0|        if (!pMechanism->pParameter) {                             \
  |  |  ------------------
  |  |  |  Branch (3097:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3098|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                     \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 3099|      0|            break;                                                 \
  |  | 3100|      0|        }                                                          \
  |  | 3101|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3102|      0|                             *(CK_ULONG *)pMechanism->pParameter); \
  |  | 3103|      0|        break;                                                     \
  |  | 3104|      0|    case CKM_##mmm##_HMAC:                                         \
  |  |  ------------------
  |  |  |  Branch (3104:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3105|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3106|      0|                             mmm##_LENGTH);                        \
  |  | 3107|      0|        break;
  ------------------
 3874|      0|            INIT_HMAC_MECH(SHA384)
  ------------------
  |  | 3095|      0|    case CKM_##mmm##_HMAC_GENERAL:                                 \
  |  |  ------------------
  |  |  |  Branch (3095:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3096|      0|        PORT_Assert(pMechanism->pParameter);                       \
  |  |  ------------------
  |  |  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3097|      0|        if (!pMechanism->pParameter) {                             \
  |  |  ------------------
  |  |  |  Branch (3097:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3098|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                     \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 3099|      0|            break;                                                 \
  |  | 3100|      0|        }                                                          \
  |  | 3101|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3102|      0|                             *(CK_ULONG *)pMechanism->pParameter); \
  |  | 3103|      0|        break;                                                     \
  |  | 3104|      0|    case CKM_##mmm##_HMAC:                                         \
  |  |  ------------------
  |  |  |  Branch (3104:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3105|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3106|      0|                             mmm##_LENGTH);                        \
  |  | 3107|      0|        break;
  ------------------
 3875|      0|            INIT_HMAC_MECH(SHA512)
  ------------------
  |  | 3095|      0|    case CKM_##mmm##_HMAC_GENERAL:                                 \
  |  |  ------------------
  |  |  |  Branch (3095:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3096|      0|        PORT_Assert(pMechanism->pParameter);                       \
  |  |  ------------------
  |  |  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3097|      0|        if (!pMechanism->pParameter) {                             \
  |  |  ------------------
  |  |  |  Branch (3097:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3098|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                     \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 3099|      0|            break;                                                 \
  |  | 3100|      0|        }                                                          \
  |  | 3101|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3102|      0|                             *(CK_ULONG *)pMechanism->pParameter); \
  |  | 3103|      0|        break;                                                     \
  |  | 3104|      0|    case CKM_##mmm##_HMAC:                                         \
  |  |  ------------------
  |  |  |  Branch (3104:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3105|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3106|      0|                             mmm##_LENGTH);                        \
  |  | 3107|      0|        break;
  ------------------
 3876|      0|            INIT_HMAC_MECH(SHA3_224)
  ------------------
  |  | 3095|      0|    case CKM_##mmm##_HMAC_GENERAL:                                 \
  |  |  ------------------
  |  |  |  Branch (3095:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3096|      0|        PORT_Assert(pMechanism->pParameter);                       \
  |  |  ------------------
  |  |  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3097|      0|        if (!pMechanism->pParameter) {                             \
  |  |  ------------------
  |  |  |  Branch (3097:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3098|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                     \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 3099|      0|            break;                                                 \
  |  | 3100|      0|        }                                                          \
  |  | 3101|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3102|      0|                             *(CK_ULONG *)pMechanism->pParameter); \
  |  | 3103|      0|        break;                                                     \
  |  | 3104|      0|    case CKM_##mmm##_HMAC:                                         \
  |  |  ------------------
  |  |  |  Branch (3104:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3105|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3106|      0|                             mmm##_LENGTH);                        \
  |  | 3107|      0|        break;
  ------------------
 3877|      0|            INIT_HMAC_MECH(SHA3_256)
  ------------------
  |  | 3095|      0|    case CKM_##mmm##_HMAC_GENERAL:                                 \
  |  |  ------------------
  |  |  |  Branch (3095:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3096|      0|        PORT_Assert(pMechanism->pParameter);                       \
  |  |  ------------------
  |  |  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3097|      0|        if (!pMechanism->pParameter) {                             \
  |  |  ------------------
  |  |  |  Branch (3097:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3098|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                     \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 3099|      0|            break;                                                 \
  |  | 3100|      0|        }                                                          \
  |  | 3101|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3102|      0|                             *(CK_ULONG *)pMechanism->pParameter); \
  |  | 3103|      0|        break;                                                     \
  |  | 3104|      0|    case CKM_##mmm##_HMAC:                                         \
  |  |  ------------------
  |  |  |  Branch (3104:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3105|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3106|      0|                             mmm##_LENGTH);                        \
  |  | 3107|      0|        break;
  ------------------
 3878|      0|            INIT_HMAC_MECH(SHA3_384)
  ------------------
  |  | 3095|      0|    case CKM_##mmm##_HMAC_GENERAL:                                 \
  |  |  ------------------
  |  |  |  Branch (3095:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3096|      0|        PORT_Assert(pMechanism->pParameter);                       \
  |  |  ------------------
  |  |  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3097|      0|        if (!pMechanism->pParameter) {                             \
  |  |  ------------------
  |  |  |  Branch (3097:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3098|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                     \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 3099|      0|            break;                                                 \
  |  | 3100|      0|        }                                                          \
  |  | 3101|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3102|      0|                             *(CK_ULONG *)pMechanism->pParameter); \
  |  | 3103|      0|        break;                                                     \
  |  | 3104|      0|    case CKM_##mmm##_HMAC:                                         \
  |  |  ------------------
  |  |  |  Branch (3104:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3105|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3106|      0|                             mmm##_LENGTH);                        \
  |  | 3107|      0|        break;
  ------------------
 3879|      0|            INIT_HMAC_MECH(SHA3_512)
  ------------------
  |  | 3095|      0|    case CKM_##mmm##_HMAC_GENERAL:                                 \
  |  |  ------------------
  |  |  |  Branch (3095:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3096|      0|        PORT_Assert(pMechanism->pParameter);                       \
  |  |  ------------------
  |  |  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  |  |  ------------------
  |  |  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 3097|      0|        if (!pMechanism->pParameter) {                             \
  |  |  ------------------
  |  |  |  Branch (3097:13): [True: 0, False: 0]
  |  |  ------------------
  |  | 3098|      0|            crv = CKR_MECHANISM_PARAM_INVALID;                     \
  |  |  ------------------
  |  |  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  |  |  ------------------
  |  | 3099|      0|            break;                                                 \
  |  | 3100|      0|        }                                                          \
  |  | 3101|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3102|      0|                             *(CK_ULONG *)pMechanism->pParameter); \
  |  | 3103|      0|        break;                                                     \
  |  | 3104|      0|    case CKM_##mmm##_HMAC:                                         \
  |  |  ------------------
  |  |  |  Branch (3104:5): [True: 0, False: 4.30k]
  |  |  ------------------
  |  | 3105|      0|        crv = sftk_doMACInit(pMechanism->mechanism, context, key,  \
  |  | 3106|      0|                             mmm##_LENGTH);                        \
  |  | 3107|      0|        break;
  ------------------
 3880|       |
 3881|      0|        case CKM_EDDSA:
  ------------------
  |  | 1174|      0|#define CKM_EDDSA 0x00001057UL
  ------------------
  |  Branch (3881:9): [True: 0, False: 4.30k]
  ------------------
 3882|      0|            if (key_type != CKK_EC_EDWARDS) {
  ------------------
  |  |  448|      0|#define CKK_EC_EDWARDS 0x00000040UL
  ------------------
  |  Branch (3882:17): [True: 0, False: 0]
  ------------------
 3883|      0|                crv = CKR_KEY_TYPE_INCONSISTENT;
  ------------------
  |  | 1433|      0|#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
  ------------------
 3884|      0|                break;
 3885|      0|            }
 3886|      0|            pubKey = sftk_GetPubKey(key, CKK_EC_EDWARDS, &crv);
  ------------------
  |  |  448|      0|#define CKK_EC_EDWARDS 0x00000040UL
  ------------------
 3887|      0|            if (pubKey == NULL) {
  ------------------
  |  Branch (3887:17): [True: 0, False: 0]
  ------------------
 3888|      0|                crv = CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 3889|      0|                break;
 3890|      0|            }
 3891|       |
 3892|      0|            if (pMechanism->pParameter) {
  ------------------
  |  Branch (3892:17): [True: 0, False: 0]
  ------------------
 3893|      0|                crv = CKR_FUNCTION_NOT_SUPPORTED;
  ------------------
  |  | 1426|      0|#define CKR_FUNCTION_NOT_SUPPORTED 0x00000054UL
  ------------------
 3894|      0|                break;
 3895|      0|            }
 3896|       |
 3897|      0|            context->cipherInfo = pubKey;
 3898|      0|            context->verify = nsc_EDDSAVerifyStub;
 3899|      0|            context->destroy = sftk_Null;
 3900|      0|            break;
 3901|       |
 3902|      0|        case CKM_SSL3_MD5_MAC:
  ------------------
  |  |  975|      0|#define CKM_SSL3_MD5_MAC 0x00000380UL
  ------------------
  |  Branch (3902:9): [True: 0, False: 4.30k]
  ------------------
 3903|      0|            PORT_Assert(pMechanism->pParameter);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3904|      0|            if (!pMechanism->pParameter) {
  ------------------
  |  Branch (3904:17): [True: 0, False: 0]
  ------------------
 3905|      0|                crv = CKR_MECHANISM_PARAM_INVALID;
  ------------------
  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  ------------------
 3906|      0|                break;
 3907|      0|            }
 3908|      0|            crv = sftk_doSSLMACInit(context, SEC_OID_MD5, key,
 3909|      0|                                    *(CK_ULONG *)pMechanism->pParameter);
 3910|      0|            break;
 3911|      0|        case CKM_SSL3_SHA1_MAC:
  ------------------
  |  |  976|      0|#define CKM_SSL3_SHA1_MAC 0x00000381UL
  ------------------
  |  Branch (3911:9): [True: 0, False: 4.30k]
  ------------------
 3912|      0|            PORT_Assert(pMechanism->pParameter);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3913|      0|            if (!pMechanism->pParameter) {
  ------------------
  |  Branch (3913:17): [True: 0, False: 0]
  ------------------
 3914|      0|                crv = CKR_MECHANISM_PARAM_INVALID;
  ------------------
  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  ------------------
 3915|      0|                break;
 3916|      0|            }
 3917|      0|            crv = sftk_doSSLMACInit(context, SEC_OID_SHA1, key,
 3918|      0|                                    *(CK_ULONG *)pMechanism->pParameter);
 3919|      0|            break;
 3920|      0|        case CKM_TLS_PRF_GENERAL:
  ------------------
  |  |  297|      0|#define CKM_TLS_PRF_GENERAL 0x80000373UL
  ------------------
  |  Branch (3920:9): [True: 0, False: 4.30k]
  ------------------
 3921|      0|            crv = sftk_TLSPRFInit(context, key, key_type, HASH_AlgNULL, 0);
 3922|      0|            break;
 3923|      0|        case CKM_NSS_TLS_PRF_GENERAL_SHA256:
  ------------------
  |  |  233|      0|#define CKM_NSS_TLS_PRF_GENERAL_SHA256 (CKM_NSS + 21)
  |  |  ------------------
  |  |  |  |  162|      0|#define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1309|      0|#define CKM_VENDOR_DEFINED 0x80000000UL
  |  |  |  |  ------------------
  |  |  |  |               #define CKM_NSS (CKM_VENDOR_DEFINED | NSSCK_VENDOR_NSS)
  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|#define NSSCK_VENDOR_NSS 0x4E534350 /* NSCP */
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3923:9): [True: 0, False: 4.30k]
  ------------------
 3924|      0|            crv = sftk_TLSPRFInit(context, key, key_type, HASH_AlgSHA256, 0);
 3925|      0|            break;
 3926|       |
 3927|      0|        default:
  ------------------
  |  Branch (3927:9): [True: 0, False: 4.30k]
  ------------------
 3928|      0|            crv = CKR_MECHANISM_INVALID;
  ------------------
  |  | 1447|      0|#define CKR_MECHANISM_INVALID 0x00000070UL
  ------------------
 3929|      0|            break;
 3930|  4.30k|    }
 3931|       |
 3932|  4.30k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  4.30k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3932:9): [True: 1, False: 4.30k]
  ------------------
 3933|      1|        if (info)
  ------------------
  |  Branch (3933:13): [True: 0, False: 1]
  ------------------
 3934|      0|            PORT_Free(info);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 3935|      1|        if (pinfo)
  ------------------
  |  Branch (3935:13): [True: 0, False: 1]
  ------------------
 3936|      0|            PORT_ZFree(pinfo, pinfo->size);
  ------------------
  |  |   75|      0|#define PORT_ZFree PORT_ZFree_Util
  ------------------
 3937|      1|        sftk_FreeContext(context);
 3938|      1|        sftk_FreeSession(session);
 3939|      1|        return crv;
 3940|      1|    }
 3941|  4.30k|    sftk_SetContextByType(session, SFTK_VERIFY, context);
 3942|  4.30k|    sftk_FreeSession(session);
 3943|  4.30k|    return CKR_OK;
  ------------------
  |  | 1388|  4.30k|#define CKR_OK 0x00000000UL
  ------------------
 3944|  4.30k|}
NSC_Verify:
 3952|  4.30k|{
 3953|  4.30k|    SFTKSession *session;
 3954|  4.30k|    SFTKSessionContext *context;
 3955|  4.30k|    CK_RV crv;
 3956|       |
 3957|  4.30k|    CHECK_FORK();
 3958|       |
 3959|       |    /* make sure we're legal */
 3960|  4.30k|    crv = sftk_GetContext(hSession, &context, SFTK_VERIFY, PR_FALSE, &session);
  ------------------
  |  |  438|  4.30k|#define PR_FALSE 0
  ------------------
 3961|  4.30k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.30k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3961:9): [True: 0, False: 4.30k]
  ------------------
 3962|      0|        return crv;
 3963|       |
 3964|       |    /* multi part Verifying are completely implemented by VerifyUpdate and
 3965|       |     * VerifyFinal */
 3966|  4.30k|    if (context->multi) {
  ------------------
  |  Branch (3966:9): [True: 4.30k, False: 0]
  ------------------
 3967|       |        /* VerifyFinal can't follow failed VerifyUpdate */
 3968|  4.30k|        if (CKR_OK == (crv = NSC_VerifyUpdate(hSession, pData, ulDataLen)))
  ------------------
  |  | 1388|  4.30k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3968:13): [True: 4.30k, False: 0]
  ------------------
 3969|  4.30k|            crv = NSC_VerifyFinal(hSession, pSignature, ulSignatureLen);
 3970|  4.30k|    } else {
 3971|      0|        if (SECSuccess != (*context->verify)(context->cipherInfo, pSignature,
  ------------------
  |  Branch (3971:13): [True: 0, False: 0]
  ------------------
 3972|      0|                                             ulSignatureLen, pData, ulDataLen))
 3973|      0|            crv = sftk_MapCryptError(PORT_GetError());
  ------------------
  |  |   62|      0|#define PORT_GetError PORT_GetError_Util
  ------------------
 3974|       |
 3975|      0|        sftk_TerminateOp(session, SFTK_VERIFY, context);
 3976|      0|    }
 3977|  4.30k|    sftk_FreeSession(session);
 3978|  4.30k|    return crv;
 3979|  4.30k|}
NSC_VerifyUpdate:
 3990|  4.30k|{
 3991|  4.30k|    CHECK_FORK();
 3992|  4.30k|    return sftk_MACUpdate(hSession, pPart, ulPartLen, SFTK_VERIFY);
 3993|  4.30k|}
NSC_VerifyFinal:
 4000|  4.30k|{
 4001|  4.30k|    SFTKSession *session;
 4002|  4.30k|    SFTKSessionContext *context;
 4003|  4.30k|    CK_RV crv;
 4004|       |
 4005|  4.30k|    CHECK_FORK();
 4006|       |
 4007|  4.30k|    if (!pSignature)
  ------------------
  |  Branch (4007:9): [True: 0, False: 4.30k]
  ------------------
 4008|      0|        return CKR_ARGUMENTS_BAD;
  ------------------
  |  | 1401|      0|#define CKR_ARGUMENTS_BAD 0x00000007UL
  ------------------
 4009|       |
 4010|       |    /* make sure we're legal */
 4011|  4.30k|    crv = sftk_GetContext(hSession, &context, SFTK_VERIFY, PR_TRUE, &session);
  ------------------
  |  |  437|  4.30k|#define PR_TRUE 1
  ------------------
 4012|  4.30k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.30k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (4012:9): [True: 0, False: 4.30k]
  ------------------
 4013|      0|        return crv;
 4014|       |
 4015|  4.30k|    if (context->hashInfo) {
  ------------------
  |  Branch (4015:9): [True: 4.30k, False: 0]
  ------------------
 4016|  4.30k|        unsigned int digestLen;
 4017|  4.30k|        unsigned char tmpbuf[SFTK_MAX_MAC_LENGTH];
 4018|       |
 4019|  4.30k|        (*context->end)(context->hashInfo, tmpbuf, &digestLen, sizeof(tmpbuf));
 4020|  4.30k|        if (SECSuccess != (context->verify)(context->cipherInfo, pSignature,
  ------------------
  |  Branch (4020:13): [True: 4.13k, False: 171]
  ------------------
 4021|  4.30k|                                            ulSignatureLen, tmpbuf, digestLen))
 4022|  4.13k|            crv = sftk_MapCryptError(PORT_GetError());
  ------------------
  |  |   62|  4.13k|#define PORT_GetError PORT_GetError_Util
  ------------------
 4023|  4.30k|        PORT_Memset(tmpbuf, 0, sizeof tmpbuf);
  ------------------
  |  |  182|  4.30k|#define PORT_Memset memset
  ------------------
 4024|  4.30k|    } else if (ulSignatureLen != context->macSize) {
  ------------------
  |  Branch (4024:16): [True: 0, False: 0]
  ------------------
 4025|       |        /* must be block cipher MACing */
 4026|      0|        crv = CKR_SIGNATURE_LEN_RANGE;
  ------------------
  |  | 1476|      0|#define CKR_SIGNATURE_LEN_RANGE 0x000000C1UL
  ------------------
 4027|      0|    } else if (CKR_OK == (crv = sftk_MACFinal(context))) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (4027:16): [True: 0, False: 0]
  ------------------
 4028|      0|        if (NSS_SecureMemcmp(pSignature, context->macBuf, ulSignatureLen))
  ------------------
  |  Branch (4028:13): [True: 0, False: 0]
  ------------------
 4029|      0|            crv = CKR_SIGNATURE_INVALID;
  ------------------
  |  | 1475|      0|#define CKR_SIGNATURE_INVALID 0x000000C0UL
  ------------------
 4030|      0|    }
 4031|       |
 4032|  4.30k|    sftk_TerminateOp(session, SFTK_VERIFY, context);
 4033|  4.30k|    sftk_FreeSession(session);
 4034|  4.30k|    return crv;
 4035|  4.30k|}
NSC_VerifyRecoverInit:
 4078|      3|{
 4079|      3|    SFTKSession *session;
 4080|      3|    SFTKObject *key;
 4081|      3|    SFTKSessionContext *context;
 4082|      3|    CK_KEY_TYPE key_type;
 4083|      3|    CK_RV crv = CKR_OK;
  ------------------
  |  | 1388|      3|#define CKR_OK 0x00000000UL
  ------------------
 4084|      3|    NSSLOWKEYPublicKey *pubKey;
 4085|       |
 4086|      3|    CHECK_FORK();
 4087|       |
 4088|      3|    session = sftk_SessionFromHandle(hSession);
 4089|      3|    if (session == NULL)
  ------------------
  |  Branch (4089:9): [True: 0, False: 3]
  ------------------
 4090|      0|        return CKR_SESSION_HANDLE_INVALID;
  ------------------
  |  | 1465|      0|#define CKR_SESSION_HANDLE_INVALID 0x000000B3UL
  ------------------
 4091|      3|    crv = sftk_InitGeneric(session, pMechanism, &context, SFTK_VERIFY_RECOVER,
 4092|      3|                           &key, hKey, &key_type, CKO_PUBLIC_KEY, CKA_VERIFY_RECOVER);
  ------------------
  |  |  327|      3|#define CKO_PUBLIC_KEY 0x00000002UL
  ------------------
                                         &key, hKey, &key_type, CKO_PUBLIC_KEY, CKA_VERIFY_RECOVER);
  ------------------
  |  |  554|      3|#define CKA_VERIFY_RECOVER 0x0000010BUL
  ------------------
 4093|      3|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      3|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (4093:9): [True: 0, False: 3]
  ------------------
 4094|      0|        sftk_FreeSession(session);
 4095|      0|        return crv;
 4096|      0|    }
 4097|       |
 4098|      3|    context->multi = PR_TRUE;
  ------------------
  |  |  437|      3|#define PR_TRUE 1
  ------------------
 4099|       |
 4100|      3|    switch (pMechanism->mechanism) {
 4101|      3|        case CKM_RSA_PKCS:
  ------------------
  |  |  720|      3|#define CKM_RSA_PKCS 0x00000001UL
  ------------------
  |  Branch (4101:9): [True: 3, False: 0]
  ------------------
 4102|      3|        case CKM_RSA_X_509:
  ------------------
  |  |  722|      3|#define CKM_RSA_X_509 0x00000003UL
  ------------------
  |  Branch (4102:9): [True: 0, False: 3]
  ------------------
 4103|      3|            if (key_type != CKK_RSA) {
  ------------------
  |  |  372|      3|#define CKK_RSA 0x00000000UL
  ------------------
  |  Branch (4103:17): [True: 0, False: 3]
  ------------------
 4104|      0|                crv = CKR_KEY_TYPE_INCONSISTENT;
  ------------------
  |  | 1433|      0|#define CKR_KEY_TYPE_INCONSISTENT 0x00000063UL
  ------------------
 4105|      0|                break;
 4106|      0|            }
 4107|      3|            context->multi = PR_FALSE;
  ------------------
  |  |  438|      3|#define PR_FALSE 0
  ------------------
 4108|      3|            context->rsa = PR_TRUE;
  ------------------
  |  |  437|      3|#define PR_TRUE 1
  ------------------
 4109|      3|            pubKey = sftk_GetPubKey(key, CKK_RSA, &crv);
  ------------------
  |  |  372|      3|#define CKK_RSA 0x00000000UL
  ------------------
 4110|      3|            if (pubKey == NULL) {
  ------------------
  |  Branch (4110:17): [True: 0, False: 3]
  ------------------
 4111|      0|                break;
 4112|      0|            }
 4113|      3|            context->cipherInfo = pubKey;
 4114|      3|            context->update = pMechanism->mechanism == CKM_RSA_X_509
  ------------------
  |  |  722|      3|#define CKM_RSA_X_509 0x00000003UL
  ------------------
  |  Branch (4114:31): [True: 0, False: 3]
  ------------------
 4115|      3|                                  ? sftk_RSACheckSignRecoverRaw
 4116|      3|                                  : sftk_RSACheckSignRecover;
 4117|      3|            context->destroy = sftk_Null;
 4118|      3|            break;
 4119|      0|        default:
  ------------------
  |  Branch (4119:9): [True: 0, False: 3]
  ------------------
 4120|      0|            crv = CKR_MECHANISM_INVALID;
  ------------------
  |  | 1447|      0|#define CKR_MECHANISM_INVALID 0x00000070UL
  ------------------
 4121|      0|            break;
 4122|      3|    }
 4123|       |
 4124|      3|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|      3|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (4124:9): [True: 0, False: 3]
  ------------------
 4125|      0|        PORT_Free(context);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 4126|      0|        sftk_FreeSession(session);
 4127|      0|        return crv;
 4128|      0|    }
 4129|      3|    sftk_SetContextByType(session, SFTK_VERIFY_RECOVER, context);
 4130|      3|    sftk_FreeSession(session);
 4131|      3|    return CKR_OK;
  ------------------
  |  | 1388|      3|#define CKR_OK 0x00000000UL
  ------------------
 4132|      3|}
NSC_VerifyRecover:
 4141|      3|{
 4142|      3|    SFTKSession *session;
 4143|      3|    SFTKSessionContext *context;
 4144|      3|    unsigned int outlen;
 4145|      3|    unsigned int maxoutlen = *pulDataLen;
 4146|      3|    CK_RV crv;
 4147|      3|    SECStatus rv;
 4148|       |
 4149|      3|    CHECK_FORK();
 4150|       |
 4151|       |    /* make sure we're legal */
 4152|      3|    crv = sftk_GetContext(hSession, &context, SFTK_VERIFY_RECOVER,
 4153|      3|                          PR_FALSE, &session);
  ------------------
  |  |  438|      3|#define PR_FALSE 0
  ------------------
 4154|      3|    if (crv != CKR_OK)
  ------------------
  |  | 1388|      3|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (4154:9): [True: 0, False: 3]
  ------------------
 4155|      0|        return crv;
 4156|      3|    if (pData == NULL) {
  ------------------
  |  Branch (4156:9): [True: 0, False: 3]
  ------------------
 4157|       |        /* to return the actual size, we need  to do the decrypt, just return
 4158|       |         * the max size, which is the size of the input signature. */
 4159|      0|        *pulDataLen = ulSignatureLen;
 4160|      0|        rv = SECSuccess;
 4161|      0|        goto finish;
 4162|      0|    }
 4163|       |
 4164|      3|    rv = (*context->update)(context->cipherInfo, pData, &outlen, maxoutlen,
 4165|      3|                            pSignature, ulSignatureLen);
 4166|      3|    *pulDataLen = (CK_ULONG)outlen;
 4167|       |
 4168|      3|    sftk_TerminateOp(session, SFTK_VERIFY_RECOVER, context);
 4169|      3|finish:
 4170|      3|    sftk_FreeSession(session);
 4171|      3|    return (rv == SECSuccess) ? CKR_OK : sftk_MapVerifyError(PORT_GetError());
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
                  return (rv == SECSuccess) ? CKR_OK : sftk_MapVerifyError(PORT_GetError());
  ------------------
  |  |   62|      3|#define PORT_GetError PORT_GetError_Util
  ------------------
  |  Branch (4171:12): [True: 0, False: 3]
  ------------------
 4172|      3|}
pkcs11c.c:sftk_Null:
   80|  1.55k|{
   81|  1.55k|    return;
   82|  1.55k|}
pkcs11c.c:SFTKHash_SHA1_Update:
  101|  5.62k|    {                                                                                     \
  102|  5.62k|        ctxtype *ctx = vctx;                                                              \
  103|  5.62k|        mmm##_Update(ctx, input, len);                                                    \
  104|  5.62k|    }                                                                                     \
pkcs11c.c:SFTKHash_SHA1_End:
  108|  5.62k|    {                                                                                     \
  109|  5.62k|        ctxtype *ctx = vctx;                                                              \
  110|  5.62k|        mmm##_End(ctx, digest, len, maxLen);                                              \
  111|  5.62k|    }                                                                                     \
pkcs11c.c:SFTKHash_SHA1_DestroyContext:
  114|  5.62k|    {                                                                                     \
  115|  5.62k|        ctxtype *ctx = vctx;                                                              \
  116|  5.62k|        mmm##_DestroyContext(ctx, freeit);                                                \
  117|  5.62k|    }
pkcs11c.c:SFTKHash_SHA224_Update:
  101|      4|    {                                                                                     \
  102|      4|        ctxtype *ctx = vctx;                                                              \
  103|      4|        mmm##_Update(ctx, input, len);                                                    \
  104|      4|    }                                                                                     \
pkcs11c.c:SFTKHash_SHA224_End:
  108|      4|    {                                                                                     \
  109|      4|        ctxtype *ctx = vctx;                                                              \
  110|      4|        mmm##_End(ctx, digest, len, maxLen);                                              \
  111|      4|    }                                                                                     \
pkcs11c.c:SFTKHash_SHA224_DestroyContext:
  114|      4|    {                                                                                     \
  115|      4|        ctxtype *ctx = vctx;                                                              \
  116|      4|        mmm##_DestroyContext(ctx, freeit);                                                \
  117|      4|    }
pkcs11c.c:SFTKHash_SHA256_Update:
  101|  4.30k|    {                                                                                     \
  102|  4.30k|        ctxtype *ctx = vctx;                                                              \
  103|  4.30k|        mmm##_Update(ctx, input, len);                                                    \
  104|  4.30k|    }                                                                                     \
pkcs11c.c:SFTKHash_SHA256_End:
  108|  4.30k|    {                                                                                     \
  109|  4.30k|        ctxtype *ctx = vctx;                                                              \
  110|  4.30k|        mmm##_End(ctx, digest, len, maxLen);                                              \
  111|  4.30k|    }                                                                                     \
pkcs11c.c:SFTKHash_SHA256_DestroyContext:
  114|  4.30k|    {                                                                                     \
  115|  4.30k|        ctxtype *ctx = vctx;                                                              \
  116|  4.30k|        mmm##_DestroyContext(ctx, freeit);                                                \
  117|  4.30k|    }
pkcs11c.c:SFTKHash_SHA384_Update:
  101|     14|    {                                                                                     \
  102|     14|        ctxtype *ctx = vctx;                                                              \
  103|     14|        mmm##_Update(ctx, input, len);                                                    \
  104|     14|    }                                                                                     \
pkcs11c.c:SFTKHash_SHA384_End:
  108|     14|    {                                                                                     \
  109|     14|        ctxtype *ctx = vctx;                                                              \
  110|     14|        mmm##_End(ctx, digest, len, maxLen);                                              \
  111|     14|    }                                                                                     \
pkcs11c.c:SFTKHash_SHA384_DestroyContext:
  114|     14|    {                                                                                     \
  115|     14|        ctxtype *ctx = vctx;                                                              \
  116|     14|        mmm##_DestroyContext(ctx, freeit);                                                \
  117|     14|    }
pkcs11c.c:SFTKHash_SHA512_Update:
  101|     18|    {                                                                                     \
  102|     18|        ctxtype *ctx = vctx;                                                              \
  103|     18|        mmm##_Update(ctx, input, len);                                                    \
  104|     18|    }                                                                                     \
pkcs11c.c:SFTKHash_SHA512_End:
  108|     18|    {                                                                                     \
  109|     18|        ctxtype *ctx = vctx;                                                              \
  110|     18|        mmm##_End(ctx, digest, len, maxLen);                                              \
  111|     18|    }                                                                                     \
pkcs11c.c:SFTKHash_SHA512_DestroyContext:
  114|     18|    {                                                                                     \
  115|     18|        ctxtype *ctx = vctx;                                                              \
  116|     18|        mmm##_DestroyContext(ctx, freeit);                                                \
  117|     18|    }
pkcs11c.c:sftk_InitCBCMac:
 2402|  4.30k|{
 2403|  4.30k|    CK_MECHANISM cbc_mechanism;
 2404|  4.30k|    CK_ULONG mac_bytes = SFTK_INVALID_MAC_SIZE;
  ------------------
  |  |  256|  4.30k|#define SFTK_INVALID_MAC_SIZE 0xffffffff
  ------------------
 2405|  4.30k|#ifndef NSS_DISABLE_DEPRECATED_RC2
 2406|  4.30k|    CK_RC2_CBC_PARAMS rc2_params;
 2407|  4.30k|#endif
 2408|       |#if NSS_SOFTOKEN_DOES_RC5
 2409|       |    CK_RC5_CBC_PARAMS rc5_params;
 2410|       |    CK_RC5_MAC_GENERAL_PARAMS *rc5_mac;
 2411|       |#endif
 2412|  4.30k|    unsigned char ivBlock[SFTK_MAX_BLOCK_SIZE];
 2413|  4.30k|    unsigned char k2[SFTK_MAX_BLOCK_SIZE];
 2414|  4.30k|    unsigned char k3[SFTK_MAX_BLOCK_SIZE];
 2415|  4.30k|    SFTKSessionContext *context;
 2416|  4.30k|    CK_RV crv;
 2417|  4.30k|    unsigned int blockSize;
 2418|  4.30k|    PRBool isXCBC = PR_FALSE;
  ------------------
  |  |  438|  4.30k|#define PR_FALSE 0
  ------------------
 2419|       |
 2420|  4.30k|    if (!pMechanism) {
  ------------------
  |  Branch (2420:9): [True: 0, False: 4.30k]
  ------------------
 2421|      0|        return CKR_MECHANISM_PARAM_INVALID;
  ------------------
  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  ------------------
 2422|      0|    }
 2423|       |
 2424|  4.30k|    switch (pMechanism->mechanism) {
 2425|      0|#ifndef NSS_DISABLE_DEPRECATED_RC2
 2426|      0|        case CKM_RC2_MAC_GENERAL:
  ------------------
  |  |  809|      0|#define CKM_RC2_MAC_GENERAL 0x00000104UL
  ------------------
  |  Branch (2426:9): [True: 0, False: 4.30k]
  ------------------
 2427|      0|            if (BAD_PARAM_CAST(pMechanism, sizeof(CK_RC2_MAC_GENERAL_PARAMS))) {
  ------------------
  |  |   50|      0|#define BAD_PARAM_CAST(pMech, typeSize) (!pMech->pParameter || pMech->ulParameterLen < typeSize)
  |  |  ------------------
  |  |  |  Branch (50:42): [True: 0, False: 0]
  |  |  |  Branch (50:64): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2428|      0|                return CKR_MECHANISM_PARAM_INVALID;
  ------------------
  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  ------------------
 2429|      0|            }
 2430|      0|            mac_bytes =
 2431|      0|                ((CK_RC2_MAC_GENERAL_PARAMS *)pMechanism->pParameter)->ulMacLength;
 2432|       |        /* fall through */
 2433|      0|        case CKM_RC2_MAC:
  ------------------
  |  |  806|      0|#define CKM_RC2_MAC 0x00000103UL
  ------------------
  |  Branch (2433:9): [True: 0, False: 4.30k]
  ------------------
 2434|       |            /* this works because ulEffectiveBits is in the same place in both the
 2435|       |             * CK_RC2_MAC_GENERAL_PARAMS and CK_RC2_CBC_PARAMS */
 2436|      0|            rc2_params.ulEffectiveBits = ((CK_RC2_MAC_GENERAL_PARAMS *)
 2437|      0|                                              pMechanism->pParameter)
 2438|      0|                                             ->ulEffectiveBits;
 2439|      0|            PORT_Memset(rc2_params.iv, 0, sizeof(rc2_params.iv));
  ------------------
  |  |  182|      0|#define PORT_Memset memset
  ------------------
 2440|      0|            cbc_mechanism.mechanism = CKM_RC2_CBC;
  ------------------
  |  |  805|      0|#define CKM_RC2_CBC 0x00000102UL
  ------------------
 2441|      0|            cbc_mechanism.pParameter = &rc2_params;
 2442|      0|            cbc_mechanism.ulParameterLen = sizeof(rc2_params);
 2443|      0|            blockSize = 8;
 2444|      0|            break;
 2445|      0|#endif /* NSS_DISABLE_DEPRECATED_RC2 */
 2446|       |
 2447|       |#if NSS_SOFTOKEN_DOES_RC5
 2448|       |        case CKM_RC5_MAC_GENERAL:
 2449|       |            if (BAD_PARAM_CAST(pMechanism, sizeof(CK_RC5_MAC_GENERAL_PARAMS))) {
 2450|       |                return CKR_MECHANISM_PARAM_INVALID;
 2451|       |            }
 2452|       |            mac_bytes =
 2453|       |                ((CK_RC5_MAC_GENERAL_PARAMS *)pMechanism->pParameter)->ulMacLength;
 2454|       |        /* fall through */
 2455|       |        case CKM_RC5_MAC:
 2456|       |            /* this works because ulEffectiveBits is in the same place in both the
 2457|       |             * CK_RC5_MAC_GENERAL_PARAMS and CK_RC5_CBC_PARAMS */
 2458|       |            if (BAD_PARAM_CAST(pMechanism, sizeof(CK_RC5_MAC_GENERAL_PARAMS))) {
 2459|       |                return CKR_MECHANISM_PARAM_INVALID;
 2460|       |            }
 2461|       |            rc5_mac = (CK_RC5_MAC_GENERAL_PARAMS *)pMechanism->pParameter;
 2462|       |            rc5_params.ulWordsize = rc5_mac->ulWordsize;
 2463|       |            rc5_params.ulRounds = rc5_mac->ulRounds;
 2464|       |            rc5_params.pIv = ivBlock;
 2465|       |            if ((blockSize = rc5_mac->ulWordsize * 2) > SFTK_MAX_BLOCK_SIZE)
 2466|       |                return CKR_MECHANISM_PARAM_INVALID;
 2467|       |            rc5_params.ulIvLen = blockSize;
 2468|       |            PORT_Memset(ivBlock, 0, blockSize);
 2469|       |            cbc_mechanism.mechanism = CKM_RC5_CBC;
 2470|       |            cbc_mechanism.pParameter = &rc5_params;
 2471|       |            cbc_mechanism.ulParameterLen = sizeof(rc5_params);
 2472|       |            break;
 2473|       |#endif
 2474|       |        /* add cast and idea later */
 2475|      0|        case CKM_DES_MAC_GENERAL:
  ------------------
  |  |  820|      0|#define CKM_DES_MAC_GENERAL 0x00000124UL
  ------------------
  |  Branch (2475:9): [True: 0, False: 4.30k]
  ------------------
 2476|      0|            mac_bytes = *(CK_ULONG *)pMechanism->pParameter;
 2477|       |        /* fall through */
 2478|      0|        case CKM_DES_MAC:
  ------------------
  |  |  817|      0|#define CKM_DES_MAC 0x00000123UL
  ------------------
  |  Branch (2478:9): [True: 0, False: 4.30k]
  ------------------
 2479|      0|            blockSize = 8;
 2480|      0|            PORT_Memset(ivBlock, 0, blockSize);
  ------------------
  |  |  182|      0|#define PORT_Memset memset
  ------------------
 2481|      0|            cbc_mechanism.mechanism = CKM_DES_CBC;
  ------------------
  |  |  816|      0|#define CKM_DES_CBC 0x00000122UL
  ------------------
 2482|      0|            cbc_mechanism.pParameter = &ivBlock;
 2483|      0|            cbc_mechanism.ulParameterLen = blockSize;
 2484|      0|            break;
 2485|      0|        case CKM_DES3_MAC_GENERAL:
  ------------------
  |  |  832|      0|#define CKM_DES3_MAC_GENERAL 0x00000135UL
  ------------------
  |  Branch (2485:9): [True: 0, False: 4.30k]
  ------------------
 2486|      0|            mac_bytes = *(CK_ULONG *)pMechanism->pParameter;
 2487|       |        /* fall through */
 2488|      0|        case CKM_DES3_MAC:
  ------------------
  |  |  827|      0|#define CKM_DES3_MAC 0x00000134UL
  ------------------
  |  Branch (2488:9): [True: 0, False: 4.30k]
  ------------------
 2489|      0|            blockSize = 8;
 2490|      0|            PORT_Memset(ivBlock, 0, blockSize);
  ------------------
  |  |  182|      0|#define PORT_Memset memset
  ------------------
 2491|      0|            cbc_mechanism.mechanism = CKM_DES3_CBC;
  ------------------
  |  |  826|      0|#define CKM_DES3_CBC 0x00000133UL
  ------------------
 2492|      0|            cbc_mechanism.pParameter = &ivBlock;
 2493|      0|            cbc_mechanism.ulParameterLen = blockSize;
 2494|      0|            break;
 2495|      0|        case CKM_CDMF_MAC_GENERAL:
  ------------------
  |  |  838|      0|#define CKM_CDMF_MAC_GENERAL 0x00000144UL
  ------------------
  |  Branch (2495:9): [True: 0, False: 4.30k]
  ------------------
 2496|      0|            mac_bytes = *(CK_ULONG *)pMechanism->pParameter;
 2497|       |        /* fall through */
 2498|      0|        case CKM_CDMF_MAC:
  ------------------
  |  |  837|      0|#define CKM_CDMF_MAC 0x00000143UL
  ------------------
  |  Branch (2498:9): [True: 0, False: 4.30k]
  ------------------
 2499|      0|            blockSize = 8;
 2500|      0|            PORT_Memset(ivBlock, 0, blockSize);
  ------------------
  |  |  182|      0|#define PORT_Memset memset
  ------------------
 2501|      0|            cbc_mechanism.mechanism = CKM_CDMF_CBC;
  ------------------
  |  |  836|      0|#define CKM_CDMF_CBC 0x00000142UL
  ------------------
 2502|      0|            cbc_mechanism.pParameter = &ivBlock;
 2503|      0|            cbc_mechanism.ulParameterLen = blockSize;
 2504|      0|            break;
 2505|      0|#ifndef NSS_DISABLE_DEPRECATED_SEED
 2506|      0|        case CKM_SEED_MAC_GENERAL:
  ------------------
  |  | 1159|      0|#define CKM_SEED_MAC_GENERAL 0x00000654UL
  ------------------
  |  Branch (2506:9): [True: 0, False: 4.30k]
  ------------------
 2507|      0|            mac_bytes = *(CK_ULONG *)pMechanism->pParameter;
 2508|       |        /* fall through */
 2509|      0|        case CKM_SEED_MAC:
  ------------------
  |  | 1158|      0|#define CKM_SEED_MAC 0x00000653UL
  ------------------
  |  Branch (2509:9): [True: 0, False: 4.30k]
  ------------------
 2510|      0|            blockSize = 16;
 2511|      0|            PORT_Memset(ivBlock, 0, blockSize);
  ------------------
  |  |  182|      0|#define PORT_Memset memset
  ------------------
 2512|      0|            cbc_mechanism.mechanism = CKM_SEED_CBC;
  ------------------
  |  | 1157|      0|#define CKM_SEED_CBC 0x00000652UL
  ------------------
 2513|      0|            cbc_mechanism.pParameter = &ivBlock;
 2514|      0|            cbc_mechanism.ulParameterLen = blockSize;
 2515|      0|            break;
 2516|      0|#endif /* NSS_DISABLE_DEPRECATED_SEED */
 2517|      0|        case CKM_CAMELLIA_MAC_GENERAL:
  ------------------
  |  | 1139|      0|#define CKM_CAMELLIA_MAC_GENERAL 0x00000554UL
  ------------------
  |  Branch (2517:9): [True: 0, False: 4.30k]
  ------------------
 2518|      0|            mac_bytes = *(CK_ULONG *)pMechanism->pParameter;
 2519|       |        /* fall through */
 2520|      0|        case CKM_CAMELLIA_MAC:
  ------------------
  |  | 1138|      0|#define CKM_CAMELLIA_MAC 0x00000553UL
  ------------------
  |  Branch (2520:9): [True: 0, False: 4.30k]
  ------------------
 2521|      0|            blockSize = 16;
 2522|      0|            PORT_Memset(ivBlock, 0, blockSize);
  ------------------
  |  |  182|      0|#define PORT_Memset memset
  ------------------
 2523|      0|            cbc_mechanism.mechanism = CKM_CAMELLIA_CBC;
  ------------------
  |  | 1137|      0|#define CKM_CAMELLIA_CBC 0x00000552UL
  ------------------
 2524|      0|            cbc_mechanism.pParameter = &ivBlock;
 2525|      0|            cbc_mechanism.ulParameterLen = blockSize;
 2526|      0|            break;
 2527|      0|        case CKM_AES_MAC_GENERAL:
  ------------------
  |  | 1110|      0|#define CKM_AES_MAC_GENERAL 0x00001084UL
  ------------------
  |  Branch (2527:9): [True: 0, False: 4.30k]
  ------------------
 2528|      0|            mac_bytes = *(CK_ULONG *)pMechanism->pParameter;
 2529|       |        /* fall through */
 2530|      0|        case CKM_AES_MAC:
  ------------------
  |  | 1109|      0|#define CKM_AES_MAC 0x00001083UL
  ------------------
  |  Branch (2530:9): [True: 0, False: 4.30k]
  ------------------
 2531|      0|            blockSize = 16;
 2532|      0|            PORT_Memset(ivBlock, 0, blockSize);
  ------------------
  |  |  182|      0|#define PORT_Memset memset
  ------------------
 2533|      0|            cbc_mechanism.mechanism = CKM_AES_CBC;
  ------------------
  |  | 1108|      0|#define CKM_AES_CBC 0x00001082UL
  ------------------
 2534|      0|            cbc_mechanism.pParameter = &ivBlock;
 2535|      0|            cbc_mechanism.ulParameterLen = blockSize;
 2536|      0|            break;
 2537|      0|        case CKM_AES_XCBC_MAC_96:
  ------------------
  |  | 1122|      0|#define CKM_AES_XCBC_MAC_96 0x0000108DUL
  ------------------
  |  Branch (2537:9): [True: 0, False: 4.30k]
  ------------------
 2538|      0|        case CKM_AES_XCBC_MAC:
  ------------------
  |  | 1121|      0|#define CKM_AES_XCBC_MAC 0x0000108CUL
  ------------------
  |  Branch (2538:9): [True: 0, False: 4.30k]
  ------------------
 2539|       |            /* The only difference between CKM_AES_XCBC_MAC
 2540|       |             * and CKM_AES_XCBC_MAC_96 is the size of the returned mac. */
 2541|      0|            mac_bytes = pMechanism->mechanism == CKM_AES_XCBC_MAC_96 ? 12 : 16;
  ------------------
  |  | 1122|      0|#define CKM_AES_XCBC_MAC_96 0x0000108DUL
  ------------------
  |  Branch (2541:25): [True: 0, False: 0]
  ------------------
 2542|      0|            blockSize = 16;
 2543|      0|            PORT_Memset(ivBlock, 0, blockSize);
  ------------------
  |  |  182|      0|#define PORT_Memset memset
  ------------------
 2544|      0|            cbc_mechanism.mechanism = CKM_AES_CBC;
  ------------------
  |  | 1108|      0|#define CKM_AES_CBC 0x00001082UL
  ------------------
 2545|      0|            cbc_mechanism.pParameter = &ivBlock;
 2546|      0|            cbc_mechanism.ulParameterLen = blockSize;
 2547|       |            /* is XCBC requires extra processing at the end of the operation */
 2548|      0|            isXCBC = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 2549|       |            /* The input key is used to generate k1, k2, and k3. k2 and k3
 2550|       |             * are used at the end in the pad step. k1 replaces the input
 2551|       |             * key in the aes cbc mac */
 2552|      0|            crv = sftk_aes_xcbc_new_keys(hSession, hKey, &hKey, k2, k3);
 2553|      0|            if (crv != CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (2553:17): [True: 0, False: 0]
  ------------------
 2554|      0|                return crv;
 2555|      0|            }
 2556|      0|            break;
 2557|  4.30k|        default:
  ------------------
  |  Branch (2557:9): [True: 4.30k, False: 0]
  ------------------
 2558|  4.30k|            return CKR_FUNCTION_NOT_SUPPORTED;
  ------------------
  |  | 1426|  4.30k|#define CKR_FUNCTION_NOT_SUPPORTED 0x00000054UL
  ------------------
 2559|  4.30k|    }
 2560|       |
 2561|       |    /* if MAC size is externally supplied, it should be checked.
 2562|       |     */
 2563|      0|    if (mac_bytes == SFTK_INVALID_MAC_SIZE)
  ------------------
  |  |  256|      0|#define SFTK_INVALID_MAC_SIZE 0xffffffff
  ------------------
  |  Branch (2563:9): [True: 0, False: 0]
  ------------------
 2564|      0|        mac_bytes = blockSize >> 1;
 2565|      0|    else {
 2566|      0|        if (mac_bytes > blockSize) {
  ------------------
  |  Branch (2566:13): [True: 0, False: 0]
  ------------------
 2567|      0|            crv = CKR_MECHANISM_PARAM_INVALID;
  ------------------
  |  | 1448|      0|#define CKR_MECHANISM_PARAM_INVALID 0x00000071UL
  ------------------
 2568|      0|            goto fail;
 2569|      0|        }
 2570|      0|    }
 2571|       |
 2572|      0|    crv = sftk_CryptInit(hSession, &cbc_mechanism, hKey,
 2573|      0|                         CKA_ENCRYPT, /* CBC mech is able to ENCRYPT, not SIGN/VERIFY */
  ------------------
  |  |  547|      0|#define CKA_ENCRYPT 0x00000104UL
  ------------------
 2574|      0|                         keyUsage, contextType, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 2575|      0|    if (crv != CKR_OK)
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (2575:9): [True: 0, False: 0]
  ------------------
 2576|      0|        goto fail;
 2577|      0|    crv = sftk_GetContext(hSession, &context, contextType, PR_TRUE, NULL);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 2578|       |
 2579|       |    /* this shouldn't happen! */
 2580|      0|    PORT_Assert(crv == CKR_OK);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2581|      0|    if (crv != CKR_OK)
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (2581:9): [True: 0, False: 0]
  ------------------
 2582|      0|        goto fail;
 2583|      0|    context->blockSize = blockSize;
 2584|      0|    context->macSize = mac_bytes;
 2585|      0|    context->isXCBC = isXCBC;
 2586|      0|    if (isXCBC) {
  ------------------
  |  Branch (2586:9): [True: 0, False: 0]
  ------------------
 2587|       |        /* save the xcbc specific parameters */
 2588|      0|        PORT_Memcpy(context->k2, k2, blockSize);
  ------------------
  |  |  180|      0|#define PORT_Memcpy memcpy
  ------------------
 2589|      0|        PORT_Memcpy(context->k3, k3, blockSize);
  ------------------
  |  |  180|      0|#define PORT_Memcpy memcpy
  ------------------
 2590|      0|        PORT_Memset(k2, 0, blockSize);
  ------------------
  |  |  182|      0|#define PORT_Memset memset
  ------------------
 2591|      0|        PORT_Memset(k3, 0, blockSize);
  ------------------
  |  |  182|      0|#define PORT_Memset memset
  ------------------
 2592|       |        /* get rid of the temp key now that the context has been created */
 2593|      0|        NSC_DestroyObject(hSession, hKey);
 2594|      0|    }
 2595|      0|    return CKR_OK;
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
 2596|      0|fail:
 2597|      0|    if (isXCBC) {
  ------------------
  |  Branch (2597:9): [True: 0, False: 0]
  ------------------
 2598|      0|        PORT_Memset(k2, 0, blockSize);
  ------------------
  |  |  182|      0|#define PORT_Memset memset
  ------------------
 2599|      0|        PORT_Memset(k3, 0, blockSize);
  ------------------
  |  |  182|      0|#define PORT_Memset memset
  ------------------
 2600|      0|        NSC_DestroyObject(hSession, hKey); /* get rid of our temp key */
 2601|      0|    }
 2602|      0|    return crv;
 2603|      0|}
pkcs11c.c:sftk_doSubSHA1:
 2150|      4|    {                                                           \
 2151|      4|        mmm##Context *mmm##_ctx = mmm##_NewContext();           \
 2152|      4|        context->hashInfo = (void *)mmm##_ctx;                  \
 2153|      4|        context->hashUpdate = SFTKHash_##mmm##_Update;          \
 2154|      4|        context->end = SFTKHash_##mmm##_End;                    \
 2155|      4|        context->hashdestroy = SFTKHash_##mmm##_DestroyContext; \
 2156|      4|        if (!context->hashInfo) {                               \
  ------------------
  |  Branch (2156:13): [True: 0, False: 4]
  ------------------
 2157|      0|            return CKR_HOST_MEMORY;                             \
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 2158|      0|        }                                                       \
 2159|      4|        mmm##_Begin(mmm##_ctx);                                 \
 2160|      4|        return CKR_OK;                                          \
  ------------------
  |  | 1388|      4|#define CKR_OK 0x00000000UL
  ------------------
 2161|      4|    }
pkcs11c.c:sftk_doSubSHA224:
 2150|      3|    {                                                           \
 2151|      3|        mmm##Context *mmm##_ctx = mmm##_NewContext();           \
 2152|      3|        context->hashInfo = (void *)mmm##_ctx;                  \
 2153|      3|        context->hashUpdate = SFTKHash_##mmm##_Update;          \
 2154|      3|        context->end = SFTKHash_##mmm##_End;                    \
 2155|      3|        context->hashdestroy = SFTKHash_##mmm##_DestroyContext; \
 2156|      3|        if (!context->hashInfo) {                               \
  ------------------
  |  Branch (2156:13): [True: 0, False: 3]
  ------------------
 2157|      0|            return CKR_HOST_MEMORY;                             \
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 2158|      0|        }                                                       \
 2159|      3|        mmm##_Begin(mmm##_ctx);                                 \
 2160|      3|        return CKR_OK;                                          \
  ------------------
  |  | 1388|      3|#define CKR_OK 0x00000000UL
  ------------------
 2161|      3|    }
pkcs11c.c:sftk_doSubSHA256:
 2150|  4.27k|    {                                                           \
 2151|  4.27k|        mmm##Context *mmm##_ctx = mmm##_NewContext();           \
 2152|  4.27k|        context->hashInfo = (void *)mmm##_ctx;                  \
 2153|  4.27k|        context->hashUpdate = SFTKHash_##mmm##_Update;          \
 2154|  4.27k|        context->end = SFTKHash_##mmm##_End;                    \
 2155|  4.27k|        context->hashdestroy = SFTKHash_##mmm##_DestroyContext; \
 2156|  4.27k|        if (!context->hashInfo) {                               \
  ------------------
  |  Branch (2156:13): [True: 0, False: 4.27k]
  ------------------
 2157|      0|            return CKR_HOST_MEMORY;                             \
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 2158|      0|        }                                                       \
 2159|  4.27k|        mmm##_Begin(mmm##_ctx);                                 \
 2160|  4.27k|        return CKR_OK;                                          \
  ------------------
  |  | 1388|  4.27k|#define CKR_OK 0x00000000UL
  ------------------
 2161|  4.27k|    }
pkcs11c.c:sftk_doSubSHA384:
 2150|     11|    {                                                           \
 2151|     11|        mmm##Context *mmm##_ctx = mmm##_NewContext();           \
 2152|     11|        context->hashInfo = (void *)mmm##_ctx;                  \
 2153|     11|        context->hashUpdate = SFTKHash_##mmm##_Update;          \
 2154|     11|        context->end = SFTKHash_##mmm##_End;                    \
 2155|     11|        context->hashdestroy = SFTKHash_##mmm##_DestroyContext; \
 2156|     11|        if (!context->hashInfo) {                               \
  ------------------
  |  Branch (2156:13): [True: 0, False: 11]
  ------------------
 2157|      0|            return CKR_HOST_MEMORY;                             \
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 2158|      0|        }                                                       \
 2159|     11|        mmm##_Begin(mmm##_ctx);                                 \
 2160|     11|        return CKR_OK;                                          \
  ------------------
  |  | 1388|     11|#define CKR_OK 0x00000000UL
  ------------------
 2161|     11|    }
pkcs11c.c:sftk_doSubSHA512:
 2150|     17|    {                                                           \
 2151|     17|        mmm##Context *mmm##_ctx = mmm##_NewContext();           \
 2152|     17|        context->hashInfo = (void *)mmm##_ctx;                  \
 2153|     17|        context->hashUpdate = SFTKHash_##mmm##_Update;          \
 2154|     17|        context->end = SFTKHash_##mmm##_End;                    \
 2155|     17|        context->hashdestroy = SFTKHash_##mmm##_DestroyContext; \
 2156|     17|        if (!context->hashInfo) {                               \
  ------------------
  |  Branch (2156:13): [True: 0, False: 17]
  ------------------
 2157|      0|            return CKR_HOST_MEMORY;                             \
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 2158|      0|        }                                                       \
 2159|     17|        mmm##_Begin(mmm##_ctx);                                 \
 2160|     17|        return CKR_OK;                                          \
  ------------------
  |  | 1388|     17|#define CKR_OK 0x00000000UL
  ------------------
 2161|     17|    }
pkcs11c.c:sftk_Space:
  194|  2.68k|{
  195|  2.68k|    PORT_Free(data);
  ------------------
  |  |   60|  2.68k|#define PORT_Free PORT_Free_Util
  ------------------
  196|  2.68k|}
pkcs11c.c:sftk_ValidatePssParams:
  336|     77|{
  337|     77|    if (!params) {
  ------------------
  |  Branch (337:9): [True: 0, False: 77]
  ------------------
  338|      0|        return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  339|      0|    }
  340|     77|    if (sftk_GetHashTypeFromMechanism(params->hashAlg) == HASH_AlgNULL ||
  ------------------
  |  Branch (340:9): [True: 0, False: 77]
  ------------------
  341|     77|        sftk_GetHashTypeFromMechanism(params->mgf) == HASH_AlgNULL) {
  ------------------
  |  Branch (341:9): [True: 1, False: 76]
  ------------------
  342|      1|        return PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  343|      1|    }
  344|     76|    return PR_TRUE;
  ------------------
  |  |  437|     76|#define PR_TRUE 1
  ------------------
  345|     77|}
pkcs11c.c:sftk_ZSpace:
  200|     76|{
  201|     76|    size_t len = *(size_t *)data;
  202|     76|    PORT_ZFree(data, len);
  ------------------
  |  |   75|     76|#define PORT_ZFree PORT_ZFree_Util
  ------------------
  203|     76|}
pkcs11c.c:sftk_MACUpdate:
 3322|  4.30k|{
 3323|  4.30k|    SFTKSession *session;
 3324|  4.30k|    SFTKSessionContext *context;
 3325|  4.30k|    CK_RV crv;
 3326|       |
 3327|       |    /* make sure we're legal */
 3328|  4.30k|    crv = sftk_GetContext(hSession, &context, type, PR_TRUE, &session);
  ------------------
  |  |  437|  4.30k|#define PR_TRUE 1
  ------------------
 3329|  4.30k|    if (crv != CKR_OK)
  ------------------
  |  | 1388|  4.30k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3329:9): [True: 0, False: 4.30k]
  ------------------
 3330|      0|        return crv;
 3331|       |
 3332|  4.30k|    if (context->hashInfo) {
  ------------------
  |  Branch (3332:9): [True: 4.30k, False: 0]
  ------------------
 3333|  4.30k|#if (ULONG_MAX > UINT_MAX)
 3334|  4.30k|        while (ulPartLen > UINT_MAX) {
  ------------------
  |  Branch (3334:16): [True: 0, False: 4.30k]
  ------------------
 3335|      0|            (*context->hashUpdate)(context->cipherInfo, pPart, UINT_MAX);
 3336|      0|            pPart += UINT_MAX;
 3337|      0|            ulPartLen -= UINT_MAX;
 3338|      0|        }
 3339|  4.30k|#endif
 3340|  4.30k|        (*context->hashUpdate)(context->hashInfo, pPart, ulPartLen);
 3341|  4.30k|    } else {
 3342|       |        /* must be block cipher MACing */
 3343|       |
 3344|      0|        unsigned int blkSize = context->blockSize;
 3345|      0|        unsigned char *residual = /* free room in context->padBuf */
 3346|      0|            context->padBuf + context->padDataLength;
 3347|      0|        unsigned int minInput = /* min input for MACing at least one block */
 3348|      0|            blkSize - context->padDataLength;
 3349|       |
 3350|       |        /* not enough data even for one block */
 3351|      0|        if (ulPartLen <= minInput) {
  ------------------
  |  Branch (3351:13): [True: 0, False: 0]
  ------------------
 3352|      0|            PORT_Memcpy(residual, pPart, ulPartLen);
  ------------------
  |  |  180|      0|#define PORT_Memcpy memcpy
  ------------------
 3353|      0|            context->padDataLength += ulPartLen;
 3354|      0|            goto cleanup;
 3355|      0|        }
 3356|       |        /* MACing residual */
 3357|      0|        if (context->padDataLength) {
  ------------------
  |  Branch (3357:13): [True: 0, False: 0]
  ------------------
 3358|      0|            PORT_Memcpy(residual, pPart, minInput);
  ------------------
  |  |  180|      0|#define PORT_Memcpy memcpy
  ------------------
 3359|      0|            ulPartLen -= minInput;
 3360|      0|            pPart += minInput;
 3361|      0|            if (CKR_OK != (crv = sftk_MACBlock(context, context->padBuf)))
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3361:17): [True: 0, False: 0]
  ------------------
 3362|      0|                goto terminate;
 3363|      0|        }
 3364|       |        /* MACing full blocks */
 3365|      0|        while (ulPartLen > blkSize) {
  ------------------
  |  Branch (3365:16): [True: 0, False: 0]
  ------------------
 3366|      0|            if (CKR_OK != (crv = sftk_MACBlock(context, pPart)))
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (3366:17): [True: 0, False: 0]
  ------------------
 3367|      0|                goto terminate;
 3368|      0|            ulPartLen -= blkSize;
 3369|      0|            pPart += blkSize;
 3370|      0|        }
 3371|       |        /* save the residual */
 3372|      0|        if ((context->padDataLength = ulPartLen))
  ------------------
  |  Branch (3372:13): [True: 0, False: 0]
  ------------------
 3373|      0|            PORT_Memcpy(context->padBuf, pPart, ulPartLen);
  ------------------
  |  |  180|      0|#define PORT_Memcpy memcpy
  ------------------
 3374|      0|    } /* blk cipher MACing */
 3375|       |
 3376|  4.30k|    goto cleanup;
 3377|       |
 3378|  4.30k|terminate:
 3379|      0|    sftk_TerminateOp(session, type, context);
 3380|  4.30k|cleanup:
 3381|  4.30k|    sftk_FreeSession(session);
 3382|  4.30k|    return crv;
 3383|      0|}
pkcs11c.c:sftk_hashCheckSign:
 3604|  2.68k|{
 3605|  2.68k|    SFTKHashVerifyInfo *info = ctx;
 3606|  2.68k|    PORT_Assert(info->key->keyType == NSSLOWKEYRSAKey);
  ------------------
  |  |  120|  2.68k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  2.68k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 2.68k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3607|  2.68k|    if (info->key->keyType != NSSLOWKEYRSAKey) {
  ------------------
  |  Branch (3607:9): [True: 0, False: 2.68k]
  ------------------
 3608|      0|        PORT_SetError(SEC_ERROR_INVALID_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 3609|      0|        return SECFailure;
 3610|      0|    }
 3611|       |
 3612|  2.68k|    return RSA_HashCheckSign(info->hashOid, info->key, sig, sigLen, digest,
 3613|  2.68k|                             digestLen);
 3614|  2.68k|}
pkcs11c.c:sftk_RSACheckSignPSS:
 3690|     76|{
 3691|     76|    SFTKPSSVerifyInfo *info = ctx;
 3692|     76|    HASH_HashType hashAlg;
 3693|     76|    HASH_HashType maskHashAlg;
 3694|     76|    CK_RSA_PKCS_PSS_PARAMS *params = &info->params;
 3695|       |
 3696|     76|    PORT_Assert(info->key->keyType == NSSLOWKEYRSAKey);
  ------------------
  |  |  120|     76|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     76|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 76, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3697|     76|    if (info->key->keyType != NSSLOWKEYRSAKey) {
  ------------------
  |  Branch (3697:9): [True: 0, False: 76]
  ------------------
 3698|      0|        PORT_SetError(SEC_ERROR_INVALID_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 3699|      0|        return SECFailure;
 3700|      0|    }
 3701|       |
 3702|     76|    hashAlg = sftk_GetHashTypeFromMechanism(params->hashAlg);
 3703|     76|    maskHashAlg = sftk_GetHashTypeFromMechanism(params->mgf);
 3704|       |
 3705|     76|    return RSA_CheckSignPSS(&info->key->u.rsa, hashAlg, maskHashAlg,
 3706|     76|                            params->sLen, sig, sigLen, digest, digestLen);
 3707|     76|}
pkcs11c.c:nsc_DSA_Verify_Stub:
 2775|  1.33k|{
 2776|  1.33k|    NSSLOWKEYPublicKey *key = ctx;
 2777|  1.33k|    SECItem signature = { siBuffer, (unsigned char *)sigBuf, sigLen };
 2778|  1.33k|    SECItem digest = { siBuffer, (unsigned char *)dataBuf, dataLen };
 2779|  1.33k|    return DSA_VerifyDigest(&(key->u.dsa), &signature, &digest);
 2780|  1.33k|}
pkcs11c.c:nsc_ECDSAVerifyStub:
 2801|    218|{
 2802|    218|    NSSLOWKEYPublicKey *key = ctx;
 2803|    218|    SECItem signature = { siBuffer, (unsigned char *)sigBuf, sigLen };
 2804|    218|    SECItem digest = { siBuffer, (unsigned char *)dataBuf, dataLen };
 2805|    218|    return ECDSA_VerifyDigest(&(key->u.ec), &signature, &digest);
 2806|    218|}
pkcs11c.c:sftk_RSACheckSignRecover:
 4044|      3|{
 4045|      3|    NSSLOWKEYPublicKey *key = ctx;
 4046|      3|    PORT_Assert(key->keyType == NSSLOWKEYRSAKey);
  ------------------
  |  |  120|      3|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      3|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 3, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4047|      3|    if (key->keyType != NSSLOWKEYRSAKey) {
  ------------------
  |  Branch (4047:9): [True: 0, False: 3]
  ------------------
 4048|      0|        PORT_SetError(SEC_ERROR_INVALID_KEY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 4049|      0|        return SECFailure;
 4050|      0|    }
 4051|       |
 4052|      3|    return RSA_CheckSignRecover(&key->u.rsa, data, dataLen, maxDataLen,
 4053|      3|                                sig, sigLen);
 4054|      3|}

sftk_MapCryptError:
   40|  4.14k|{
   41|  4.14k|    switch (error) {
  ------------------
  |  Branch (41:13): [True: 0, False: 4.14k]
  ------------------
   42|      0|        case SEC_ERROR_INVALID_ARGS:
  ------------------
  |  Branch (42:9): [True: 0, False: 4.14k]
  ------------------
   43|      0|        case SEC_ERROR_BAD_DATA: /* MP_RANGE gets mapped to this */
  ------------------
  |  Branch (43:9): [True: 0, False: 4.14k]
  ------------------
   44|      0|            return CKR_ARGUMENTS_BAD;
  ------------------
  |  | 1401|      0|#define CKR_ARGUMENTS_BAD 0x00000007UL
  ------------------
   45|      0|        case SEC_ERROR_INPUT_LEN:
  ------------------
  |  Branch (45:9): [True: 0, False: 4.14k]
  ------------------
   46|      0|            return CKR_DATA_LEN_RANGE;
  ------------------
  |  | 1415|      0|#define CKR_DATA_LEN_RANGE 0x00000021UL
  ------------------
   47|      0|        case SEC_ERROR_OUTPUT_LEN:
  ------------------
  |  Branch (47:9): [True: 0, False: 4.14k]
  ------------------
   48|      0|            return CKR_BUFFER_TOO_SMALL;
  ------------------
  |  | 1514|      0|#define CKR_BUFFER_TOO_SMALL 0x00000150UL
  ------------------
   49|     47|        case SEC_ERROR_LIBRARY_FAILURE:
  ------------------
  |  Branch (49:9): [True: 47, False: 4.09k]
  ------------------
   50|     47|            return CKR_GENERAL_ERROR;
  ------------------
  |  | 1396|     47|#define CKR_GENERAL_ERROR 0x00000005UL
  ------------------
   51|      0|        case SEC_ERROR_NO_MEMORY:
  ------------------
  |  Branch (51:9): [True: 0, False: 4.14k]
  ------------------
   52|      0|            return CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
   53|  4.09k|        case SEC_ERROR_BAD_SIGNATURE:
  ------------------
  |  Branch (53:9): [True: 4.09k, False: 47]
  ------------------
   54|  4.09k|            return CKR_SIGNATURE_INVALID;
  ------------------
  |  | 1475|  4.09k|#define CKR_SIGNATURE_INVALID 0x000000C0UL
  ------------------
   55|      0|        case SEC_ERROR_INVALID_KEY:
  ------------------
  |  Branch (55:9): [True: 0, False: 4.14k]
  ------------------
   56|      0|            return CKR_KEY_SIZE_RANGE;
  ------------------
  |  | 1432|      0|#define CKR_KEY_SIZE_RANGE 0x00000062UL
  ------------------
   57|      0|        case SEC_ERROR_BAD_KEY:        /* an EC public key that fails validation */
  ------------------
  |  Branch (57:9): [True: 0, False: 4.14k]
  ------------------
   58|      0|            return CKR_KEY_SIZE_RANGE; /* the closest error code */
  ------------------
  |  | 1432|      0|#define CKR_KEY_SIZE_RANGE 0x00000062UL
  ------------------
   59|      0|        case SEC_ERROR_UNSUPPORTED_EC_POINT_FORM:
  ------------------
  |  Branch (59:9): [True: 0, False: 4.14k]
  ------------------
   60|      0|            return CKR_TEMPLATE_INCONSISTENT;
  ------------------
  |  | 1478|      0|#define CKR_TEMPLATE_INCONSISTENT 0x000000D1UL
  ------------------
   61|      0|        case SEC_ERROR_UNSUPPORTED_KEYALG:
  ------------------
  |  Branch (61:9): [True: 0, False: 4.14k]
  ------------------
   62|      0|            return CKR_MECHANISM_INVALID;
  ------------------
  |  | 1447|      0|#define CKR_MECHANISM_INVALID 0x00000070UL
  ------------------
   63|      0|        case SEC_ERROR_UNSUPPORTED_ELLIPTIC_CURVE:
  ------------------
  |  Branch (63:9): [True: 0, False: 4.14k]
  ------------------
   64|      0|            return CKR_DOMAIN_PARAMS_INVALID;
  ------------------
  |  | 1508|      0|#define CKR_DOMAIN_PARAMS_INVALID 0x00000130UL
  ------------------
   65|       |        /* key pair generation failed after max number of attempts */
   66|      0|        case SEC_ERROR_NEED_RANDOM:
  ------------------
  |  Branch (66:9): [True: 0, False: 4.14k]
  ------------------
   67|      0|            return CKR_FUNCTION_FAILED;
  ------------------
  |  | 1397|      0|#define CKR_FUNCTION_FAILED 0x00000006UL
  ------------------
   68|  4.14k|    }
   69|      0|    return CKR_DEVICE_ERROR;
  ------------------
  |  | 1416|      0|#define CKR_DEVICE_ERROR 0x00000030UL
  ------------------
   70|  4.14k|}
sftk_MapVerifyError:
   96|      3|{
   97|      3|    CK_RV crv = sftk_MapCryptError(error);
   98|      3|    if (crv == CKR_DEVICE_ERROR)
  ------------------
  |  | 1416|      3|#define CKR_DEVICE_ERROR 0x00000030UL
  ------------------
  |  Branch (98:9): [True: 0, False: 3]
  ------------------
   99|      0|        crv = CKR_SIGNATURE_INVALID;
  ------------------
  |  | 1475|      0|#define CKR_SIGNATURE_INVALID 0x000000C0UL
  ------------------
  100|      3|    return crv;
  101|      3|}
sftk_FreeAttribute:
  191|  57.3k|{
  192|  57.3k|    if (attribute && attribute->freeAttr) {
  ------------------
  |  Branch (192:9): [True: 57.3k, False: 0]
  |  Branch (192:22): [True: 0, False: 57.3k]
  ------------------
  193|      0|        sftk_DestroyAttribute(attribute);
  194|      0|        return;
  195|      0|    }
  196|  57.3k|}
sftk_FindAttribute:
  261|  61.6k|{
  262|  61.6k|    SFTKAttribute *attribute;
  263|  61.6k|    SFTKSessionObject *sessObject = sftk_narrowToSessionObject(object);
  264|       |
  265|  61.6k|    if (sessObject == NULL) {
  ------------------
  |  Branch (265:9): [True: 0, False: 61.6k]
  ------------------
  266|      0|        return sftk_FindTokenAttribute(sftk_narrowToTokenObject(object), type);
  267|      0|    }
  268|       |
  269|  61.6k|    PZ_Lock(sessObject->attributeLock);
  ------------------
  |  |  245|  61.6k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  270|  61.6k|    sftkqueue_find(attribute, type, sessObject->head, sessObject->hashSize);
  ------------------
  |  |  524|   122k|    for ((element) = (head)[sftk_hash(id, hash_size)]; (element) != NULL; \
  |  |  ------------------
  |  |  |  |  513|  61.6k|    ((PRUint32)((value)*SHMULTIPLIER) & (size - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  509|  61.6k|#define SHMULTIPLIER 1791398085
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (524:56): [True: 118k, False: 4.32k]
  |  |  ------------------
  |  |  525|   118k|         (element) = (element)->next) {                                   \
  |  |  526|   118k|        if ((element)->handle == (id)) {                                  \
  |  |  ------------------
  |  |  |  Branch (526:13): [True: 57.3k, False: 60.9k]
  |  |  ------------------
  |  |  527|  57.3k|            break;                                                        \
  |  |  528|  57.3k|        }                                                                 \
  |  |  529|   118k|    }
  ------------------
  271|  61.6k|    PZ_Unlock(sessObject->attributeLock);
  ------------------
  |  |  246|  61.6k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  272|       |
  273|  61.6k|    return (attribute);
  274|  61.6k|}
sftk_GetLengthInBits:
  281|  10.9k|{
  282|  10.9k|    unsigned int size = bufLen * 8;
  283|  10.9k|    unsigned int i;
  284|       |
  285|       |    /* Get the real length in bytes */
  286|  10.9k|    for (i = 0; i < bufLen; i++) {
  ------------------
  |  Branch (286:17): [True: 10.9k, False: 4]
  ------------------
  287|  10.9k|        unsigned char c = *buf++;
  288|  10.9k|        if (c != 0) {
  ------------------
  |  Branch (288:13): [True: 10.8k, False: 4]
  ------------------
  289|  10.8k|            unsigned char m;
  290|  19.4k|            for (m = 0x80; m > 0; m = m >> 1) {
  ------------------
  |  Branch (290:28): [True: 19.4k, False: 0]
  ------------------
  291|  19.4k|                if ((c & m) != 0) {
  ------------------
  |  Branch (291:21): [True: 10.8k, False: 8.53k]
  ------------------
  292|  10.8k|                    break;
  293|  10.8k|                }
  294|  8.53k|                size--;
  295|  8.53k|            }
  296|  10.8k|            break;
  297|  10.8k|        }
  298|      4|        size -= 8;
  299|      4|    }
  300|  10.9k|    return size;
  301|  10.9k|}
sftk_ConstrainAttribute:
  314|  10.9k|{
  315|  10.9k|    SFTKAttribute *attribute;
  316|  10.9k|    int size;
  317|  10.9k|    unsigned char *ptr;
  318|       |
  319|  10.9k|    attribute = sftk_FindAttribute(object, type);
  320|  10.9k|    if (!attribute) {
  ------------------
  |  Branch (320:9): [True: 0, False: 10.9k]
  ------------------
  321|      0|        return CKR_TEMPLATE_INCOMPLETE;
  ------------------
  |  | 1477|      0|#define CKR_TEMPLATE_INCOMPLETE 0x000000D0UL
  ------------------
  322|      0|    }
  323|  10.9k|    ptr = (unsigned char *)attribute->attrib.pValue;
  324|  10.9k|    if (ptr == NULL) {
  ------------------
  |  Branch (324:9): [True: 0, False: 10.9k]
  ------------------
  325|      0|        sftk_FreeAttribute(attribute);
  326|      0|        return CKR_ATTRIBUTE_VALUE_INVALID;
  ------------------
  |  | 1409|      0|#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
  ------------------
  327|      0|    }
  328|  10.9k|    size = sftk_GetLengthInBits(ptr, attribute->attrib.ulValueLen);
  329|  10.9k|    sftk_FreeAttribute(attribute);
  330|       |
  331|  10.9k|    if ((minLength != 0) && (size < minLength)) {
  ------------------
  |  Branch (331:9): [True: 10.9k, False: 0]
  |  Branch (331:29): [True: 5, False: 10.8k]
  ------------------
  332|      5|        return CKR_ATTRIBUTE_VALUE_INVALID;
  ------------------
  |  | 1409|      5|#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
  ------------------
  333|      5|    }
  334|  10.8k|    if ((maxLength != 0) && (size > maxLength)) {
  ------------------
  |  Branch (334:9): [True: 5.34k, False: 5.54k]
  |  Branch (334:29): [True: 3, False: 5.34k]
  ------------------
  335|      3|        return CKR_ATTRIBUTE_VALUE_INVALID;
  ------------------
  |  | 1409|      3|#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
  ------------------
  336|      3|    }
  337|  10.8k|    if ((minMultiple != 0) && ((size % minMultiple) != 0)) {
  ------------------
  |  Branch (337:9): [True: 1.34k, False: 9.55k]
  |  Branch (337:31): [True: 10, False: 1.33k]
  ------------------
  338|     10|        return CKR_ATTRIBUTE_VALUE_INVALID;
  ------------------
  |  | 1409|     10|#define CKR_ATTRIBUTE_VALUE_INVALID 0x00000013UL
  ------------------
  339|     10|    }
  340|  10.8k|    return CKR_OK;
  ------------------
  |  | 1388|  10.8k|#define CKR_OK 0x00000000UL
  ------------------
  341|  10.8k|}
sftk_hasAttribute:
  367|  67.1k|{
  368|  67.1k|    SFTKAttribute *attribute;
  369|  67.1k|    SFTKSessionObject *sessObject = sftk_narrowToSessionObject(object);
  370|       |
  371|  67.1k|    if (sessObject == NULL) {
  ------------------
  |  Branch (371:9): [True: 0, False: 67.1k]
  ------------------
  372|      0|        return sftk_hasAttributeToken(sftk_narrowToTokenObject(object), type);
  373|      0|    }
  374|       |
  375|  67.1k|    PZ_Lock(sessObject->attributeLock);
  ------------------
  |  |  245|  67.1k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  376|  67.1k|    sftkqueue_find(attribute, type, sessObject->head, sessObject->hashSize);
  ------------------
  |  |  524|  99.6k|    for ((element) = (head)[sftk_hash(id, hash_size)]; (element) != NULL; \
  |  |  ------------------
  |  |  |  |  513|  67.1k|    ((PRUint32)((value)*SHMULTIPLIER) & (size - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  509|  67.1k|#define SHMULTIPLIER 1791398085
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (524:56): [True: 52.2k, False: 47.3k]
  |  |  ------------------
  |  |  525|  67.1k|         (element) = (element)->next) {                                   \
  |  |  526|  52.2k|        if ((element)->handle == (id)) {                                  \
  |  |  ------------------
  |  |  |  Branch (526:13): [True: 19.8k, False: 32.4k]
  |  |  ------------------
  |  |  527|  19.8k|            break;                                                        \
  |  |  528|  19.8k|        }                                                                 \
  |  |  529|  52.2k|    }
  ------------------
  377|  67.1k|    PZ_Unlock(sessObject->attributeLock);
  ------------------
  |  |  246|  67.1k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  378|       |
  379|  67.1k|    return (PRBool)(attribute != NULL);
  380|  67.1k|}
sftk_Attribute2SSecItem:
  405|  11.4k|{
  406|  11.4k|    SFTKAttribute *attribute;
  407|       |
  408|  11.4k|    item->data = NULL;
  409|       |
  410|  11.4k|    attribute = sftk_FindAttribute(object, type);
  411|  11.4k|    if (attribute == NULL)
  ------------------
  |  Branch (411:9): [True: 0, False: 11.4k]
  ------------------
  412|      0|        return CKR_TEMPLATE_INCOMPLETE;
  ------------------
  |  | 1477|      0|#define CKR_TEMPLATE_INCOMPLETE 0x000000D0UL
  ------------------
  413|       |
  414|  11.4k|    (void)SECITEM_AllocItem(arena, item, attribute->attrib.ulValueLen);
  ------------------
  |  |  103|  11.4k|#define SECITEM_AllocItem SECITEM_AllocItem_Util
  ------------------
  415|  11.4k|    if (item->data == NULL) {
  ------------------
  |  Branch (415:9): [True: 0, False: 11.4k]
  ------------------
  416|      0|        sftk_FreeAttribute(attribute);
  417|      0|        return CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
  418|      0|    }
  419|  11.4k|    PORT_Memcpy(item->data, attribute->attrib.pValue, item->len);
  ------------------
  |  |  180|  11.4k|#define PORT_Memcpy memcpy
  ------------------
  420|  11.4k|    sftk_FreeAttribute(attribute);
  421|  11.4k|    return CKR_OK;
  ------------------
  |  | 1388|  11.4k|#define CKR_OK 0x00000000UL
  ------------------
  422|  11.4k|}
sftk_isTrue:
  550|  21.7k|{
  551|  21.7k|    SFTKAttribute *attribute;
  552|  21.7k|    PRBool tok = PR_FALSE;
  ------------------
  |  |  438|  21.7k|#define PR_FALSE 0
  ------------------
  553|       |
  554|  21.7k|    attribute = sftk_FindAttribute(object, type);
  555|  21.7k|    if (attribute == NULL) {
  ------------------
  |  Branch (555:9): [True: 4.32k, False: 17.4k]
  ------------------
  556|  4.32k|        return PR_FALSE;
  ------------------
  |  |  438|  4.32k|#define PR_FALSE 0
  ------------------
  557|  4.32k|    }
  558|  17.4k|    tok = (PRBool)(*(CK_BBOOL *)attribute->attrib.pValue);
  559|  17.4k|    sftk_FreeAttribute(attribute);
  560|       |
  561|  17.4k|    return tok;
  562|  21.7k|}
sftk_AddAttributeType:
  889|  82.6k|{
  890|  82.6k|    SFTKAttribute *attribute;
  891|  82.6k|    attribute = sftk_NewAttribute(object, type, valPtr, length);
  892|  82.6k|    if (attribute == NULL) {
  ------------------
  |  Branch (892:9): [True: 0, False: 82.6k]
  ------------------
  893|      0|        return CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
  894|      0|    }
  895|  82.6k|    sftk_AddAttribute(object, attribute);
  896|  82.6k|    return CKR_OK;
  ------------------
  |  | 1388|  82.6k|#define CKR_OK 0x00000000UL
  ------------------
  897|  82.6k|}
SFTK_ClearTokenKeyHashTable:
  938|      2|{
  939|      2|    sftk_tokenKeyLock(slot);
  940|      2|    PORT_Assert(!slot->present);
  ------------------
  |  |  120|      2|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      2|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  941|      2|    PL_HashTableEnumerateEntries(slot->tokObjHashTable, sftk_freeHashItem, NULL);
  942|      2|    sftk_tokenKeyUnlock(slot);
  943|      2|    return CKR_OK;
  ------------------
  |  | 1388|      2|#define CKR_OK 0x00000000UL
  ------------------
  944|      2|}
sftk_GetObjectFromList:
  953|  4.44k|{
  954|  4.44k|    SFTKObject *object;
  955|  4.44k|    int size = 0;
  956|       |
  957|  4.44k|    if (!optimizeSpace) {
  ------------------
  |  Branch (957:9): [True: 0, False: 4.44k]
  ------------------
  958|      0|        PZ_Lock(list->lock);
  ------------------
  |  |  245|      0|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  959|      0|        object = list->head;
  960|      0|        if (object) {
  ------------------
  |  Branch (960:13): [True: 0, False: 0]
  ------------------
  961|      0|            list->head = object->next;
  962|      0|            list->count--;
  963|      0|        }
  964|      0|        PZ_Unlock(list->lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  965|      0|        if (object) {
  ------------------
  |  Branch (965:13): [True: 0, False: 0]
  ------------------
  966|       |            // As a safeguard against misuse of the library, ensure we don't
  967|       |            // hand out live objects that somehow land in the free list.
  968|      0|            PORT_Assert(object->refCount == 0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  969|      0|            if (object->refCount == 0) {
  ------------------
  |  Branch (969:17): [True: 0, False: 0]
  ------------------
  970|      0|                object->next = object->prev = NULL;
  971|      0|                *hasLocks = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  972|      0|                return object;
  973|      0|            }
  974|      0|        }
  975|      0|    }
  976|  4.44k|    size = isSessionObject ? sizeof(SFTKSessionObject) + hashSize * sizeof(SFTKAttribute *) : sizeof(SFTKTokenObject);
  ------------------
  |  Branch (976:12): [True: 4.44k, False: 0]
  ------------------
  977|       |
  978|  4.44k|    object = (SFTKObject *)PORT_ZAlloc(size);
  ------------------
  |  |   72|  4.44k|#define PORT_ZAlloc PORT_ZAlloc_Util
  ------------------
  979|  4.44k|    if (isSessionObject && object) {
  ------------------
  |  Branch (979:9): [True: 4.44k, False: 0]
  |  Branch (979:28): [True: 4.44k, False: 0]
  ------------------
  980|  4.44k|        ((SFTKSessionObject *)object)->hashSize = hashSize;
  981|  4.44k|    }
  982|  4.44k|    *hasLocks = PR_FALSE;
  ------------------
  |  |  438|  4.44k|#define PR_FALSE 0
  ------------------
  983|  4.44k|    return object;
  984|  4.44k|}
sftk_InitFreeLists:
 1039|      1|{
 1040|      1|    sftk_InitFreeList(&sessionObjectList);
 1041|      1|    sftk_InitFreeList(&tokenObjectList);
 1042|      1|}
sftk_CleanupFreeLists:
 1069|      1|{
 1070|      1|    sftk_CleanupFreeList(&sessionObjectList, PR_TRUE);
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
 1071|      1|    sftk_CleanupFreeList(&tokenObjectList, PR_FALSE);
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
 1072|      1|}
sftk_NewObject:
 1079|  4.44k|{
 1080|  4.44k|    SFTKObject *object;
 1081|  4.44k|    SFTKSessionObject *sessObject;
 1082|  4.44k|    PRBool hasLocks = PR_FALSE;
  ------------------
  |  |  438|  4.44k|#define PR_FALSE 0
  ------------------
 1083|  4.44k|    unsigned int i;
 1084|  4.44k|    unsigned int hashSize = 0;
 1085|       |
 1086|  4.44k|    hashSize = (slot->optimizeSpace) ? SPACE_ATTRIBUTE_HASH_SIZE : TIME_ATTRIBUTE_HASH_SIZE;
  ------------------
  |  |   65|  4.44k|#define SPACE_ATTRIBUTE_HASH_SIZE 32
  ------------------
                  hashSize = (slot->optimizeSpace) ? SPACE_ATTRIBUTE_HASH_SIZE : TIME_ATTRIBUTE_HASH_SIZE;
  ------------------
  |  |   68|  4.44k|#define TIME_ATTRIBUTE_HASH_SIZE 32
  ------------------
  |  Branch (1086:16): [True: 4.44k, False: 0]
  ------------------
 1087|       |
 1088|  4.44k|    object = sftk_GetObjectFromList(&hasLocks, slot->optimizeSpace,
 1089|  4.44k|                                    &sessionObjectList, hashSize, PR_TRUE);
  ------------------
  |  |  437|  4.44k|#define PR_TRUE 1
  ------------------
 1090|  4.44k|    if (object == NULL) {
  ------------------
  |  Branch (1090:9): [True: 0, False: 4.44k]
  ------------------
 1091|      0|        return NULL;
 1092|      0|    }
 1093|  4.44k|    sessObject = (SFTKSessionObject *)object;
 1094|  4.44k|    sessObject->nextAttr = 0;
 1095|       |
 1096|   204k|    for (i = 0; i < MAX_OBJS_ATTRS; i++) {
  ------------------
  |  |   37|   204k|#define MAX_OBJS_ATTRS 45 /* number of attributes to preallocate in \
  ------------------
  |  Branch (1096:17): [True: 199k, False: 4.44k]
  ------------------
 1097|   199k|        sessObject->attrList[i].attrib.pValue = NULL;
 1098|   199k|        sessObject->attrList[i].freeData = PR_FALSE;
  ------------------
  |  |  438|   199k|#define PR_FALSE 0
  ------------------
 1099|   199k|    }
 1100|  4.44k|    sessObject->optimizeSpace = slot->optimizeSpace;
 1101|       |
 1102|  4.44k|    object->handle = 0;
 1103|  4.44k|    object->next = object->prev = NULL;
 1104|  4.44k|    object->slot = slot;
 1105|  4.44k|    object->isFIPS = sftk_isFIPS(slot->slotID);
  ------------------
  |  |  506|  4.44k|    (((id) == FIPS_SLOT_ID) || ((id) >= SFTK_MIN_FIPS_USER_SLOT_ID))
  |  |  ------------------
  |  |  |  |  500|  4.44k|#define FIPS_SLOT_ID 3
  |  |  ------------------
  |  |                   (((id) == FIPS_SLOT_ID) || ((id) >= SFTK_MIN_FIPS_USER_SLOT_ID))
  |  |  ------------------
  |  |  |  |  567|  4.44k|#define SFTK_MIN_FIPS_USER_SLOT_ID 101
  |  |  ------------------
  |  |  |  Branch (506:6): [True: 0, False: 4.44k]
  |  |  |  Branch (506:32): [True: 0, False: 4.44k]
  |  |  ------------------
  ------------------
 1106|       |
 1107|  4.44k|    object->refCount = 1;
 1108|  4.44k|    sessObject->sessionList.next = NULL;
 1109|  4.44k|    sessObject->sessionList.prev = NULL;
 1110|  4.44k|    sessObject->sessionList.parent = object;
 1111|  4.44k|    sessObject->session = NULL;
 1112|  4.44k|    sessObject->wasDerived = PR_FALSE;
  ------------------
  |  |  438|  4.44k|#define PR_FALSE 0
  ------------------
 1113|  4.44k|    if (!hasLocks)
  ------------------
  |  Branch (1113:9): [True: 4.44k, False: 0]
  ------------------
 1114|  4.44k|        object->refLock = PZ_NewLock(nssILockRefLock);
  ------------------
  |  |  243|  4.44k|#define PZ_NewLock(t) PR_NewLock()
  ------------------
 1115|  4.44k|    if (object->refLock == NULL) {
  ------------------
  |  Branch (1115:9): [True: 0, False: 4.44k]
  ------------------
 1116|      0|        PORT_Free(object);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1117|      0|        return NULL;
 1118|      0|    }
 1119|  4.44k|    if (!hasLocks)
  ------------------
  |  Branch (1119:9): [True: 4.44k, False: 0]
  ------------------
 1120|  4.44k|        sessObject->attributeLock = PZ_NewLock(nssILockAttribute);
  ------------------
  |  |  243|  4.44k|#define PZ_NewLock(t) PR_NewLock()
  ------------------
 1121|  4.44k|    if (sessObject->attributeLock == NULL) {
  ------------------
  |  Branch (1121:9): [True: 0, False: 4.44k]
  ------------------
 1122|      0|        PZ_DestroyLock(object->refLock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
 1123|      0|        PORT_Free(object);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1124|      0|        return NULL;
 1125|      0|    }
 1126|   146k|    for (i = 0; i < sessObject->hashSize; i++) {
  ------------------
  |  Branch (1126:17): [True: 142k, False: 4.44k]
  ------------------
 1127|   142k|        sessObject->head[i] = NULL;
 1128|   142k|    }
 1129|  4.44k|    object->objectInfo = NULL;
 1130|  4.44k|    object->infoFree = NULL;
 1131|  4.44k|    return object;
 1132|  4.44k|}
sftk_ReferenceObject:
 1192|  17.2k|{
 1193|  17.2k|    PZ_Lock(object->refLock);
  ------------------
  |  |  245|  17.2k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 1194|  17.2k|    PORT_Assert(object->refCount > 0);
  ------------------
  |  |  120|  17.2k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  17.2k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 17.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1195|  17.2k|    object->refCount++;
 1196|  17.2k|    PZ_Unlock(object->refLock);
  ------------------
  |  |  246|  17.2k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1197|  17.2k|}
sftk_ObjectFromHandle:
 1225|  12.9k|{
 1226|  12.9k|    SFTKSlot *slot = sftk_SlotFromSession(session);
  ------------------
  |  |  503|  12.9k|#define sftk_SlotFromSession(sp) ((sp)->slot)
  ------------------
 1227|       |
 1228|  12.9k|    return sftk_ObjectFromHandleOnSlot(handle, slot);
 1229|  12.9k|}
sftk_FreeObject:
 1236|  21.7k|{
 1237|  21.7k|    PRBool destroy = PR_FALSE;
  ------------------
  |  |  438|  21.7k|#define PR_FALSE 0
  ------------------
 1238|  21.7k|    CK_RV crv;
 1239|       |
 1240|  21.7k|    PZ_Lock(object->refLock);
  ------------------
  |  |  245|  21.7k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 1241|  21.7k|    if (object->refCount == 1)
  ------------------
  |  Branch (1241:9): [True: 4.44k, False: 17.2k]
  ------------------
 1242|  4.44k|        destroy = PR_TRUE;
  ------------------
  |  |  437|  4.44k|#define PR_TRUE 1
  ------------------
 1243|  21.7k|    object->refCount--;
 1244|  21.7k|    PZ_Unlock(object->refLock);
  ------------------
  |  |  246|  21.7k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1245|       |
 1246|  21.7k|    if (destroy) {
  ------------------
  |  Branch (1246:9): [True: 4.44k, False: 17.2k]
  ------------------
 1247|  4.44k|        crv = sftk_DestroyObject(object);
 1248|  4.44k|        if (crv != CKR_OK) {
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1248:13): [True: 0, False: 4.44k]
  ------------------
 1249|      0|            return SFTK_DestroyFailure;
 1250|      0|        }
 1251|  4.44k|        return SFTK_Destroyed;
 1252|  4.44k|    }
 1253|  17.2k|    return SFTK_Busy;
 1254|  21.7k|}
sftk_getNextHandle:
 1263|  4.44k|{
 1264|  4.44k|    CK_OBJECT_HANDLE handle;
 1265|  4.44k|    SFTKObject *duplicateObject = NULL;
 1266|  4.44k|    do {
 1267|  4.44k|        PRUint32 wrappedAround;
 1268|       |
 1269|  4.44k|        duplicateObject = NULL;
 1270|  4.44k|        PZ_Lock(slot->objectLock);
  ------------------
  |  |  245|  4.44k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 1271|  4.44k|        wrappedAround = slot->sessionObjectHandleCount & SFTK_TOKEN_MASK;
  ------------------
  |  |  478|  4.44k|#define SFTK_TOKEN_MASK 0x80000000L
  ------------------
 1272|  4.44k|        handle = slot->sessionObjectHandleCount & ~SFTK_TOKEN_MASK;
  ------------------
  |  |  478|  4.44k|#define SFTK_TOKEN_MASK 0x80000000L
  ------------------
 1273|  4.44k|        if (!handle) /* don't allow zero handle */
  ------------------
  |  Branch (1273:13): [True: 0, False: 4.44k]
  ------------------
 1274|      0|            handle = NSC_MIN_SESSION_OBJECT_HANDLE;
  ------------------
  |  |   52|      0|#define NSC_MIN_SESSION_OBJECT_HANDLE 1U
  ------------------
 1275|  4.44k|        slot->sessionObjectHandleCount = (handle + 1U) | wrappedAround;
 1276|       |        /* Is there already a session object with this handle? */
 1277|  4.44k|        if (wrappedAround) {
  ------------------
  |  Branch (1277:13): [True: 0, False: 4.44k]
  ------------------
 1278|      0|            sftkqueue_find(duplicateObject, handle, slot->sessObjHashTable,
  ------------------
  |  |  524|      0|    for ((element) = (head)[sftk_hash(id, hash_size)]; (element) != NULL; \
  |  |  ------------------
  |  |  |  |  513|      0|    ((PRUint32)((value)*SHMULTIPLIER) & (size - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  509|      0|#define SHMULTIPLIER 1791398085
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (524:56): [True: 0, False: 0]
  |  |  ------------------
  |  |  525|      0|         (element) = (element)->next) {                                   \
  |  |  526|      0|        if ((element)->handle == (id)) {                                  \
  |  |  ------------------
  |  |  |  Branch (526:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  527|      0|            break;                                                        \
  |  |  528|      0|        }                                                                 \
  |  |  529|      0|    }
  ------------------
 1279|      0|                           slot->sessObjHashSize);
 1280|      0|        }
 1281|  4.44k|        PZ_Unlock(slot->objectLock);
  ------------------
  |  |  246|  4.44k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1282|  4.44k|    } while (duplicateObject != NULL);
  ------------------
  |  Branch (1282:14): [True: 0, False: 4.44k]
  ------------------
 1283|  4.44k|    return handle;
 1284|  4.44k|}
sftk_AddSlotObject:
 1292|  4.32k|{
 1293|  4.32k|    PRUint32 index = sftk_hash(object->handle, slot->sessObjHashSize);
  ------------------
  |  |  513|  4.32k|    ((PRUint32)((value)*SHMULTIPLIER) & (size - 1))
  |  |  ------------------
  |  |  |  |  509|  4.32k|#define SHMULTIPLIER 1791398085
  |  |  ------------------
  ------------------
 1294|  4.32k|    sftkqueue_init_element(object);
  ------------------
  |  |  544|  4.32k|    (element)->prev = NULL;
  ------------------
 1295|  4.32k|    PZ_Lock(slot->objectLock);
  ------------------
  |  |  245|  4.32k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 1296|  4.32k|    sftkqueue_add2(object, object->handle, index, slot->sessObjHashTable);
  ------------------
  |  |  547|  4.32k|    {                                            \
  |  |  548|  4.32k|        (element)->next = (head)[index];         \
  |  |  549|  4.32k|        if ((head)[index])                       \
  |  |  ------------------
  |  |  |  Branch (549:13): [True: 0, False: 4.32k]
  |  |  ------------------
  |  |  550|  4.32k|            (head)[index]->prev = (element);     \
  |  |  551|  4.32k|        (head)[index] = (element);               \
  |  |  552|  4.32k|    }
  ------------------
 1297|  4.32k|    PZ_Unlock(slot->objectLock);
  ------------------
  |  |  246|  4.32k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1298|  4.32k|}
sftk_AddObject:
 1302|  4.32k|{
 1303|  4.32k|    SFTKSlot *slot = sftk_SlotFromSession(session);
  ------------------
  |  |  503|  4.32k|#define sftk_SlotFromSession(sp) ((sp)->slot)
  ------------------
 1304|  4.32k|    SFTKSessionObject *so = sftk_narrowToSessionObject(object);
 1305|       |
 1306|  4.32k|    if (so) {
  ------------------
  |  Branch (1306:9): [True: 4.32k, False: 0]
  ------------------
 1307|  4.32k|        PZ_Lock(session->objectLock);
  ------------------
  |  |  245|  4.32k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 1308|  4.32k|        sftkqueue_add(&so->sessionList, 0, session->objects, 0);
  ------------------
  |  |  515|  4.32k|    {                                               \
  |  |  516|  4.32k|        int tmp = sftk_hash(id, hash_size);         \
  |  |  ------------------
  |  |  |  |  513|  4.32k|    ((PRUint32)((value)*SHMULTIPLIER) & (size - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  509|  4.32k|#define SHMULTIPLIER 1791398085
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  517|  4.32k|        (element)->next = (head)[tmp];              \
  |  |  518|  4.32k|        (element)->prev = NULL;                     \
  |  |  519|  4.32k|        if ((head)[tmp])                            \
  |  |  ------------------
  |  |  |  Branch (519:13): [True: 0, False: 4.32k]
  |  |  ------------------
  |  |  520|  4.32k|            (head)[tmp]->prev = (element);          \
  |  |  521|  4.32k|        (head)[tmp] = (element);                    \
  |  |  522|  4.32k|    }
  ------------------
 1309|  4.32k|        so->session = session;
 1310|  4.32k|        PZ_Unlock(session->objectLock);
  ------------------
  |  |  246|  4.32k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1311|  4.32k|    }
 1312|  4.32k|    sftk_AddSlotObject(slot, object);
 1313|  4.32k|    sftk_ReferenceObject(object);
 1314|  4.32k|}
sftk_DeleteObject:
 1321|  4.32k|{
 1322|  4.32k|    SFTKSlot *slot = sftk_SlotFromSession(session);
  ------------------
  |  |  503|  4.32k|#define sftk_SlotFromSession(sp) ((sp)->slot)
  ------------------
 1323|  4.32k|    SFTKSessionObject *so = sftk_narrowToSessionObject(object);
 1324|  4.32k|    CK_RV crv = CKR_OK;
  ------------------
  |  | 1388|  4.32k|#define CKR_OK 0x00000000UL
  ------------------
 1325|  4.32k|    PRUint32 index = sftk_hash(object->handle, slot->sessObjHashSize);
  ------------------
  |  |  513|  4.32k|    ((PRUint32)((value)*SHMULTIPLIER) & (size - 1))
  |  |  ------------------
  |  |  |  |  509|  4.32k|#define SHMULTIPLIER 1791398085
  |  |  ------------------
  ------------------
 1326|       |
 1327|       |    /* Handle Token case */
 1328|  4.32k|    if (so && so->session) {
  ------------------
  |  Branch (1328:9): [True: 4.32k, False: 0]
  |  Branch (1328:15): [True: 4.32k, False: 0]
  ------------------
 1329|  4.32k|        session = so->session;
 1330|  4.32k|        PZ_Lock(session->objectLock);
  ------------------
  |  |  245|  4.32k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 1331|  4.32k|        sftkqueue_delete(&so->sessionList, 0, session->objects, 0);
  ------------------
  |  |  534|  4.32k|    if ((element)->next)                                      \
  |  |  ------------------
  |  |  |  Branch (534:9): [True: 0, False: 4.32k]
  |  |  ------------------
  |  |  535|  4.32k|        (element)->next->prev = (element)->prev;              \
  |  |  536|  4.32k|    if ((element)->prev)                                      \
  |  |  ------------------
  |  |  |  Branch (536:9): [True: 0, False: 4.32k]
  |  |  ------------------
  |  |  537|  4.32k|        (element)->prev->next = (element)->next;              \
  |  |  538|  4.32k|    else                                                      \
  |  |  539|  4.32k|        (head)[sftk_hash(id, hash_size)] = ((element)->next); \
  |  |  ------------------
  |  |  |  |  513|  4.32k|    ((PRUint32)((value)*SHMULTIPLIER) & (size - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  509|  4.32k|#define SHMULTIPLIER 1791398085
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  540|  4.32k|    (element)->next = NULL;                                   \
  |  |  541|  4.32k|    (element)->prev = NULL;
  ------------------
 1332|  4.32k|        PZ_Unlock(session->objectLock);
  ------------------
  |  |  246|  4.32k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1333|  4.32k|        PZ_Lock(slot->objectLock);
  ------------------
  |  |  245|  4.32k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 1334|  4.32k|        sftkqueue_delete2(object, object->handle, index, slot->sessObjHashTable);
  ------------------
  |  |  564|  4.32k|    if ((element)->next)                            \
  |  |  ------------------
  |  |  |  Branch (564:9): [True: 0, False: 4.32k]
  |  |  ------------------
  |  |  565|  4.32k|        (element)->next->prev = (element)->prev;    \
  |  |  566|  4.32k|    if ((element)->prev)                            \
  |  |  ------------------
  |  |  |  Branch (566:9): [True: 0, False: 4.32k]
  |  |  ------------------
  |  |  567|  4.32k|        (element)->prev->next = (element)->next;    \
  |  |  568|  4.32k|    else                                            \
  |  |  569|  4.32k|        (head)[index] = ((element)->next);
  ------------------
 1335|  4.32k|        PZ_Unlock(slot->objectLock);
  ------------------
  |  |  246|  4.32k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1336|  4.32k|        sftkqueue_clear_deleted_element(object);
  ------------------
  |  |  572|  4.32k|    (element)->next = NULL;                      \
  |  |  573|  4.32k|    (element)->prev = NULL;
  ------------------
 1337|  4.32k|        sftk_FreeObject(object); /* free the reference owned by the queue */
 1338|  4.32k|    } else {
 1339|      0|        SFTKDBHandle *handle = sftk_getDBForTokenObject(slot, object->handle);
 1340|      0|#ifdef DEBUG
 1341|      0|        SFTKTokenObject *to = sftk_narrowToTokenObject(object);
 1342|      0|        PORT_Assert(to);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1343|      0|#endif
 1344|      0|        crv = sftkdb_DestroyObject(handle, object->handle, object->objclass);
 1345|      0|        sftk_freeDB(handle);
 1346|      0|    }
 1347|  4.32k|    return crv;
 1348|  4.32k|}
sftk_searchObjectList:
 1773|     20|{
 1774|     20|    unsigned int i;
 1775|     20|    SFTKObject *object;
 1776|     20|    CK_RV crv = CKR_OK;
  ------------------
  |  | 1388|     20|#define CKR_OK 0x00000000UL
  ------------------
 1777|       |
 1778|     20|    PZ_Lock(lock);
  ------------------
  |  |  245|     20|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 1779|    660|    for (i = 0; i < size; i++) {
  ------------------
  |  Branch (1779:17): [True: 640, False: 20]
  ------------------
 1780|    640|        for (object = head[i]; object != NULL; object = object->next) {
  ------------------
  |  Branch (1780:32): [True: 0, False: 640]
  ------------------
 1781|      0|            if (sftk_objectMatch(object, theTemplate, count)) {
  ------------------
  |  Branch (1781:17): [True: 0, False: 0]
  ------------------
 1782|       |                /* don't return objects that aren't yet visible */
 1783|      0|                if ((!isLoggedIn) && sftk_isTrue(object, CKA_PRIVATE))
  ------------------
  |  |  513|      0|#define CKA_PRIVATE 0x00000002UL
  ------------------
  |  Branch (1783:21): [True: 0, False: 0]
  |  Branch (1783:38): [True: 0, False: 0]
  ------------------
 1784|      0|                    continue;
 1785|      0|                sftk_addHandle(search, object->handle);
 1786|      0|            }
 1787|      0|        }
 1788|    640|    }
 1789|     20|    PZ_Unlock(lock);
  ------------------
  |  |  246|     20|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1790|     20|    return crv;
 1791|     20|}
sftk_FreeSearch:
 1821|  59.6k|{
 1822|  59.6k|    if (search->handles) {
  ------------------
  |  Branch (1822:9): [True: 59.6k, False: 0]
  ------------------
 1823|  59.6k|        PORT_Free(search->handles);
  ------------------
  |  |   60|  59.6k|#define PORT_Free PORT_Free_Util
  ------------------
 1824|  59.6k|    }
 1825|  59.6k|    PORT_Free(search);
  ------------------
  |  |   60|  59.6k|#define PORT_Free PORT_Free_Util
  ------------------
 1826|  59.6k|}
sftk_update_state:
 1836|  19.9k|{
 1837|  19.9k|    if (slot->isLoggedIn) {
  ------------------
  |  Branch (1837:9): [True: 0, False: 19.9k]
  ------------------
 1838|      0|        if (slot->ssoLoggedIn) {
  ------------------
  |  Branch (1838:13): [True: 0, False: 0]
  ------------------
 1839|      0|            session->info.state = CKS_RW_SO_FUNCTIONS;
  ------------------
  |  |  286|      0|#define CKS_RW_SO_FUNCTIONS 4
  ------------------
 1840|      0|        } else if (session->info.flags & CKF_RW_SESSION) {
  ------------------
  |  |  302|      0|#define CKF_RW_SESSION 0x00000002UL     /* session is r/w */
  ------------------
  |  Branch (1840:20): [True: 0, False: 0]
  ------------------
 1841|      0|            session->info.state = CKS_RW_USER_FUNCTIONS;
  ------------------
  |  |  285|      0|#define CKS_RW_USER_FUNCTIONS 3
  ------------------
 1842|      0|        } else {
 1843|      0|            session->info.state = CKS_RO_USER_FUNCTIONS;
  ------------------
  |  |  283|      0|#define CKS_RO_USER_FUNCTIONS 1
  ------------------
 1844|      0|        }
 1845|  19.9k|    } else {
 1846|  19.9k|        if (session->info.flags & CKF_RW_SESSION) {
  ------------------
  |  |  302|  19.9k|#define CKF_RW_SESSION 0x00000002UL     /* session is r/w */
  ------------------
  |  Branch (1846:13): [True: 0, False: 19.9k]
  ------------------
 1847|      0|            session->info.state = CKS_RW_PUBLIC_SESSION;
  ------------------
  |  |  284|      0|#define CKS_RW_PUBLIC_SESSION 2
  ------------------
 1848|  19.9k|        } else {
 1849|  19.9k|            session->info.state = CKS_RO_PUBLIC_SESSION;
  ------------------
  |  |  282|  19.9k|#define CKS_RO_PUBLIC_SESSION 0
  ------------------
 1850|  19.9k|        }
 1851|  19.9k|    }
 1852|  19.9k|}
sftk_FreeContext:
 1876|  9.97k|{
 1877|  9.97k|    if (context->cipherInfo) {
  ------------------
  |  Branch (1877:9): [True: 9.97k, False: 1]
  ------------------
 1878|  9.97k|        (*context->destroy)(context->cipherInfo, PR_TRUE);
  ------------------
  |  |  437|  9.97k|#define PR_TRUE 1
  ------------------
 1879|  9.97k|    }
 1880|  9.97k|    if (context->hashInfo) {
  ------------------
  |  Branch (1880:9): [True: 4.30k, False: 5.66k]
  ------------------
 1881|  4.30k|        (*context->hashdestroy)(context->hashInfo, PR_TRUE);
  ------------------
  |  |  437|  4.30k|#define PR_TRUE 1
  ------------------
 1882|  4.30k|    }
 1883|  9.97k|    if (context->key) {
  ------------------
  |  Branch (1883:9): [True: 4.31k, False: 5.65k]
  ------------------
 1884|  4.31k|        sftk_FreeObject(context->key);
 1885|  4.31k|        context->key = NULL;
 1886|  4.31k|    }
 1887|  9.97k|    PORT_Free(context);
  ------------------
  |  |   60|  9.97k|#define PORT_Free PORT_Free_Util
  ------------------
 1888|  9.97k|}
sftk_InitSession:
 1897|  9.99k|{
 1898|  9.99k|    session->next = session->prev = NULL;
 1899|  9.99k|    session->enc_context = NULL;
 1900|  9.99k|    session->hash_context = NULL;
 1901|  9.99k|    session->sign_context = NULL;
 1902|  9.99k|    session->search = NULL;
 1903|  9.99k|    session->objectIDCount = 1;
 1904|  9.99k|    session->objectLock = PZ_NewLock(nssILockObject);
  ------------------
  |  |  243|  9.99k|#define PZ_NewLock(t) PR_NewLock()
  ------------------
 1905|  9.99k|    if (session->objectLock == NULL) {
  ------------------
  |  Branch (1905:9): [True: 0, False: 9.99k]
  ------------------
 1906|      0|        return CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 1907|      0|    }
 1908|  9.99k|    session->objects[0] = NULL;
 1909|       |
 1910|  9.99k|    session->slot = slot;
 1911|  9.99k|    session->notify = notify;
 1912|  9.99k|    session->appData = pApplication;
 1913|  9.99k|    session->info.flags = flags;
 1914|  9.99k|    session->info.slotID = slotID;
 1915|  9.99k|    session->info.ulDeviceError = 0;
 1916|  9.99k|    sftk_update_state(slot, session);
 1917|       |    /* no ops completed yet, so the last one couldn't be a FIPS op */
 1918|  9.99k|    session->lastOpWasFIPS = PR_FALSE;
  ------------------
  |  |  438|  9.99k|#define PR_FALSE 0
  ------------------
 1919|  9.99k|    return CKR_OK;
  ------------------
  |  | 1388|  9.99k|#define CKR_OK 0x00000000UL
  ------------------
 1920|  9.99k|}
sftk_NewSession:
 1928|  9.99k|{
 1929|  9.99k|    SFTKSession *session;
 1930|  9.99k|    SFTKSlot *slot = sftk_SlotFromID(slotID, PR_FALSE);
  ------------------
  |  |  438|  9.99k|#define PR_FALSE 0
  ------------------
 1931|  9.99k|    CK_RV crv;
 1932|       |
 1933|  9.99k|    if (slot == NULL)
  ------------------
  |  Branch (1933:9): [True: 0, False: 9.99k]
  ------------------
 1934|      0|        return NULL;
 1935|       |
 1936|  9.99k|    session = (SFTKSession *)PORT_Alloc(sizeof(SFTKSession));
  ------------------
  |  |   52|  9.99k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
 1937|  9.99k|    if (session == NULL)
  ------------------
  |  Branch (1937:9): [True: 0, False: 9.99k]
  ------------------
 1938|      0|        return NULL;
 1939|       |
 1940|  9.99k|    crv = sftk_InitSession(session, slot, slotID, notify, pApplication, flags);
 1941|  9.99k|    if (crv != CKR_OK) {
  ------------------
  |  | 1388|  9.99k|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1941:9): [True: 0, False: 9.99k]
  ------------------
 1942|      0|        PORT_Free(session);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1943|      0|        return NULL;
 1944|      0|    }
 1945|  9.99k|    return session;
 1946|  9.99k|}
sftk_ClearSession:
 1951|  9.99k|{
 1952|  9.99k|    SFTKObjectList *op, *next;
 1953|       |
 1954|       |    /* clean out the attributes */
 1955|       |    /* since no one is referencing us, it's safe to walk the chain
 1956|       |     * without a lock */
 1957|  9.99k|    for (op = session->objects[0]; op != NULL; op = next) {
  ------------------
  |  Branch (1957:36): [True: 0, False: 9.99k]
  ------------------
 1958|      0|        next = op->next;
 1959|       |        /* paranoia */
 1960|      0|        op->next = op->prev = NULL;
 1961|      0|        sftk_DeleteObject(session, op->parent);
 1962|      0|    }
 1963|  9.99k|    PZ_DestroyLock(session->objectLock);
  ------------------
  |  |  244|  9.99k|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
 1964|  9.99k|    if (session->enc_context) {
  ------------------
  |  Branch (1964:9): [True: 0, False: 9.99k]
  ------------------
 1965|      0|        sftk_FreeContext(session->enc_context);
 1966|      0|    }
 1967|  9.99k|    if (session->hash_context) {
  ------------------
  |  Branch (1967:9): [True: 0, False: 9.99k]
  ------------------
 1968|      0|        sftk_FreeContext(session->hash_context);
 1969|      0|    }
 1970|  9.99k|    if (session->sign_context) {
  ------------------
  |  Branch (1970:9): [True: 0, False: 9.99k]
  ------------------
 1971|      0|        sftk_FreeContext(session->sign_context);
 1972|      0|    }
 1973|  9.99k|    if (session->search) {
  ------------------
  |  Branch (1973:9): [True: 0, False: 9.99k]
  ------------------
 1974|      0|        sftk_FreeSearch(session->search);
 1975|      0|    }
 1976|  9.99k|}
sftk_DestroySession:
 1981|  9.99k|{
 1982|  9.99k|    sftk_ClearSession(session);
 1983|  9.99k|    PORT_Free(session);
  ------------------
  |  |   60|  9.99k|#define PORT_Free PORT_Free_Util
  ------------------
 1984|  9.99k|}
sftk_SessionFromHandle:
 1992|   236k|{
 1993|   236k|    SFTKSlot *slot = sftk_SlotFromSessionHandle(handle);
 1994|   236k|    SFTKSession *session;
 1995|   236k|    PZLock *lock;
  ------------------
  |  |  185|   236k|#define PZLock PRLock
  ------------------
 1996|       |
 1997|   236k|    if (!slot)
  ------------------
  |  Branch (1997:9): [True: 0, False: 236k]
  ------------------
 1998|      0|        return NULL;
 1999|   236k|    lock = SFTK_SESSION_LOCK(slot, handle);
  ------------------
  |  |  583|   236k|    ((slot)->sessionLock[(handle) & (slot)->sessionLockMask])
  ------------------
 2000|       |
 2001|   236k|    PZ_Lock(lock);
  ------------------
  |  |  245|   236k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 2002|   236k|    sftkqueue_find(session, handle, slot->head, slot->sessHashSize);
  ------------------
  |  |  524|   236k|    for ((element) = (head)[sftk_hash(id, hash_size)]; (element) != NULL; \
  |  |  ------------------
  |  |  |  |  513|   236k|    ((PRUint32)((value)*SHMULTIPLIER) & (size - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  509|   236k|#define SHMULTIPLIER 1791398085
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (524:56): [True: 236k, False: 0]
  |  |  ------------------
  |  |  525|   236k|         (element) = (element)->next) {                                   \
  |  |  526|   236k|        if ((element)->handle == (id)) {                                  \
  |  |  ------------------
  |  |  |  Branch (526:13): [True: 236k, False: 2]
  |  |  ------------------
  |  |  527|   236k|            break;                                                        \
  |  |  528|   236k|        }                                                                 \
  |  |  529|   236k|    }
  ------------------
 2003|   236k|    PZ_Unlock(lock);
  ------------------
  |  |  246|   236k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 2004|       |
 2005|   236k|    return (session);
 2006|   236k|}
sftk_FreeSession:
 2015|   226k|{
 2016|   226k|    return;
 2017|   226k|}
sftk_narrowToSessionObject:
 2122|   307k|{
 2123|   307k|    return !sftk_isToken(obj->handle) ? (SFTKSessionObject *)obj : NULL;
  ------------------
  |  |  504|   307k|#define sftk_isToken(id) (((id)&SFTK_TOKEN_MASK) == SFTK_TOKEN_MAGIC)
  |  |  ------------------
  |  |  |  |  478|   307k|#define SFTK_TOKEN_MASK 0x80000000L
  |  |  ------------------
  |  |               #define sftk_isToken(id) (((id)&SFTK_TOKEN_MASK) == SFTK_TOKEN_MAGIC)
  |  |  ------------------
  |  |  |  |  479|   307k|#define SFTK_TOKEN_MAGIC 0x80000000L
  |  |  ------------------
  ------------------
  |  Branch (2123:12): [True: 307k, False: 0]
  ------------------
 2124|   307k|}
sftk_narrowToTokenObject:
 2128|  4.44k|{
 2129|  4.44k|    return sftk_isToken(obj->handle) ? (SFTKTokenObject *)obj : NULL;
  ------------------
  |  |  504|  4.44k|#define sftk_isToken(id) (((id)&SFTK_TOKEN_MASK) == SFTK_TOKEN_MAGIC)
  |  |  ------------------
  |  |  |  |  478|  4.44k|#define SFTK_TOKEN_MASK 0x80000000L
  |  |  ------------------
  |  |               #define sftk_isToken(id) (((id)&SFTK_TOKEN_MASK) == SFTK_TOKEN_MAGIC)
  |  |  ------------------
  |  |  |  |  479|  4.44k|#define SFTK_TOKEN_MAGIC 0x80000000L
  |  |  ------------------
  |  |  |  Branch (504:26): [True: 0, False: 4.44k]
  |  |  ------------------
  ------------------
 2130|  4.44k|}
sftk_GetHashTypeFromMechanism:
 2269|    306|{
 2270|    306|    switch (mech) {
 2271|      6|        case CKM_SHA_1:
  ------------------
  |  |  859|      6|#define CKM_SHA_1 0x00000220UL
  ------------------
  |  Branch (2271:9): [True: 6, False: 300]
  ------------------
 2272|     12|        case CKG_MGF1_SHA1:
  ------------------
  |  | 1648|     12|#define CKG_MGF1_SHA1 0x00000001UL
  ------------------
  |  Branch (2272:9): [True: 6, False: 300]
  ------------------
 2273|     12|            return HASH_AlgSHA1;
 2274|      0|        case CKM_SHA224:
  ------------------
  |  |  887|      0|#define CKM_SHA224 0x00000255UL
  ------------------
  |  Branch (2274:9): [True: 0, False: 306]
  ------------------
 2275|      4|        case CKG_MGF1_SHA224:
  ------------------
  |  | 1654|      4|#define CKG_MGF1_SHA224 0x00000005UL
  ------------------
  |  Branch (2275:9): [True: 4, False: 302]
  ------------------
 2276|      4|            return HASH_AlgSHA224;
 2277|     99|        case CKM_SHA256:
  ------------------
  |  |  876|     99|#define CKM_SHA256 0x00000250UL
  ------------------
  |  Branch (2277:9): [True: 99, False: 207]
  ------------------
 2278|    195|        case CKG_MGF1_SHA256:
  ------------------
  |  | 1649|    195|#define CKG_MGF1_SHA256 0x00000002UL
  ------------------
  |  Branch (2278:9): [True: 96, False: 210]
  ------------------
 2279|    195|            return HASH_AlgSHA256;
 2280|     18|        case CKM_SHA384:
  ------------------
  |  |  879|     18|#define CKM_SHA384 0x00000260UL
  ------------------
  |  Branch (2280:9): [True: 18, False: 288]
  ------------------
 2281|     34|        case CKG_MGF1_SHA384:
  ------------------
  |  | 1650|     34|#define CKG_MGF1_SHA384 0x00000003UL
  ------------------
  |  Branch (2281:9): [True: 16, False: 290]
  ------------------
 2282|     34|            return HASH_AlgSHA384;
 2283|     30|        case CKM_SHA512:
  ------------------
  |  |  882|     30|#define CKM_SHA512 0x00000270UL
  ------------------
  |  Branch (2283:9): [True: 30, False: 276]
  ------------------
 2284|     60|        case CKG_MGF1_SHA512:
  ------------------
  |  | 1651|     60|#define CKG_MGF1_SHA512 0x00000004UL
  ------------------
  |  Branch (2284:9): [True: 30, False: 276]
  ------------------
 2285|     60|            return HASH_AlgSHA512;
 2286|      1|        default:
  ------------------
  |  Branch (2286:9): [True: 1, False: 305]
  ------------------
 2287|      1|            return HASH_AlgNULL;
 2288|    306|    }
 2289|    306|}
sftk_operationIsFIPS:
 2475|  9.97k|{
 2476|  9.97k|#ifndef NSS_HAS_FIPS_INDICATORS
 2477|  9.97k|    return PR_FALSE;
  ------------------
  |  |  438|  9.97k|#define PR_FALSE 0
  ------------------
 2478|       |#else
 2479|       |    int i;
 2480|       |    CK_FLAGS opFlags;
 2481|       |    CK_ULONG keyLength;
 2482|       |
 2483|       |    /* handle all the quick stuff first */
 2484|       |    if (!sftk_isFIPS(slot->slotID)) {
 2485|       |        return PR_FALSE;
 2486|       |    }
 2487|       |    if (source && !source->isFIPS) {
 2488|       |        return PR_FALSE;
 2489|       |    }
 2490|       |    if (mech == NULL) {
 2491|       |        return PR_FALSE;
 2492|       |    }
 2493|       |
 2494|       |    /* now get the calculated values */
 2495|       |    opFlags = sftk_AttributeToFlags(op);
 2496|       |    if (opFlags == 0) {
 2497|       |        return PR_FALSE;
 2498|       |    }
 2499|       |    keyLength = sftk_getKeyLength(source);
 2500|       |
 2501|       |    /* check against our algorithm array */
 2502|       |    for (i = 0; i < SFTK_NUMBER_FIPS_ALGORITHMS; i++) {
 2503|       |        SFTKFIPSAlgorithmList *mechs = &sftk_fips_mechs[i];
 2504|       |        /* if we match the number of records exactly, then we are an
 2505|       |         * approved algorithm in the approved mode with an approved key */
 2506|       |        if (((mech->mechanism == mechs->type) &&
 2507|       |             (opFlags == (mechs->info.flags & opFlags)) &&
 2508|       |             (keyLength <= mechs->info.ulMaxKeySize) &&
 2509|       |             (keyLength >= mechs->info.ulMinKeySize) &&
 2510|       |             ((keyLength - mechs->info.ulMinKeySize) % mechs->step) == 0) &&
 2511|       |            ((mechs->special == SFTKFIPSNone) ||
 2512|       |             sftk_handleSpecial(slot, mech, mechs, source))) {
 2513|       |            return PR_TRUE;
 2514|       |        }
 2515|       |    }
 2516|       |    return PR_FALSE;
 2517|       |#endif
 2518|  9.97k|}
pkcs11u.c:sftk_NewAttribute:
  114|  82.6k|{
  115|  82.6k|    SFTKAttribute *attribute;
  116|       |
  117|  82.6k|    SFTKSessionObject *so = sftk_narrowToSessionObject(object);
  118|  82.6k|    int index;
  119|       |
  120|  82.6k|    if (so == NULL) {
  ------------------
  |  Branch (120:9): [True: 0, False: 82.6k]
  ------------------
  121|       |        /* allocate new attribute in a buffer */
  122|      0|        PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  123|      0|        return NULL;
  124|      0|    }
  125|       |    /*
  126|       |     * We attempt to keep down contention on Malloc and Arena locks by
  127|       |     * limiting the number of these calls on high traversed paths. This
  128|       |     * is done for attributes by 'allocating' them from a pool already
  129|       |     * allocated by the parent object.
  130|       |     */
  131|  82.6k|    PZ_Lock(so->attributeLock);
  ------------------
  |  |  245|  82.6k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  132|  82.6k|    index = so->nextAttr++;
  133|  82.6k|    PZ_Unlock(so->attributeLock);
  ------------------
  |  |  246|  82.6k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  134|  82.6k|    PORT_Assert(index < MAX_OBJS_ATTRS);
  ------------------
  |  |  120|  82.6k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  82.6k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 82.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|  82.6k|    if (index >= MAX_OBJS_ATTRS)
  ------------------
  |  |   37|  82.6k|#define MAX_OBJS_ATTRS 45 /* number of attributes to preallocate in \
  ------------------
  |  Branch (135:9): [True: 0, False: 82.6k]
  ------------------
  136|      0|        return NULL;
  137|       |
  138|  82.6k|    attribute = &so->attrList[index];
  139|  82.6k|    attribute->attrib.type = type;
  140|  82.6k|    attribute->freeAttr = PR_FALSE;
  ------------------
  |  |  438|  82.6k|#define PR_FALSE 0
  ------------------
  141|  82.6k|    attribute->freeData = PR_FALSE;
  ------------------
  |  |  438|  82.6k|#define PR_FALSE 0
  ------------------
  142|  82.6k|    if (value) {
  ------------------
  |  Branch (142:9): [True: 60.3k, False: 22.2k]
  ------------------
  143|  60.3k|        if (len <= ATTR_SPACE) {
  ------------------
  |  |   39|  60.3k|#define ATTR_SPACE 50     /* Maximum size of attribute data before extra \
  ------------------
  |  Branch (143:13): [True: 53.2k, False: 7.13k]
  ------------------
  144|  53.2k|            attribute->attrib.pValue = attribute->space;
  145|  53.2k|        } else {
  146|  7.13k|            attribute->attrib.pValue = PORT_Alloc(len);
  ------------------
  |  |   52|  7.13k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  147|  7.13k|            attribute->freeData = PR_TRUE;
  ------------------
  |  |  437|  7.13k|#define PR_TRUE 1
  ------------------
  148|  7.13k|        }
  149|  60.3k|        if (attribute->attrib.pValue == NULL) {
  ------------------
  |  Branch (149:13): [True: 0, False: 60.3k]
  ------------------
  150|      0|            return NULL;
  151|      0|        }
  152|  60.3k|        PORT_Memcpy(attribute->attrib.pValue, value, len);
  ------------------
  |  |  180|  60.3k|#define PORT_Memcpy memcpy
  ------------------
  153|  60.3k|        attribute->attrib.ulValueLen = len;
  154|  60.3k|    } else {
  155|  22.2k|        attribute->attrib.pValue = NULL;
  156|  22.2k|        attribute->attrib.ulValueLen = 0;
  157|  22.2k|    }
  158|  82.6k|    attribute->attrib.type = type;
  159|  82.6k|    attribute->handle = type;
  160|  82.6k|    attribute->next = attribute->prev = NULL;
  161|  82.6k|    return attribute;
  162|  82.6k|}
pkcs11u.c:sftk_AddAttribute:
  387|  82.6k|{
  388|  82.6k|    SFTKSessionObject *sessObject = sftk_narrowToSessionObject(object);
  389|       |
  390|  82.6k|    if (sessObject == NULL)
  ------------------
  |  Branch (390:9): [True: 0, False: 82.6k]
  ------------------
  391|      0|        return;
  392|  82.6k|    PZ_Lock(sessObject->attributeLock);
  ------------------
  |  |  245|  82.6k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  393|  82.6k|    sftkqueue_add(attribute, attribute->handle,
  ------------------
  |  |  515|  82.6k|    {                                               \
  |  |  516|  82.6k|        int tmp = sftk_hash(id, hash_size);         \
  |  |  ------------------
  |  |  |  |  513|  82.6k|    ((PRUint32)((value)*SHMULTIPLIER) & (size - 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  509|  82.6k|#define SHMULTIPLIER 1791398085
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  517|  82.6k|        (element)->next = (head)[tmp];              \
  |  |  518|  82.6k|        (element)->prev = NULL;                     \
  |  |  519|  82.6k|        if ((head)[tmp])                            \
  |  |  ------------------
  |  |  |  Branch (519:13): [True: 32.4k, False: 50.1k]
  |  |  ------------------
  |  |  520|  82.6k|            (head)[tmp]->prev = (element);          \
  |  |  521|  82.6k|        (head)[tmp] = (element);                    \
  |  |  522|  82.6k|    }
  ------------------
  394|  82.6k|                  sessObject->head, sessObject->hashSize);
  395|  82.6k|    PZ_Unlock(sessObject->attributeLock);
  ------------------
  |  |  246|  82.6k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  396|  82.6k|}
pkcs11u.c:sftk_tokenKeyLock:
  917|      2|{
  918|      2|    SKIP_AFTER_FORK(PZ_Lock(slot->objectLock));
  ------------------
  |  |  256|      2|#define SKIP_AFTER_FORK(x) x
  ------------------
  919|      2|}
pkcs11u.c:sftk_tokenKeyUnlock:
  923|      2|{
  924|      2|    SKIP_AFTER_FORK(PZ_Unlock(slot->objectLock));
  ------------------
  |  |  256|      2|#define SKIP_AFTER_FORK(x) x
  ------------------
  925|      2|}
pkcs11u.c:sftk_InitFreeList:
 1031|      2|{
 1032|      2|    if (!list->lock) {
  ------------------
  |  Branch (1032:9): [True: 2, False: 0]
  ------------------
 1033|      2|        list->lock = PZ_NewLock(nssILockObject);
  ------------------
  |  |  243|      2|#define PZ_NewLock(t) PR_NewLock()
  ------------------
 1034|      2|    }
 1035|      2|}
pkcs11u.c:sftk_CleanupFreeList:
 1046|      2|{
 1047|      2|    SFTKObject *object;
 1048|       |
 1049|      2|    if (!list->lock) {
  ------------------
  |  Branch (1049:9): [True: 0, False: 2]
  ------------------
 1050|      0|        return;
 1051|      0|    }
 1052|      2|    SKIP_AFTER_FORK(PZ_Lock(list->lock));
  ------------------
  |  |  256|      2|#define SKIP_AFTER_FORK(x) x
  ------------------
 1053|      2|    for (object = list->head; object != NULL;
  ------------------
  |  Branch (1053:31): [True: 0, False: 2]
  ------------------
 1054|      2|         object = sftk_freeObjectData(object)) {
 1055|      0|        PZ_DestroyLock(object->refLock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
 1056|      0|        if (isSessionList) {
  ------------------
  |  Branch (1056:13): [True: 0, False: 0]
  ------------------
 1057|      0|            PZ_DestroyLock(((SFTKSessionObject *)object)->attributeLock);
  ------------------
  |  |  244|      0|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
 1058|      0|        }
 1059|      0|    }
 1060|      2|    list->count = 0;
 1061|      2|    list->head = NULL;
 1062|      2|    SKIP_AFTER_FORK(PZ_Unlock(list->lock));
  ------------------
  |  |  256|      2|#define SKIP_AFTER_FORK(x) x
  ------------------
 1063|      2|    SKIP_AFTER_FORK(PZ_DestroyLock(list->lock));
  ------------------
  |  |  256|      2|#define SKIP_AFTER_FORK(x) x
  ------------------
 1064|      2|    list->lock = NULL;
 1065|      2|}
pkcs11u.c:sftk_ObjectFromHandleOnSlot:
 1201|  12.9k|{
 1202|  12.9k|    SFTKObject *object;
 1203|  12.9k|    PRUint32 index = sftk_hash(handle, slot->sessObjHashSize);
  ------------------
  |  |  513|  12.9k|    ((PRUint32)((value)*SHMULTIPLIER) & (size - 1))
  |  |  ------------------
  |  |  |  |  509|  12.9k|#define SHMULTIPLIER 1791398085
  |  |  ------------------
  ------------------
 1204|       |
 1205|  12.9k|    if (sftk_isToken(handle)) {
  ------------------
  |  |  504|  12.9k|#define sftk_isToken(id) (((id)&SFTK_TOKEN_MASK) == SFTK_TOKEN_MAGIC)
  |  |  ------------------
  |  |  |  |  478|  12.9k|#define SFTK_TOKEN_MASK 0x80000000L
  |  |  ------------------
  |  |               #define sftk_isToken(id) (((id)&SFTK_TOKEN_MASK) == SFTK_TOKEN_MAGIC)
  |  |  ------------------
  |  |  |  |  479|  12.9k|#define SFTK_TOKEN_MAGIC 0x80000000L
  |  |  ------------------
  |  |  |  Branch (504:26): [True: 0, False: 12.9k]
  |  |  ------------------
  ------------------
 1206|      0|        return sftk_NewTokenObject(slot, NULL, handle);
 1207|      0|    }
 1208|       |
 1209|  12.9k|    PZ_Lock(slot->objectLock);
  ------------------
  |  |  245|  12.9k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 1210|  12.9k|    sftkqueue_find2(object, handle, index, slot->sessObjHashTable);
  ------------------
  |  |  555|  12.9k|    for ((element) = (head)[index];               \
  |  |  556|  12.9k|         (element) != NULL;                       \
  |  |  ------------------
  |  |  |  Branch (556:10): [True: 12.9k, False: 0]
  |  |  ------------------
  |  |  557|  12.9k|         (element) = (element)->next) {           \
  |  |  558|  12.9k|        if ((element)->handle == (id)) {          \
  |  |  ------------------
  |  |  |  Branch (558:13): [True: 12.9k, False: 0]
  |  |  ------------------
  |  |  559|  12.9k|            break;                                \
  |  |  560|  12.9k|        }                                         \
  |  |  561|  12.9k|    }
  ------------------
 1211|  12.9k|    if (object) {
  ------------------
  |  Branch (1211:9): [True: 12.9k, False: 0]
  ------------------
 1212|  12.9k|        sftk_ReferenceObject(object);
 1213|  12.9k|    }
 1214|  12.9k|    PZ_Unlock(slot->objectLock);
  ------------------
  |  |  246|  12.9k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1215|       |
 1216|  12.9k|    return (object);
 1217|  12.9k|}
pkcs11u.c:sftk_DestroyObject:
 1160|  4.44k|{
 1161|  4.44k|    CK_RV crv = CKR_OK;
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
 1162|  4.44k|    SFTKSessionObject *so = sftk_narrowToSessionObject(object);
 1163|  4.44k|    SFTKTokenObject *to = sftk_narrowToTokenObject(object);
 1164|       |
 1165|  4.44k|    PORT_Assert(object->refCount == 0);
  ------------------
  |  |  120|  4.44k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  4.44k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 4.44k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1166|       |
 1167|       |    /* delete the database value */
 1168|  4.44k|    if (to) {
  ------------------
  |  Branch (1168:9): [True: 0, False: 4.44k]
  ------------------
 1169|      0|        if (to->dbKey.data) {
  ------------------
  |  Branch (1169:13): [True: 0, False: 0]
  ------------------
 1170|      0|            PORT_Free(to->dbKey.data);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1171|      0|            to->dbKey.data = NULL;
 1172|      0|        }
 1173|      0|    }
 1174|  4.44k|    if (so) {
  ------------------
  |  Branch (1174:9): [True: 4.44k, False: 0]
  ------------------
 1175|  4.44k|        sftk_DestroySessionObjectData(so);
 1176|  4.44k|    }
 1177|  4.44k|    if (object->objectInfo) {
  ------------------
  |  Branch (1177:9): [True: 4.38k, False: 60]
  ------------------
 1178|  4.38k|        (*object->infoFree)(object->objectInfo);
 1179|  4.38k|        object->objectInfo = NULL;
 1180|  4.38k|        object->infoFree = NULL;
 1181|  4.38k|    }
 1182|  4.44k|    if (so) {
  ------------------
  |  Branch (1182:9): [True: 4.44k, False: 0]
  ------------------
 1183|  4.44k|        sftk_PutObjectToList(object, &sessionObjectList, PR_TRUE);
  ------------------
  |  |  437|  4.44k|#define PR_TRUE 1
  ------------------
 1184|  4.44k|    } else {
 1185|      0|        sftk_PutObjectToList(object, &tokenObjectList, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1186|      0|    }
 1187|  4.44k|    return crv;
 1188|  4.44k|}
pkcs11u.c:sftk_PutObjectToList:
  989|  4.44k|{
  990|       |
  991|       |    /* the code below is equivalent to :
  992|       |     *     optimizeSpace = isSessionObject ? object->optimizeSpace : PR_FALSE;
  993|       |     * just faster.
  994|       |     */
  995|  4.44k|    PRBool optimizeSpace = isSessionObject &&
  ------------------
  |  Branch (995:28): [True: 4.44k, False: 0]
  ------------------
  996|  4.44k|                           ((SFTKSessionObject *)object)->optimizeSpace;
  ------------------
  |  Branch (996:28): [True: 4.44k, False: 0]
  ------------------
  997|  4.44k|    if (object->refLock && !optimizeSpace) {
  ------------------
  |  Branch (997:9): [True: 4.44k, False: 0]
  |  Branch (997:28): [True: 0, False: 4.44k]
  ------------------
  998|      0|        PZ_Lock(list->lock);
  ------------------
  |  |  245|      0|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  999|      0|        if (list->count < MAX_OBJECT_LIST_SIZE) {
  ------------------
  |  |   71|      0|#define MAX_OBJECT_LIST_SIZE 800
  ------------------
  |  Branch (999:13): [True: 0, False: 0]
  ------------------
 1000|      0|            object->next = list->head;
 1001|      0|            list->head = object;
 1002|      0|            list->count++;
 1003|      0|            PZ_Unlock(list->lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1004|      0|            return;
 1005|      0|        }
 1006|      0|        PZ_Unlock(list->lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 1007|      0|    }
 1008|  4.44k|    if (isSessionObject) {
  ------------------
  |  Branch (1008:9): [True: 4.44k, False: 0]
  ------------------
 1009|  4.44k|        SFTKSessionObject *so = (SFTKSessionObject *)object;
 1010|  4.44k|        PZ_DestroyLock(so->attributeLock);
  ------------------
  |  |  244|  4.44k|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
 1011|  4.44k|        so->attributeLock = NULL;
 1012|  4.44k|    }
 1013|  4.44k|    if (object->refLock) {
  ------------------
  |  Branch (1013:9): [True: 4.44k, False: 0]
  ------------------
 1014|  4.44k|        PZ_DestroyLock(object->refLock);
  ------------------
  |  |  244|  4.44k|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
 1015|  4.44k|        object->refLock = NULL;
 1016|  4.44k|    }
 1017|  4.44k|    PORT_Free(object);
  ------------------
  |  |   60|  4.44k|#define PORT_Free PORT_Free_Util
  ------------------
 1018|  4.44k|}
pkcs11u.c:sftk_DestroySessionObjectData:
 1136|  4.44k|{
 1137|  4.44k|    int i;
 1138|       |
 1139|   204k|    for (i = 0; i < MAX_OBJS_ATTRS; i++) {
  ------------------
  |  |   37|   204k|#define MAX_OBJS_ATTRS 45 /* number of attributes to preallocate in \
  ------------------
  |  Branch (1139:17): [True: 199k, False: 4.44k]
  ------------------
 1140|   199k|        unsigned char *value = so->attrList[i].attrib.pValue;
 1141|   199k|        if (value) {
  ------------------
  |  Branch (1141:13): [True: 60.3k, False: 139k]
  ------------------
 1142|  60.3k|            PORT_Memset(value, 0, so->attrList[i].attrib.ulValueLen);
  ------------------
  |  |  182|  60.3k|#define PORT_Memset memset
  ------------------
 1143|  60.3k|            if (so->attrList[i].freeData) {
  ------------------
  |  Branch (1143:17): [True: 7.13k, False: 53.2k]
  ------------------
 1144|  7.13k|                PORT_Free(value);
  ------------------
  |  |   60|  7.13k|#define PORT_Free PORT_Free_Util
  ------------------
 1145|  7.13k|            }
 1146|  60.3k|            so->attrList[i].attrib.pValue = NULL;
 1147|  60.3k|            so->attrList[i].freeData = PR_FALSE;
  ------------------
  |  |  438|  60.3k|#define PR_FALSE 0
  ------------------
 1148|  60.3k|        }
 1149|   199k|    }
 1150|       |    /*  PZ_DestroyLock(so->attributeLock);*/
 1151|  4.44k|    return CKR_OK;
  ------------------
  |  | 1388|  4.44k|#define CKR_OK 0x00000000UL
  ------------------
 1152|  4.44k|}

s_shutdown:
 2461|      1|{
 2462|       |#ifdef SQLITE_UNSAFE_THREADS
 2463|       |    if (sqlite_lock) {
 2464|       |        PR_DestroyLock(sqlite_lock);
 2465|       |        sqlite_lock = NULL;
 2466|       |    }
 2467|       |#endif
 2468|      1|    return CKR_OK;
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
 2469|      1|}

sftkdb_FindObjectsInit:
 1341|  59.6k|{
 1342|  59.6k|    unsigned char *data = NULL;
 1343|  59.6k|    CK_ATTRIBUTE *ntemplate = NULL;
 1344|  59.6k|    CK_RV crv;
 1345|  59.6k|    int dataSize;
 1346|  59.6k|    SDB *db;
 1347|       |
 1348|  59.6k|    if (handle == NULL) {
  ------------------
  |  Branch (1348:9): [True: 59.6k, False: 0]
  ------------------
 1349|  59.6k|        return CKR_OK;
  ------------------
  |  | 1388|  59.6k|#define CKR_OK 0x00000000UL
  ------------------
 1350|  59.6k|    }
 1351|      0|    db = SFTK_GET_SDB(handle);
  ------------------
  |  |   40|      0|    ((handle)->update ? (handle)->update : (handle)->db)
  |  |  ------------------
  |  |  |  Branch (40:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1352|       |
 1353|      0|    if (count != 0) {
  ------------------
  |  Branch (1353:9): [True: 0, False: 0]
  ------------------
 1354|      0|        ntemplate = sftkdb_fixupTemplateIn(template, count, &data, &dataSize);
 1355|      0|        if (ntemplate == NULL) {
  ------------------
  |  Branch (1355:13): [True: 0, False: 0]
  ------------------
 1356|      0|            return CKR_HOST_MEMORY;
  ------------------
  |  | 1390|      0|#define CKR_HOST_MEMORY 0x00000002UL
  ------------------
 1357|      0|        }
 1358|      0|    }
 1359|       |
 1360|      0|    crv = (*db->sdb_FindObjectsInit)(db, ntemplate,
 1361|      0|                                     count, find);
 1362|      0|    if (data) {
  ------------------
  |  Branch (1362:9): [True: 0, False: 0]
  ------------------
 1363|      0|        PORT_Free(ntemplate);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1364|      0|        PORT_ZFree(data, dataSize);
  ------------------
  |  |   75|      0|#define PORT_ZFree PORT_ZFree_Util
  ------------------
 1365|      0|    }
 1366|      0|    return crv;
 1367|      0|}
sftkdb_FindObjects:
 1372|  59.6k|{
 1373|  59.6k|    CK_RV crv;
 1374|  59.6k|    SDB *db;
 1375|       |
 1376|  59.6k|    if (handle == NULL) {
  ------------------
  |  Branch (1376:9): [True: 59.6k, False: 0]
  ------------------
 1377|  59.6k|        *count = 0;
 1378|  59.6k|        return CKR_OK;
  ------------------
  |  | 1388|  59.6k|#define CKR_OK 0x00000000UL
  ------------------
 1379|  59.6k|    }
 1380|      0|    db = SFTK_GET_SDB(handle);
  ------------------
  |  |   40|      0|    ((handle)->update ? (handle)->update : (handle)->db)
  |  |  ------------------
  |  |  |  Branch (40:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1381|       |
 1382|      0|    crv = (*db->sdb_FindObjects)(db, find, ids,
 1383|      0|                                 arraySize, count);
 1384|      0|    if (crv == CKR_OK) {
  ------------------
  |  | 1388|      0|#define CKR_OK 0x00000000UL
  ------------------
  |  Branch (1384:9): [True: 0, False: 0]
  ------------------
 1385|      0|        unsigned int i;
 1386|      0|        for (i = 0; i < *count; i++) {
  ------------------
  |  Branch (1386:21): [True: 0, False: 0]
  ------------------
 1387|      0|            ids[i] |= (handle->type | SFTK_TOKEN_TYPE);
  ------------------
  |  |   33|      0|#define SFTK_TOKEN_TYPE 0x80000000
  ------------------
 1388|      0|        }
 1389|      0|    }
 1390|      0|    return crv;
 1391|  59.6k|}
sftkdb_FindObjectsFinal:
 1395|  59.6k|{
 1396|  59.6k|    SDB *db;
 1397|  59.6k|    if (handle == NULL) {
  ------------------
  |  Branch (1397:9): [True: 59.6k, False: 0]
  ------------------
 1398|  59.6k|        return CKR_OK;
  ------------------
  |  | 1388|  59.6k|#define CKR_OK 0x00000000UL
  ------------------
 1399|  59.6k|    }
 1400|      0|    db = SFTK_GET_SDB(handle);
  ------------------
  |  |   40|      0|    ((handle)->update ? (handle)->update : (handle)->db)
  |  |  ------------------
  |  |  |  Branch (40:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1401|      0|    return (*db->sdb_FindObjectsFinal)(db, find);
 1402|  59.6k|}
sftk_freeDB:
 2621|  59.6k|{
 2622|  59.6k|    PRInt32 ref;
 2623|       |
 2624|  59.6k|    if (!handle)
  ------------------
  |  Branch (2624:9): [True: 59.6k, False: 0]
  ------------------
 2625|  59.6k|        return;
 2626|      0|    ref = PR_ATOMIC_DECREMENT(&handle->ref);
  ------------------
  |  |  123|      0|#define PR_ATOMIC_DECREMENT(val) __sync_sub_and_fetch(val, 1)
  ------------------
 2627|      0|    if (ref == 0) {
  ------------------
  |  Branch (2627:9): [True: 0, False: 0]
  ------------------
 2628|      0|        sftkdb_CloseDB(handle);
 2629|      0|    }
 2630|      0|    return;
 2631|  59.6k|}
sftk_getCertDB:
 2639|  59.6k|{
 2640|  59.6k|    SFTKDBHandle *dbHandle;
 2641|       |
 2642|  59.6k|    PZ_Lock(slot->slotLock);
  ------------------
  |  |  245|  59.6k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
 2643|  59.6k|    dbHandle = slot->certDB;
 2644|  59.6k|    if (dbHandle) {
  ------------------
  |  Branch (2644:9): [True: 0, False: 59.6k]
  ------------------
 2645|      0|        (void)PR_ATOMIC_INCREMENT(&dbHandle->ref);
  ------------------
  |  |  122|      0|#define PR_ATOMIC_INCREMENT(val) __sync_add_and_fetch(val, 1)
  ------------------
 2646|      0|    }
 2647|  59.6k|    PZ_Unlock(slot->slotLock);
  ------------------
  |  |  246|  59.6k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
 2648|  59.6k|    return dbHandle;
 2649|  59.6k|}
sftk_getKeyDB:
 2657|  10.0k|{
 2658|  10.0k|    SFTKDBHandle *dbHandle;
 2659|       |
 2660|  10.0k|    SKIP_AFTER_FORK(PZ_Lock(slot->slotLock));
  ------------------
  |  |  256|  10.0k|#define SKIP_AFTER_FORK(x) x
  ------------------
 2661|  10.0k|    dbHandle = slot->keyDB;
 2662|  10.0k|    if (dbHandle) {
  ------------------
  |  Branch (2662:9): [True: 0, False: 10.0k]
  ------------------
 2663|      0|        (void)PR_ATOMIC_INCREMENT(&dbHandle->ref);
  ------------------
  |  |  122|      0|#define PR_ATOMIC_INCREMENT(val) __sync_add_and_fetch(val, 1)
  ------------------
 2664|      0|    }
 2665|  10.0k|    SKIP_AFTER_FORK(PZ_Unlock(slot->slotLock));
  ------------------
  |  |  256|  10.0k|#define SKIP_AFTER_FORK(x) x
  ------------------
 2666|  10.0k|    return dbHandle;
 2667|  10.0k|}
sftkdb_Shutdown:
 3041|      1|{
 3042|      1|    s_shutdown();
 3043|       |#ifndef NSS_DISABLE_DBM
 3044|       |    sftkdbCall_Shutdown();
 3045|       |#endif /* NSS_DISABLE_DBM */
 3046|      1|    return CKR_OK;
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
 3047|      1|}

sftk_parseParameters:
  127|      1|{
  128|      1|    int next;
  129|      1|    char *tmp = NULL;
  130|      1|    const char *index;
  131|      1|    char *certPrefix = NULL, *keyPrefix = NULL;
  132|      1|    char *tokdes = NULL, *ptokdes = NULL, *pupdtokdes = NULL;
  133|      1|    char *slotdes = NULL, *pslotdes = NULL;
  134|      1|    char *fslotdes = NULL, *ftokdes = NULL;
  135|      1|    char *minPW = NULL;
  136|      1|    index = NSSUTIL_ArgStrip(param);
  137|       |
  138|      1|    PORT_Memset(parsed, 0, sizeof(sftk_parameters));
  ------------------
  |  |  182|      1|#define PORT_Memset memset
  ------------------
  139|       |
  140|     11|    while (*index) {
  ------------------
  |  Branch (140:12): [True: 10, False: 1]
  ------------------
  141|     10|        NSSUTIL_HANDLE_STRING_ARG(index, parsed->configdir, "configDir=", ;)
  ------------------
  |  |   21|     10|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|     10|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 1, False: 9]
  |  |  ------------------
  |  |   22|      1|        param += sizeof(value) - 1;                               \
  |  |   23|      1|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   24|      1|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      1|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      1|        param += next;                                            \
  |  |   27|      1|        command;                                                  \
  |  |   28|      1|    } else
  ------------------
  142|      9|        NSSUTIL_HANDLE_STRING_ARG(index, parsed->updatedir, "updateDir=", ;)
  ------------------
  |  |   21|      9|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      9|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 1, False: 8]
  |  |  ------------------
  |  |   22|      1|        param += sizeof(value) - 1;                               \
  |  |   23|      1|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   24|      1|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      1|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      1|        param += next;                                            \
  |  |   27|      1|        command;                                                  \
  |  |   28|      1|    } else
  ------------------
  143|      8|        NSSUTIL_HANDLE_STRING_ARG(index, parsed->updateID, "updateID=", ;)
  ------------------
  |  |   21|      8|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      8|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 1, False: 7]
  |  |  ------------------
  |  |   22|      1|        param += sizeof(value) - 1;                               \
  |  |   23|      1|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   24|      1|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      1|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      1|        param += next;                                            \
  |  |   27|      1|        command;                                                  \
  |  |   28|      1|    } else
  ------------------
  144|      7|        NSSUTIL_HANDLE_STRING_ARG(index, parsed->secmodName, "secmod=", ;)
  ------------------
  |  |   21|      7|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      7|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 1, False: 6]
  |  |  ------------------
  |  |   22|      1|        param += sizeof(value) - 1;                               \
  |  |   23|      1|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   24|      1|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      1|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      1|        param += next;                                            \
  |  |   27|      1|        command;                                                  \
  |  |   28|      1|    } else
  ------------------
  145|      6|        NSSUTIL_HANDLE_STRING_ARG(index, parsed->man, "manufacturerID=", ;)
  ------------------
  |  |   21|      6|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      6|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 6]
  |  |  ------------------
  |  |   22|      0|        param += sizeof(value) - 1;                               \
  |  |   23|      0|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   24|      0|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      0|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      0|        param += next;                                            \
  |  |   27|      0|        command;                                                  \
  |  |   28|      0|    } else
  ------------------
  146|      6|        NSSUTIL_HANDLE_STRING_ARG(index, parsed->libdes, "libraryDescription=", ;)
  ------------------
  |  |   21|      6|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      6|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 6]
  |  |  ------------------
  |  |   22|      0|        param += sizeof(value) - 1;                               \
  |  |   23|      0|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   24|      0|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      0|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      0|        param += next;                                            \
  |  |   27|      0|        command;                                                  \
  |  |   28|      0|    } else
  ------------------
  147|       |        /* constructed values, used so legacy interfaces still work */
  148|      6|        NSSUTIL_HANDLE_STRING_ARG(index, certPrefix, "certPrefix=", ;)
  ------------------
  |  |   21|      6|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      6|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 1, False: 5]
  |  |  ------------------
  |  |   22|      1|        param += sizeof(value) - 1;                               \
  |  |   23|      1|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   24|      1|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      1|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      1|        param += next;                                            \
  |  |   27|      1|        command;                                                  \
  |  |   28|      1|    } else
  ------------------
  149|      5|        NSSUTIL_HANDLE_STRING_ARG(index, keyPrefix, "keyPrefix=", ;)
  ------------------
  |  |   21|      5|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      5|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 1, False: 4]
  |  |  ------------------
  |  |   22|      1|        param += sizeof(value) - 1;                               \
  |  |   23|      1|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   24|      1|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      1|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      1|        param += next;                                            \
  |  |   27|      1|        command;                                                  \
  |  |   28|      1|    } else
  ------------------
  150|      4|        NSSUTIL_HANDLE_STRING_ARG(index, tokdes, "cryptoTokenDescription=", ;)
  ------------------
  |  |   21|      4|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      4|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 4]
  |  |  ------------------
  |  |   22|      0|        param += sizeof(value) - 1;                               \
  |  |   23|      0|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   24|      0|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      0|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      0|        param += next;                                            \
  |  |   27|      0|        command;                                                  \
  |  |   28|      0|    } else
  ------------------
  151|      4|        NSSUTIL_HANDLE_STRING_ARG(index, ptokdes, "dbTokenDescription=", ;)
  ------------------
  |  |   21|      4|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      4|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 4]
  |  |  ------------------
  |  |   22|      0|        param += sizeof(value) - 1;                               \
  |  |   23|      0|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   24|      0|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      0|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      0|        param += next;                                            \
  |  |   27|      0|        command;                                                  \
  |  |   28|      0|    } else
  ------------------
  152|      4|        NSSUTIL_HANDLE_STRING_ARG(index, slotdes, "cryptoSlotDescription=", ;)
  ------------------
  |  |   21|      4|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      4|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 4]
  |  |  ------------------
  |  |   22|      0|        param += sizeof(value) - 1;                               \
  |  |   23|      0|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   24|      0|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      0|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      0|        param += next;                                            \
  |  |   27|      0|        command;                                                  \
  |  |   28|      0|    } else
  ------------------
  153|      4|        NSSUTIL_HANDLE_STRING_ARG(index, pslotdes, "dbSlotDescription=", ;)
  ------------------
  |  |   21|      4|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      4|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 4]
  |  |  ------------------
  |  |   22|      0|        param += sizeof(value) - 1;                               \
  |  |   23|      0|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   24|      0|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      0|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      0|        param += next;                                            \
  |  |   27|      0|        command;                                                  \
  |  |   28|      0|    } else
  ------------------
  154|      4|        NSSUTIL_HANDLE_STRING_ARG(index, fslotdes, "FIPSSlotDescription=", ;)
  ------------------
  |  |   21|      4|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      4|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 4]
  |  |  ------------------
  |  |   22|      0|        param += sizeof(value) - 1;                               \
  |  |   23|      0|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   24|      0|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      0|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      0|        param += next;                                            \
  |  |   27|      0|        command;                                                  \
  |  |   28|      0|    } else
  ------------------
  155|      4|        NSSUTIL_HANDLE_STRING_ARG(index, ftokdes, "FIPSTokenDescription=", ;)
  ------------------
  |  |   21|      4|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      4|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 4]
  |  |  ------------------
  |  |   22|      0|        param += sizeof(value) - 1;                               \
  |  |   23|      0|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   24|      0|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      0|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      0|        param += next;                                            \
  |  |   27|      0|        command;                                                  \
  |  |   28|      0|    } else
  ------------------
  156|      4|        NSSUTIL_HANDLE_STRING_ARG(index, pupdtokdes, "updateTokenDescription=", ;)
  ------------------
  |  |   21|      4|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      4|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 1, False: 3]
  |  |  ------------------
  |  |   22|      1|        param += sizeof(value) - 1;                               \
  |  |   23|      1|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   24|      1|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      1|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      1|        param += next;                                            \
  |  |   27|      1|        command;                                                  \
  |  |   28|      1|    } else
  ------------------
  157|      3|        NSSUTIL_HANDLE_STRING_ARG(index, minPW, "minPWLen=", ;)
  ------------------
  |  |   21|      3|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      3|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 3]
  |  |  ------------------
  |  |   22|      0|        param += sizeof(value) - 1;                               \
  |  |   23|      0|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   24|      0|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      0|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      0|        param += next;                                            \
  |  |   27|      0|        command;                                                  \
  |  |   28|      0|    } else
  ------------------
  158|       |
  159|      3|        NSSUTIL_HANDLE_STRING_ARG(
  ------------------
  |  |   21|      3|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      3|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 1, False: 2]
  |  |  ------------------
  |  |   22|      1|        param += sizeof(value) - 1;                               \
  |  |   23|      1|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   24|      1|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      1|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      1|        param += next;                                            \
  |  |   27|      2|        command;                                                  \
  |  |  ------------------
  |  |  |  Branch (27:9): [True: 1, False: 0]
  |  |  ------------------
  |  |   28|      1|    } else
  ------------------
  160|      3|            index, tmp, "flags=",
  161|      3|            if (tmp) { sftk_parseFlags(param,parsed); PORT_Free(tmp); tmp = NULL; })
  162|      2|        NSSUTIL_HANDLE_STRING_ARG(
  ------------------
  |  |   21|      2|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      2|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 2]
  |  |  ------------------
  |  |   22|      0|        param += sizeof(value) - 1;                               \
  |  |   23|      0|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   24|      0|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      0|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      0|        param += next;                                            \
  |  |   27|      0|        command;                                                  \
  |  |  ------------------
  |  |  |  Branch (27:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   28|      0|    } else
  ------------------
  163|      2|            index, tmp, "tokens=",
  164|      2|            if (tmp) { sftk_parseTokens(tmp,parsed); PORT_Free(tmp); tmp = NULL; })
  165|      2|        NSSUTIL_HANDLE_FINAL_ARG(index)
  ------------------
  |  |   31|      2|    {                                            \
  |  |   32|      2|        param = NSSUTIL_ArgSkipParameter(param); \
  |  |   33|      2|    }                                            \
  |  |   34|     10|    param = NSSUTIL_ArgStrip(param);
  ------------------
  166|     10|    }
  167|      1|    if (parsed->tokens == NULL) {
  ------------------
  |  Branch (167:9): [True: 1, False: 0]
  ------------------
  168|      1|        int count = isFIPS ? 1 : 2;
  ------------------
  |  Branch (168:21): [True: 0, False: 1]
  ------------------
  169|      1|        int i = count - 1;
  170|      1|        sftk_token_parameters *tokens = NULL;
  171|       |
  172|      1|        tokens = (sftk_token_parameters *)
  173|      1|            PORT_ZAlloc(count * sizeof(sftk_token_parameters));
  ------------------
  |  |   72|      1|#define PORT_ZAlloc PORT_ZAlloc_Util
  ------------------
  174|      1|        if (tokens == NULL) {
  ------------------
  |  Branch (174:13): [True: 0, False: 1]
  ------------------
  175|      0|            goto loser;
  176|      0|        }
  177|      1|        parsed->tokens = tokens;
  178|      1|        parsed->token_count = count;
  179|      1|        tokens[i].slotID = isFIPS ? FIPS_SLOT_ID : PRIVATE_KEY_SLOT_ID;
  ------------------
  |  |  500|      0|#define FIPS_SLOT_ID 3
  ------------------
                      tokens[i].slotID = isFIPS ? FIPS_SLOT_ID : PRIVATE_KEY_SLOT_ID;
  ------------------
  |  |  499|      2|#define PRIVATE_KEY_SLOT_ID 2
  ------------------
  |  Branch (179:28): [True: 0, False: 1]
  ------------------
  180|      1|        tokens[i].certPrefix = certPrefix;
  181|      1|        tokens[i].keyPrefix = keyPrefix;
  182|      1|        tokens[i].minPW = minPW ? atoi(minPW) : 0;
  ------------------
  |  Branch (182:27): [True: 0, False: 1]
  ------------------
  183|      1|        tokens[i].readOnly = parsed->readOnly;
  184|      1|        tokens[i].noCertDB = parsed->noCertDB;
  185|      1|        tokens[i].noKeyDB = parsed->noCertDB;
  186|      1|        tokens[i].forceOpen = parsed->forceOpen;
  187|      1|        tokens[i].pwRequired = parsed->pwRequired;
  188|      1|        tokens[i].optimizeSpace = parsed->optimizeSpace;
  189|      1|        tokens[0].optimizeSpace = parsed->optimizeSpace;
  190|      1|        certPrefix = NULL;
  191|      1|        keyPrefix = NULL;
  192|      1|        if (isFIPS) {
  ------------------
  |  Branch (192:13): [True: 0, False: 1]
  ------------------
  193|      0|            tokens[i].tokdes = ftokdes;
  194|      0|            tokens[i].updtokdes = pupdtokdes;
  195|      0|            tokens[i].slotdes = fslotdes;
  196|      0|            fslotdes = NULL;
  197|      0|            ftokdes = NULL;
  198|      0|            pupdtokdes = NULL;
  199|      1|        } else {
  200|      1|            tokens[i].tokdes = ptokdes;
  201|      1|            tokens[i].updtokdes = pupdtokdes;
  202|      1|            tokens[i].slotdes = pslotdes;
  203|      1|            tokens[0].slotID = NETSCAPE_SLOT_ID;
  ------------------
  |  |  498|      1|#define NETSCAPE_SLOT_ID 1
  ------------------
  204|      1|            tokens[0].tokdes = tokdes;
  205|      1|            tokens[0].slotdes = slotdes;
  206|      1|            tokens[0].noCertDB = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  207|      1|            tokens[0].noKeyDB = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  208|      1|            pupdtokdes = NULL;
  209|      1|            ptokdes = NULL;
  210|      1|            pslotdes = NULL;
  211|      1|            tokdes = NULL;
  212|      1|            slotdes = NULL;
  213|      1|        }
  214|      1|    }
  215|       |
  216|      1|loser:
  217|      1|    FREE_CLEAR(certPrefix);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  218|      1|    FREE_CLEAR(keyPrefix);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  219|      1|    FREE_CLEAR(tokdes);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  220|      1|    FREE_CLEAR(ptokdes);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  221|      1|    FREE_CLEAR(pupdtokdes);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  222|      1|    FREE_CLEAR(slotdes);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  223|      1|    FREE_CLEAR(pslotdes);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  224|      1|    FREE_CLEAR(fslotdes);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  225|      1|    FREE_CLEAR(ftokdes);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  226|      1|    FREE_CLEAR(minPW);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  227|      1|    return CKR_OK;
  ------------------
  |  | 1388|      1|#define CKR_OK 0x00000000UL
  ------------------
  228|      1|}
sftk_freeParams:
  232|      1|{
  233|      1|    int i;
  234|       |
  235|      3|    for (i = 0; i < params->token_count; i++) {
  ------------------
  |  Branch (235:17): [True: 2, False: 1]
  ------------------
  236|      2|        FREE_CLEAR(params->tokens[i].configdir);
  ------------------
  |  |   16|      2|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 2]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  237|      2|        FREE_CLEAR(params->tokens[i].certPrefix);
  ------------------
  |  |   16|      2|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 1, False: 1]
  |  |  ------------------
  |  |   17|      1|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      1|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      1|        p = NULL;     \
  |  |   19|      1|    }
  ------------------
  238|      2|        FREE_CLEAR(params->tokens[i].keyPrefix);
  ------------------
  |  |   16|      2|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 1, False: 1]
  |  |  ------------------
  |  |   17|      1|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      1|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      1|        p = NULL;     \
  |  |   19|      1|    }
  ------------------
  239|      2|        FREE_CLEAR(params->tokens[i].tokdes);
  ------------------
  |  |   16|      2|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 2]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  240|      2|        FREE_CLEAR(params->tokens[i].slotdes);
  ------------------
  |  |   16|      2|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 2]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  241|      2|        FREE_CLEAR(params->tokens[i].updatedir);
  ------------------
  |  |   16|      2|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 2]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  242|      2|        FREE_CLEAR(params->tokens[i].updCertPrefix);
  ------------------
  |  |   16|      2|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 2]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  243|      2|        FREE_CLEAR(params->tokens[i].updKeyPrefix);
  ------------------
  |  |   16|      2|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 2]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  244|      2|        FREE_CLEAR(params->tokens[i].updateID);
  ------------------
  |  |   16|      2|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 2]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  245|      2|        FREE_CLEAR(params->tokens[i].updtokdes);
  ------------------
  |  |   16|      2|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 1, False: 1]
  |  |  ------------------
  |  |   17|      1|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      1|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      1|        p = NULL;     \
  |  |   19|      1|    }
  ------------------
  246|      2|    }
  247|       |
  248|      1|    FREE_CLEAR(params->configdir);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 1, False: 0]
  |  |  ------------------
  |  |   17|      1|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      1|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      1|        p = NULL;     \
  |  |   19|      1|    }
  ------------------
  249|      1|    FREE_CLEAR(params->secmodName);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 1, False: 0]
  |  |  ------------------
  |  |   17|      1|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      1|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      1|        p = NULL;     \
  |  |   19|      1|    }
  ------------------
  250|      1|    FREE_CLEAR(params->man);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  251|      1|    FREE_CLEAR(params->libdes);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 0, False: 1]
  |  |  ------------------
  |  |   17|      0|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      0|        p = NULL;     \
  |  |   19|      0|    }
  ------------------
  252|      1|    FREE_CLEAR(params->tokens);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 1, False: 0]
  |  |  ------------------
  |  |   17|      1|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      1|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      1|        p = NULL;     \
  |  |   19|      1|    }
  ------------------
  253|      1|    FREE_CLEAR(params->updatedir);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 1, False: 0]
  |  |  ------------------
  |  |   17|      1|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      1|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      1|        p = NULL;     \
  |  |   19|      1|    }
  ------------------
  254|      1|    FREE_CLEAR(params->updateID);
  ------------------
  |  |   16|      1|    if (p) {          \
  |  |  ------------------
  |  |  |  Branch (16:9): [True: 1, False: 0]
  |  |  ------------------
  |  |   17|      1|        PORT_Free(p); \
  |  |  ------------------
  |  |  |  |   60|      1|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   18|      1|        p = NULL;     \
  |  |   19|      1|    }
  ------------------
  255|      1|}
sftkpars.c:sftk_parseFlags:
   35|      1|{
   36|      1|    parsed->noModDB = NSSUTIL_ArgHasFlag("flags", "noModDB", tmp);
   37|      1|    parsed->readOnly = NSSUTIL_ArgHasFlag("flags", "readOnly", tmp);
   38|       |    /* keep legacy interface working */
   39|      1|    parsed->noCertDB = NSSUTIL_ArgHasFlag("flags", "noCertDB", tmp);
   40|      1|    parsed->forceOpen = NSSUTIL_ArgHasFlag("flags", "forceOpen", tmp);
   41|      1|    parsed->pwRequired = NSSUTIL_ArgHasFlag("flags", "passwordRequired", tmp);
   42|      1|    parsed->optimizeSpace = NSSUTIL_ArgHasFlag("flags", "optimizeSpace", tmp);
   43|      1|    return;
   44|      1|}

DER_GetInteger_Util:
  179|  4.63k|{
  180|  4.63k|    unsigned long ival;
  181|  4.63k|    PRBool negative;
  182|  4.63k|    unsigned int len = it->len;
  183|  4.63k|    unsigned char *cp = it->data;
  184|  4.63k|    size_t lsize = sizeof(ival);
  185|       |
  186|  4.63k|    PORT_Assert(len);
  ------------------
  |  |  120|  4.63k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  4.63k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 4.63k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|  4.63k|    if (!len) {
  ------------------
  |  Branch (187:9): [True: 0, False: 4.63k]
  ------------------
  188|      0|        PORT_SetError(SEC_ERROR_INPUT_LEN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  189|      0|        return 0;
  190|      0|    }
  191|       |
  192|  4.63k|    negative = (PRBool)(*cp & 0x80);
  193|  4.63k|    ival = negative ? ~0 : 0;
  ------------------
  |  Branch (193:12): [True: 239, False: 4.39k]
  ------------------
  194|       |
  195|       |    /* Ignore leading zeros/ones. */
  196|  4.70k|    while (len && *cp == (unsigned char)ival) {
  ------------------
  |  Branch (196:12): [True: 4.63k, False: 70]
  |  Branch (196:19): [True: 74, False: 4.56k]
  ------------------
  197|     74|        len--;
  198|     74|        cp++;
  199|     74|    }
  200|       |
  201|       |    /* Check for overflow/underflow. */
  202|  4.63k|    if (len > lsize || (len == lsize && (*cp & 0x80) != negative)) {
  ------------------
  |  Branch (202:9): [True: 0, False: 4.63k]
  |  Branch (202:25): [True: 0, False: 4.63k]
  |  Branch (202:41): [True: 0, False: 0]
  ------------------
  203|      0|        PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  204|      0|        return negative ? LONG_MIN : LONG_MAX;
  ------------------
  |  Branch (204:16): [True: 0, False: 0]
  ------------------
  205|      0|    }
  206|       |
  207|  9.23k|    while (len--) {
  ------------------
  |  Branch (207:12): [True: 4.60k, False: 4.63k]
  ------------------
  208|  4.60k|        ival <<= 8;
  209|  4.60k|        ival |= *cp++;
  210|  4.60k|    }
  211|       |
  212|  4.63k|    return ival;
  213|  4.63k|}

DER_UTCTimeToTime_Util:
  106|  19.8k|{
  107|       |    /* Minimum valid UTCTime is yymmddhhmmZ       which is 11 bytes.
  108|       |    ** Maximum valid UTCTime is yymmddhhmmss+0000 which is 17 bytes.
  109|       |    ** 20 should be large enough for all valid encoded times.
  110|       |    */
  111|  19.8k|    unsigned int i;
  112|  19.8k|    char localBuf[20];
  113|  19.8k|    const char *end = NULL;
  114|  19.8k|    SECStatus rv;
  115|       |
  116|  19.8k|    if (!time || !time->data || time->len < 11 || time->len > 17) {
  ------------------
  |  Branch (116:9): [True: 0, False: 19.8k]
  |  Branch (116:18): [True: 0, False: 19.8k]
  |  Branch (116:33): [True: 1, False: 19.8k]
  |  Branch (116:51): [True: 0, False: 19.8k]
  ------------------
  117|      1|        PORT_SetError(SEC_ERROR_INVALID_TIME);
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
  118|      1|        return SECFailure;
  119|      1|    }
  120|       |
  121|   276k|    for (i = 0; i < time->len; i++) {
  ------------------
  |  Branch (121:17): [True: 257k, False: 19.7k]
  ------------------
  122|   257k|        if (time->data[i] == '\0') {
  ------------------
  |  Branch (122:13): [True: 59, False: 257k]
  ------------------
  123|     59|            PORT_SetError(SEC_ERROR_INVALID_TIME);
  ------------------
  |  |   65|     59|#define PORT_SetError PORT_SetError_Util
  ------------------
  124|     59|            return SECFailure;
  125|     59|        }
  126|   257k|        localBuf[i] = time->data[i];
  127|   257k|    }
  128|  19.7k|    localBuf[i] = '\0';
  129|       |
  130|  19.7k|    rv = der_TimeStringToTime(dst, localBuf, UTC_STRING, &end);
  ------------------
  |  |   88|  19.7k|#define UTC_STRING 0 /* TimeString is a UTCTime         */
  ------------------
  131|  19.7k|    if (rv == SECSuccess && *end != '\0') {
  ------------------
  |  Branch (131:9): [True: 19.2k, False: 495]
  |  Branch (131:29): [True: 8, False: 19.2k]
  ------------------
  132|      8|        PORT_SetError(SEC_ERROR_INVALID_TIME);
  ------------------
  |  |   65|      8|#define PORT_SetError PORT_SetError_Util
  ------------------
  133|      8|        return SECFailure;
  134|      8|    }
  135|  19.7k|    return rv;
  136|  19.7k|}
DER_GeneralizedTimeToTime_Util:
  199|    417|{
  200|       |    /* Minimum valid GeneralizedTime is ccyymmddhhmmZ       which is 13 bytes.
  201|       |    ** Maximum valid GeneralizedTime is ccyymmddhhmmss+0000 which is 19 bytes.
  202|       |    ** 20 should be large enough for all valid encoded times.
  203|       |    */
  204|    417|    unsigned int i;
  205|    417|    char localBuf[20];
  206|    417|    const char *end = NULL;
  207|    417|    SECStatus rv;
  208|       |
  209|    417|    if (!time || !time->data || time->len < 13 || time->len > 19) {
  ------------------
  |  Branch (209:9): [True: 0, False: 417]
  |  Branch (209:18): [True: 0, False: 417]
  |  Branch (209:33): [True: 1, False: 416]
  |  Branch (209:51): [True: 0, False: 416]
  ------------------
  210|      1|        PORT_SetError(SEC_ERROR_INVALID_TIME);
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
  211|      1|        return SECFailure;
  212|      1|    }
  213|       |
  214|  5.41k|    for (i = 0; i < time->len; i++) {
  ------------------
  |  Branch (214:17): [True: 5.06k, False: 349]
  ------------------
  215|  5.06k|        if (time->data[i] == '\0') {
  ------------------
  |  Branch (215:13): [True: 67, False: 4.99k]
  ------------------
  216|     67|            PORT_SetError(SEC_ERROR_INVALID_TIME);
  ------------------
  |  |   65|     67|#define PORT_SetError PORT_SetError_Util
  ------------------
  217|     67|            return SECFailure;
  218|     67|        }
  219|  4.99k|        localBuf[i] = time->data[i];
  220|  4.99k|    }
  221|    349|    localBuf[i] = '\0';
  222|       |
  223|    349|    rv = der_TimeStringToTime(dst, localBuf, GEN_STRING, &end);
  ------------------
  |  |   87|    349|#define GEN_STRING 2 /* TimeString is a GeneralizedTime */
  ------------------
  224|    349|    if (rv == SECSuccess && *end != '\0') {
  ------------------
  |  Branch (224:9): [True: 225, False: 124]
  |  Branch (224:29): [True: 4, False: 221]
  ------------------
  225|      4|        PORT_SetError(SEC_ERROR_INVALID_TIME);
  ------------------
  |  |   65|      4|#define PORT_SetError PORT_SetError_Util
  ------------------
  226|      4|        return SECFailure;
  227|      4|    }
  228|    345|    return rv;
  229|    349|}
dertime.c:der_TimeStringToTime:
  234|  20.0k|{
  235|  20.0k|    PRExplodedTime genTime;
  236|  20.0k|    long hourOff = 0, minOff = 0;
  237|  20.0k|    PRUint16 century;
  238|  20.0k|    char signum;
  239|       |
  240|  20.0k|    if (string == NULL || dst == NULL) {
  ------------------
  |  Branch (240:9): [True: 0, False: 20.0k]
  |  Branch (240:27): [True: 0, False: 20.0k]
  ------------------
  241|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  242|      0|        return SECFailure;
  243|      0|    }
  244|       |
  245|       |    /* Verify time is formatted properly and capture information */
  246|  20.0k|    memset(&genTime, 0, sizeof genTime);
  247|       |
  248|  20.0k|    if (generalized == UTC_STRING) {
  ------------------
  |  |   88|  20.0k|#define UTC_STRING 0 /* TimeString is a UTCTime         */
  ------------------
  |  Branch (248:9): [True: 19.7k, False: 349]
  ------------------
  249|  19.7k|        CAPTURE(genTime.tm_year, string, loser);
  ------------------
  |  |   16|  19.7k|    {                                                 \
  |  |   17|  19.7k|        if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|  39.4k|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 19.7k, False: 34]
  |  |  |  |  |  Branch (14:41): [True: 19.7k, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|  19.7k|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 19.6k, False: 88]
  |  |  |  |  |  Branch (14:41): [True: 19.5k, False: 17]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   18|  19.7k|            goto label;                               \
  |  |   19|  19.7k|        (var) = ((p)[0] - '0') * 10 + ((p)[1] - '0'); \
  |  |   20|  19.5k|        p += 2;                                       \
  |  |   21|  19.5k|    }
  ------------------
  250|  19.5k|        century = (genTime.tm_year < 50) ? 20 : 19;
  ------------------
  |  Branch (250:19): [True: 19.2k, False: 395]
  ------------------
  251|  19.5k|    } else {
  252|    349|        CAPTURE(century, string, loser);
  ------------------
  |  |   16|    349|    {                                                 \
  |  |   17|    349|        if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|    698|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 317, False: 32]
  |  |  |  |  |  Branch (14:41): [True: 311, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|    311|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 285, False: 26]
  |  |  |  |  |  Branch (14:41): [True: 278, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   18|    349|            goto label;                               \
  |  |   19|    349|        (var) = ((p)[0] - '0') * 10 + ((p)[1] - '0'); \
  |  |   20|    278|        p += 2;                                       \
  |  |   21|    278|    }
  ------------------
  253|    278|        CAPTURE(genTime.tm_year, string, loser);
  ------------------
  |  |   16|    278|    {                                                 \
  |  |   17|    278|        if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|    556|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 270, False: 8]
  |  |  |  |  |  Branch (14:41): [True: 267, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|    267|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 264, False: 3]
  |  |  |  |  |  Branch (14:41): [True: 260, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   18|    278|            goto label;                               \
  |  |   19|    278|        (var) = ((p)[0] - '0') * 10 + ((p)[1] - '0'); \
  |  |   20|    260|        p += 2;                                       \
  |  |   21|    260|    }
  ------------------
  254|    260|    }
  255|  19.8k|    genTime.tm_year += century * 100;
  256|       |
  257|  19.8k|    CAPTURE(genTime.tm_month, string, loser);
  ------------------
  |  |   16|  19.8k|    {                                                 \
  |  |   17|  19.8k|        if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|  39.7k|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 19.8k, False: 16]
  |  |  |  |  |  Branch (14:41): [True: 19.8k, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|  19.8k|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 19.8k, False: 21]
  |  |  |  |  |  Branch (14:41): [True: 19.8k, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   18|  19.8k|            goto label;                               \
  |  |   19|  19.8k|        (var) = ((p)[0] - '0') * 10 + ((p)[1] - '0'); \
  |  |   20|  19.8k|        p += 2;                                       \
  |  |   21|  19.8k|    }
  ------------------
  258|  19.8k|    if ((genTime.tm_month == 0) || (genTime.tm_month > 12))
  ------------------
  |  Branch (258:9): [True: 9, False: 19.8k]
  |  Branch (258:36): [True: 35, False: 19.7k]
  ------------------
  259|     44|        goto loser;
  260|       |
  261|       |    /* NSPR month base is 0 */
  262|  19.7k|    --genTime.tm_month;
  263|       |
  264|  19.7k|    CAPTURE(genTime.tm_mday, string, loser);
  ------------------
  |  |   16|  19.7k|    {                                                 \
  |  |   17|  19.7k|        if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|  39.5k|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 19.7k, False: 11]
  |  |  |  |  |  Branch (14:41): [True: 19.7k, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|  19.7k|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 19.7k, False: 9]
  |  |  |  |  |  Branch (14:41): [True: 19.7k, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   18|  19.7k|            goto label;                               \
  |  |   19|  19.7k|        (var) = ((p)[0] - '0') * 10 + ((p)[1] - '0'); \
  |  |   20|  19.7k|        p += 2;                                       \
  |  |   21|  19.7k|    }
  ------------------
  265|  19.7k|    if ((genTime.tm_mday == 0) || (genTime.tm_mday > 31))
  ------------------
  |  Branch (265:9): [True: 4, False: 19.7k]
  |  Branch (265:35): [True: 14, False: 19.7k]
  ------------------
  266|     18|        goto loser;
  267|       |
  268|  39.3k|    CAPTURE(genTime.tm_hour, string, loser);
  ------------------
  |  |   16|  19.7k|    {                                                 \
  |  |   17|  19.7k|        if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|  39.4k|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 19.7k, False: 9]
  |  |  |  |  |  Branch (14:41): [True: 19.6k, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|  19.6k|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 19.6k, False: 21]
  |  |  |  |  |  Branch (14:41): [True: 19.6k, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   18|  19.7k|            goto label;                               \
  |  |   19|  19.7k|        (var) = ((p)[0] - '0') * 10 + ((p)[1] - '0'); \
  |  |   20|  19.6k|        p += 2;                                       \
  |  |   21|  19.6k|    }
  ------------------
  269|  39.3k|    if (genTime.tm_hour > 23)
  ------------------
  |  Branch (269:9): [True: 18, False: 19.6k]
  ------------------
  270|     18|        goto loser;
  271|       |
  272|  39.2k|    CAPTURE(genTime.tm_min, string, loser);
  ------------------
  |  |   16|  19.6k|    {                                                 \
  |  |   17|  19.6k|        if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|  39.2k|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 19.6k, False: 25]
  |  |  |  |  |  Branch (14:41): [True: 19.6k, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|  19.6k|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 19.6k, False: 12]
  |  |  |  |  |  Branch (14:41): [True: 19.5k, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   18|  19.6k|            goto label;                               \
  |  |   19|  19.6k|        (var) = ((p)[0] - '0') * 10 + ((p)[1] - '0'); \
  |  |   20|  19.5k|        p += 2;                                       \
  |  |   21|  19.5k|    }
  ------------------
  273|  39.2k|    if (genTime.tm_min > 59)
  ------------------
  |  Branch (273:9): [True: 7, False: 19.5k]
  ------------------
  274|      7|        goto loser;
  275|       |
  276|  19.5k|    if (ISDIGIT(string[0])) {
  ------------------
  |  |   14|  19.5k|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  ------------------
  |  |  |  Branch (14:23): [True: 19.5k, False: 66]
  |  |  |  Branch (14:41): [True: 19.4k, False: 112]
  |  |  ------------------
  ------------------
  277|  19.4k|        CAPTURE(genTime.tm_sec, string, loser);
  ------------------
  |  |   16|  19.4k|    {                                                 \
  |  |   17|  19.4k|        if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|  38.8k|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 19.4k, False: 0]
  |  |  |  |  |  Branch (14:41): [True: 19.4k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|  19.4k|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 19.4k, False: 14]
  |  |  |  |  |  Branch (14:41): [True: 19.3k, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   18|  19.4k|            goto label;                               \
  |  |   19|  19.4k|        (var) = ((p)[0] - '0') * 10 + ((p)[1] - '0'); \
  |  |   20|  19.3k|        p += 2;                                       \
  |  |   21|  19.3k|    }
  ------------------
  278|  19.3k|        if (genTime.tm_sec > 59)
  ------------------
  |  Branch (278:13): [True: 11, False: 19.3k]
  ------------------
  279|     11|            goto loser;
  280|  19.3k|    }
  281|  19.5k|    signum = *string++;
  282|  19.5k|    if (signum == '+' || signum == '-') {
  ------------------
  |  Branch (282:9): [True: 24, False: 19.5k]
  |  Branch (282:26): [True: 10, False: 19.5k]
  ------------------
  283|     34|        CAPTURE(hourOff, string, loser);
  ------------------
  |  |   16|     34|    {                                                 \
  |  |   17|     34|        if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|     68|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 22, False: 12]
  |  |  |  |  |  Branch (14:41): [True: 16, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|     16|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 12, False: 4]
  |  |  |  |  |  Branch (14:41): [True: 7, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   18|     34|            goto label;                               \
  |  |   19|     34|        (var) = ((p)[0] - '0') * 10 + ((p)[1] - '0'); \
  |  |   20|      7|        p += 2;                                       \
  |  |   21|      7|    }
  ------------------
  284|      7|        if (hourOff > 23)
  ------------------
  |  Branch (284:13): [True: 3, False: 4]
  ------------------
  285|      3|            goto loser;
  286|      4|        CAPTURE(minOff, string, loser);
  ------------------
  |  |   16|      4|    {                                                 \
  |  |   17|      4|        if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|      8|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 0, False: 4]
  |  |  |  |  |  Branch (14:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |                       if (!ISDIGIT((p)[0]) || !ISDIGIT((p)[1]))     \
  |  |  ------------------
  |  |  |  |   14|      0|#define ISDIGIT(dig) (((dig) >= '0') && ((dig) <= '9'))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (14:23): [True: 0, False: 0]
  |  |  |  |  |  Branch (14:41): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   18|      4|            goto label;                               \
  |  |   19|      4|        (var) = ((p)[0] - '0') * 10 + ((p)[1] - '0'); \
  |  |   20|      0|        p += 2;                                       \
  |  |   21|      0|    }
  ------------------
  287|      4|        if (minOff > 59)
  ------------------
  |  Branch (287:13): [True: 0, False: 0]
  ------------------
  288|      0|            goto loser;
  289|      0|        if (signum == '-') {
  ------------------
  |  Branch (289:13): [True: 0, False: 0]
  ------------------
  290|      0|            hourOff = -hourOff;
  291|      0|            minOff = -minOff;
  292|      0|        }
  293|  19.5k|    } else if (signum != 'Z') {
  ------------------
  |  Branch (293:16): [True: 49, False: 19.4k]
  ------------------
  294|     49|        goto loser;
  295|     49|    }
  296|       |
  297|  19.4k|    if (endptr)
  ------------------
  |  Branch (297:9): [True: 19.4k, False: 0]
  ------------------
  298|  19.4k|        *endptr = string;
  299|       |
  300|       |    /* Convert the GMT offset to seconds and save it in genTime
  301|       |     * for the implode time call.
  302|       |     */
  303|  19.4k|    genTime.tm_params.tp_gmt_offset = (PRInt32)((hourOff * 60L + minOff) * 60L);
  304|  19.4k|    *dst = PR_ImplodeTime(&genTime);
  305|  19.4k|    return SECSuccess;
  306|       |
  307|    619|loser:
  308|    619|    PORT_SetError(SEC_ERROR_INVALID_TIME);
  ------------------
  |  |   65|    619|#define PORT_SetError PORT_SetError_Util
  ------------------
  309|    619|    return SECFailure;
  310|  19.5k|}

NSS_InitializePRErrorTable:
   37|      1|{
   38|      1|    return (PR_SUCCESS == PR_CallOnce(&once, nss_InitializePRErrorTableOnce))
  ------------------
  |  Branch (38:12): [True: 1, False: 0]
  ------------------
   39|      1|               ? SECSuccess
   40|      1|               : SECFailure;
   41|      1|}
errstrs.c:nss_InitializePRErrorTableOnce:
   29|      1|{
   30|      1|    return PR_ErrorInstallTable(&sec_et);
   31|      1|}

NSSBase64_DecodeBuffer_Util:
  733|    142|{
  734|    142|    SECItem *out_item = NULL;
  735|    142|    PRUint32 max_out_len = 0;
  736|    142|    void *mark = NULL;
  737|    142|    unsigned char *dummy = NULL;
  738|       |
  739|    142|    if ((outItemOpt != NULL && outItemOpt->data != NULL) || inLen == 0) {
  ------------------
  |  Branch (739:10): [True: 142, False: 0]
  |  Branch (739:32): [True: 0, False: 142]
  |  Branch (739:61): [True: 1, False: 141]
  ------------------
  740|      1|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      1|#define PORT_SetError PORT_SetError_Util
  ------------------
  741|      1|        return NULL;
  742|      1|    }
  743|       |
  744|    141|    if (arenaOpt != NULL)
  ------------------
  |  Branch (744:9): [True: 0, False: 141]
  ------------------
  745|      0|        mark = PORT_ArenaMark(arenaOpt);
  ------------------
  |  |   55|      0|#define PORT_ArenaMark PORT_ArenaMark_Util
  ------------------
  746|       |
  747|    141|    max_out_len = PL_Base64MaxDecodedLength(inLen);
  748|    141|    if (max_out_len == 0) {
  ------------------
  |  Branch (748:9): [True: 1, False: 140]
  ------------------
  749|      1|        goto loser;
  750|      1|    }
  751|    140|    out_item = SECITEM_AllocItem(arenaOpt, outItemOpt, max_out_len);
  ------------------
  |  |  103|    140|#define SECITEM_AllocItem SECITEM_AllocItem_Util
  ------------------
  752|    140|    if (out_item == NULL) {
  ------------------
  |  Branch (752:9): [True: 0, False: 140]
  ------------------
  753|      0|        goto loser;
  754|      0|    }
  755|       |
  756|    140|    dummy = PL_Base64DecodeBuffer(inStr, inLen, out_item->data,
  757|    140|                                  max_out_len, &out_item->len);
  758|    140|    if (dummy == NULL) {
  ------------------
  |  Branch (758:9): [True: 62, False: 78]
  ------------------
  759|     62|        goto loser;
  760|     62|    }
  761|     78|    if (arenaOpt != NULL) {
  ------------------
  |  Branch (761:9): [True: 0, False: 78]
  ------------------
  762|      0|        PORT_ArenaUnmark(arenaOpt, mark);
  ------------------
  |  |   58|      0|#define PORT_ArenaUnmark PORT_ArenaUnmark_Util
  ------------------
  763|      0|    }
  764|     78|    return out_item;
  765|       |
  766|     63|loser:
  767|     63|    if (arenaOpt != NULL) {
  ------------------
  |  Branch (767:9): [True: 0, False: 63]
  ------------------
  768|      0|        PORT_ArenaRelease(arenaOpt, mark);
  ------------------
  |  |   56|      0|#define PORT_ArenaRelease PORT_ArenaRelease_Util
  ------------------
  769|      0|        if (outItemOpt != NULL) {
  ------------------
  |  Branch (769:13): [True: 0, False: 0]
  ------------------
  770|      0|            outItemOpt->data = NULL;
  771|      0|            outItemOpt->len = 0;
  772|      0|        }
  773|     63|    } else if (dummy == NULL) {
  ------------------
  |  Branch (773:16): [True: 63, False: 0]
  ------------------
  774|     63|        SECITEM_FreeItem(out_item, (PRBool)(outItemOpt == NULL));
  ------------------
  |  |  108|     63|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
  775|     63|    }
  776|     63|    return NULL;
  777|    140|}
ATOB_AsciiToData_Util:
  805|    142|{
  806|    142|    SECItem binary_item, *dummy;
  807|       |
  808|    142|    binary_item.data = NULL;
  809|    142|    binary_item.len = 0;
  810|       |
  811|    142|    dummy = NSSBase64_DecodeBuffer(NULL, &binary_item, string,
  ------------------
  |  |   37|    142|#define NSSBase64_DecodeBuffer NSSBase64_DecodeBuffer_Util
  ------------------
  812|    142|                                   (PRUint32)PORT_Strlen(string));
  ------------------
  |  |  190|    142|#define PORT_Strlen(s) strlen(s)
  ------------------
  813|    142|    if (dummy == NULL)
  ------------------
  |  Branch (813:9): [True: 64, False: 78]
  ------------------
  814|     64|        return NULL;
  815|       |
  816|     78|    PORT_Assert(dummy == &binary_item);
  ------------------
  |  |  120|     78|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     78|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 78, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  817|       |
  818|     78|    *lenp = dummy->len;
  819|     78|    return dummy->data;
  820|    142|}
nssb64d.c:pl_base64_create_decoder:
  413|    140|{
  414|    140|    return PR_NEWZAP(PLBase64Decoder);
  ------------------
  |  |   99|    140|#define PR_NEWZAP(_struct) ((_struct*)PR_Calloc(1, sizeof(_struct)))
  ------------------
  415|    140|}
nssb64d.c:pl_base64_decode_buffer:
  249|    140|{
  250|    140|    unsigned char *out = data->output_buffer;
  251|    140|    unsigned char *token = data->token;
  252|    140|    int i, n = 0;
  253|       |
  254|    140|    i = data->token_size;
  255|    140|    data->token_size = 0;
  256|       |
  257|   123k|    while (length > 0) {
  ------------------
  |  Branch (257:12): [True: 123k, False: 1]
  ------------------
  258|   874k|        while (i < 4 && length > 0) {
  ------------------
  |  Branch (258:16): [True: 750k, False: 123k]
  |  Branch (258:25): [True: 750k, False: 74]
  ------------------
  259|       |            /*
  260|       |             * XXX Note that the following simply ignores any unexpected
  261|       |             * characters.  This is exactly what the original code in
  262|       |             * libmime did, and I am leaving it.  We certainly want to skip
  263|       |             * over whitespace (we must); this does much more than that.
  264|       |             * I am not confident changing it, and I don't want to slow
  265|       |             * the processing down doing more complicated checking, but
  266|       |             * someone else might have different ideas in the future.
  267|       |             */
  268|   750k|            if (pl_base64_codetovaluep1(*in) > 0 || *in == B64_PAD)
  ------------------
  |  |  152|   255k|#define B64_PAD '='
  ------------------
  |  Branch (268:17): [True: 494k, False: 255k]
  |  Branch (268:53): [True: 86, False: 255k]
  ------------------
  269|   495k|                token[i++] = *in;
  270|   750k|            in++;
  271|   750k|            length--;
  272|   750k|        }
  273|       |
  274|   123k|        if (i < 4) {
  ------------------
  |  Branch (274:13): [True: 74, False: 123k]
  ------------------
  275|       |            /* Didn't get enough for a complete token. */
  276|     74|            data->token_size = i;
  277|     74|            break;
  278|     74|        }
  279|   123k|        i = 0;
  280|       |
  281|   123k|        PR_ASSERT((PRUint32)(out - data->output_buffer + 3) <= data->output_buflen);
  ------------------
  |  |  208|   123k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 123k, False: 0]
  |  |  ------------------
  ------------------
  282|       |
  283|       |        /*
  284|       |         * Assume we are not at the end; the following function only works
  285|       |         * for an internal token (no trailing padding characters) but is
  286|       |         * faster that way.  If it hits an invalid character (padding) it
  287|       |         * will return an error; we break out of the loop and try again
  288|       |         * calling the routine that will handle a final token.
  289|       |         * Note that we intentionally do it this way rather than explicitly
  290|       |         * add a check for padding here (because that would just slow down
  291|       |         * the normal case) nor do we rely on checking whether we have more
  292|       |         * input to process (because that would also slow it down but also
  293|       |         * because we want to allow trailing garbage, especially white space
  294|       |         * and cannot tell that without read-ahead, also a slow proposition).
  295|       |         * Whew.  Understand?
  296|       |         */
  297|   123k|        n = pl_base64_decode_4to3(token, out);
  298|   123k|        if (n < 0)
  ------------------
  |  Branch (298:13): [True: 65, False: 123k]
  ------------------
  299|     65|            break;
  300|       |
  301|       |        /* Advance "out" by the number of bytes just written to it. */
  302|   123k|        out += n;
  303|   123k|        n = 0;
  304|   123k|    }
  305|       |
  306|       |    /*
  307|       |     * See big comment above, before call to pl_base64_decode_4to3.
  308|       |     * Here we check if we error'd out of loop, and allow for the case
  309|       |     * that we are processing the last interesting token.  If the routine
  310|       |     * which should handle padding characters also fails, then we just
  311|       |     * have bad input and give up.
  312|       |     */
  313|    140|    if (n < 0) {
  ------------------
  |  Branch (313:9): [True: 65, False: 75]
  ------------------
  314|     65|        n = pl_base64_decode_token(token, out);
  315|     65|        if (n < 0)
  ------------------
  |  Branch (315:13): [True: 27, False: 38]
  ------------------
  316|     27|            return PR_FAILURE;
  317|       |
  318|     38|        out += n;
  319|     38|    }
  320|       |
  321|       |    /*
  322|       |     * As explained above, we can get here with more input remaining, but
  323|       |     * it should be all characters we do not care about (i.e. would be
  324|       |     * ignored when transferring from "in" to "token" in loop above,
  325|       |     * except here we choose to ignore extraneous pad characters, too).
  326|       |     * Swallow it, performing that check.  If we find more characters that
  327|       |     * we would expect to decode, something is wrong.
  328|       |     */
  329|    824|    while (length > 0) {
  ------------------
  |  Branch (329:12): [True: 731, False: 93]
  ------------------
  330|    731|        if (pl_base64_codetovaluep1(*in) > 0)
  ------------------
  |  Branch (330:13): [True: 20, False: 711]
  ------------------
  331|     20|            return PR_FAILURE;
  332|    711|        in++;
  333|    711|        length--;
  334|    711|    }
  335|       |
  336|       |    /* Record the length of decoded data we have left in output_buffer. */
  337|     93|    data->output_length = (PRUint32)(out - data->output_buffer);
  338|     93|    return PR_SUCCESS;
  339|    113|}
nssb64d.c:pl_base64_codetovaluep1:
  124|  1.24M|{
  125|  1.24M|    unsigned char mask;
  126|  1.24M|    unsigned char res = 0;
  127|       |
  128|       |    /* The range 'A' to 'Z' is mapped to 1 to 26 */
  129|  1.24M|    mask = ct_u8_in_range(code, 'A', 'Z');
  130|  1.24M|    res |= mask & (code - 'A' + 1);
  131|       |
  132|       |    /* The range 'a' to 'z' is mapped to 27 to 52 */
  133|  1.24M|    mask = ct_u8_in_range(code, 'a', 'z');
  134|  1.24M|    res |= mask & (code - 'a' + 27);
  135|       |
  136|       |    /* The range '0' to '9' is mapped to 53 to 62 */
  137|  1.24M|    mask = ct_u8_in_range(code, '0', '9');
  138|  1.24M|    res |= mask & (code - '0' + 53);
  139|       |
  140|       |    /* The code '+' is mapped to 63 */
  141|  1.24M|    mask = ct_u8_in_range(code, '+', '+');
  142|  1.24M|    res |= mask & 63;
  143|       |
  144|       |    /* The code '/' is mapped to 64 */
  145|  1.24M|    mask = ct_u8_in_range(code, '/', '/');
  146|  1.24M|    res |= mask & 64;
  147|       |
  148|       |    /* All other characters, including '=' are mapped to 0. */
  149|  1.24M|    return res;
  150|  1.24M|}
nssb64d.c:ct_u8_in_range:
   99|  6.23M|{
  100|       |    /*  Let x, a, b be ints in {0, 1, ... 255}.
  101|       |     *  The value (a - x - 1) is in {-256, ..., 254}, so the low
  102|       |     *  8 bits of
  103|       |     *      (a - x - 1) >> 8
  104|       |     *  are all 1 if a <= x and all 0 if a > x.
  105|       |     *
  106|       |     *  Likewise the low 8 bits of
  107|       |     *      ((a - x - 1) >> 8) & ((x - c - 1) >> 8)
  108|       |     *  are all 1 if a <= x <= c and all 0 otherwise.
  109|       |     *
  110|       |     *  The same is true if we perform the shift after the AND
  111|       |     *      ((a - x - 1) & (x - b - 1)) >> 8.
  112|       |     */
  113|  6.23M|    return (unsigned char)(((a - x - 1) & (x - b - 1)) >> 8);
  114|  6.23M|}
nssb64d.c:pl_base64_decode_4to3:
  160|   123k|{
  161|   123k|    int j;
  162|   123k|    PRUint32 num = 0;
  163|   123k|    unsigned char bits;
  164|       |
  165|   618k|    for (j = 0; j < 4; j++) {
  ------------------
  |  Branch (165:17): [True: 494k, False: 123k]
  ------------------
  166|   494k|        bits = pl_base64_codetovaluep1(in[j]);
  167|   494k|        if (bits == 0)
  ------------------
  |  Branch (167:13): [True: 90, False: 494k]
  ------------------
  168|     90|            return -1;
  169|   494k|        num = (num << 6) | (bits - 1);
  170|   494k|    }
  171|       |
  172|   123k|    out[0] = (unsigned char)(num >> 16);
  173|   123k|    out[1] = (unsigned char)((num >> 8) & 0xFF);
  174|   123k|    out[2] = (unsigned char)(num & 0xFF);
  175|       |
  176|   123k|    return 3;
  177|   123k|}
nssb64d.c:pl_base64_decode_token:
  236|    114|{
  237|    114|    if (in[3] != B64_PAD)
  ------------------
  |  |  152|    114|#define B64_PAD '='
  ------------------
  |  Branch (237:9): [True: 25, False: 89]
  ------------------
  238|     25|        return pl_base64_decode_4to3(in, out);
  239|       |
  240|     89|    if (in[2] == B64_PAD)
  ------------------
  |  |  152|     89|#define B64_PAD '='
  ------------------
  |  Branch (240:9): [True: 29, False: 60]
  ------------------
  241|     29|        return pl_base64_decode_2to1(in, out);
  242|       |
  243|     60|    return pl_base64_decode_3to2(in, out);
  244|     89|}
nssb64d.c:pl_base64_decode_2to1:
  212|     29|{
  213|     29|    PRUint32 num = 0;
  214|     29|    unsigned char bits1, bits2;
  215|       |
  216|     29|    bits1 = pl_base64_codetovaluep1(in[0]);
  217|     29|    bits2 = pl_base64_codetovaluep1(in[1]);
  218|       |
  219|     29|    if ((bits1 == 0) || (bits2 == 0))
  ------------------
  |  Branch (219:9): [True: 1, False: 28]
  |  Branch (219:25): [True: 14, False: 14]
  ------------------
  220|     15|        return -1;
  221|       |
  222|     14|    num = ((PRUint32)(bits1 - 1)) << 2;
  223|     14|    num |= ((PRUint32)(bits2 - 1)) >> 4;
  224|       |
  225|     14|    out[0] = (unsigned char)num;
  226|       |
  227|     14|    return 1;
  228|     29|}
nssb64d.c:pl_base64_decode_3to2:
  185|     60|{
  186|     60|    PRUint32 num = 0;
  187|     60|    unsigned char bits1, bits2, bits3;
  188|       |
  189|     60|    bits1 = pl_base64_codetovaluep1(in[0]);
  190|     60|    bits2 = pl_base64_codetovaluep1(in[1]);
  191|     60|    bits3 = pl_base64_codetovaluep1(in[2]);
  192|       |
  193|     60|    if ((bits1 == 0) || (bits2 == 0) || (bits3 == 0))
  ------------------
  |  Branch (193:9): [True: 1, False: 59]
  |  Branch (193:25): [True: 1, False: 58]
  |  Branch (193:41): [True: 0, False: 58]
  ------------------
  194|      2|        return -1;
  195|       |
  196|     58|    num = ((PRUint32)(bits1 - 1)) << 10;
  197|     58|    num |= ((PRUint32)(bits2 - 1)) << 4;
  198|     58|    num |= ((PRUint32)(bits3 - 1)) >> 2;
  199|       |
  200|     58|    out[0] = (unsigned char)(num >> 8);
  201|     58|    out[1] = (unsigned char)(num & 0xFF);
  202|       |
  203|     58|    return 2;
  204|     60|}
nssb64d.c:PL_DestroyBase64Decoder:
  512|    140|{
  513|    140|    PRStatus status = PR_SUCCESS;
  514|       |
  515|       |    /* XXX Should we do argument checking only in debug build? */
  516|    140|    if (data == NULL) {
  ------------------
  |  Branch (516:9): [True: 0, False: 140]
  ------------------
  517|      0|        PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
  ------------------
  |  |   55|      0|#define PR_INVALID_ARGUMENT_ERROR                (-5987L)
  ------------------
  518|      0|        return PR_FAILURE;
  519|      0|    }
  520|       |
  521|       |    /* Flush out the last few buffered characters. */
  522|    140|    if (!abort_p)
  ------------------
  |  Branch (522:9): [True: 78, False: 62]
  ------------------
  523|     78|        status = pl_base64_decode_flush(data);
  524|       |
  525|    140|    if (data->output_buffer != NULL)
  ------------------
  |  Branch (525:9): [True: 0, False: 140]
  ------------------
  526|      0|        PR_Free(data->output_buffer);
  527|    140|    PR_Free(data);
  528|       |
  529|    140|    return status;
  530|    140|}
nssb64d.c:pl_base64_decode_flush:
  349|    171|{
  350|    171|    int count;
  351|       |
  352|       |    /*
  353|       |     * If no remaining characters, or all are padding (also not well-formed
  354|       |     * input, but again, be tolerant), then nothing more to do.  (And, that
  355|       |     * is considered successful.)
  356|       |     */
  357|    171|    if (data->token_size == 0 || data->token[0] == B64_PAD)
  ------------------
  |  |  152|     57|#define B64_PAD '='
  ------------------
  |  Branch (357:9): [True: 114, False: 57]
  |  Branch (357:34): [True: 8, False: 49]
  ------------------
  358|    122|        return PR_SUCCESS;
  359|       |
  360|       |    /*
  361|       |     * Assume we have all the interesting input except for some expected
  362|       |     * padding characters.  Add them and decode the resulting token.
  363|       |     */
  364|    133|    while (data->token_size < 4)
  ------------------
  |  Branch (364:12): [True: 84, False: 49]
  ------------------
  365|     84|        data->token[data->token_size++] = B64_PAD;
  ------------------
  |  |  152|    133|#define B64_PAD '='
  ------------------
  366|       |
  367|     49|    data->token_size = 0; /* so a subsequent flush call is a no-op */
  368|       |
  369|     49|    count = pl_base64_decode_token(data->token,
  370|     49|                                   data->output_buffer + data->output_length);
  371|     49|    if (count < 0)
  ------------------
  |  Branch (371:9): [True: 15, False: 34]
  ------------------
  372|     15|        return PR_FAILURE;
  373|       |
  374|       |    /*
  375|       |     * If there is an output function, call it with this last bit of data.
  376|       |     * Otherwise we are doing all buffered output, and the decoded bytes
  377|       |     * are now there, we just need to reflect that in the length.
  378|       |     */
  379|     34|    if (data->output_fn != NULL) {
  ------------------
  |  Branch (379:9): [True: 0, False: 34]
  ------------------
  380|      0|        PRInt32 output_result;
  381|       |
  382|      0|        PR_ASSERT(data->output_length == 0);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  383|      0|        output_result = data->output_fn(data->output_arg,
  384|      0|                                        data->output_buffer,
  385|      0|                                        (PRInt32)count);
  386|      0|        if (output_result < 0)
  ------------------
  |  Branch (386:13): [True: 0, False: 0]
  ------------------
  387|      0|            return PR_FAILURE;
  388|     34|    } else {
  389|     34|        data->output_length += count;
  390|     34|    }
  391|       |
  392|     34|    return PR_SUCCESS;
  393|     34|}
nssb64d.c:PL_Base64MaxDecodedLength:
  401|    281|{
  402|    281|    return size * 0.75;
  403|    281|}
nssb64d.c:PL_Base64DecodeBuffer:
  547|    140|{
  548|    140|    PRUint32 need_length;
  549|    140|    unsigned char *output_buffer = NULL;
  550|    140|    PLBase64Decoder *data = NULL;
  551|    140|    PRStatus status;
  552|       |
  553|    140|    PR_ASSERT(srclen > 0);
  ------------------
  |  |  208|    140|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 140, False: 0]
  |  |  ------------------
  ------------------
  554|    140|    if (srclen == 0) {
  ------------------
  |  Branch (554:9): [True: 0, False: 140]
  ------------------
  555|      0|        PR_SetError(PR_INVALID_ARGUMENT_ERROR, 0);
  ------------------
  |  |   55|      0|#define PR_INVALID_ARGUMENT_ERROR                (-5987L)
  ------------------
  556|      0|        return NULL;
  557|      0|    }
  558|       |
  559|       |    /*
  560|       |     * How much space could we possibly need for decoding this input?
  561|       |     */
  562|    140|    need_length = PL_Base64MaxDecodedLength(srclen);
  563|       |
  564|       |    /*
  565|       |     * Make sure we have at least that much, if output buffer provided.
  566|       |     * If no output buffer provided, then we allocate that much.
  567|       |     */
  568|    140|    if (dest != NULL) {
  ------------------
  |  Branch (568:9): [True: 140, False: 0]
  ------------------
  569|    140|        PR_ASSERT(maxdestlen >= need_length);
  ------------------
  |  |  208|    140|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 140, False: 0]
  |  |  ------------------
  ------------------
  570|    140|        if (maxdestlen < need_length) {
  ------------------
  |  Branch (570:13): [True: 0, False: 140]
  ------------------
  571|      0|            PR_SetError(PR_BUFFER_OVERFLOW_ERROR, 0);
  ------------------
  |  |  130|      0|#define PR_BUFFER_OVERFLOW_ERROR                 (-5962L)
  ------------------
  572|      0|            goto loser;
  573|      0|        }
  574|    140|        output_buffer = dest;
  575|    140|    } else {
  576|      0|        output_buffer = (unsigned char *)PR_Malloc(need_length);
  577|      0|        if (output_buffer == NULL)
  ------------------
  |  Branch (577:13): [True: 0, False: 0]
  ------------------
  578|      0|            goto loser;
  579|      0|        maxdestlen = need_length;
  580|      0|    }
  581|       |
  582|    140|    data = pl_base64_create_decoder();
  583|    140|    if (data == NULL)
  ------------------
  |  Branch (583:9): [True: 0, False: 140]
  ------------------
  584|      0|        goto loser;
  585|       |
  586|    140|    data->output_buflen = maxdestlen;
  587|    140|    data->output_buffer = output_buffer;
  588|       |
  589|    140|    status = pl_base64_decode_buffer(data, (const unsigned char *)src,
  590|    140|                                     srclen);
  591|       |
  592|       |    /*
  593|       |     * We do not wait for Destroy to flush, because Destroy will also
  594|       |     * get rid of our decoder context, which we need to look at first!
  595|       |     */
  596|    140|    if (status == PR_SUCCESS)
  ------------------
  |  Branch (596:9): [True: 93, False: 47]
  ------------------
  597|     93|        status = pl_base64_decode_flush(data);
  598|       |
  599|       |    /* Must clear this or Destroy will free it. */
  600|    140|    data->output_buffer = NULL;
  601|       |
  602|    140|    if (status == PR_SUCCESS) {
  ------------------
  |  Branch (602:9): [True: 78, False: 62]
  ------------------
  603|     78|        *output_destlen = data->output_length;
  604|     78|        status = PL_DestroyBase64Decoder(data, PR_FALSE);
  ------------------
  |  |  438|     78|#define PR_FALSE 0
  ------------------
  605|     78|        data = NULL;
  606|     78|        if (status == PR_FAILURE)
  ------------------
  |  Branch (606:13): [True: 0, False: 78]
  ------------------
  607|      0|            goto loser;
  608|     78|        return output_buffer;
  609|     78|    }
  610|       |
  611|     62|loser:
  612|     62|    if (dest == NULL && output_buffer != NULL)
  ------------------
  |  Branch (612:9): [True: 0, False: 62]
  |  Branch (612:25): [True: 0, False: 0]
  ------------------
  613|      0|        PR_Free(output_buffer);
  614|     62|    if (data != NULL)
  ------------------
  |  Branch (614:9): [True: 62, False: 0]
  ------------------
  615|     62|        (void)PL_DestroyBase64Decoder(data, PR_TRUE);
  ------------------
  |  |  437|     62|#define PR_TRUE 1
  ------------------
  616|     62|    return NULL;
  617|    140|}

HASH_GetHashTypeByOidTag_Util:
   12|  10.1k|{
   13|  10.1k|    HASH_HashType ht = HASH_AlgNULL;
   14|       |
   15|  10.1k|    switch (hashOid) {
   16|      0|        case SEC_OID_MD2:
  ------------------
  |  Branch (16:9): [True: 0, False: 10.1k]
  ------------------
   17|      0|            ht = HASH_AlgMD2;
   18|      0|            break;
   19|      0|        case SEC_OID_MD5:
  ------------------
  |  Branch (19:9): [True: 0, False: 10.1k]
  ------------------
   20|      0|            ht = HASH_AlgMD5;
   21|      0|            break;
   22|  5.63k|        case SEC_OID_SHA1:
  ------------------
  |  Branch (22:9): [True: 5.63k, False: 4.53k]
  ------------------
   23|  5.63k|            ht = HASH_AlgSHA1;
   24|  5.63k|            break;
   25|      5|        case SEC_OID_SHA224:
  ------------------
  |  Branch (25:9): [True: 5, False: 10.1k]
  ------------------
   26|      5|            ht = HASH_AlgSHA224;
   27|      5|            break;
   28|  4.44k|        case SEC_OID_SHA256:
  ------------------
  |  Branch (28:9): [True: 4.44k, False: 5.72k]
  ------------------
   29|  4.44k|            ht = HASH_AlgSHA256;
   30|  4.44k|            break;
   31|     35|        case SEC_OID_SHA384:
  ------------------
  |  Branch (31:9): [True: 35, False: 10.1k]
  ------------------
   32|     35|            ht = HASH_AlgSHA384;
   33|     35|            break;
   34|     50|        case SEC_OID_SHA512:
  ------------------
  |  Branch (34:9): [True: 50, False: 10.1k]
  ------------------
   35|     50|            ht = HASH_AlgSHA512;
   36|     50|            break;
   37|      0|        case SEC_OID_SHA3_224:
  ------------------
  |  Branch (37:9): [True: 0, False: 10.1k]
  ------------------
   38|      0|            ht = HASH_AlgSHA3_224;
   39|      0|            break;
   40|      0|        case SEC_OID_SHA3_256:
  ------------------
  |  Branch (40:9): [True: 0, False: 10.1k]
  ------------------
   41|      0|            ht = HASH_AlgSHA3_256;
   42|      0|            break;
   43|      0|        case SEC_OID_SHA3_384:
  ------------------
  |  Branch (43:9): [True: 0, False: 10.1k]
  ------------------
   44|      0|            ht = HASH_AlgSHA3_384;
   45|      0|            break;
   46|      0|        case SEC_OID_SHA3_512:
  ------------------
  |  Branch (46:9): [True: 0, False: 10.1k]
  ------------------
   47|      0|            ht = HASH_AlgSHA3_512;
   48|      0|            break;
   49|      0|        default:
  ------------------
  |  Branch (49:9): [True: 0, False: 10.1k]
  ------------------
   50|      0|            PORT_SetError(SEC_ERROR_INVALID_ALGORITHM);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   51|      0|            break;
   52|  10.1k|    }
   53|  10.1k|    return ht;
   54|  10.1k|}

NSSRWLock_New_Util:
   74|     12|{
   75|     12|    NSSRWLock *rwlock;
   76|       |
   77|     12|    rwlock = PR_NEWZAP(NSSRWLock);
  ------------------
  |  |   99|     12|#define PR_NEWZAP(_struct) ((_struct*)PR_Calloc(1, sizeof(_struct)))
  ------------------
   78|     12|    if (rwlock == NULL)
  ------------------
  |  Branch (78:9): [True: 0, False: 12]
  ------------------
   79|      0|        return NULL;
   80|       |
   81|     12|    rwlock->rw_lock = PZ_NewLock(nssILockRWLock);
  ------------------
  |  |  243|     12|#define PZ_NewLock(t) PR_NewLock()
  ------------------
   82|     12|    if (rwlock->rw_lock == NULL) {
  ------------------
  |  Branch (82:9): [True: 0, False: 12]
  ------------------
   83|      0|        goto loser;
   84|      0|    }
   85|     12|    rwlock->rw_reader_waitq = PZ_NewCondVar(rwlock->rw_lock);
  ------------------
  |  |  248|     12|#define PZ_NewCondVar(l) PR_NewCondVar((l))
  ------------------
   86|     12|    if (rwlock->rw_reader_waitq == NULL) {
  ------------------
  |  Branch (86:9): [True: 0, False: 12]
  ------------------
   87|      0|        goto loser;
   88|      0|    }
   89|     12|    rwlock->rw_writer_waitq = PZ_NewCondVar(rwlock->rw_lock);
  ------------------
  |  |  248|     12|#define PZ_NewCondVar(l) PR_NewCondVar((l))
  ------------------
   90|     12|    if (rwlock->rw_writer_waitq == NULL) {
  ------------------
  |  Branch (90:9): [True: 0, False: 12]
  ------------------
   91|      0|        goto loser;
   92|      0|    }
   93|     12|    if (lock_name != NULL) {
  ------------------
  |  Branch (93:9): [True: 3, False: 9]
  ------------------
   94|      3|        rwlock->rw_name = (char *)PR_Malloc((PRUint32)strlen(lock_name) + 1);
   95|      3|        if (rwlock->rw_name == NULL) {
  ------------------
  |  Branch (95:13): [True: 0, False: 3]
  ------------------
   96|      0|            goto loser;
   97|      0|        }
   98|      3|        strcpy(rwlock->rw_name, lock_name);
   99|      9|    } else {
  100|      9|        rwlock->rw_name = NULL;
  101|      9|    }
  102|     12|    rwlock->rw_rank = lock_rank;
  103|     12|    rwlock->rw_waiting_readers = 0;
  104|     12|    rwlock->rw_waiting_writers = 0;
  105|     12|    rwlock->rw_reader_locks = 0;
  106|     12|    rwlock->rw_writer_locks = 0;
  107|       |
  108|     12|    return rwlock;
  109|       |
  110|      0|loser:
  111|      0|    NSSRWLock_Destroy(rwlock);
  ------------------
  |  |   45|      0|#define NSSRWLock_Destroy NSSRWLock_Destroy_Util
  ------------------
  112|      0|    return (NULL);
  113|     12|}
NSSRWLock_Destroy_Util:
  120|     12|{
  121|     12|    PR_ASSERT(rwlock != NULL);
  ------------------
  |  |  208|     12|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 12, False: 0]
  |  |  ------------------
  ------------------
  122|     12|    PR_ASSERT(rwlock->rw_waiting_readers == 0);
  ------------------
  |  |  208|     12|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 12, False: 0]
  |  |  ------------------
  ------------------
  123|     12|    PR_ASSERT(rwlock->rw_writer_locks == 0);
  ------------------
  |  |  208|     12|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 12, False: 0]
  |  |  ------------------
  ------------------
  124|     12|    PR_ASSERT(rwlock->rw_reader_locks == 0);
  ------------------
  |  |  208|     12|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 12, False: 0]
  |  |  ------------------
  ------------------
  125|       |
  126|       |    /* XXX Shouldn't we lock the PZLock before destroying this?? */
  127|       |
  128|     12|    if (rwlock->rw_name)
  ------------------
  |  Branch (128:9): [True: 3, False: 9]
  ------------------
  129|      3|        PR_Free(rwlock->rw_name);
  130|     12|    if (rwlock->rw_reader_waitq)
  ------------------
  |  Branch (130:9): [True: 12, False: 0]
  ------------------
  131|     12|        PZ_DestroyCondVar(rwlock->rw_reader_waitq);
  ------------------
  |  |  249|     12|#define PZ_DestroyCondVar(v) PR_DestroyCondVar((v))
  ------------------
  132|     12|    if (rwlock->rw_writer_waitq)
  ------------------
  |  Branch (132:9): [True: 12, False: 0]
  ------------------
  133|     12|        PZ_DestroyCondVar(rwlock->rw_writer_waitq);
  ------------------
  |  |  249|     12|#define PZ_DestroyCondVar(v) PR_DestroyCondVar((v))
  ------------------
  134|     12|    if (rwlock->rw_lock)
  ------------------
  |  Branch (134:9): [True: 12, False: 0]
  ------------------
  135|     12|        PZ_DestroyLock(rwlock->rw_lock);
  ------------------
  |  |  244|     12|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  136|     12|    PR_DELETE(rwlock);
  ------------------
  |  |  110|     12|#define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
  ------------------
  137|     12|}
NSSRWLock_LockRead_Util:
  144|  53.8k|{
  145|  53.8k|    PRThread *me = PR_GetCurrentThread();
  146|       |
  147|  53.8k|    PZ_Lock(rwlock->rw_lock);
  ------------------
  |  |  245|  53.8k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  148|       |#ifdef NSS_RWLOCK_RANK_ORDER_DEBUG
  149|       |
  150|       |    /*
  151|       |     * assert that rank ordering is not violated; the rank of 'rwlock' should
  152|       |     * be equal to or greater than the highest rank of all the locks held by
  153|       |     * the thread.
  154|       |     */
  155|       |    PR_ASSERT((rwlock->rw_rank == NSS_RWLOCK_RANK_NONE) ||
  156|       |              (rwlock->rw_rank >= nssRWLock_GetThreadRank(me)));
  157|       |#endif
  158|       |    /*
  159|       |     * wait if write-locked or if a writer is waiting; preference for writers
  160|       |     */
  161|  53.8k|    UNTIL((rwlock->rw_owner == me) ||    /* I own it, or        */
  ------------------
  |  |   60|   215k|#define UNTIL(x) while (!(x))
  |  |  ------------------
  |  |  |  Branch (60:27): [True: 53.8k, False: 0]
  |  |  |  Branch (60:27): [True: 53.8k, False: 0]
  |  |  |  Branch (60:27): [True: 0, False: 53.8k]
  |  |  ------------------
  ------------------
  162|  53.8k|          ((rwlock->rw_owner == NULL) && /* no-one owns it, and */
  163|  53.8k|           (rwlock->rw_waiting_writers == 0)))
  164|      0|    { /* no-one is waiting to own */
  165|       |
  166|      0|        rwlock->rw_waiting_readers++;
  167|      0|        PZ_WaitCondVar(rwlock->rw_reader_waitq, PR_INTERVAL_NO_TIMEOUT);
  ------------------
  |  |  250|      0|#define PZ_WaitCondVar(v, t) PR_WaitCondVar((v), (t))
  ------------------
  168|      0|        rwlock->rw_waiting_readers--;
  169|      0|    }
  170|  53.8k|    rwlock->rw_reader_locks++; /* Increment read-lock count */
  171|       |
  172|  53.8k|    PZ_Unlock(rwlock->rw_lock);
  ------------------
  |  |  246|  53.8k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  173|       |
  174|       |#ifdef NSS_RWLOCK_RANK_ORDER_DEBUG
  175|       |    nssRWLock_SetThreadRank(me, rwlock); /* update thread's lock rank */
  176|       |#endif
  177|  53.8k|}
NSSRWLock_UnlockRead_Util:
  183|  53.8k|{
  184|  53.8k|    PZ_Lock(rwlock->rw_lock);
  ------------------
  |  |  245|  53.8k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  185|       |
  186|  53.8k|    PR_ASSERT(rwlock->rw_reader_locks > 0); /* lock must be read locked */
  ------------------
  |  |  208|  53.8k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 53.8k, False: 0]
  |  |  ------------------
  ------------------
  187|       |
  188|  53.8k|    if ((rwlock->rw_reader_locks > 0) &&    /* caller isn't screwey */
  ------------------
  |  Branch (188:9): [True: 53.8k, False: 0]
  ------------------
  189|  53.8k|        (--rwlock->rw_reader_locks == 0) && /* not read locked any more */
  ------------------
  |  Branch (189:9): [True: 53.8k, False: 0]
  ------------------
  190|  53.8k|        (rwlock->rw_owner == NULL) &&       /* not write locked */
  ------------------
  |  Branch (190:9): [True: 53.8k, False: 0]
  ------------------
  191|  53.8k|        (rwlock->rw_waiting_writers > 0)) { /* someone's waiting. */
  ------------------
  |  Branch (191:9): [True: 0, False: 53.8k]
  ------------------
  192|       |
  193|      0|        PZ_NotifyCondVar(rwlock->rw_writer_waitq); /* wake him up. */
  ------------------
  |  |  251|      0|#define PZ_NotifyCondVar(v) PR_NotifyCondVar((v))
  ------------------
  194|      0|    }
  195|       |
  196|  53.8k|    PZ_Unlock(rwlock->rw_lock);
  ------------------
  |  |  246|  53.8k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  197|       |
  198|       |#ifdef NSS_RWLOCK_RANK_ORDER_DEBUG
  199|       |    /*
  200|       |     * update thread's lock rank
  201|       |     */
  202|       |    nssRWLock_UnsetThreadRank(me, rwlock);
  203|       |#endif
  204|  53.8k|    return;
  205|  53.8k|}
NSSRWLock_LockWrite_Util:
  212|     33|{
  213|     33|    PRThread *me = PR_GetCurrentThread();
  214|       |
  215|     33|    PZ_Lock(rwlock->rw_lock);
  ------------------
  |  |  245|     33|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  216|       |#ifdef NSS_RWLOCK_RANK_ORDER_DEBUG
  217|       |    /*
  218|       |     * assert that rank ordering is not violated; the rank of 'rwlock' should
  219|       |     * be equal to or greater than the highest rank of all the locks held by
  220|       |     * the thread.
  221|       |     */
  222|       |    PR_ASSERT((rwlock->rw_rank == NSS_RWLOCK_RANK_NONE) ||
  223|       |              (rwlock->rw_rank >= nssRWLock_GetThreadRank(me)));
  224|       |#endif
  225|       |    /*
  226|       |     * wait if read locked or write locked.
  227|       |     */
  228|     33|    PR_ASSERT(rwlock->rw_reader_locks >= 0);
  ------------------
  |  |  208|     33|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 33, False: 0]
  |  |  ------------------
  ------------------
  229|     33|    PR_ASSERT(me != NULL);
  ------------------
  |  |  208|     33|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 33, False: 0]
  |  |  ------------------
  ------------------
  230|       |
  231|     33|    UNTIL((rwlock->rw_owner == me) ||    /* I own write lock, or */
  ------------------
  |  |   60|     72|#define UNTIL(x) while (!(x))
  |  |  ------------------
  |  |  |  Branch (60:27): [True: 13, False: 0]
  |  |  |  Branch (60:27): [True: 13, False: 0]
  |  |  |  Branch (60:27): [True: 20, False: 13]
  |  |  ------------------
  ------------------
  232|     33|          ((rwlock->rw_owner == NULL) && /* no writer   and */
  233|     33|           (rwlock->rw_reader_locks == 0)))
  234|      0|    { /* no readers, either. */
  235|       |
  236|      0|        rwlock->rw_waiting_writers++;
  237|      0|        PZ_WaitCondVar(rwlock->rw_writer_waitq, PR_INTERVAL_NO_TIMEOUT);
  ------------------
  |  |  250|      0|#define PZ_WaitCondVar(v, t) PR_WaitCondVar((v), (t))
  ------------------
  238|      0|        rwlock->rw_waiting_writers--;
  239|      0|        PR_ASSERT(rwlock->rw_reader_locks >= 0);
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  240|      0|    }
  241|       |
  242|     33|    PR_ASSERT(rwlock->rw_reader_locks == 0);
  ------------------
  |  |  208|     33|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 33, False: 0]
  |  |  ------------------
  ------------------
  243|       |    /*
  244|       |     * apply write lock
  245|       |     */
  246|     33|    rwlock->rw_owner = me;
  247|     33|    rwlock->rw_writer_locks++; /* Increment write-lock count */
  248|       |
  249|     33|    PZ_Unlock(rwlock->rw_lock);
  ------------------
  |  |  246|     33|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  250|       |
  251|       |#ifdef NSS_RWLOCK_RANK_ORDER_DEBUG
  252|       |    /*
  253|       |     * update thread's lock rank
  254|       |     */
  255|       |    nssRWLock_SetThreadRank(me, rwlock);
  256|       |#endif
  257|     33|}
NSSRWLock_UnlockWrite_Util:
  263|     33|{
  264|     33|    PRThread *me = PR_GetCurrentThread();
  265|       |
  266|     33|    PZ_Lock(rwlock->rw_lock);
  ------------------
  |  |  245|     33|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  267|     33|    PR_ASSERT(rwlock->rw_owner == me);      /* lock must be write-locked by me.  */
  ------------------
  |  |  208|     33|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 33, False: 0]
  |  |  ------------------
  ------------------
  268|     33|    PR_ASSERT(rwlock->rw_writer_locks > 0); /* lock must be write locked */
  ------------------
  |  |  208|     33|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 33, False: 0]
  |  |  ------------------
  ------------------
  269|       |
  270|     33|    if (rwlock->rw_owner == me &&         /* I own it, and            */
  ------------------
  |  Branch (270:9): [True: 33, False: 0]
  ------------------
  271|     33|        rwlock->rw_writer_locks > 0 &&    /* I own it, and            */
  ------------------
  |  Branch (271:9): [True: 33, False: 0]
  ------------------
  272|     33|        --rwlock->rw_writer_locks == 0) { /* I'm all done with it     */
  ------------------
  |  Branch (272:9): [True: 13, False: 20]
  ------------------
  273|       |
  274|     13|        rwlock->rw_owner = NULL; /* I don't own it any more. */
  275|       |
  276|       |        /* Give preference to waiting writers. */
  277|     13|        if (rwlock->rw_waiting_writers > 0) {
  ------------------
  |  Branch (277:13): [True: 0, False: 13]
  ------------------
  278|      0|            if (rwlock->rw_reader_locks == 0)
  ------------------
  |  Branch (278:17): [True: 0, False: 0]
  ------------------
  279|      0|                PZ_NotifyCondVar(rwlock->rw_writer_waitq);
  ------------------
  |  |  251|      0|#define PZ_NotifyCondVar(v) PR_NotifyCondVar((v))
  ------------------
  280|     13|        } else if (rwlock->rw_waiting_readers > 0) {
  ------------------
  |  Branch (280:20): [True: 0, False: 13]
  ------------------
  281|      0|            PZ_NotifyAllCondVar(rwlock->rw_reader_waitq);
  ------------------
  |  |  252|      0|#define PZ_NotifyAllCondVar(v) PR_NotifyAllCondVar((v))
  ------------------
  282|      0|        }
  283|     13|    }
  284|     33|    PZ_Unlock(rwlock->rw_lock);
  ------------------
  |  |  246|     33|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  285|       |
  286|       |#ifdef NSS_RWLOCK_RANK_ORDER_DEBUG
  287|       |    /*
  288|       |     * update thread's lock rank
  289|       |     */
  290|       |    nssRWLock_UnsetThreadRank(me, rwlock);
  291|       |#endif
  292|     33|    return;
  293|     33|}

_SGN_VerifyPKCS1DigestInfo:
   95|    115|{
   96|    115|    SECOidData *hashOid;
   97|    115|    pkcs1Prefix prefix;
   98|    115|    SECStatus rv;
   99|       |
  100|    115|    if (!digest || !digest->data ||
  ------------------
  |  Branch (100:9): [True: 0, False: 115]
  |  Branch (100:20): [True: 0, False: 115]
  ------------------
  101|    115|        !dataRecoveredFromSignature || !dataRecoveredFromSignature->data) {
  ------------------
  |  Branch (101:9): [True: 0, False: 115]
  |  Branch (101:40): [True: 0, False: 115]
  ------------------
  102|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  103|      0|        return SECFailure;
  104|      0|    }
  105|       |
  106|    115|    hashOid = SECOID_FindOIDByTag(digestAlg);
  ------------------
  |  |  116|    115|#define SECOID_FindOIDByTag SECOID_FindOIDByTag_Util
  ------------------
  107|    115|    if (hashOid == NULL) {
  ------------------
  |  Branch (107:9): [True: 0, False: 115]
  ------------------
  108|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  109|      0|        return SECFailure;
  110|      0|    }
  111|       |
  112|    115|    prefix.data = NULL;
  113|       |
  114|    115|    rv = encodePrefix(hashOid, digest->len, &prefix, PR_TRUE);
  ------------------
  |  |  437|    115|#define PR_TRUE 1
  ------------------
  115|       |
  116|    115|    if (rv == SECSuccess) {
  ------------------
  |  Branch (116:9): [True: 115, False: 0]
  ------------------
  117|       |        /* We don't attempt to avoid timing attacks on these comparisons because
  118|       |         * signature verification is a public key operation, not a private key
  119|       |         * operation.
  120|       |         */
  121|       |
  122|    115|        if (dataRecoveredFromSignature->len != prefix.len + digest->len) {
  ------------------
  |  Branch (122:13): [True: 3, False: 112]
  ------------------
  123|      3|            PRBool lengthMismatch = PR_TRUE;
  ------------------
  |  |  437|      3|#define PR_TRUE 1
  ------------------
  124|       |#ifdef NSS_PKCS1_AllowMissingParameters
  125|       |            if (unsafeAllowMissingParameters) {
  126|       |                if (prefix.data) {
  127|       |                    PORT_Free(prefix.data);
  128|       |                    prefix.data = NULL;
  129|       |                }
  130|       |                rv = encodePrefix(hashOid, digest->len, &prefix, PR_FALSE);
  131|       |                if (rv != SECSuccess ||
  132|       |                    dataRecoveredFromSignature->len == prefix.len + digest->len) {
  133|       |                    lengthMismatch = PR_FALSE;
  134|       |                }
  135|       |            }
  136|       |#endif
  137|      3|            if (lengthMismatch) {
  ------------------
  |  Branch (137:17): [True: 3, False: 0]
  ------------------
  138|      3|                PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|      3|#define PORT_SetError PORT_SetError_Util
  ------------------
  139|      3|                rv = SECFailure;
  140|      3|            }
  141|      3|        }
  142|    115|    }
  143|       |
  144|    115|    if (rv == SECSuccess) {
  ------------------
  |  Branch (144:9): [True: 112, False: 3]
  ------------------
  145|    112|        if (memcmp(dataRecoveredFromSignature->data, prefix.data, prefix.len) ||
  ------------------
  |  Branch (145:13): [True: 0, False: 112]
  ------------------
  146|    112|            memcmp(dataRecoveredFromSignature->data + prefix.len, digest->data,
  ------------------
  |  Branch (146:13): [True: 19, False: 93]
  ------------------
  147|    112|                   digest->len)) {
  148|     19|            PORT_SetError(SEC_ERROR_BAD_SIGNATURE);
  ------------------
  |  |   65|     19|#define PORT_SetError PORT_SetError_Util
  ------------------
  149|     19|            rv = SECFailure;
  150|     19|        }
  151|    112|    }
  152|       |
  153|    115|    if (prefix.data) {
  ------------------
  |  Branch (153:9): [True: 115, False: 0]
  ------------------
  154|    115|        PORT_Free(prefix.data);
  ------------------
  |  |   60|    115|#define PORT_Free PORT_Free_Util
  ------------------
  155|    115|    }
  156|       |
  157|    115|    return rv;
  158|    115|}
pkcs1sig.c:encodePrefix:
   26|    115|{
   27|       |    /* with params coding is:
   28|       |     *  Sequence (2 bytes) {
   29|       |     *      Sequence (2 bytes) {
   30|       |     *               Oid (2 bytes)  {
   31|       |     *                   Oid value (derOid->oid.len)
   32|       |     *               }
   33|       |     *               NULL (2 bytes)
   34|       |     *      }
   35|       |     *      OCTECT (2 bytes);
   36|       |     *
   37|       |     * without params coding is:
   38|       |     *  Sequence (2 bytes) {
   39|       |     *      Sequence (2 bytes) {
   40|       |     *               Oid (2 bytes)  {
   41|       |     *                   Oid value (derOid->oid.len)
   42|       |     *               }
   43|       |     *      }
   44|       |     *      OCTECT (2 bytes);
   45|       |     */
   46|       |
   47|    115|    unsigned int innerSeqLen = 2 + hashOid->oid.len;
   48|    115|    unsigned int outerSeqLen = 2 + innerSeqLen + 2 + digestLen;
   49|    115|    unsigned int extra = 0;
   50|       |
   51|    115|    if (withParams) {
  ------------------
  |  Branch (51:9): [True: 115, False: 0]
  ------------------
   52|    115|        innerSeqLen += 2;
   53|    115|        outerSeqLen += 2;
   54|    115|        extra = 2;
   55|    115|    }
   56|       |
   57|    115|    if (innerSeqLen >= 128 ||
  ------------------
  |  Branch (57:9): [True: 0, False: 115]
  ------------------
   58|    115|        outerSeqLen >= 128 ||
  ------------------
  |  Branch (58:9): [True: 0, False: 115]
  ------------------
   59|    115|        (outerSeqLen + 2 - digestLen) >
  ------------------
  |  Branch (59:9): [True: 0, False: 115]
  ------------------
   60|    115|            (MAX_PREFIX_LEN_EXCLUDING_OID + hashOid->oid.len)) {
  ------------------
  |  |   21|    115|#define MAX_PREFIX_LEN_EXCLUDING_OID 10
  ------------------
   61|       |        /* this is actually a library failure, It shouldn't happen */
   62|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   63|      0|        return SECFailure;
   64|      0|    }
   65|       |
   66|    115|    prefix->len = 6 + hashOid->oid.len + extra + 2;
   67|    115|    prefix->data = PORT_Alloc(prefix->len);
  ------------------
  |  |   52|    115|#define PORT_Alloc PORT_Alloc_Util
  ------------------
   68|    115|    if (!prefix->data) {
  ------------------
  |  Branch (68:9): [True: 0, False: 115]
  ------------------
   69|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   70|      0|        return SECFailure;
   71|      0|    }
   72|       |
   73|    115|    prefix->data[0] = SEC_ASN1_SEQUENCE | SEC_ASN1_CONSTRUCTED;
  ------------------
  |  |   92|    115|#define SEC_ASN1_SEQUENCE 0x10
  ------------------
                  prefix->data[0] = SEC_ASN1_SEQUENCE | SEC_ASN1_CONSTRUCTED;
  ------------------
  |  |  117|    115|#define SEC_ASN1_CONSTRUCTED 0x20
  ------------------
   74|    115|    prefix->data[1] = outerSeqLen;
   75|    115|    prefix->data[2] = SEC_ASN1_SEQUENCE | SEC_ASN1_CONSTRUCTED;
  ------------------
  |  |   92|    115|#define SEC_ASN1_SEQUENCE 0x10
  ------------------
                  prefix->data[2] = SEC_ASN1_SEQUENCE | SEC_ASN1_CONSTRUCTED;
  ------------------
  |  |  117|    115|#define SEC_ASN1_CONSTRUCTED 0x20
  ------------------
   76|    115|    prefix->data[3] = innerSeqLen;
   77|    115|    prefix->data[4] = SEC_ASN1_OBJECT_ID;
  ------------------
  |  |   82|    115|#define SEC_ASN1_OBJECT_ID 0x06
  ------------------
   78|    115|    prefix->data[5] = hashOid->oid.len;
   79|    115|    PORT_Memcpy(&prefix->data[6], hashOid->oid.data, hashOid->oid.len);
  ------------------
  |  |  180|    115|#define PORT_Memcpy memcpy
  ------------------
   80|    115|    if (withParams) {
  ------------------
  |  Branch (80:9): [True: 115, False: 0]
  ------------------
   81|    115|        prefix->data[6 + hashOid->oid.len] = SEC_ASN1_NULL;
  ------------------
  |  |   81|    115|#define SEC_ASN1_NULL 0x05
  ------------------
   82|    115|        prefix->data[6 + hashOid->oid.len + 1] = 0;
   83|    115|    }
   84|    115|    prefix->data[6 + hashOid->oid.len + extra] = SEC_ASN1_OCTET_STRING;
  ------------------
  |  |   80|    115|#define SEC_ASN1_OCTET_STRING 0x04
  ------------------
   85|    115|    prefix->data[6 + hashOid->oid.len + extra + 1] = digestLen;
   86|       |
   87|    115|    return SECSuccess;
   88|    115|}

SEC_QuickDERDecodeItem_Util:
  818|   120k|{
  819|   120k|    SECStatus rv = SECSuccess;
  820|   120k|    SECItem newsrc;
  821|       |
  822|   120k|    if (!arena || !templateEntry || !src) {
  ------------------
  |  Branch (822:9): [True: 0, False: 120k]
  |  Branch (822:19): [True: 0, False: 120k]
  |  Branch (822:37): [True: 8, False: 120k]
  ------------------
  823|      8|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      8|#define PORT_SetError PORT_SetError_Util
  ------------------
  824|      8|        rv = SECFailure;
  825|      8|    }
  826|       |
  827|   120k|    if (SECSuccess == rv) {
  ------------------
  |  Branch (827:9): [True: 120k, False: 8]
  ------------------
  828|   120k|        newsrc = *src;
  829|   120k|        rv = DecodeItem(dest, templateEntry, &newsrc, arena, PR_TRUE);
  ------------------
  |  |  437|   120k|#define PR_TRUE 1
  ------------------
  830|   120k|        if (SECSuccess == rv && newsrc.len) {
  ------------------
  |  Branch (830:13): [True: 112k, False: 8.16k]
  |  Branch (830:33): [True: 30, False: 112k]
  ------------------
  831|     30|            rv = SECFailure;
  832|     30|            PORT_SetError(SEC_ERROR_EXTRA_INPUT);
  ------------------
  |  |   65|     30|#define PORT_SetError PORT_SetError_Util
  ------------------
  833|     30|        }
  834|   120k|    }
  835|       |
  836|   120k|    return rv;
  837|   120k|}
quickder.c:DecodeItem:
  592|   828k|{
  593|   828k|    SECStatus rv = SECSuccess;
  594|   828k|    SECItem temp;
  595|   828k|    SECItem mark = { siBuffer, NULL, 0 };
  596|   828k|    PRBool pop = PR_FALSE;
  ------------------
  |  |  438|   828k|#define PR_FALSE 0
  ------------------
  597|   828k|    PRBool decode = PR_TRUE;
  ------------------
  |  |  437|   828k|#define PR_TRUE 1
  ------------------
  598|   828k|    PRBool save = PR_FALSE;
  ------------------
  |  |  438|   828k|#define PR_FALSE 0
  ------------------
  599|   828k|    unsigned long kind;
  600|   828k|    PRBool match = PR_TRUE;
  ------------------
  |  |  437|   828k|#define PR_TRUE 1
  ------------------
  601|       |
  602|   828k|    PR_ASSERT(src && dest && templateEntry && arena);
  ------------------
  |  |  208|  4.97M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:7): [True: 828k, False: 0]
  |  |  |  Branch (208:7): [True: 828k, False: 0]
  |  |  |  Branch (208:7): [True: 828k, False: 0]
  |  |  |  Branch (208:7): [True: 828k, False: 0]
  |  |  ------------------
  ------------------
  603|       |#if 0
  604|       |    if (!src || !dest || !templateEntry || !arena)
  605|       |    {
  606|       |        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  607|       |        rv = SECFailure;
  608|       |    }
  609|       |#endif
  610|       |
  611|   828k|    if (SECSuccess == rv) {
  ------------------
  |  Branch (611:9): [True: 828k, False: 0]
  ------------------
  612|       |        /* do the template validation */
  613|   828k|        kind = templateEntry->kind;
  614|   828k|        if (!kind) {
  ------------------
  |  Branch (614:13): [True: 0, False: 828k]
  ------------------
  615|      0|            PORT_SetError(SEC_ERROR_BAD_TEMPLATE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  616|      0|            rv = SECFailure;
  617|      0|        }
  618|   828k|    }
  619|       |
  620|   828k|    if (SECSuccess == rv) {
  ------------------
  |  Branch (620:9): [True: 828k, False: 0]
  ------------------
  621|   828k|#ifdef DEBUG
  622|   828k|        if (kind & SEC_ASN1_DEBUG_BREAK) {
  ------------------
  |  |  160|   828k|#define SEC_ASN1_DEBUG_BREAK 0X400000 /* put this in your template and the \
  ------------------
  |  Branch (622:13): [True: 0, False: 828k]
  ------------------
  623|       |            /* when debugging the decoder or a template that fails to
  624|       |            decode, put SEC_ASN1_DEBUG in the component that gives you
  625|       |            trouble. The decoder will then get to this block and assert.
  626|       |            If you want to debug the rest of the code, you can set a
  627|       |            breakpoint and set dontassert to PR_TRUE, which will let
  628|       |            you skip over the assert and continue the debugging session
  629|       |            past it. */
  630|      0|            PRBool dontassert = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  631|      0|            PR_ASSERT(dontassert); /* set bkpoint here & set dontassert*/
  ------------------
  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  632|      0|        }
  633|   828k|#endif
  634|       |
  635|   828k|        if ((kind & SEC_ASN1_SKIP) ||
  ------------------
  |  |  140|   828k|#define SEC_ASN1_SKIP 0x08000         /* skip a field; only for decoding */
  ------------------
  |  Branch (635:13): [True: 51.8k, False: 776k]
  ------------------
  636|   828k|            (kind & SEC_ASN1_SAVE)) {
  ------------------
  |  |  144|   776k|#define SEC_ASN1_SAVE 0x20000         /* stash away the encoded bytes first; \
  ------------------
  |  Branch (636:13): [True: 23.4k, False: 753k]
  ------------------
  637|       |            /* if skipping or saving this component, don't decode it */
  638|  75.2k|            decode = PR_FALSE;
  ------------------
  |  |  438|  75.2k|#define PR_FALSE 0
  ------------------
  639|  75.2k|        }
  640|       |
  641|   828k|        if (kind & (SEC_ASN1_SAVE | SEC_ASN1_OPTIONAL)) {
  ------------------
  |  |  144|   828k|#define SEC_ASN1_SAVE 0x20000         /* stash away the encoded bytes first; \
  ------------------
                      if (kind & (SEC_ASN1_SAVE | SEC_ASN1_OPTIONAL)) {
  ------------------
  |  |  131|   828k|#define SEC_ASN1_OPTIONAL 0x00100
  ------------------
  |  Branch (641:13): [True: 141k, False: 687k]
  ------------------
  642|       |            /* if saving this component, or if it is optional, we may not want to
  643|       |               move past it, so save the position in case we have to rewind */
  644|   141k|            mark = *src;
  645|   141k|            if (kind & SEC_ASN1_SAVE) {
  ------------------
  |  |  144|   141k|#define SEC_ASN1_SAVE 0x20000         /* stash away the encoded bytes first; \
  ------------------
  |  Branch (645:17): [True: 23.4k, False: 117k]
  ------------------
  646|  23.4k|                save = PR_TRUE;
  ------------------
  |  |  437|  23.4k|#define PR_TRUE 1
  ------------------
  647|  23.4k|                if (0 == (kind & SEC_ASN1_SKIP)) {
  ------------------
  |  |  140|  23.4k|#define SEC_ASN1_SKIP 0x08000         /* skip a field; only for decoding */
  ------------------
  |  Branch (647:21): [True: 23.4k, False: 0]
  ------------------
  648|       |                    /* we will for sure have to rewind when saving this
  649|       |                       component and not skipping it. This is true for all
  650|       |                       legacy uses of SEC_ASN1_SAVE where the following entry
  651|       |                       in the template would causes the same component to be
  652|       |                       processed again */
  653|  23.4k|                    pop = PR_TRUE;
  ------------------
  |  |  437|  23.4k|#define PR_TRUE 1
  ------------------
  654|  23.4k|                }
  655|  23.4k|            }
  656|   141k|        }
  657|       |
  658|   828k|        rv = GetItem(src, &temp, PR_TRUE);
  ------------------
  |  |  437|   828k|#define PR_TRUE 1
  ------------------
  659|   828k|    }
  660|       |
  661|   828k|    if (SECSuccess == rv) {
  ------------------
  |  Branch (661:9): [True: 826k, False: 1.71k]
  ------------------
  662|       |        /* now check if the component matches what we expect in the template */
  663|       |
  664|   826k|        if (PR_TRUE == checkTag)
  ------------------
  |  |  437|   826k|#define PR_TRUE 1
  ------------------
  |  Branch (664:13): [True: 813k, False: 13.8k]
  ------------------
  665|       |
  666|   813k|        {
  667|   813k|            rv = MatchComponentType(templateEntry, &temp, &match, dest);
  668|   813k|        }
  669|       |
  670|   826k|        if ((SECSuccess == rv) && (PR_TRUE != match)) {
  ------------------
  |  |  437|   826k|#define PR_TRUE 1
  ------------------
  |  Branch (670:13): [True: 826k, False: 0]
  |  Branch (670:35): [True: 53.5k, False: 773k]
  ------------------
  671|  53.5k|            if (kind & SEC_ASN1_OPTIONAL) {
  ------------------
  |  |  131|  53.5k|#define SEC_ASN1_OPTIONAL 0x00100
  ------------------
  |  Branch (671:17): [True: 47.3k, False: 6.19k]
  ------------------
  672|       |
  673|       |                /* the optional component is missing. This is not fatal. */
  674|       |                /* Rewind, don't decode, and don't save */
  675|  47.3k|                pop = PR_TRUE;
  ------------------
  |  |  437|  47.3k|#define PR_TRUE 1
  ------------------
  676|  47.3k|                decode = PR_FALSE;
  ------------------
  |  |  438|  47.3k|#define PR_FALSE 0
  ------------------
  677|  47.3k|                save = PR_FALSE;
  ------------------
  |  |  438|  47.3k|#define PR_FALSE 0
  ------------------
  678|  47.3k|            } else {
  679|       |                /* a required component is missing. abort */
  680|  6.19k|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|  6.19k|#define PORT_SetError PORT_SetError_Util
  ------------------
  681|  6.19k|                rv = SECFailure;
  682|  6.19k|            }
  683|  53.5k|        }
  684|   826k|    }
  685|       |
  686|   828k|    if ((SECSuccess == rv) && (PR_TRUE == decode)) {
  ------------------
  |  |  437|   820k|#define PR_TRUE 1
  ------------------
  |  Branch (686:9): [True: 820k, False: 7.91k]
  |  Branch (686:31): [True: 698k, False: 122k]
  ------------------
  687|       |        /* the order of processing here is is the tricky part */
  688|       |        /* we start with our special cases */
  689|       |        /* first, check the component class */
  690|   698k|        if (kind & SEC_ASN1_INLINE) {
  ------------------
  |  |  134|   698k|#define SEC_ASN1_INLINE 0x00800
  ------------------
  |  Branch (690:13): [True: 87.2k, False: 610k]
  ------------------
  691|       |            /* decode inline template */
  692|  87.2k|            rv = DecodeInline(dest, templateEntry, &temp, arena, PR_TRUE);
  ------------------
  |  |  437|  87.2k|#define PR_TRUE 1
  ------------------
  693|  87.2k|        }
  694|       |
  695|   610k|        else if (kind & SEC_ASN1_EXPLICIT) {
  ------------------
  |  |  132|   610k|#define SEC_ASN1_EXPLICIT 0x00200
  ------------------
  |  Branch (695:18): [True: 41.1k, False: 569k]
  ------------------
  696|  41.1k|            rv = DecodeExplicit(dest, templateEntry, &temp, arena);
  697|   569k|        } else if ((SEC_ASN1_UNIVERSAL != (kind & SEC_ASN1_CLASS_MASK)) &&
  ------------------
  |  |  120|   569k|#define SEC_ASN1_UNIVERSAL 0x00
  ------------------
                      } else if ((SEC_ASN1_UNIVERSAL != (kind & SEC_ASN1_CLASS_MASK)) &&
  ------------------
  |  |  119|   569k|#define SEC_ASN1_CLASS_MASK 0xc0
  ------------------
  |  Branch (697:20): [True: 13.8k, False: 555k]
  ------------------
  698|       |
  699|   569k|                   (!(kind & SEC_ASN1_EXPLICIT))) {
  ------------------
  |  |  132|  13.8k|#define SEC_ASN1_EXPLICIT 0x00200
  ------------------
  |  Branch (699:20): [True: 13.8k, False: 0]
  ------------------
  700|       |
  701|       |            /* decode implicitly tagged components */
  702|  13.8k|            rv = DecodeImplicit(dest, templateEntry, &temp, arena);
  703|   555k|        } else if (kind & SEC_ASN1_POINTER) {
  ------------------
  |  |  135|   555k|#define SEC_ASN1_POINTER 0x01000
  ------------------
  |  Branch (703:20): [True: 465, False: 555k]
  ------------------
  704|    465|            rv = DecodePointer(dest, templateEntry, &temp, arena, PR_TRUE);
  ------------------
  |  |  437|    465|#define PR_TRUE 1
  ------------------
  705|   555k|        } else if (kind & SEC_ASN1_CHOICE) {
  ------------------
  |  |  153|   555k|#define SEC_ASN1_CHOICE 0x100000      /* pick one from a template */
  ------------------
  |  Branch (705:20): [True: 11.6k, False: 543k]
  ------------------
  706|  11.6k|            rv = DecodeChoice(dest, templateEntry, &temp, arena);
  707|   543k|        } else if (kind & SEC_ASN1_ANY) {
  ------------------
  |  |  133|   543k|#define SEC_ASN1_ANY 0x00400
  ------------------
  |  Branch (707:20): [True: 130k, False: 413k]
  ------------------
  708|       |            /* catch-all ANY type, don't decode */
  709|   130k|            save = PR_TRUE;
  ------------------
  |  |  437|   130k|#define PR_TRUE 1
  ------------------
  710|   130k|            if (kind & SEC_ASN1_INNER) {
  ------------------
  |  |  141|   130k|#define SEC_ASN1_INNER 0x10000        /* with ANY means capture the      \
  ------------------
  |  Branch (710:17): [True: 0, False: 130k]
  ------------------
  711|       |                /* skip the tag and length */
  712|      0|                SECItem newtemp = temp;
  713|      0|                rv = GetItem(&newtemp, &temp, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  714|      0|            }
  715|   413k|        } else if (kind & SEC_ASN1_GROUP) {
  ------------------
  |  |  136|   413k|#define SEC_ASN1_GROUP 0x02000        /* with SET or SEQUENCE means \
  ------------------
  |  Branch (715:20): [True: 38.0k, False: 374k]
  ------------------
  716|  38.0k|            if ((SEC_ASN1_SEQUENCE == (kind & SEC_ASN1_TAGNUM_MASK)) ||
  ------------------
  |  |   92|  38.0k|#define SEC_ASN1_SEQUENCE 0x10
  ------------------
                          if ((SEC_ASN1_SEQUENCE == (kind & SEC_ASN1_TAGNUM_MASK)) ||
  ------------------
  |  |   76|  38.0k|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  |  Branch (716:17): [True: 19.0k, False: 19.0k]
  ------------------
  717|  38.0k|                (SEC_ASN1_SET == (kind & SEC_ASN1_TAGNUM_MASK))) {
  ------------------
  |  |   93|  19.0k|#define SEC_ASN1_SET 0x11
  ------------------
                              (SEC_ASN1_SET == (kind & SEC_ASN1_TAGNUM_MASK))) {
  ------------------
  |  |   76|  19.0k|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  |  Branch (717:17): [True: 19.0k, False: 0]
  ------------------
  718|  38.0k|                rv = DecodeGroup(dest, templateEntry, &temp, arena);
  719|  38.0k|            } else {
  720|       |                /* a group can only be a SET OF or SEQUENCE OF */
  721|      0|                PORT_SetError(SEC_ERROR_BAD_TEMPLATE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  722|      0|                rv = SECFailure;
  723|      0|            }
  724|   374k|        } else if (SEC_ASN1_SEQUENCE == (kind & SEC_ASN1_TAGNUM_MASK)) {
  ------------------
  |  |   92|   374k|#define SEC_ASN1_SEQUENCE 0x10
  ------------------
                      } else if (SEC_ASN1_SEQUENCE == (kind & SEC_ASN1_TAGNUM_MASK)) {
  ------------------
  |  |   76|   374k|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  |  Branch (724:20): [True: 168k, False: 206k]
  ------------------
  725|       |            /* plain SEQUENCE */
  726|   168k|            rv = DecodeSequence(dest, templateEntry, &temp, arena);
  727|   206k|        } else {
  728|       |            /* handle all other types as "save" */
  729|       |            /* we should only get here for primitive universal types */
  730|   206k|            SECItem newtemp = temp;
  731|   206k|            rv = GetItem(&newtemp, &temp, PR_FALSE);
  ------------------
  |  |  438|   206k|#define PR_FALSE 0
  ------------------
  732|   206k|            save = PR_TRUE;
  ------------------
  |  |  437|   206k|#define PR_TRUE 1
  ------------------
  733|   206k|            if ((SECSuccess == rv) &&
  ------------------
  |  Branch (733:17): [True: 206k, False: 0]
  ------------------
  734|   206k|                SEC_ASN1_UNIVERSAL == (kind & SEC_ASN1_CLASS_MASK)) {
  ------------------
  |  |  120|   206k|#define SEC_ASN1_UNIVERSAL 0x00
  ------------------
                              SEC_ASN1_UNIVERSAL == (kind & SEC_ASN1_CLASS_MASK)) {
  ------------------
  |  |  119|   206k|#define SEC_ASN1_CLASS_MASK 0xc0
  ------------------
  |  Branch (734:17): [True: 206k, False: 0]
  ------------------
  735|   206k|                unsigned long tagnum = kind & SEC_ASN1_TAGNUM_MASK;
  ------------------
  |  |   76|   206k|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  736|   206k|                if (temp.len == 0 && (tagnum == SEC_ASN1_BOOLEAN ||
  ------------------
  |  |   77|    318|#define SEC_ASN1_BOOLEAN 0x01
  ------------------
  |  Branch (736:21): [True: 159, False: 206k]
  |  Branch (736:39): [True: 12, False: 147]
  ------------------
  737|    159|                                      tagnum == SEC_ASN1_INTEGER ||
  ------------------
  |  |   78|    306|#define SEC_ASN1_INTEGER 0x02
  ------------------
  |  Branch (737:39): [True: 19, False: 128]
  ------------------
  738|    159|                                      tagnum == SEC_ASN1_BIT_STRING ||
  ------------------
  |  |   79|    287|#define SEC_ASN1_BIT_STRING 0x03
  ------------------
  |  Branch (738:39): [True: 30, False: 98]
  ------------------
  739|    159|                                      tagnum == SEC_ASN1_OBJECT_ID ||
  ------------------
  |  |   82|    257|#define SEC_ASN1_OBJECT_ID 0x06
  ------------------
  |  Branch (739:39): [True: 27, False: 71]
  ------------------
  740|    159|                                      tagnum == SEC_ASN1_ENUMERATED ||
  ------------------
  |  |   86|    230|#define SEC_ASN1_ENUMERATED 0x0a
  ------------------
  |  Branch (740:39): [True: 0, False: 71]
  ------------------
  741|    159|                                      tagnum == SEC_ASN1_UTC_TIME ||
  ------------------
  |  |   99|    230|#define SEC_ASN1_UTC_TIME 0x17
  ------------------
  |  Branch (741:39): [True: 3, False: 68]
  ------------------
  742|    159|                                      tagnum == SEC_ASN1_GENERALIZED_TIME)) {
  ------------------
  |  |  100|     68|#define SEC_ASN1_GENERALIZED_TIME 0x18
  ------------------
  |  Branch (742:39): [True: 1, False: 67]
  ------------------
  743|       |                    /* these types MUST have at least one content octet */
  744|     92|                    PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|     92|#define PORT_SetError PORT_SetError_Util
  ------------------
  745|     92|                    rv = SECFailure;
  746|     92|                } else
  747|   206k|                    switch (tagnum) {
  748|       |                        /* special cases of primitive types */
  749|  26.1k|                        case SEC_ASN1_INTEGER: {
  ------------------
  |  |   78|  26.1k|#define SEC_ASN1_INTEGER 0x02
  ------------------
  |  Branch (749:25): [True: 26.1k, False: 180k]
  ------------------
  750|  26.1k|                            SECItem* destItem = (SECItem*)((char*)dest +
  751|  26.1k|                                                           templateEntry->offset);
  752|  26.1k|                            if (destItem && (siUnsignedInteger == destItem->type)) {
  ------------------
  |  Branch (752:33): [True: 26.1k, False: 0]
  |  Branch (752:45): [True: 14.2k, False: 11.9k]
  ------------------
  753|       |                                /* A leading 0 is only allowed when a value
  754|       |                                 * would otherwise be interpreted as negative. */
  755|  14.2k|                                if (temp.len > 1 && temp.data[0] == 0) {
  ------------------
  |  Branch (755:37): [True: 14.1k, False: 6]
  |  Branch (755:53): [True: 5.03k, False: 9.16k]
  ------------------
  756|  5.03k|                                    temp.data++;
  757|  5.03k|                                    temp.len--;
  758|  5.03k|                                    if (!(temp.data[0] & 0x80)) {
  ------------------
  |  Branch (758:41): [True: 2, False: 5.03k]
  ------------------
  759|      2|                                        PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      2|#define PORT_SetError PORT_SetError_Util
  ------------------
  760|      2|                                        rv = SECFailure;
  761|      2|                                    }
  762|  5.03k|                                }
  763|  14.2k|                            }
  764|  26.1k|                            break;
  765|      0|                        }
  766|       |
  767|  41.6k|                        case SEC_ASN1_BIT_STRING: {
  ------------------
  |  |   79|  41.6k|#define SEC_ASN1_BIT_STRING 0x03
  ------------------
  |  Branch (767:25): [True: 41.6k, False: 164k]
  ------------------
  768|       |                            /* Can't be 8 or more spare bits, or any spare bits
  769|       |                             * if there are no octets. */
  770|  41.6k|                            if (temp.data[0] >= 8 || (temp.data[0] > 0 && temp.len == 1)) {
  ------------------
  |  Branch (770:33): [True: 115, False: 41.5k]
  |  Branch (770:55): [True: 18.5k, False: 23.0k]
  |  Branch (770:75): [True: 8, False: 18.5k]
  ------------------
  771|    123|                                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|    123|#define PORT_SetError PORT_SetError_Util
  ------------------
  772|    123|                                rv = SECFailure;
  773|    123|                                break;
  774|    123|                            }
  775|       |                            /* change the length in the SECItem to be the number
  776|       |                               of bits */
  777|  41.5k|                            temp.len = (temp.len - 1) * 8 - (temp.data[0] & 0x7);
  778|  41.5k|                            temp.data++;
  779|  41.5k|                            break;
  780|  41.6k|                        }
  781|       |
  782|   138k|                        default: {
  ------------------
  |  Branch (782:25): [True: 138k, False: 67.8k]
  ------------------
  783|   138k|                            break;
  784|  41.6k|                        }
  785|   206k|                    }
  786|   206k|            }
  787|   206k|        }
  788|   698k|    }
  789|       |
  790|   828k|    if ((SECSuccess == rv) && (PR_TRUE == save)) {
  ------------------
  |  |  437|   818k|#define PR_TRUE 1
  ------------------
  |  Branch (790:9): [True: 818k, False: 10.2k]
  |  Branch (790:31): [True: 360k, False: 457k]
  ------------------
  791|   360k|        SECItem* destItem = (SECItem*)((char*)dest + templateEntry->offset);
  792|   360k|        if (destItem) {
  ------------------
  |  Branch (792:13): [True: 360k, False: 0]
  ------------------
  793|       |            /* we leave the type alone in the destination SECItem.
  794|       |               If part of the destination was allocated by the decoder, in
  795|       |               cases of POINTER, SET OF and SEQUENCE OF, then type is set to
  796|       |               siBuffer due to the use of PORT_ArenaZAlloc*/
  797|   360k|            destItem->data = temp.len ? temp.data : NULL;
  ------------------
  |  Branch (797:30): [True: 359k, False: 1.00k]
  ------------------
  798|   360k|            destItem->len = temp.len;
  799|   360k|        } else {
  800|      0|            PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  801|      0|            rv = SECFailure;
  802|      0|        }
  803|   360k|    }
  804|       |
  805|   828k|    if (PR_TRUE == pop) {
  ------------------
  |  |  437|   828k|#define PR_TRUE 1
  ------------------
  |  Branch (805:9): [True: 70.8k, False: 757k]
  ------------------
  806|       |        /* we don't want to move ahead, so restore the position */
  807|  70.8k|        *src = mark;
  808|  70.8k|    }
  809|   828k|    return rv;
  810|   828k|}
quickder.c:GetItem:
  115|  1.36M|{
  116|  1.36M|    if ((!src) || (!dest) || (!src->data && src->len)) {
  ------------------
  |  Branch (116:9): [True: 0, False: 1.36M]
  |  Branch (116:19): [True: 0, False: 1.36M]
  |  Branch (116:31): [True: 38, False: 1.36M]
  |  Branch (116:45): [True: 0, False: 38]
  ------------------
  117|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  118|      0|        return SECFailure;
  119|      0|    }
  120|       |
  121|  1.36M|    if (!src->len) {
  ------------------
  |  Branch (121:9): [True: 26.7k, False: 1.33M]
  ------------------
  122|       |        /* reaching the end of the buffer is not an error */
  123|  26.7k|        dest->data = NULL;
  124|  26.7k|        dest->len = 0;
  125|  26.7k|        return SECSuccess;
  126|  26.7k|    }
  127|       |
  128|  1.33M|    dest->data = definite_length_decoder(src->data, src->len, &dest->len,
  129|  1.33M|                                         includeTag);
  130|  1.33M|    if (dest->data == NULL) {
  ------------------
  |  Branch (130:9): [True: 1.98k, False: 1.33M]
  ------------------
  131|  1.98k|        PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|  1.98k|#define PORT_SetError PORT_SetError_Util
  ------------------
  132|  1.98k|        return SECFailure;
  133|  1.98k|    }
  134|  1.33M|    src->len -= (int)(dest->data - src->data) + dest->len;
  135|  1.33M|    src->data = dest->data + dest->len;
  136|  1.33M|    return SECSuccess;
  137|  1.33M|}
quickder.c:definite_length_decoder:
   22|  1.33M|{
   23|  1.33M|    unsigned char tag;
   24|  1.33M|    unsigned int used_length = 0;
   25|  1.33M|    unsigned int data_length = 0;
   26|  1.33M|    unsigned char length_field_len = 0;
   27|  1.33M|    unsigned char byte;
   28|  1.33M|    unsigned int i;
   29|       |
   30|  1.33M|    if (used_length >= buf_length) {
  ------------------
  |  Branch (30:9): [True: 0, False: 1.33M]
  ------------------
   31|       |        /* Tag field was not found! */
   32|      0|        return NULL;
   33|      0|    }
   34|  1.33M|    tag = buf[used_length++];
   35|       |
   36|  1.33M|    if (tag == 0) {
  ------------------
  |  Branch (36:9): [True: 120, False: 1.33M]
  ------------------
   37|       |        /* End-of-contents octects should not be present in DER because
   38|       |           DER doesn't use the indefinite length form. */
   39|    120|        return NULL;
   40|    120|    }
   41|       |
   42|  1.33M|    if ((tag & 0x1F) == 0x1F) {
  ------------------
  |  Branch (42:9): [True: 154, False: 1.33M]
  ------------------
   43|       |        /* High tag number (a tag number > 30) is not supported */
   44|    154|        return NULL;
   45|    154|    }
   46|       |
   47|  1.33M|    if (used_length >= buf_length) {
  ------------------
  |  Branch (47:9): [True: 106, False: 1.33M]
  ------------------
   48|       |        /* Length field was not found! */
   49|    106|        return NULL;
   50|    106|    }
   51|  1.33M|    byte = buf[used_length++];
   52|       |
   53|  1.33M|    if (!(byte & 0x80)) {
  ------------------
  |  Branch (53:9): [True: 1.06M, False: 274k]
  ------------------
   54|       |        /* Short form: The high bit is not set. */
   55|  1.06M|        data_length = byte; /* clarity; we're returning a 32-bit int. */
   56|  1.06M|    } else {
   57|       |        /* Long form. Extract the field length */
   58|   274k|        length_field_len = byte & 0x7F;
   59|   274k|        if (length_field_len == 0) {
  ------------------
  |  Branch (59:13): [True: 244, False: 274k]
  ------------------
   60|       |            /* DER doesn't use the indefinite length form. */
   61|    244|            return NULL;
   62|    244|        }
   63|       |
   64|   274k|        if (length_field_len > sizeof(data_length)) {
  ------------------
  |  Branch (64:13): [True: 322, False: 274k]
  ------------------
   65|       |            /* We don't support an extended length field  longer than
   66|       |               4 bytes (2^32) */
   67|    322|            return NULL;
   68|    322|        }
   69|       |
   70|   274k|        if (length_field_len > (buf_length - used_length)) {
  ------------------
  |  Branch (70:13): [True: 27, False: 274k]
  ------------------
   71|       |            /* Extended length field was not found */
   72|     27|            return NULL;
   73|     27|        }
   74|       |
   75|       |        /* Iterate across the extended length field */
   76|   744k|        for (i = 0; i < length_field_len; i++) {
  ------------------
  |  Branch (76:21): [True: 470k, False: 274k]
  ------------------
   77|   470k|            byte = buf[used_length++];
   78|   470k|            data_length = (data_length << 8) | byte;
   79|       |
   80|   470k|            if (i == 0) {
  ------------------
  |  Branch (80:17): [True: 274k, False: 196k]
  ------------------
   81|   274k|                PRBool too_long = PR_FALSE;
  ------------------
  |  |  438|   274k|#define PR_FALSE 0
  ------------------
   82|   274k|                if (length_field_len == 1) {
  ------------------
  |  Branch (82:21): [True: 77.7k, False: 196k]
  ------------------
   83|  77.7k|                    too_long = ((byte & 0x80) == 0); /* Short form suffices */
   84|   196k|                } else {
   85|   196k|                    too_long = (byte == 0); /* This zero byte can be omitted */
   86|   196k|                }
   87|   274k|                if (too_long) {
  ------------------
  |  Branch (87:21): [True: 42, False: 274k]
  ------------------
   88|       |                    /* The length is longer than needed. */
   89|     42|                    return NULL;
   90|     42|                }
   91|   274k|            }
   92|   470k|        }
   93|   274k|    }
   94|       |
   95|  1.33M|    if ((tag & SEC_ASN1_TAGNUM_MASK) == SEC_ASN1_NULL && data_length != 0) {
  ------------------
  |  |   76|  1.33M|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
                  if ((tag & SEC_ASN1_TAGNUM_MASK) == SEC_ASN1_NULL && data_length != 0) {
  ------------------
  |  |   81|  2.67M|#define SEC_ASN1_NULL 0x05
  ------------------
  |  Branch (95:9): [True: 25.1k, False: 1.31M]
  |  Branch (95:58): [True: 154, False: 25.0k]
  ------------------
   96|       |        /* The DER encoding of NULL has no contents octets */
   97|    154|        return NULL;
   98|    154|    }
   99|       |
  100|  1.33M|    if (data_length > (buf_length - used_length)) {
  ------------------
  |  Branch (100:9): [True: 819, False: 1.33M]
  ------------------
  101|       |        /* The decoded length exceeds the available buffer */
  102|    819|        return NULL;
  103|    819|    }
  104|       |
  105|  1.33M|    if (includeTag) {
  ------------------
  |  Branch (105:9): [True: 882k, False: 454k]
  ------------------
  106|   882k|        data_length += used_length;
  107|   882k|    }
  108|       |
  109|  1.33M|    *out_data_length = data_length;
  110|  1.33M|    return ((unsigned char*)buf + (includeTag ? 0 : used_length));
  ------------------
  |  Branch (110:36): [True: 882k, False: 454k]
  ------------------
  111|  1.33M|}
quickder.c:MatchComponentType:
  144|   825k|{
  145|   825k|    unsigned long kind = 0;
  146|   825k|    unsigned char tag = 0;
  147|       |
  148|   825k|    if ((!item) || (!item->data && item->len) || (!templateEntry) || (!match)) {
  ------------------
  |  Branch (148:9): [True: 0, False: 825k]
  |  Branch (148:21): [True: 24.6k, False: 800k]
  |  Branch (148:36): [True: 0, False: 24.6k]
  |  Branch (148:50): [True: 0, False: 825k]
  |  Branch (148:70): [True: 0, False: 825k]
  ------------------
  149|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  150|      0|        return SECFailure;
  151|      0|    }
  152|       |
  153|   825k|    if (!item->len) {
  ------------------
  |  Branch (153:9): [True: 24.6k, False: 800k]
  ------------------
  154|  24.6k|        *match = PR_FALSE;
  ------------------
  |  |  438|  24.6k|#define PR_FALSE 0
  ------------------
  155|  24.6k|        return SECSuccess;
  156|  24.6k|    }
  157|       |
  158|   800k|    kind = templateEntry->kind;
  159|   800k|    tag = *(unsigned char*)item->data;
  160|       |
  161|   800k|    if (((kind & SEC_ASN1_INLINE) ||
  ------------------
  |  |  134|   800k|#define SEC_ASN1_INLINE 0x00800
  ------------------
  |  Branch (161:10): [True: 87.2k, False: 713k]
  ------------------
  162|   800k|         (kind & SEC_ASN1_POINTER)) &&
  ------------------
  |  |  135|   713k|#define SEC_ASN1_POINTER 0x01000
  ------------------
  |  Branch (162:10): [True: 465, False: 712k]
  ------------------
  163|   800k|        (0 == (kind & SEC_ASN1_TAG_MASK))) {
  ------------------
  |  |   65|  87.7k|#define SEC_ASN1_TAG_MASK 0xff
  ------------------
  |  Branch (163:9): [True: 87.7k, False: 0]
  ------------------
  164|       |        /* These cases are special because the template's "kind" does not
  165|       |           give us the information for the ASN.1 tag of the next item. It can
  166|       |           only be figured out from the subtemplate. */
  167|  87.7k|        if (!(kind & SEC_ASN1_OPTIONAL)) {
  ------------------
  |  |  131|  87.7k|#define SEC_ASN1_OPTIONAL 0x00100
  ------------------
  |  Branch (167:13): [True: 87.7k, False: 0]
  ------------------
  168|       |            /* This is a required component. If there is a type mismatch,
  169|       |               the decoding of the subtemplate will fail, so assume this
  170|       |               is a match at the parent level and let it fail later. This
  171|       |               avoids a redundant check in matching cases */
  172|  87.7k|            *match = PR_TRUE;
  ------------------
  |  |  437|  87.7k|#define PR_TRUE 1
  ------------------
  173|  87.7k|            return SECSuccess;
  174|  87.7k|        } else {
  175|       |            /* optional component. This is the hard case. Now we need to
  176|       |               look at the subtemplate to get the expected kind */
  177|      0|            const SEC_ASN1Template* subTemplate =
  178|      0|                SEC_ASN1GetSubtemplate(templateEntry, dest, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  179|      0|            if (!subTemplate) {
  ------------------
  |  Branch (179:17): [True: 0, False: 0]
  ------------------
  180|      0|                PORT_SetError(SEC_ERROR_BAD_TEMPLATE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  181|      0|                return SECFailure;
  182|      0|            }
  183|      0|            if ((subTemplate->kind & SEC_ASN1_INLINE) ||
  ------------------
  |  |  134|      0|#define SEC_ASN1_INLINE 0x00800
  ------------------
  |  Branch (183:17): [True: 0, False: 0]
  ------------------
  184|      0|                (subTemplate->kind & SEC_ASN1_POINTER)) {
  ------------------
  |  |  135|      0|#define SEC_ASN1_POINTER 0x01000
  ------------------
  |  Branch (184:17): [True: 0, False: 0]
  ------------------
  185|       |                /* disallow nesting SEC_ASN1_POINTER and SEC_ASN1_INLINE,
  186|       |                   otherwise you may get a false positive due to the recursion
  187|       |                   optimization above that always matches the type if the
  188|       |                   component is required . Nesting these should never be
  189|       |                   required, so that no one should miss this ability */
  190|      0|                PORT_SetError(SEC_ERROR_BAD_TEMPLATE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  191|      0|                return SECFailure;
  192|      0|            }
  193|      0|            return MatchComponentType(subTemplate, item, match,
  194|      0|                                      (void*)((char*)dest + templateEntry->offset));
  195|      0|        }
  196|  87.7k|    }
  197|       |
  198|   712k|    if (kind & SEC_ASN1_CHOICE) {
  ------------------
  |  |  153|   712k|#define SEC_ASN1_CHOICE 0x100000      /* pick one from a template */
  ------------------
  |  Branch (198:9): [True: 11.6k, False: 701k]
  ------------------
  199|       |        /* we need to check the component's tag against each choice's tag */
  200|       |        /* XXX it would be nice to save the index of the choice here so that
  201|       |           DecodeChoice wouldn't have to do this again. However, due to the
  202|       |           recursivity of MatchComponentType, we don't know if we are in a
  203|       |           required or optional component, so we can't write anywhere in
  204|       |           the destination within this function */
  205|  11.6k|        unsigned choiceIndex = 1;
  206|  11.6k|        const SEC_ASN1Template* choiceEntry;
  207|  12.0k|        while ((choiceEntry = &templateEntry[choiceIndex++]) && (choiceEntry->kind)) {
  ------------------
  |  Branch (207:16): [True: 12.0k, False: 0]
  |  Branch (207:65): [True: 12.0k, False: 4]
  ------------------
  208|  12.0k|            if ((SECSuccess == MatchComponentType(choiceEntry, item, match,
  ------------------
  |  Branch (208:17): [True: 12.0k, False: 0]
  ------------------
  209|  12.0k|                                                  (void*)((char*)dest + choiceEntry->offset))) &&
  210|  12.0k|                (PR_TRUE == *match)) {
  ------------------
  |  |  437|  12.0k|#define PR_TRUE 1
  ------------------
  |  Branch (210:17): [True: 11.6k, False: 427]
  ------------------
  211|  11.6k|                return SECSuccess;
  212|  11.6k|            }
  213|  12.0k|        }
  214|       |        /* no match, caller must decide if this is BAD DER, or not. */
  215|      4|        *match = PR_FALSE;
  ------------------
  |  |  438|      4|#define PR_FALSE 0
  ------------------
  216|      4|        return SECSuccess;
  217|  11.6k|    }
  218|       |
  219|   701k|    if (kind & SEC_ASN1_ANY) {
  ------------------
  |  |  133|   701k|#define SEC_ASN1_ANY 0x00400
  ------------------
  |  Branch (219:9): [True: 130k, False: 570k]
  ------------------
  220|       |        /* SEC_ASN1_ANY always matches */
  221|   130k|        *match = PR_TRUE;
  ------------------
  |  |  437|   130k|#define PR_TRUE 1
  ------------------
  222|   130k|        return SECSuccess;
  223|   130k|    }
  224|       |
  225|   570k|    if ((0 == ((unsigned char)kind & SEC_ASN1_TAGNUM_MASK)) &&
  ------------------
  |  |   76|   570k|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  |  Branch (225:9): [True: 111k, False: 459k]
  ------------------
  226|   570k|        (!(kind & SEC_ASN1_EXPLICIT)) &&
  ------------------
  |  |  132|   111k|#define SEC_ASN1_EXPLICIT 0x00200
  ------------------
  |  Branch (226:9): [True: 75.8k, False: 35.4k]
  ------------------
  227|   570k|        (((kind & SEC_ASN1_SAVE) ||
  ------------------
  |  |  144|  75.8k|#define SEC_ASN1_SAVE 0x20000         /* stash away the encoded bytes first; \
  ------------------
  |  Branch (227:11): [True: 23.3k, False: 52.4k]
  ------------------
  228|  75.8k|          (kind & SEC_ASN1_SKIP)) &&
  ------------------
  |  |  140|  52.4k|#define SEC_ASN1_SKIP 0x08000         /* skip a field; only for decoding */
  ------------------
  |  Branch (228:11): [True: 51.8k, False: 664]
  ------------------
  229|  75.8k|         (!(kind & SEC_ASN1_OPTIONAL)))) {
  ------------------
  |  |  131|  75.1k|#define SEC_ASN1_OPTIONAL 0x00100
  ------------------
  |  Branch (229:10): [True: 75.1k, False: 0]
  ------------------
  230|       |        /* when saving or skipping a required component,  a type is not
  231|       |           required in the template. This is for legacy support of
  232|       |           SEC_ASN1_SAVE and SEC_ASN1_SKIP only. XXX I would like to
  233|       |           deprecate these usages and always require a type, as this
  234|       |           disables type checking, and effectively forbids us from
  235|       |           transparently ignoring optional components we aren't aware of */
  236|  75.1k|        *match = PR_TRUE;
  ------------------
  |  |  437|  75.1k|#define PR_TRUE 1
  ------------------
  237|  75.1k|        return SECSuccess;
  238|  75.1k|    }
  239|       |
  240|       |    /* first, do a class check */
  241|   495k|    if ((tag & SEC_ASN1_CLASS_MASK) !=
  ------------------
  |  |  119|   495k|#define SEC_ASN1_CLASS_MASK 0xc0
  ------------------
  |  Branch (241:9): [True: 930, False: 494k]
  ------------------
  242|   495k|        (((unsigned char)kind) & SEC_ASN1_CLASS_MASK)) {
  ------------------
  |  |  119|   495k|#define SEC_ASN1_CLASS_MASK 0xc0
  ------------------
  243|       |        /* this is only to help debugging of the decoder in case of problems */
  244|       |        /* unsigned char tagclass = tag & SEC_ASN1_CLASS_MASK; */
  245|       |        /* unsigned char expectedclass = (unsigned char)kind & SEC_ASN1_CLASS_MASK; */
  246|    930|        *match = PR_FALSE;
  ------------------
  |  |  438|    930|#define PR_FALSE 0
  ------------------
  247|    930|        return SECSuccess;
  248|    930|    }
  249|       |
  250|       |    /* now do a tag check */
  251|   494k|    if (((unsigned char)kind & SEC_ASN1_TAGNUM_MASK) !=
  ------------------
  |  |   76|   494k|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  |  Branch (251:9): [True: 28.2k, False: 465k]
  ------------------
  252|   494k|        (tag & SEC_ASN1_TAGNUM_MASK)) {
  ------------------
  |  |   76|   494k|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  253|  28.2k|        *match = PR_FALSE;
  ------------------
  |  |  438|  28.2k|#define PR_FALSE 0
  ------------------
  254|  28.2k|        return SECSuccess;
  255|  28.2k|    }
  256|       |
  257|       |    /* now, do a method check. This depends on the class */
  258|   465k|    switch (tag & SEC_ASN1_CLASS_MASK) {
  ------------------
  |  |  119|   465k|#define SEC_ASN1_CLASS_MASK 0xc0
  ------------------
  259|   410k|        case SEC_ASN1_UNIVERSAL:
  ------------------
  |  |  120|   410k|#define SEC_ASN1_UNIVERSAL 0x00
  ------------------
  |  Branch (259:9): [True: 410k, False: 55.0k]
  ------------------
  260|       |            /* For types of the SEC_ASN1_UNIVERSAL class, we know which must be
  261|       |               primitive or constructed based on the tag */
  262|   410k|            switch (tag & SEC_ASN1_TAGNUM_MASK) {
  ------------------
  |  |   76|   410k|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  263|   187k|                case SEC_ASN1_SEQUENCE:
  ------------------
  |  |   92|   187k|#define SEC_ASN1_SEQUENCE 0x10
  ------------------
  |  Branch (263:17): [True: 187k, False: 223k]
  ------------------
  264|   206k|                case SEC_ASN1_SET:
  ------------------
  |  |   93|   206k|#define SEC_ASN1_SET 0x11
  ------------------
  |  Branch (264:17): [True: 19.0k, False: 391k]
  ------------------
  265|   206k|                case SEC_ASN1_EMBEDDED_PDV:
  ------------------
  |  |   87|   206k|#define SEC_ASN1_EMBEDDED_PDV 0x0b
  ------------------
  |  Branch (265:17): [True: 0, False: 410k]
  ------------------
  266|       |                    /* this component must be a constructed type */
  267|       |                    /* XXX add any new universal constructed type here */
  268|   206k|                    if (tag & SEC_ASN1_CONSTRUCTED) {
  ------------------
  |  |  117|   206k|#define SEC_ASN1_CONSTRUCTED 0x20
  ------------------
  |  Branch (268:25): [True: 206k, False: 50]
  ------------------
  269|   206k|                        *match = PR_TRUE;
  ------------------
  |  |  437|   206k|#define PR_TRUE 1
  ------------------
  270|   206k|                        return SECSuccess;
  271|   206k|                    }
  272|     50|                    break;
  273|       |
  274|   204k|                default:
  ------------------
  |  Branch (274:17): [True: 204k, False: 206k]
  ------------------
  275|       |                    /* this component must be a primitive type */
  276|   204k|                    if (!(tag & SEC_ASN1_CONSTRUCTED)) {
  ------------------
  |  |  117|   204k|#define SEC_ASN1_CONSTRUCTED 0x20
  ------------------
  |  Branch (276:25): [True: 204k, False: 37]
  ------------------
  277|   204k|                        *match = PR_TRUE;
  ------------------
  |  |  437|   204k|#define PR_TRUE 1
  ------------------
  278|   204k|                        return SECSuccess;
  279|   204k|                    }
  280|     37|                    break;
  281|   410k|            }
  282|     87|            break;
  283|       |
  284|  55.0k|        default:
  ------------------
  |  Branch (284:9): [True: 55.0k, False: 410k]
  ------------------
  285|       |            /* for all other classes, we check the method based on the template */
  286|  55.0k|            if ((unsigned char)(kind & SEC_ASN1_METHOD_MASK) ==
  ------------------
  |  |  115|  55.0k|#define SEC_ASN1_METHOD_MASK 0x20
  ------------------
  |  Branch (286:17): [True: 54.9k, False: 70]
  ------------------
  287|  55.0k|                (tag & SEC_ASN1_METHOD_MASK)) {
  ------------------
  |  |  115|  55.0k|#define SEC_ASN1_METHOD_MASK 0x20
  ------------------
  288|  54.9k|                *match = PR_TRUE;
  ------------------
  |  |  437|  54.9k|#define PR_TRUE 1
  ------------------
  289|  54.9k|                return SECSuccess;
  290|  54.9k|            }
  291|       |            /* method does not match between template and component */
  292|     70|            break;
  293|   465k|    }
  294|       |
  295|    157|    *match = PR_FALSE;
  ------------------
  |  |  438|    157|#define PR_FALSE 0
  ------------------
  296|    157|    return SECSuccess;
  297|   465k|}
quickder.c:DecodeInline:
  402|   142k|{
  403|   142k|    const SEC_ASN1Template* inlineTemplate =
  404|   142k|        SEC_ASN1GetSubtemplate(templateEntry, dest, PR_FALSE);
  ------------------
  |  |  438|   142k|#define PR_FALSE 0
  ------------------
  405|   142k|    return DecodeItem((void*)((char*)dest + templateEntry->offset),
  406|   142k|                      inlineTemplate, src, arena, checkTag);
  407|   142k|}
quickder.c:DecodeExplicit:
  568|  41.1k|{
  569|  41.1k|    SECStatus rv = SECSuccess;
  570|  41.1k|    SECItem subItem;
  571|  41.1k|    SECItem constructed = *src;
  572|       |
  573|  41.1k|    rv = GetItem(&constructed, &subItem, PR_FALSE);
  ------------------
  |  |  438|  41.1k|#define PR_FALSE 0
  ------------------
  574|       |
  575|  41.1k|    if (SECSuccess == rv) {
  ------------------
  |  Branch (575:9): [True: 41.1k, False: 0]
  ------------------
  576|  41.1k|        if (templateEntry->kind & SEC_ASN1_POINTER) {
  ------------------
  |  |  135|  41.1k|#define SEC_ASN1_POINTER 0x01000
  ------------------
  |  Branch (576:13): [True: 0, False: 41.1k]
  ------------------
  577|      0|            rv = DecodePointer(dest, templateEntry, &subItem, arena, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  578|  41.1k|        } else {
  579|  41.1k|            rv = DecodeInline(dest, templateEntry, &subItem, arena, PR_TRUE);
  ------------------
  |  |  437|  41.1k|#define PR_TRUE 1
  ------------------
  580|  41.1k|        }
  581|  41.1k|    }
  582|       |
  583|  41.1k|    return rv;
  584|  41.1k|}
quickder.c:DecodeImplicit:
  434|  13.8k|{
  435|  13.8k|    if (templateEntry->kind & SEC_ASN1_POINTER) {
  ------------------
  |  |  135|  13.8k|#define SEC_ASN1_POINTER 0x01000
  ------------------
  |  Branch (435:9): [True: 0, False: 13.8k]
  ------------------
  436|      0|        return DecodePointer((void*)((char*)dest),
  437|      0|                             templateEntry, src, arena, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  438|  13.8k|    } else {
  439|  13.8k|        return DecodeInline((void*)((char*)dest),
  440|  13.8k|                            templateEntry, src, arena, PR_FALSE);
  ------------------
  |  |  438|  13.8k|#define PR_FALSE 0
  ------------------
  441|  13.8k|    }
  442|  13.8k|}
quickder.c:DecodePointer:
  413|    465|{
  414|    465|    const SEC_ASN1Template* ptrTemplate =
  415|    465|        SEC_ASN1GetSubtemplate(templateEntry, dest, PR_FALSE);
  ------------------
  |  |  438|    465|#define PR_FALSE 0
  ------------------
  416|    465|    if (!ptrTemplate) {
  ------------------
  |  Branch (416:9): [True: 0, False: 465]
  ------------------
  417|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  418|      0|        return SECFailure;
  419|      0|    }
  420|    465|    void* subdata = PORT_ArenaZAlloc(arena, ptrTemplate->size);
  ------------------
  |  |   59|    465|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
  421|    465|    *(void**)((char*)dest + templateEntry->offset) = subdata;
  422|    465|    if (subdata) {
  ------------------
  |  Branch (422:9): [True: 465, False: 0]
  ------------------
  423|    465|        return DecodeItem(subdata, ptrTemplate, src, arena, checkTag);
  424|    465|    } else {
  425|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  426|      0|        return SECFailure;
  427|      0|    }
  428|    465|}
quickder.c:DecodeChoice:
  448|  11.6k|{
  449|  11.6k|    SECStatus rv = SECSuccess;
  450|  11.6k|    SECItem choice;
  451|  11.6k|    const SEC_ASN1Template* choiceTemplate = &(templateEntry[1]);
  452|  11.6k|    const SEC_ASN1Template* choiceEntry = NULL;
  453|  11.6k|    unsigned long choiceindex = 0;
  454|       |
  455|       |    /* XXX for a choice component, we should validate the template to make
  456|       |       sure the tags are distinct, in debug builds. This hasn't been
  457|       |       implemented yet */
  458|       |    /* rv = CheckChoiceTemplate(sequenceTemplate); */
  459|       |
  460|       |    /* process it */
  461|  12.0k|    do {
  462|  12.0k|        choice = *src;
  463|  12.0k|        choiceEntry = &choiceTemplate[choiceindex++];
  464|  12.0k|        if (choiceEntry->kind) {
  ------------------
  |  Branch (464:13): [True: 12.0k, False: 4]
  ------------------
  465|  12.0k|            rv = DecodeItem(dest, choiceEntry, &choice, arena, PR_TRUE);
  ------------------
  |  |  437|  12.0k|#define PR_TRUE 1
  ------------------
  466|  12.0k|        }
  467|  12.0k|    } while ((SECFailure == rv) && (choiceEntry->kind));
  ------------------
  |  Branch (467:14): [True: 430, False: 11.6k]
  |  Branch (467:36): [True: 426, False: 4]
  ------------------
  468|       |
  469|  11.6k|    if (SECFailure == rv) {
  ------------------
  |  Branch (469:9): [True: 4, False: 11.6k]
  ------------------
  470|       |        /* the component didn't match any of the choices */
  471|      4|        PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      4|#define PORT_SetError PORT_SetError_Util
  ------------------
  472|  11.6k|    } else {
  473|       |        /* set the type in the union here */
  474|  11.6k|        int* which = (int*)((char*)dest + templateEntry->offset);
  475|  11.6k|        *which = (int)choiceEntry->size;
  476|  11.6k|    }
  477|       |
  478|       |    /* we should have consumed all the bytes by now */
  479|       |    /* fail if we have not */
  480|  11.6k|    if (SECSuccess == rv && choice.len) {
  ------------------
  |  Branch (480:9): [True: 11.6k, False: 4]
  |  Branch (480:29): [True: 0, False: 11.6k]
  ------------------
  481|       |        /* there is extra data that isn't listed in the template */
  482|      0|        PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  483|      0|        rv = SECFailure;
  484|      0|    }
  485|  11.6k|    return rv;
  486|  11.6k|}
quickder.c:DecodeGroup:
  492|  38.0k|{
  493|  38.0k|    SECStatus rv = SECSuccess;
  494|  38.0k|    SECItem source;
  495|  38.0k|    SECItem group;
  496|  38.0k|    PRUint32 totalEntries = 0;
  497|  38.0k|    PRUint32 entryIndex = 0;
  498|  38.0k|    void** entries = NULL;
  499|       |
  500|  38.0k|    const SEC_ASN1Template* subTemplate =
  501|  38.0k|        SEC_ASN1GetSubtemplate(templateEntry, dest, PR_FALSE);
  ------------------
  |  |  438|  38.0k|#define PR_FALSE 0
  ------------------
  502|       |
  503|  38.0k|    source = *src;
  504|       |
  505|       |    /* get the group */
  506|  38.0k|    if (SECSuccess == rv) {
  ------------------
  |  Branch (506:9): [True: 38.0k, False: 0]
  ------------------
  507|  38.0k|        rv = GetItem(&source, &group, PR_FALSE);
  ------------------
  |  |  438|  38.0k|#define PR_FALSE 0
  ------------------
  508|  38.0k|    }
  509|       |
  510|       |    /* XXX we should check the subtemplate in debug builds */
  511|  38.0k|    if (SECSuccess == rv) {
  ------------------
  |  Branch (511:9): [True: 38.0k, False: 0]
  ------------------
  512|       |        /* first, count the number of entries. Benchmarking showed that this
  513|       |           counting pass is more efficient than trying to allocate entries as
  514|       |           we read the DER, even if allocating many entries at a time
  515|       |        */
  516|  38.0k|        SECItem counter = group;
  517|  82.3k|        do {
  518|  82.3k|            SECItem anitem;
  519|  82.3k|            rv = GetItem(&counter, &anitem, PR_TRUE);
  ------------------
  |  |  437|  82.3k|#define PR_TRUE 1
  ------------------
  520|  82.3k|            if (SECSuccess == rv && (anitem.len)) {
  ------------------
  |  Branch (520:17): [True: 82.0k, False: 274]
  |  Branch (520:37): [True: 79.9k, False: 2.09k]
  ------------------
  521|  79.9k|                totalEntries++;
  522|  79.9k|            }
  523|  82.3k|        } while ((SECSuccess == rv) && (counter.len));
  ------------------
  |  Branch (523:18): [True: 82.0k, False: 274]
  |  Branch (523:40): [True: 44.2k, False: 37.8k]
  ------------------
  524|       |
  525|  38.0k|        if (SECSuccess == rv) {
  ------------------
  |  Branch (525:13): [True: 37.8k, False: 274]
  ------------------
  526|       |            /* allocate room for pointer array and entries */
  527|       |            /* we want to allocate the array even if there is 0 entry */
  528|  37.8k|            entries = (void**)PORT_ArenaZAlloc(arena, sizeof(void*) * (totalEntries + 1) + /* the extra one is for NULL termination */
  ------------------
  |  |   59|  37.8k|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
  529|  37.8k|                                                          subTemplate->size * totalEntries);
  530|       |
  531|  37.8k|            if (entries) {
  ------------------
  |  Branch (531:17): [True: 37.8k, False: 0]
  ------------------
  532|  37.8k|                entries[totalEntries] = NULL; /* terminate the array */
  533|  37.8k|            } else {
  534|      0|                PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  535|      0|                rv = SECFailure;
  536|      0|            }
  537|  37.8k|            if (SECSuccess == rv) {
  ------------------
  |  Branch (537:17): [True: 37.8k, False: 0]
  ------------------
  538|  37.8k|                void* entriesData = (unsigned char*)entries + (unsigned long)(sizeof(void*) * (totalEntries + 1));
  539|       |                /* and fix the pointers in the array */
  540|  37.8k|                PRUint32 entriesIndex = 0;
  541|   114k|                for (entriesIndex = 0; entriesIndex < totalEntries; entriesIndex++) {
  ------------------
  |  Branch (541:40): [True: 76.4k, False: 37.8k]
  ------------------
  542|  76.4k|                    entries[entriesIndex] =
  543|  76.4k|                        (char*)entriesData + (subTemplate->size * entriesIndex);
  544|  76.4k|                }
  545|  37.8k|            }
  546|  37.8k|        }
  547|  38.0k|    }
  548|       |
  549|  38.0k|    if (SECSuccess == rv && totalEntries)
  ------------------
  |  Branch (549:9): [True: 37.8k, False: 274]
  |  Branch (549:29): [True: 35.7k, False: 2.09k]
  ------------------
  550|  75.4k|        do {
  551|  75.4k|            if (!(entryIndex < totalEntries)) {
  ------------------
  |  Branch (551:17): [True: 0, False: 75.4k]
  ------------------
  552|      0|                rv = SECFailure;
  553|      0|                break;
  554|      0|            }
  555|  75.4k|            rv = DecodeItem(entries[entryIndex++], subTemplate, &group, arena, PR_TRUE);
  ------------------
  |  |  437|  75.4k|#define PR_TRUE 1
  ------------------
  556|  75.4k|        } while ((SECSuccess == rv) && (group.len));
  ------------------
  |  Branch (556:18): [True: 75.3k, False: 135]
  |  Branch (556:40): [True: 39.7k, False: 35.5k]
  ------------------
  557|       |    /* we should be at the end of the set by now */
  558|       |    /* save the entries where requested */
  559|      0|    memcpy(((char*)dest + templateEntry->offset), &entries, sizeof(void**));
  560|       |
  561|  38.0k|    return rv;
  562|  38.0k|}
quickder.c:DecodeSequence:
  353|   168k|{
  354|   168k|    SECStatus rv = SECSuccess;
  355|   168k|    SECItem source;
  356|   168k|    SECItem sequence;
  357|   168k|    const SEC_ASN1Template* sequenceTemplate = &(templateEntry[1]);
  358|   168k|    const SEC_ASN1Template* sequenceEntry = NULL;
  359|   168k|    unsigned long seqindex = 0;
  360|       |
  361|   168k|#ifdef DEBUG
  362|       |    /* for a sequence, we need to validate the template. */
  363|   168k|    rv = CheckSequenceTemplate(sequenceTemplate);
  364|   168k|#endif
  365|       |
  366|   168k|    source = *src;
  367|       |
  368|       |    /* get the sequence */
  369|   168k|    if (SECSuccess == rv) {
  ------------------
  |  Branch (369:9): [True: 168k, False: 0]
  ------------------
  370|   168k|        rv = GetItem(&source, &sequence, PR_FALSE);
  ------------------
  |  |  438|   168k|#define PR_FALSE 0
  ------------------
  371|   168k|    }
  372|       |
  373|       |    /* process it */
  374|   168k|    if (SECSuccess == rv)
  ------------------
  |  Branch (374:9): [True: 168k, False: 0]
  ------------------
  375|   645k|        do {
  376|   645k|            sequenceEntry = &sequenceTemplate[seqindex++];
  377|   645k|            if ((sequenceEntry && sequenceEntry->kind) &&
  ------------------
  |  Branch (377:18): [True: 645k, False: 0]
  |  Branch (377:35): [True: 506k, False: 138k]
  ------------------
  378|   645k|                (sequenceEntry->kind != SEC_ASN1_SKIP_REST)) {
  ------------------
  |  |  151|   506k|#define SEC_ASN1_SKIP_REST 0x80000    /* skip all following fields; \
  ------------------
  |  Branch (378:17): [True: 477k, False: 28.9k]
  ------------------
  379|   477k|                rv = DecodeItem(dest, sequenceEntry, &sequence, arena, PR_TRUE);
  ------------------
  |  |  437|   477k|#define PR_TRUE 1
  ------------------
  380|   477k|            }
  381|   645k|        } while ((SECSuccess == rv) &&
  ------------------
  |  Branch (381:18): [True: 643k, False: 1.11k]
  ------------------
  382|   645k|                 (sequenceEntry->kind &&
  ------------------
  |  Branch (382:19): [True: 505k, False: 138k]
  ------------------
  383|   643k|                  sequenceEntry->kind != SEC_ASN1_SKIP_REST));
  ------------------
  |  |  151|   505k|#define SEC_ASN1_SKIP_REST 0x80000    /* skip all following fields; \
  ------------------
  |  Branch (383:19): [True: 476k, False: 28.9k]
  ------------------
  384|       |    /* we should have consumed all the bytes in the sequence by now
  385|       |       unless the caller doesn't care about the rest of the sequence */
  386|   168k|    if (SECSuccess == rv && sequence.len &&
  ------------------
  |  Branch (386:9): [True: 167k, False: 1.11k]
  |  Branch (386:29): [True: 29.1k, False: 138k]
  ------------------
  387|   168k|        sequenceEntry && sequenceEntry->kind != SEC_ASN1_SKIP_REST) {
  ------------------
  |  |  151|  29.1k|#define SEC_ASN1_SKIP_REST 0x80000    /* skip all following fields; \
  ------------------
  |  Branch (387:9): [True: 29.1k, False: 0]
  |  Branch (387:26): [True: 185, False: 28.9k]
  ------------------
  388|       |        /* it isn't 100% clear whether this is a bad DER or a bad template.
  389|       |           The problem is that logically, they don't match - there is extra
  390|       |           data in the DER that the template doesn't know about */
  391|    185|        PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|    185|#define PORT_SetError PORT_SetError_Util
  ------------------
  392|    185|        rv = SECFailure;
  393|    185|    }
  394|       |
  395|   168k|    return rv;
  396|   168k|}
quickder.c:CheckSequenceTemplate:
  303|   168k|{
  304|   168k|    SECStatus rv = SECSuccess;
  305|   168k|    const SEC_ASN1Template* sequenceEntry = NULL;
  306|   168k|    unsigned long seqIndex = 0;
  307|   168k|    unsigned long lastEntryIndex = 0;
  308|   168k|    unsigned long ambiguityIndex = 0;
  309|   168k|    PRBool foundAmbiguity = PR_FALSE;
  ------------------
  |  |  438|   168k|#define PR_FALSE 0
  ------------------
  310|       |
  311|   677k|    do {
  312|   677k|        sequenceEntry = &sequenceTemplate[seqIndex++];
  313|   677k|        if (sequenceEntry->kind) {
  ------------------
  |  Branch (313:13): [True: 509k, False: 168k]
  ------------------
  314|       |            /* ensure that we don't have an optional component of SEC_ASN1_ANY
  315|       |               in the middle of the sequence, since we could not handle it */
  316|       |            /* XXX this function needs to dig into the subtemplates to find
  317|       |               the next tag */
  318|   509k|            if ((PR_FALSE == foundAmbiguity) &&
  ------------------
  |  |  438|   509k|#define PR_FALSE 0
  ------------------
  |  Branch (318:17): [True: 509k, False: 0]
  ------------------
  319|   509k|                (sequenceEntry->kind & SEC_ASN1_OPTIONAL) &&
  ------------------
  |  |  131|   509k|#define SEC_ASN1_OPTIONAL 0x00100
  ------------------
  |  Branch (319:17): [True: 118k, False: 390k]
  ------------------
  320|   509k|                (sequenceEntry->kind & SEC_ASN1_ANY)) {
  ------------------
  |  |  133|   118k|#define SEC_ASN1_ANY 0x00400
  ------------------
  |  Branch (320:17): [True: 47.1k, False: 71.2k]
  ------------------
  321|  47.1k|                foundAmbiguity = PR_TRUE;
  ------------------
  |  |  437|  47.1k|#define PR_TRUE 1
  ------------------
  322|  47.1k|                ambiguityIndex = seqIndex - 1;
  323|  47.1k|            }
  324|   509k|        }
  325|   677k|    } while (sequenceEntry->kind);
  ------------------
  |  Branch (325:14): [True: 509k, False: 168k]
  ------------------
  326|       |
  327|   168k|    lastEntryIndex = seqIndex - 2;
  328|       |
  329|   168k|    if (PR_FALSE != foundAmbiguity) {
  ------------------
  |  |  438|   168k|#define PR_FALSE 0
  ------------------
  |  Branch (329:9): [True: 47.1k, False: 121k]
  ------------------
  330|  47.1k|        if (ambiguityIndex < lastEntryIndex) {
  ------------------
  |  Branch (330:13): [True: 0, False: 47.1k]
  ------------------
  331|       |            /* ambiguity can only be tolerated on the last entry */
  332|      0|            PORT_SetError(SEC_ERROR_BAD_TEMPLATE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  333|      0|            rv = SECFailure;
  334|      0|        }
  335|  47.1k|    }
  336|       |
  337|       |    /* XXX also enforce ASN.1 requirement that tags be
  338|       |       distinct for consecutive optional components */
  339|       |
  340|   168k|    return rv;
  341|   168k|}

SECOID_GetAlgorithmTag_Util:
   14|  33.3k|{
   15|  33.3k|    if (id == NULL || id->algorithm.data == NULL)
  ------------------
  |  Branch (15:9): [True: 0, False: 33.3k]
  |  Branch (15:23): [True: 0, False: 33.3k]
  ------------------
   16|      0|        return SEC_OID_UNKNOWN;
   17|       |
   18|  33.3k|    return SECOID_FindOIDTag(&(id->algorithm));
  ------------------
  |  |  117|  33.3k|#define SECOID_FindOIDTag SECOID_FindOIDTag_Util
  ------------------
   19|  33.3k|}
SECOID_CompareAlgorithmID_Util:
  124|  6.33k|{
  125|  6.33k|    SECComparison rv;
  126|       |
  127|  6.33k|    rv = SECITEM_CompareItem(&a->algorithm, &b->algorithm);
  ------------------
  |  |  105|  6.33k|#define SECITEM_CompareItem SECITEM_CompareItem_Util
  ------------------
  128|  6.33k|    if (rv)
  ------------------
  |  Branch (128:9): [True: 634, False: 5.70k]
  ------------------
  129|    634|        return rv;
  130|  5.70k|    rv = SECITEM_CompareItem(&a->parameters, &b->parameters);
  ------------------
  |  |  105|  5.70k|#define SECITEM_CompareItem SECITEM_CompareItem_Util
  ------------------
  131|  5.70k|    return rv;
  132|  6.33k|}

SEC_ASN1DecodeInteger_Util:
 2697|    231|{
 2698|    231|    unsigned long v;
 2699|    231|    unsigned int i;
 2700|       |
 2701|    231|    if (src == NULL) {
  ------------------
  |  Branch (2701:9): [True: 0, False: 231]
  ------------------
 2702|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2703|      0|        return SECFailure;
 2704|      0|    }
 2705|       |
 2706|    231|    if (src->len > sizeof(unsigned long)) {
  ------------------
  |  Branch (2706:9): [True: 0, False: 231]
  ------------------
 2707|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2708|      0|        return SECFailure;
 2709|      0|    }
 2710|       |
 2711|    231|    if (src->data == NULL) {
  ------------------
  |  Branch (2711:9): [True: 0, False: 231]
  ------------------
 2712|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2713|      0|        return SECFailure;
 2714|      0|    }
 2715|       |
 2716|    231|    if (src->data[0] & 0x80)
  ------------------
  |  Branch (2716:9): [True: 3, False: 228]
  ------------------
 2717|      3|        v = -1; /* signed and negative - start with all 1's */
 2718|    228|    else
 2719|    228|        v = 0;
 2720|       |
 2721|    463|    for (i = 0; i < src->len; i++) {
  ------------------
  |  Branch (2721:17): [True: 232, False: 231]
  ------------------
 2722|       |        /* shift in next byte */
 2723|    232|        v <<= 8;
 2724|    232|        v |= src->data[i];
 2725|    232|    }
 2726|    231|    *value = v;
 2727|    231|    return SECSuccess;
 2728|    231|}
SEC_ASN1DecoderUpdate_Util:
 2771|  2.04k|{
 2772|  2.04k|    sec_asn1d_state *state = NULL;
 2773|  2.04k|    unsigned long consumed;
 2774|  2.04k|    SEC_ASN1EncodingPart what;
 2775|       |
 2776|  2.04k|    if (cx->status == needBytes)
  ------------------
  |  Branch (2776:9): [True: 2.04k, False: 0]
  ------------------
 2777|  2.04k|        cx->status = keepGoing;
 2778|       |
 2779|  64.6M|    while (cx->status == keepGoing) {
  ------------------
  |  Branch (2779:12): [True: 64.6M, False: 1.15k]
  ------------------
 2780|  64.6M|        state = cx->current;
 2781|  64.6M|        what = SEC_ASN1_Contents;
 2782|  64.6M|        consumed = 0;
 2783|       |#ifdef DEBUG_ASN1D_STATES
 2784|       |        printf("\nPLACE = %s, next byte = 0x%02x, %p[%lu]\n",
 2785|       |               (state->place >= 0 && state->place <= notInUse) ? place_names[state->place] : "(undefined)",
 2786|       |               len ? (unsigned int)((unsigned char *)buf)[consumed] : 0,
 2787|       |               buf, consumed);
 2788|       |        dump_states(cx);
 2789|       |#endif /* DEBUG_ASN1D_STATES */
 2790|  64.6M|        switch (state->place) {
 2791|  10.1M|            case beforeIdentifier:
  ------------------
  |  Branch (2791:13): [True: 10.1M, False: 54.5M]
  ------------------
 2792|  10.1M|                consumed = sec_asn1d_parse_identifier(state, buf, len);
 2793|  10.1M|                what = SEC_ASN1_Identifier;
 2794|  10.1M|                break;
 2795|  23.7k|            case duringIdentifier:
  ------------------
  |  Branch (2795:13): [True: 23.7k, False: 64.6M]
  ------------------
 2796|  23.7k|                consumed = sec_asn1d_parse_more_identifier(state, buf, len);
 2797|  23.7k|                what = SEC_ASN1_Identifier;
 2798|  23.7k|                break;
 2799|  9.94M|            case afterIdentifier:
  ------------------
  |  Branch (2799:13): [True: 9.94M, False: 54.7M]
  ------------------
 2800|  9.94M|                sec_asn1d_confirm_identifier(state);
 2801|  9.94M|                break;
 2802|  9.93M|            case beforeLength:
  ------------------
  |  Branch (2802:13): [True: 9.93M, False: 54.7M]
  ------------------
 2803|  9.93M|                consumed = sec_asn1d_parse_length(state, buf, len);
 2804|  9.93M|                what = SEC_ASN1_Length;
 2805|  9.93M|                break;
 2806|  2.92k|            case duringLength:
  ------------------
  |  Branch (2806:13): [True: 2.92k, False: 64.6M]
  ------------------
 2807|  2.92k|                consumed = sec_asn1d_parse_more_length(state, buf, len);
 2808|  2.92k|                what = SEC_ASN1_Length;
 2809|  2.92k|                break;
 2810|  9.93M|            case afterLength:
  ------------------
  |  Branch (2810:13): [True: 9.93M, False: 54.7M]
  ------------------
 2811|  9.93M|                sec_asn1d_prepare_for_contents(state);
 2812|  9.93M|                break;
 2813|      0|            case beforeBitString:
  ------------------
  |  Branch (2813:13): [True: 0, False: 64.6M]
  ------------------
 2814|      0|                consumed = sec_asn1d_parse_bit_string(state, buf, len);
 2815|      0|                break;
 2816|      0|            case duringBitString:
  ------------------
  |  Branch (2816:13): [True: 0, False: 64.6M]
  ------------------
 2817|      0|                consumed = sec_asn1d_parse_more_bit_string(state, buf, len);
 2818|      0|                break;
 2819|   663k|            case duringConstructedString:
  ------------------
  |  Branch (2819:13): [True: 663k, False: 64.0M]
  ------------------
 2820|   663k|                sec_asn1d_next_substring(state);
 2821|   663k|                break;
 2822|  9.44M|            case duringGroup:
  ------------------
  |  Branch (2822:13): [True: 9.44M, False: 55.2M]
  ------------------
 2823|  9.44M|                sec_asn1d_next_in_group(state);
 2824|  9.44M|                break;
 2825|  2.04M|            case duringLeaf:
  ------------------
  |  Branch (2825:13): [True: 2.04M, False: 62.6M]
  ------------------
 2826|  2.04M|                consumed = sec_asn1d_parse_leaf(state, buf, len);
 2827|  2.04M|                break;
 2828|      0|            case duringSaveEncoding:
  ------------------
  |  Branch (2828:13): [True: 0, False: 64.6M]
  ------------------
 2829|      0|                sec_asn1d_reuse_encoding(state);
 2830|      0|                if (cx->status == decodeError) {
  ------------------
  |  Branch (2830:21): [True: 0, False: 0]
  ------------------
 2831|       |                    /* recursive call has already popped all states from stack.
 2832|       |                    ** Bail out quickly.
 2833|       |                    */
 2834|      0|                    return SECFailure;
 2835|      0|                }
 2836|      0|                if (cx->status == needBytes) {
  ------------------
  |  Branch (2836:21): [True: 0, False: 0]
  ------------------
 2837|       |                    /* recursive call wanted more data. Fatal. Clean up below. */
 2838|      0|                    PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2839|      0|                    cx->status = decodeError;
 2840|      0|                }
 2841|      0|                break;
 2842|  6.53k|            case duringSequence:
  ------------------
  |  Branch (2842:13): [True: 6.53k, False: 64.6M]
  ------------------
 2843|  6.53k|                sec_asn1d_next_in_sequence(state);
 2844|  6.53k|                break;
 2845|   191k|            case afterConstructedString:
  ------------------
  |  Branch (2845:13): [True: 191k, False: 64.4M]
  ------------------
 2846|   191k|                sec_asn1d_concat_substrings(state);
 2847|   191k|                break;
 2848|    526|            case afterExplicit:
  ------------------
  |  Branch (2848:13): [True: 526, False: 64.6M]
  ------------------
 2849|  1.01k|            case afterImplicit:
  ------------------
  |  Branch (2849:13): [True: 486, False: 64.6M]
  ------------------
 2850|  1.29k|            case afterInline:
  ------------------
  |  Branch (2850:13): [True: 278, False: 64.6M]
  ------------------
 2851|  1.81k|            case afterPointer:
  ------------------
  |  Branch (2851:13): [True: 526, False: 64.6M]
  ------------------
 2852|  1.81k|                sec_asn1d_absorb_child(state);
 2853|  1.81k|                break;
 2854|  1.14k|            case afterGroup:
  ------------------
  |  Branch (2854:13): [True: 1.14k, False: 64.6M]
  ------------------
 2855|  1.14k|                sec_asn1d_concat_group(state);
 2856|  1.14k|                break;
 2857|      0|            case afterSaveEncoding:
  ------------------
  |  Branch (2857:13): [True: 0, False: 64.6M]
  ------------------
 2858|       |                /* SEC_ASN1DecoderUpdate has called itself recursively to
 2859|       |                ** decode SAVEd encoded data, and now is done decoding that.
 2860|       |                ** Return to the calling copy of SEC_ASN1DecoderUpdate.
 2861|       |                */
 2862|      0|                return SECSuccess;
 2863|  2.04M|            case beforeEndOfContents:
  ------------------
  |  Branch (2863:13): [True: 2.04M, False: 62.6M]
  ------------------
 2864|  2.04M|                sec_asn1d_prepare_for_end_of_contents(state);
 2865|  2.04M|                break;
 2866|   190k|            case duringEndOfContents:
  ------------------
  |  Branch (2866:13): [True: 190k, False: 64.4M]
  ------------------
 2867|   190k|                consumed = sec_asn1d_parse_end_of_contents(state, buf, len);
 2868|   190k|                what = SEC_ASN1_EndOfContents;
 2869|   190k|                break;
 2870|  10.1M|            case afterEndOfContents:
  ------------------
  |  Branch (2870:13): [True: 10.1M, False: 54.5M]
  ------------------
 2871|  10.1M|                sec_asn1d_pop_state(state);
 2872|  10.1M|                break;
 2873|      0|            case beforeChoice:
  ------------------
  |  Branch (2873:13): [True: 0, False: 64.6M]
  ------------------
 2874|      0|                state = sec_asn1d_before_choice(state);
 2875|      0|                break;
 2876|      0|            case duringChoice:
  ------------------
  |  Branch (2876:13): [True: 0, False: 64.6M]
  ------------------
 2877|      0|                state = sec_asn1d_during_choice(state);
 2878|      0|                break;
 2879|      0|            case afterChoice:
  ------------------
  |  Branch (2879:13): [True: 0, False: 64.6M]
  ------------------
 2880|      0|                sec_asn1d_after_choice(state);
 2881|      0|                break;
 2882|      0|            case notInUse:
  ------------------
  |  Branch (2882:13): [True: 0, False: 64.6M]
  ------------------
 2883|      0|            default:
  ------------------
  |  Branch (2883:13): [True: 0, False: 64.6M]
  ------------------
 2884|       |                /* This is not an error, but rather a plain old BUG! */
 2885|      0|                PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2886|      0|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2887|      0|                cx->status = decodeError;
 2888|      0|                break;
 2889|  64.6M|        }
 2890|       |
 2891|  64.6M|        if (cx->status == decodeError)
  ------------------
  |  Branch (2891:13): [True: 739, False: 64.6M]
  ------------------
 2892|    739|            break;
 2893|       |
 2894|       |        /* We should not consume more than we have.  */
 2895|  64.6M|        PORT_Assert(consumed <= len);
  ------------------
  |  |  120|  64.6M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  64.6M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 64.6M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2896|  64.6M|        if (consumed > len) {
  ------------------
  |  Branch (2896:13): [True: 0, False: 64.6M]
  ------------------
 2897|      0|            PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2898|      0|            cx->status = decodeError;
 2899|      0|            break;
 2900|      0|        }
 2901|       |
 2902|       |        /* It might have changed, so we have to update our local copy.  */
 2903|  64.6M|        state = cx->current;
 2904|       |
 2905|       |        /* If it is NULL, we have popped all the way to the top.  */
 2906|  64.6M|        if (state == NULL) {
  ------------------
  |  Branch (2906:13): [True: 155, False: 64.6M]
  ------------------
 2907|    155|            PORT_Assert(consumed == 0);
  ------------------
  |  |  120|    155|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    155|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 155, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2908|       |#if 0 /* XXX I want this here, but it seems that we have situations (like \
 2909|       |       * downloading a pkcs7 cert chain from some issuers) that give us a \
 2910|       |       * length which is greater than the entire encoding.  So, we cannot \
 2911|       |       * have this be an error.                                           \
 2912|       |       */
 2913|       |        if (len > 0) {
 2914|       |        PORT_SetError (SEC_ERROR_BAD_DER);
 2915|       |        cx->status = decodeError;
 2916|       |        } else
 2917|       |#endif
 2918|    155|            cx->status = allDone;
 2919|    155|            break;
 2920|  64.6M|        } else if (state->theTemplate->kind == SEC_ASN1_SKIP_REST) {
  ------------------
  |  |  151|  64.6M|#define SEC_ASN1_SKIP_REST 0x80000    /* skip all following fields; \
  ------------------
  |  Branch (2920:20): [True: 0, False: 64.6M]
  ------------------
 2921|      0|            cx->status = allDone;
 2922|      0|            break;
 2923|      0|        }
 2924|       |
 2925|  64.6M|        if (consumed == 0)
  ------------------
  |  Branch (2925:13): [True: 42.5M, False: 22.1M]
  ------------------
 2926|  42.5M|            continue;
 2927|       |
 2928|       |        /*
 2929|       |         * The following check is specifically looking for an ANY
 2930|       |         * that is *not* also an INNER, because we need to save aside
 2931|       |         * all bytes in that case -- the contents parts will get
 2932|       |         * handled like all other contents, and the end-of-contents
 2933|       |         * bytes are added by the concat code, but the outer header
 2934|       |         * bytes need to get saved too, so we do them explicitly here.
 2935|       |         */
 2936|  22.1M|        if (state->underlying_kind == SEC_ASN1_ANY && !cx->filter_only && (what == SEC_ASN1_Identifier || what == SEC_ASN1_Length)) {
  ------------------
  |  |  133|  44.2M|#define SEC_ASN1_ANY 0x00400
  ------------------
  |  Branch (2936:13): [True: 22.0M, False: 48.8k]
  |  Branch (2936:55): [True: 22.0M, False: 0]
  |  Branch (2936:76): [True: 9.94M, False: 12.1M]
  |  Branch (2936:107): [True: 9.92M, False: 2.22M]
  ------------------
 2937|  19.8M|            sec_asn1d_record_any_header(state, buf, consumed);
 2938|  19.8M|        }
 2939|       |
 2940|       |        /*
 2941|       |         * We had some number of good, accepted bytes.  If the caller
 2942|       |         * has registered to see them, pass them along.
 2943|       |         */
 2944|  22.1M|        if (state->top->filter_proc != NULL) {
  ------------------
  |  Branch (2944:13): [True: 0, False: 22.1M]
  ------------------
 2945|      0|            int depth;
 2946|       |
 2947|      0|            depth = state->depth;
 2948|      0|            if (what == SEC_ASN1_EndOfContents && !state->indefinite) {
  ------------------
  |  Branch (2948:17): [True: 0, False: 0]
  |  Branch (2948:51): [True: 0, False: 0]
  ------------------
 2949|      0|                PORT_Assert(state->parent != NULL && state->parent->indefinite);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 0, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2950|      0|                depth--;
 2951|      0|                PORT_Assert(depth == state->parent->depth);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2952|      0|            }
 2953|      0|            (*state->top->filter_proc)(state->top->filter_arg,
 2954|      0|                                       buf, consumed, depth, what);
 2955|      0|        }
 2956|       |
 2957|  22.1M|        state->consumed += consumed;
 2958|  22.1M|        buf += consumed;
 2959|  22.1M|        len -= consumed;
 2960|  22.1M|    }
 2961|       |
 2962|  2.04k|    if (cx->status == decodeError) {
  ------------------
  |  Branch (2962:9): [True: 739, False: 1.30k]
  ------------------
 2963|  6.07k|        while (state != NULL) {
  ------------------
  |  Branch (2963:16): [True: 5.33k, False: 739]
  ------------------
 2964|  5.33k|            sec_asn1d_free_child(state, PR_TRUE);
  ------------------
  |  |  437|  5.33k|#define PR_TRUE 1
  ------------------
 2965|  5.33k|            state = state->parent;
 2966|  5.33k|        }
 2967|       |#ifdef SEC_ASN1D_FREE_ON_ERROR /*                                           \
 2968|       |                                * XXX This does not work because we can     \
 2969|       |                                * end up leaving behind dangling pointers   \
 2970|       |                                * to stuff that was allocated.  In order    \
 2971|       |                                * to make this really work (which would     \
 2972|       |                                * be a good thing, I think), we need to     \
 2973|       |                                * keep track of every place/pointer that    \
 2974|       |                                * was allocated and make sure to NULL it    \
 2975|       |                                * out before we then free back to the mark. \
 2976|       |                                */
 2977|       |        if (cx->their_pool != NULL) {
 2978|       |            PORT_Assert(cx->their_mark != NULL);
 2979|       |            PORT_ArenaRelease(cx->their_pool, cx->their_mark);
 2980|       |            cx->their_mark = NULL;
 2981|       |        }
 2982|       |#endif
 2983|    739|        return SECFailure;
 2984|    739|    }
 2985|       |
 2986|       |#if 0 /* XXX This is what I want, but cannot have because it seems we    \
 2987|       |       * have situations (like when downloading a pkcs7 cert chain from  \
 2988|       |       * some issuers) that give us a total length which is greater than \
 2989|       |       * the entire encoding.  So, we have to allow allDone to have a    \
 2990|       |       * remaining length greater than zero.  I wanted to catch internal \
 2991|       |       * bugs with this, noticing when we do not have the right length.  \
 2992|       |       * Oh well.                                                        \
 2993|       |       */
 2994|       |    PORT_Assert (len == 0
 2995|       |         && (cx->status == needBytes || cx->status == allDone));
 2996|       |#else
 2997|  1.30k|    PORT_Assert((len == 0 && cx->status == needBytes) || cx->status == allDone);
  ------------------
  |  |  120|  1.30k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  4.00k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 1.23k, False: 77]
  |  |  |  |  |  Branch (208:7): [True: 1.15k, False: 78]
  |  |  |  |  |  Branch (208:7): [True: 155, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2998|  1.30k|#endif
 2999|  1.30k|    return SECSuccess;
 3000|  2.04k|}
SEC_ASN1DecoderFinish_Util:
 3004|  2.04k|{
 3005|  2.04k|    SECStatus rv;
 3006|       |
 3007|  2.04k|    if (!cx || cx->status == needBytes) {
  ------------------
  |  Branch (3007:9): [True: 0, False: 2.04k]
  |  Branch (3007:16): [True: 1.15k, False: 894]
  ------------------
 3008|  1.15k|        if (0 == PORT_GetError()) {
  ------------------
  |  |   62|  1.15k|#define PORT_GetError PORT_GetError_Util
  ------------------
  |  Branch (3008:13): [True: 0, False: 1.15k]
  ------------------
 3009|       |            /* don't clobber a real reason for the failure like bad password
 3010|       |             * or invalid algorithm */
 3011|      0|            PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 3012|      0|        }
 3013|  1.15k|        rv = SECFailure;
 3014|  1.15k|    } else {
 3015|    894|        rv = SECSuccess;
 3016|    894|    }
 3017|       |
 3018|       |    /*
 3019|       |     * XXX anything else that needs to be finished?
 3020|       |     */
 3021|       |
 3022|  2.04k|    if (cx) {
  ------------------
  |  Branch (3022:9): [True: 2.04k, False: 0]
  ------------------
 3023|  2.04k|        PORT_FreeArena(cx->our_pool, PR_TRUE);
  ------------------
  |  |   61|  2.04k|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(cx->our_pool, PR_TRUE);
  ------------------
  |  |  437|  2.04k|#define PR_TRUE 1
  ------------------
 3024|  2.04k|    }
 3025|       |
 3026|  2.04k|    return rv;
 3027|  2.04k|}
SEC_ASN1DecoderStart_Util:
 3032|  2.04k|{
 3033|  2.04k|    PLArenaPool *our_pool;
 3034|  2.04k|    SEC_ASN1DecoderContext *cx;
 3035|       |
 3036|  2.04k|    our_pool = PORT_NewArena(SEC_ASN1_DEFAULT_ARENA_SIZE);
  ------------------
  |  |   63|  2.04k|#define PORT_NewArena PORT_NewArena_Util
  ------------------
                  our_pool = PORT_NewArena(SEC_ASN1_DEFAULT_ARENA_SIZE);
  ------------------
  |  |   60|  2.04k|#define SEC_ASN1_DEFAULT_ARENA_SIZE (2048)
  ------------------
 3037|  2.04k|    if (our_pool == NULL)
  ------------------
  |  Branch (3037:9): [True: 0, False: 2.04k]
  ------------------
 3038|      0|        return NULL;
 3039|       |
 3040|  2.04k|    cx = (SEC_ASN1DecoderContext *)PORT_ArenaZAlloc(our_pool, sizeof(*cx));
  ------------------
  |  |   59|  2.04k|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
 3041|  2.04k|    if (cx == NULL) {
  ------------------
  |  Branch (3041:9): [True: 0, False: 2.04k]
  ------------------
 3042|      0|        PORT_FreeArena(our_pool, PR_FALSE);
  ------------------
  |  |   61|      0|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(our_pool, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 3043|      0|        return NULL;
 3044|      0|    }
 3045|       |
 3046|  2.04k|    cx->our_pool = our_pool;
 3047|  2.04k|    if (their_pool != NULL) {
  ------------------
  |  Branch (3047:9): [True: 2.04k, False: 0]
  ------------------
 3048|  2.04k|        cx->their_pool = their_pool;
 3049|       |#ifdef SEC_ASN1D_FREE_ON_ERROR
 3050|       |        cx->their_mark = PORT_ArenaMark(their_pool);
 3051|       |#endif
 3052|  2.04k|    }
 3053|       |
 3054|  2.04k|    cx->status = needBytes;
 3055|       |
 3056|  2.04k|    if (sec_asn1d_push_state(cx, theTemplate, dest, PR_FALSE) == NULL || sec_asn1d_init_state_based_on_template(cx->current) == NULL) {
  ------------------
  |  |  438|  2.04k|#define PR_FALSE 0
  ------------------
  |  Branch (3056:9): [True: 0, False: 2.04k]
  |  Branch (3056:74): [True: 0, False: 2.04k]
  ------------------
 3057|       |        /*
 3058|       |         * Trouble initializing (probably due to failed allocations)
 3059|       |         * requires that we just give up.
 3060|       |         */
 3061|      0|        PORT_FreeArena(our_pool, PR_FALSE);
  ------------------
  |  |   61|      0|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(our_pool, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 3062|      0|        return NULL;
 3063|      0|    }
 3064|       |
 3065|  2.04k|    return cx;
 3066|  2.04k|}
SEC_ASN1DecoderSetMaximumElementSize:
 3110|  2.04k|{
 3111|  2.04k|    cx->max_element_size = max_size;
 3112|  2.04k|}
SEC_ASN1Decode_Util:
 3126|  2.04k|{
 3127|  2.04k|    SEC_ASN1DecoderContext *dcx;
 3128|  2.04k|    SECStatus urv, frv;
 3129|       |
 3130|  2.04k|    dcx = SEC_ASN1DecoderStart(poolp, dest, theTemplate);
  ------------------
  |  |   85|  2.04k|#define SEC_ASN1DecoderStart SEC_ASN1DecoderStart_Util
  ------------------
 3131|  2.04k|    if (dcx == NULL)
  ------------------
  |  Branch (3131:9): [True: 0, False: 2.04k]
  ------------------
 3132|      0|        return SECFailure;
 3133|       |
 3134|       |    /* In one-shot mode, there's no possibility of streaming data beyond the
 3135|       |     * length of len */
 3136|  2.04k|    SEC_ASN1DecoderSetMaximumElementSize(dcx, len);
 3137|       |
 3138|  2.04k|    urv = SEC_ASN1DecoderUpdate(dcx, buf, len);
  ------------------
  |  |   86|  2.04k|#define SEC_ASN1DecoderUpdate SEC_ASN1DecoderUpdate_Util
  ------------------
 3139|  2.04k|    frv = SEC_ASN1DecoderFinish(dcx);
  ------------------
  |  |   82|  2.04k|#define SEC_ASN1DecoderFinish SEC_ASN1DecoderFinish_Util
  ------------------
 3140|       |
 3141|  2.04k|    if (urv != SECSuccess)
  ------------------
  |  Branch (3141:9): [True: 739, False: 1.30k]
  ------------------
 3142|    739|        return urv;
 3143|       |
 3144|  1.30k|    return frv;
 3145|  2.04k|}
SEC_ASN1DecodeItem_Util:
 3151|  2.04k|{
 3152|  2.04k|    return SEC_ASN1Decode(poolp, dest, theTemplate,
  ------------------
  |  |   76|  2.04k|#define SEC_ASN1Decode SEC_ASN1Decode_Util
  ------------------
 3153|  2.04k|                          (const char *)src->data, src->len);
 3154|  2.04k|}
secasn1d.c:sec_asn1d_parse_identifier:
  740|  10.1M|{
  741|  10.1M|    unsigned char byte;
  742|  10.1M|    unsigned char tag_number;
  743|       |
  744|  10.1M|    PORT_Assert(state->place == beforeIdentifier);
  ------------------
  |  |  120|  10.1M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  10.1M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 10.1M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  745|       |
  746|  10.1M|    if (len == 0) {
  ------------------
  |  Branch (746:9): [True: 624, False: 10.1M]
  ------------------
  747|    624|        state->top->status = needBytes;
  748|    624|        return 0;
  749|    624|    }
  750|       |
  751|  10.1M|    byte = (unsigned char)*buf;
  752|       |#ifdef DEBUG_ASN1D_STATES
  753|       |    {
  754|       |        int bufsize = 256;
  755|       |        char kindBuf[bufsize];
  756|       |        formatKind(byte, kindBuf, bufsize);
  757|       |        printf("Found tag %02x %s\n", byte, kindBuf);
  758|       |    }
  759|       |#endif
  760|  10.1M|    tag_number = byte & SEC_ASN1_TAGNUM_MASK;
  ------------------
  |  |   76|  10.1M|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  761|       |
  762|  10.1M|    if (IS_HIGH_TAG_NUMBER(tag_number)) {
  ------------------
  |  |  260|  10.1M|#define IS_HIGH_TAG_NUMBER(n) ((n) == SEC_ASN1_HIGH_TAG_NUMBER)
  |  |  ------------------
  |  |  |  |  107|  10.1M|#define SEC_ASN1_HIGH_TAG_NUMBER 0x1f
  |  |  ------------------
  |  |  |  Branch (260:31): [True: 23.6k, False: 10.1M]
  |  |  ------------------
  ------------------
  763|  23.6k|        state->place = duringIdentifier;
  764|  23.6k|        state->found_tag_number = 0;
  765|       |        /*
  766|       |         * Actually, we have no idea how many bytes are pending, but we
  767|       |         * do know that it is at least 1.  That is all we know; we have
  768|       |         * to look at each byte to know if there is another, etc.
  769|       |         */
  770|  23.6k|        state->pending = 1;
  771|  10.1M|    } else {
  772|  10.1M|        if (byte == 0 && sec_asn1d_parent_allows_EOC(state)) {
  ------------------
  |  Branch (772:13): [True: 7.79M, False: 2.30M]
  |  Branch (772:26): [True: 189k, False: 7.60M]
  ------------------
  773|       |            /*
  774|       |             * Our parent has indefinite-length encoding, and the
  775|       |             * entire tag found is 0, so it seems that we have hit the
  776|       |             * end-of-contents octets.  To handle this, we just change
  777|       |             * our state to that which expects to get the bytes of the
  778|       |             * end-of-contents octets and let that code re-read this byte
  779|       |             * so that our categorization of field types is correct.
  780|       |             * After that, our parent will then deal with everything else.
  781|       |             */
  782|   189k|            state->place = duringEndOfContents;
  783|   189k|            state->pending = 2;
  784|   189k|            state->found_tag_number = 0;
  785|   189k|            state->found_tag_modifiers = 0;
  786|       |            /*
  787|       |             * We might be an optional field that is, as we now find out,
  788|       |             * missing.  Give our parent a clue that this happened.
  789|       |             */
  790|   189k|            if (state->optional)
  ------------------
  |  Branch (790:17): [True: 116, False: 189k]
  ------------------
  791|    116|                state->missing = PR_TRUE;
  ------------------
  |  |  437|    116|#define PR_TRUE 1
  ------------------
  792|   189k|            return 0;
  793|   189k|        }
  794|  9.91M|        state->place = afterIdentifier;
  795|  9.91M|        state->found_tag_number = tag_number;
  796|  9.91M|    }
  797|  9.94M|    state->found_tag_modifiers = byte & ~SEC_ASN1_TAGNUM_MASK;
  ------------------
  |  |   76|  9.94M|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  798|       |
  799|  9.94M|    return 1;
  800|  10.1M|}
secasn1d.c:sec_asn1d_parent_allows_EOC:
  722|  7.79M|{
  723|       |    /* get state of enclosing construct. */
  724|  7.79M|    state = sec_asn1d_get_enclosing_construct(state);
  725|  7.79M|    if (state) {
  ------------------
  |  Branch (725:9): [True: 7.79M, False: 0]
  ------------------
  726|  7.79M|        sec_asn1d_parse_place place = state->place;
  727|       |        /* Is it one of the types that permits an unexpected EOC? */
  728|  7.79M|        int eoc_permitted =
  729|  7.79M|            (place == duringGroup ||
  ------------------
  |  Branch (729:14): [True: 7.60M, False: 189k]
  ------------------
  730|  7.79M|             place == duringConstructedString ||
  ------------------
  |  Branch (730:14): [True: 189k, False: 276]
  ------------------
  731|  7.79M|             state->child->optional);
  ------------------
  |  Branch (731:14): [True: 158, False: 118]
  ------------------
  732|  7.79M|        return (state->indefinite && eoc_permitted) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|   189k|#define PR_TRUE 1
  ------------------
                      return (state->indefinite && eoc_permitted) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|  7.60M|#define PR_FALSE 0
  ------------------
  |  Branch (732:17): [True: 189k, False: 7.60M]
  |  Branch (732:38): [True: 189k, False: 20]
  ------------------
  733|  7.79M|    }
  734|      0|    return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  735|  7.79M|}
secasn1d.c:sec_asn1d_get_enclosing_construct:
  701|  46.1M|{
  702|  49.8M|    for (state = state->parent; state; state = state->parent) {
  ------------------
  |  Branch (702:33): [True: 47.9M, False: 1.89M]
  ------------------
  703|  47.9M|        sec_asn1d_parse_place place = state->place;
  704|  47.9M|        if (place != afterImplicit &&
  ------------------
  |  Branch (704:13): [True: 46.1M, False: 1.75M]
  ------------------
  705|  47.9M|            place != afterPointer &&
  ------------------
  |  Branch (705:13): [True: 44.2M, False: 1.91M]
  ------------------
  706|  47.9M|            place != afterInline &&
  ------------------
  |  Branch (706:13): [True: 44.2M, False: 12.1k]
  ------------------
  707|  47.9M|            place != afterSaveEncoding &&
  ------------------
  |  Branch (707:13): [True: 44.2M, False: 0]
  ------------------
  708|  47.9M|            place != duringSaveEncoding &&
  ------------------
  |  Branch (708:13): [True: 44.2M, False: 0]
  ------------------
  709|  47.9M|            place != duringChoice) {
  ------------------
  |  Branch (709:13): [True: 44.2M, False: 0]
  ------------------
  710|       |
  711|       |            /* we've walked up the stack to a state that represents
  712|       |            ** the enclosing construct.
  713|       |            */
  714|  44.2M|            break;
  715|  44.2M|        }
  716|  47.9M|    }
  717|  46.1M|    return state;
  718|  46.1M|}
secasn1d.c:sec_asn1d_parse_more_identifier:
  805|  23.7k|{
  806|  23.7k|    unsigned char byte;
  807|  23.7k|    int count;
  808|       |
  809|  23.7k|    PORT_Assert(state->pending == 1);
  ------------------
  |  |  120|  23.7k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  23.7k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 23.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  810|  23.7k|    PORT_Assert(state->place == duringIdentifier);
  ------------------
  |  |  120|  23.7k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  23.7k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 23.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  811|       |
  812|  23.7k|    if (len == 0) {
  ------------------
  |  Branch (812:9): [True: 78, False: 23.6k]
  ------------------
  813|     78|        state->top->status = needBytes;
  814|     78|        return 0;
  815|     78|    }
  816|       |
  817|  23.6k|    count = 0;
  818|       |
  819|  97.7k|    while (len && state->pending) {
  ------------------
  |  Branch (819:12): [True: 97.6k, False: 133]
  |  Branch (819:19): [True: 74.1k, False: 23.5k]
  ------------------
  820|  74.1k|        if (HIGH_BITS(state->found_tag_number, TAG_NUMBER_BITS) != 0) {
  ------------------
  |  |  268|  74.1k|#define HIGH_BITS(field, cnt) ((field) >> ((sizeof(field) * 8) - (cnt)))
  ------------------
  |  Branch (820:13): [True: 16, False: 74.1k]
  ------------------
  821|       |            /*
  822|       |             * The given high tag number overflows our container;
  823|       |             * just give up.  This is not likely to *ever* happen.
  824|       |             */
  825|     16|            PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|     16|#define PORT_SetError PORT_SetError_Util
  ------------------
  826|     16|            state->top->status = decodeError;
  827|     16|            return 0;
  828|     16|        }
  829|       |
  830|  74.1k|        state->found_tag_number <<= TAG_NUMBER_BITS;
  ------------------
  |  |  262|  74.1k|#define TAG_NUMBER_BITS 7
  ------------------
  831|       |
  832|  74.1k|        byte = (unsigned char)buf[count++];
  833|  74.1k|        state->found_tag_number |= (byte & TAG_NUMBER_MASK);
  ------------------
  |  |  263|  74.1k|#define TAG_NUMBER_MASK 0x7f
  ------------------
  834|       |
  835|  74.1k|        len--;
  836|  74.1k|        if (LAST_TAG_NUMBER_BYTE(byte))
  ------------------
  |  |  261|  74.1k|#define LAST_TAG_NUMBER_BYTE(b) (((b)&0x80) == 0)
  |  |  ------------------
  |  |  |  Branch (261:33): [True: 23.5k, False: 50.5k]
  |  |  ------------------
  ------------------
  837|  23.5k|            state->pending = 0;
  838|  74.1k|    }
  839|       |
  840|  23.6k|    if (state->pending == 0)
  ------------------
  |  Branch (840:9): [True: 23.5k, False: 74]
  ------------------
  841|  23.5k|        state->place = afterIdentifier;
  842|       |
  843|  23.6k|    return count;
  844|  23.6k|}
secasn1d.c:sec_asn1d_confirm_identifier:
  848|  9.94M|{
  849|  9.94M|    PRBool match;
  850|       |
  851|  9.94M|    PORT_Assert(state->place == afterIdentifier);
  ------------------
  |  |  120|  9.94M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  9.94M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9.94M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  852|       |
  853|  9.94M|    match = (PRBool)(((state->found_tag_modifiers & state->check_tag_mask) == state->expect_tag_modifiers) && ((state->found_tag_number & state->check_tag_mask) == state->expect_tag_number));
  ------------------
  |  Branch (853:22): [True: 9.94M, False: 518]
  |  Branch (853:111): [True: 9.93M, False: 73]
  ------------------
  854|  9.94M|    if (match) {
  ------------------
  |  Branch (854:9): [True: 9.93M, False: 591]
  ------------------
  855|  9.93M|        state->place = beforeLength;
  856|  9.93M|    } else {
  857|    591|        if (state->optional) {
  ------------------
  |  Branch (857:13): [True: 495, False: 96]
  ------------------
  858|    495|            state->missing = PR_TRUE;
  ------------------
  |  |  437|    495|#define PR_TRUE 1
  ------------------
  859|    495|            state->place = afterEndOfContents;
  860|    495|        } else {
  861|     96|            PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|     96|#define PORT_SetError PORT_SetError_Util
  ------------------
  862|     96|            state->top->status = decodeError;
  863|     96|        }
  864|    591|    }
  865|  9.94M|}
secasn1d.c:sec_asn1d_parse_length:
  870|  9.93M|{
  871|  9.93M|    unsigned char byte;
  872|       |
  873|  9.93M|    PORT_Assert(state->place == beforeLength);
  ------------------
  |  |  120|  9.93M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  9.93M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9.93M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  874|       |
  875|  9.93M|    if (len == 0) {
  ------------------
  |  Branch (875:9): [True: 52, False: 9.93M]
  ------------------
  876|     52|        state->top->status = needBytes;
  877|     52|        return 0;
  878|     52|    }
  879|       |
  880|       |    /*
  881|       |     * The default/likely outcome.  It may get adjusted below.
  882|       |     */
  883|  9.93M|    state->place = afterLength;
  884|       |
  885|  9.93M|    byte = (unsigned char)*buf;
  886|       |
  887|  9.93M|    if (LENGTH_IS_SHORT_FORM(byte)) {
  ------------------
  |  |  265|  9.93M|#define LENGTH_IS_SHORT_FORM(b) (((b)&0x80) == 0)
  |  |  ------------------
  |  |  |  Branch (265:33): [True: 9.73M, False: 201k]
  |  |  ------------------
  ------------------
  888|  9.73M|        state->contents_length = byte;
  889|  9.73M|    } else {
  890|   201k|        state->contents_length = 0;
  891|   201k|        state->pending = LONG_FORM_LENGTH(byte);
  ------------------
  |  |  266|   201k|#define LONG_FORM_LENGTH(b) ((b)&0x7f)
  ------------------
  892|   201k|        if (state->pending == 0) {
  ------------------
  |  Branch (892:13): [True: 198k, False: 2.90k]
  ------------------
  893|   198k|            state->indefinite = PR_TRUE;
  ------------------
  |  |  437|   198k|#define PR_TRUE 1
  ------------------
  894|   198k|        } else {
  895|  2.90k|            state->place = duringLength;
  896|  2.90k|        }
  897|   201k|    }
  898|       |
  899|       |    /* If we're parsing an ANY, SKIP, or SAVE template, and
  900|       |    ** the object being saved is definite length encoded and constructed,
  901|       |    ** there's no point in decoding that construct's members.
  902|       |    ** So, just forget it's constructed and treat it as primitive.
  903|       |    ** (SAVE appears as an ANY at this point)
  904|       |    */
  905|  9.93M|    if (!state->indefinite &&
  ------------------
  |  Branch (905:9): [True: 9.74M, False: 198k]
  ------------------
  906|  9.93M|        (state->underlying_kind & (SEC_ASN1_ANY | SEC_ASN1_SKIP))) {
  ------------------
  |  |  133|  9.74M|#define SEC_ASN1_ANY 0x00400
  ------------------
                      (state->underlying_kind & (SEC_ASN1_ANY | SEC_ASN1_SKIP))) {
  ------------------
  |  |  140|  9.74M|#define SEC_ASN1_SKIP 0x08000         /* skip a field; only for decoding */
  ------------------
  |  Branch (906:9): [True: 9.72M, False: 13.2k]
  ------------------
  907|  9.72M|        state->found_tag_modifiers &= ~SEC_ASN1_CONSTRUCTED;
  ------------------
  |  |  117|  9.72M|#define SEC_ASN1_CONSTRUCTED 0x20
  ------------------
  908|  9.72M|    }
  909|       |
  910|  9.93M|    return 1;
  911|  9.93M|}
secasn1d.c:sec_asn1d_parse_more_length:
  916|  2.92k|{
  917|  2.92k|    int count;
  918|       |
  919|  2.92k|    PORT_Assert(state->pending > 0);
  ------------------
  |  |  120|  2.92k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  2.92k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 2.92k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  920|  2.92k|    PORT_Assert(state->place == duringLength);
  ------------------
  |  |  120|  2.92k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  2.92k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 2.92k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  921|       |
  922|  2.92k|    if (len == 0) {
  ------------------
  |  Branch (922:9): [True: 29, False: 2.89k]
  ------------------
  923|     29|        state->top->status = needBytes;
  924|     29|        return 0;
  925|     29|    }
  926|       |
  927|  2.89k|    count = 0;
  928|       |
  929|  34.7k|    while (len && state->pending) {
  ------------------
  |  Branch (929:12): [True: 34.4k, False: 331]
  |  Branch (929:19): [True: 31.9k, False: 2.55k]
  ------------------
  930|  31.9k|        if (HIGH_BITS(state->contents_length, 9) != 0) {
  ------------------
  |  |  268|  31.9k|#define HIGH_BITS(field, cnt) ((field) >> ((sizeof(field) * 8) - (cnt)))
  ------------------
  |  Branch (930:13): [True: 15, False: 31.9k]
  ------------------
  931|       |            /*
  932|       |             * The given full content length overflows our container;
  933|       |             * just give up.
  934|       |             */
  935|     15|            PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|     15|#define PORT_SetError PORT_SetError_Util
  ------------------
  936|     15|            state->top->status = decodeError;
  937|     15|            return 0;
  938|     15|        }
  939|       |
  940|  31.9k|        state->contents_length <<= 8;
  941|  31.9k|        state->contents_length |= (unsigned char)buf[count++];
  942|       |
  943|  31.9k|        len--;
  944|  31.9k|        state->pending--;
  945|  31.9k|    }
  946|       |
  947|  2.88k|    if (state->pending == 0)
  ------------------
  |  Branch (947:9): [True: 2.85k, False: 22]
  ------------------
  948|  2.85k|        state->place = afterLength;
  949|       |
  950|  2.88k|    return count;
  951|  2.89k|}
secasn1d.c:sec_asn1d_prepare_for_contents:
  983|  9.93M|{
  984|  9.93M|    SECItem *item;
  985|  9.93M|    PLArenaPool *poolp;
  986|  9.93M|    unsigned long alloc_len;
  987|  9.93M|    sec_asn1d_state *parent;
  988|       |
  989|       |#ifdef DEBUG_ASN1D_STATES
  990|       |    {
  991|       |        printf("Found Length %lu %s\n", state->contents_length,
  992|       |               state->indefinite ? "indefinite" : "");
  993|       |    }
  994|       |#endif
  995|       |
  996|       |    /**
  997|       |     * The maximum length for a child element should be constrained to the
  998|       |     * length remaining in the first definite length element in the ancestor
  999|       |     * stack. If there is no definite length element in the ancestor stack,
 1000|       |     * there's nothing to constrain the length of the child, so there's no
 1001|       |     * further processing necessary.
 1002|       |     *
 1003|       |     * It's necessary to walk the ancestor stack, because it's possible to have
 1004|       |     * definite length children that are part of an indefinite length element,
 1005|       |     * which is itself part of an indefinite length element, and which is
 1006|       |     * ultimately part of a definite length element. A simple example of this
 1007|       |     * would be the handling of constructed OCTET STRINGs in BER encoding.
 1008|       |     *
 1009|       |     * This algorithm finds the first definite length element in the ancestor
 1010|       |     * stack, if any, and if so, ensures that the length of the child element
 1011|       |     * is consistent with the number of bytes remaining in the constraining
 1012|       |     * ancestor element (that is, after accounting for any other sibling
 1013|       |     * elements that may have been read).
 1014|       |     *
 1015|       |     * It's slightly complicated by the need to account both for integer
 1016|       |     * underflow and overflow, as well as ensure that for indefinite length
 1017|       |     * encodings, there's also enough space for the End-of-Contents (EOC)
 1018|       |     * octets (Tag = 0x00, Length = 0x00, or two bytes).
 1019|       |     */
 1020|       |
 1021|       |    /* Determine the maximum length available for this element by finding the
 1022|       |     * first definite length ancestor, if any. */
 1023|  9.93M|    parent = sec_asn1d_get_enclosing_construct(state);
 1024|  21.8M|    while (parent && parent->indefinite) {
  ------------------
  |  Branch (1024:12): [True: 19.9M, False: 1.89M]
  |  Branch (1024:22): [True: 11.9M, False: 8.04M]
  ------------------
 1025|  11.9M|        parent = sec_asn1d_get_enclosing_construct(parent);
 1026|  11.9M|    }
 1027|       |    /* If parent is null, state is either the outermost state / at the top of
 1028|       |     * the stack, or the outermost state uses indefinite length encoding. In
 1029|       |     * these cases, there's nothing external to constrain this element, so
 1030|       |     * there's nothing to check. */
 1031|  9.93M|    if (parent) {
  ------------------
  |  Branch (1031:9): [True: 8.04M, False: 1.89M]
  ------------------
 1032|  8.04M|        unsigned long remaining = parent->pending;
 1033|  8.04M|        parent = state;
 1034|  10.7M|        do {
 1035|  10.7M|            if (!sec_asn1d_check_and_subtract_length(
  ------------------
  |  Branch (1035:17): [True: 9, False: 10.7M]
  ------------------
 1036|  10.7M|                    &remaining, parent->consumed, state->top) ||
 1037|       |                /* If parent->indefinite is true, parent->contents_length is
 1038|       |                 * zero and this is a no-op. */
 1039|  10.7M|                !sec_asn1d_check_and_subtract_length(
  ------------------
  |  Branch (1039:17): [True: 12, False: 10.7M]
  ------------------
 1040|  10.7M|                    &remaining, parent->contents_length, state->top) ||
 1041|       |                /* If parent->indefinite is true, then ensure there is enough
 1042|       |                 * space for an EOC tag of 2 bytes. */
 1043|  10.7M|                (parent->indefinite && !sec_asn1d_check_and_subtract_length(&remaining, 2, state->top))) {
  ------------------
  |  Branch (1043:18): [True: 2.88M, False: 7.87M]
  |  Branch (1043:40): [True: 6, False: 2.88M]
  ------------------
 1044|       |                /* This element is larger than its enclosing element, which is
 1045|       |                 * invalid. */
 1046|     27|                return;
 1047|     27|            }
 1048|  10.7M|        } while ((parent = sec_asn1d_get_enclosing_construct(parent)) &&
  ------------------
  |  Branch (1048:18): [True: 10.7M, False: 0]
  ------------------
 1049|  10.7M|                 parent->indefinite);
  ------------------
  |  Branch (1049:18): [True: 2.71M, False: 8.04M]
  ------------------
 1050|  8.04M|    }
 1051|       |
 1052|       |    /*
 1053|       |     * XXX I cannot decide if this allocation should exclude the case
 1054|       |     *     where state->endofcontents is true -- figure it out!
 1055|       |     */
 1056|  9.93M|    if (state->allocate) {
  ------------------
  |  Branch (1056:9): [True: 9.45M, False: 487k]
  ------------------
 1057|  9.45M|        void *dest;
 1058|       |
 1059|  9.45M|        PORT_Assert(state->dest == NULL);
  ------------------
  |  |  120|  9.45M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  9.45M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9.45M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1060|       |        /*
 1061|       |         * We are handling a POINTER or a member of a GROUP, and need to
 1062|       |         * allocate for the data structure.
 1063|       |         */
 1064|  9.45M|        dest = sec_asn1d_zalloc(state->top->their_pool,
 1065|  9.45M|                                state->theTemplate->size);
 1066|  9.45M|        if (dest == NULL) {
  ------------------
  |  Branch (1066:13): [True: 0, False: 9.45M]
  ------------------
 1067|      0|            state->top->status = decodeError;
 1068|      0|            return;
 1069|      0|        }
 1070|  9.45M|        state->dest = (char *)dest + state->theTemplate->offset;
 1071|       |
 1072|       |        /*
 1073|       |         * For a member of a GROUP, our parent will later put the
 1074|       |         * pointer wherever it belongs.  But for a POINTER, we need
 1075|       |         * to record the destination now, in case notify or filter
 1076|       |         * procs need access to it -- they cannot find it otherwise,
 1077|       |         * until it is too late (for one-pass processing).
 1078|       |         */
 1079|  9.45M|        if (state->parent->place == afterPointer) {
  ------------------
  |  Branch (1079:13): [True: 2.38k, False: 9.44M]
  ------------------
 1080|  2.38k|            void **placep;
 1081|       |
 1082|  2.38k|            placep = state->parent->dest;
 1083|  2.38k|            *placep = dest;
 1084|  2.38k|        }
 1085|  9.45M|    }
 1086|       |
 1087|       |    /*
 1088|       |     * Remember, length may be indefinite here!  In that case,
 1089|       |     * both contents_length and pending will be zero.
 1090|       |     */
 1091|  9.93M|    state->pending = state->contents_length;
 1092|       |
 1093|       |    /*
 1094|       |     * An EXPLICIT is nothing but an outer header, which we have
 1095|       |     * already parsed and accepted.  Now we need to do the inner
 1096|       |     * header and its contents.
 1097|       |     */
 1098|  9.93M|    if (state->explicit) {
  ------------------
  |  Branch (1098:9): [True: 2.44k, False: 9.93M]
  ------------------
 1099|  2.44k|        state->place = afterExplicit;
 1100|  2.44k|        state = sec_asn1d_push_state(state->top,
 1101|  2.44k|                                     SEC_ASN1GetSubtemplate(state->theTemplate,
 1102|  2.44k|                                                            state->dest,
 1103|  2.44k|                                                            PR_FALSE),
  ------------------
  |  |  438|  2.44k|#define PR_FALSE 0
  ------------------
 1104|  2.44k|                                     state->dest, PR_TRUE);
  ------------------
  |  |  437|  2.44k|#define PR_TRUE 1
  ------------------
 1105|  2.44k|        if (state != NULL) {
  ------------------
  |  Branch (1105:13): [True: 2.44k, False: 0]
  ------------------
 1106|  2.44k|            (void)sec_asn1d_init_state_based_on_template(state);
 1107|  2.44k|        }
 1108|  2.44k|        return;
 1109|  2.44k|    }
 1110|       |
 1111|       |    /*
 1112|       |     * For GROUP (SET OF, SEQUENCE OF), even if we know the length here
 1113|       |     * we cannot tell how many items we will end up with ... so push a
 1114|       |     * state that can keep track of "children" (the individual members
 1115|       |     * of the group; we will allocate as we go and put them all together
 1116|       |     * at the end.
 1117|       |     */
 1118|  9.93M|    if (state->underlying_kind & SEC_ASN1_GROUP) {
  ------------------
  |  |  136|  9.93M|#define SEC_ASN1_GROUP 0x02000        /* with SET or SEQUENCE means \
  ------------------
  |  Branch (1118:9): [True: 1.44k, False: 9.93M]
  ------------------
 1119|       |        /* XXX If this assertion holds (should be able to confirm it via
 1120|       |         * inspection, too) then move this code into the switch statement
 1121|       |         * below under cases SET_OF and SEQUENCE_OF; it will be cleaner.
 1122|       |         */
 1123|  1.44k|        PORT_Assert(state->underlying_kind == SEC_ASN1_SET_OF || state->underlying_kind == SEC_ASN1_SEQUENCE_OF || state->underlying_kind == (SEC_ASN1_SET_OF | SEC_ASN1_DYNAMIC) || state->underlying_kind == (SEC_ASN1_SEQUENCE_OF | SEC_ASN1_DYNAMIC));
  ------------------
  |  |  120|  1.44k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  4.33k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 1.44k, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 0, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 0, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1124|  1.44k|        if (state->contents_length != 0 || state->indefinite) {
  ------------------
  |  Branch (1124:13): [True: 390, False: 1.05k]
  |  Branch (1124:44): [True: 112, False: 942]
  ------------------
 1125|    502|            const SEC_ASN1Template *subt;
 1126|       |
 1127|    502|            state->place = duringGroup;
 1128|    502|            subt = SEC_ASN1GetSubtemplate(state->theTemplate, state->dest,
 1129|    502|                                          PR_FALSE);
  ------------------
  |  |  438|    502|#define PR_FALSE 0
  ------------------
 1130|    502|            state = sec_asn1d_push_state(state->top, subt, NULL, PR_TRUE);
  ------------------
  |  |  437|    502|#define PR_TRUE 1
  ------------------
 1131|    502|            if (state != NULL) {
  ------------------
  |  Branch (1131:17): [True: 502, False: 0]
  ------------------
 1132|    502|                if (!state->top->filter_only)
  ------------------
  |  Branch (1132:21): [True: 502, False: 0]
  ------------------
 1133|    502|                    state->allocate = PR_TRUE; /* XXX propogate this? */
  ------------------
  |  |  437|    502|#define PR_TRUE 1
  ------------------
 1134|       |                /*
 1135|       |                 * Do the "before" field notification for next in group.
 1136|       |                 */
 1137|    502|                sec_asn1d_notify_before(state->top, state->dest, state->depth);
 1138|    502|                (void)sec_asn1d_init_state_based_on_template(state);
 1139|    502|            }
 1140|    942|        } else {
 1141|       |            /*
 1142|       |             * A group of zero; we are done.
 1143|       |             * Set state to afterGroup and let that code plant the NULL.
 1144|       |             */
 1145|    942|            state->place = afterGroup;
 1146|    942|        }
 1147|  1.44k|        return;
 1148|  1.44k|    }
 1149|       |
 1150|  9.93M|    switch (state->underlying_kind) {
 1151|  4.20k|        case SEC_ASN1_SEQUENCE:
  ------------------
  |  |   92|  4.20k|#define SEC_ASN1_SEQUENCE 0x10
  ------------------
  |  Branch (1151:9): [True: 4.20k, False: 9.93M]
  ------------------
 1152|       |            /*
 1153|       |             * We need to push a child to handle the individual fields.
 1154|       |             */
 1155|  4.20k|            state->place = duringSequence;
 1156|  4.20k|            state = sec_asn1d_push_state(state->top, state->theTemplate + 1,
 1157|  4.20k|                                         state->dest, PR_TRUE);
  ------------------
  |  |  437|  4.20k|#define PR_TRUE 1
  ------------------
 1158|  4.20k|            if (state != NULL) {
  ------------------
  |  Branch (1158:17): [True: 4.20k, False: 1]
  ------------------
 1159|       |                /*
 1160|       |                 * Do the "before" field notification.
 1161|       |                 */
 1162|  4.20k|                sec_asn1d_notify_before(state->top, state->dest, state->depth);
 1163|  4.20k|                (void)sec_asn1d_init_state_based_on_template(state);
 1164|  4.20k|            }
 1165|  4.20k|            break;
 1166|       |
 1167|      0|        case SEC_ASN1_SET: /* XXX SET is not really implemented */
  ------------------
  |  |   93|      0|#define SEC_ASN1_SET 0x11
  ------------------
  |  Branch (1167:9): [True: 0, False: 9.93M]
  ------------------
 1168|       |            /*
 1169|       |             * XXX A plain SET requires special handling; scanning of a
 1170|       |             * template to see where a field should go (because by definition,
 1171|       |             * they are not in any particular order, and you have to look at
 1172|       |             * each tag to disambiguate what the field is).  We may never
 1173|       |             * implement this because in practice, it seems to be unused.
 1174|       |             */
 1175|      0|            PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1176|      0|            PORT_SetError(SEC_ERROR_BAD_DER); /* XXX */
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1177|      0|            state->top->status = decodeError;
 1178|      0|            break;
 1179|       |
 1180|      0|        case SEC_ASN1_NULL:
  ------------------
  |  |   81|      0|#define SEC_ASN1_NULL 0x05
  ------------------
  |  Branch (1180:9): [True: 0, False: 9.93M]
  ------------------
 1181|       |            /*
 1182|       |             * The NULL type, by definition, is "nothing", content length of zero.
 1183|       |             * An indefinite-length encoding is not alloweed.
 1184|       |             */
 1185|      0|            if (state->contents_length || state->indefinite) {
  ------------------
  |  Branch (1185:17): [True: 0, False: 0]
  |  Branch (1185:43): [True: 0, False: 0]
  ------------------
 1186|      0|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1187|      0|                state->top->status = decodeError;
 1188|      0|                break;
 1189|      0|            }
 1190|      0|            if (state->dest != NULL) {
  ------------------
  |  Branch (1190:17): [True: 0, False: 0]
  ------------------
 1191|      0|                item = (SECItem *)(state->dest);
 1192|      0|                item->data = NULL;
 1193|      0|                item->len = 0;
 1194|      0|            }
 1195|      0|            state->place = afterEndOfContents;
 1196|      0|            break;
 1197|       |
 1198|      0|        case SEC_ASN1_BMP_STRING:
  ------------------
  |  |  106|      0|#define SEC_ASN1_BMP_STRING 0x1e
  ------------------
  |  Branch (1198:9): [True: 0, False: 9.93M]
  ------------------
 1199|       |            /* Error if length is not divisable by 2 */
 1200|      0|            if (state->contents_length % 2) {
  ------------------
  |  Branch (1200:17): [True: 0, False: 0]
  ------------------
 1201|      0|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1202|      0|                state->top->status = decodeError;
 1203|      0|                break;
 1204|      0|            }
 1205|       |            /* otherwise, handle as other string types */
 1206|      0|            goto regular_string_type;
 1207|       |
 1208|      0|        case SEC_ASN1_UNIVERSAL_STRING:
  ------------------
  |  |  104|      0|#define SEC_ASN1_UNIVERSAL_STRING 0x1c
  ------------------
  |  Branch (1208:9): [True: 0, False: 9.93M]
  ------------------
 1209|       |            /* Error if length is not divisable by 4 */
 1210|      0|            if (state->contents_length % 4) {
  ------------------
  |  Branch (1210:17): [True: 0, False: 0]
  ------------------
 1211|      0|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1212|      0|                state->top->status = decodeError;
 1213|      0|                break;
 1214|      0|            }
 1215|       |            /* otherwise, handle as other string types */
 1216|      0|            goto regular_string_type;
 1217|       |
 1218|      0|        case SEC_ASN1_SKIP:
  ------------------
  |  |  140|      0|#define SEC_ASN1_SKIP 0x08000         /* skip a field; only for decoding */
  ------------------
  |  Branch (1218:9): [True: 0, False: 9.93M]
  ------------------
 1219|  9.91M|        case SEC_ASN1_ANY:
  ------------------
  |  |  133|  9.91M|#define SEC_ASN1_ANY 0x00400
  ------------------
  |  Branch (1219:9): [True: 9.91M, False: 16.6k]
  ------------------
 1220|  9.91M|        case SEC_ASN1_ANY_CONTENTS:
  ------------------
  |  |  168|  9.91M|#define SEC_ASN1_ANY_CONTENTS (SEC_ASN1_ANY | SEC_ASN1_INNER)
  |  |  ------------------
  |  |  |  |  133|  9.91M|#define SEC_ASN1_ANY 0x00400
  |  |  ------------------
  |  |               #define SEC_ASN1_ANY_CONTENTS (SEC_ASN1_ANY | SEC_ASN1_INNER)
  |  |  ------------------
  |  |  |  |  141|  9.91M|#define SEC_ASN1_INNER 0x10000        /* with ANY means capture the      \
  |  |  ------------------
  ------------------
  |  Branch (1220:9): [True: 0, False: 9.93M]
  ------------------
 1221|       |        /*
 1222|       |         * These are not (necessarily) strings, but they need nearly
 1223|       |         * identical handling (especially when we need to deal with
 1224|       |         * constructed sub-pieces), so we pretend they are.
 1225|       |         */
 1226|       |        /* fallthru */
 1227|  9.91M|        regular_string_type:
 1228|  9.91M|        case SEC_ASN1_BIT_STRING:
  ------------------
  |  |   79|  9.91M|#define SEC_ASN1_BIT_STRING 0x03
  ------------------
  |  Branch (1228:9): [True: 0, False: 9.93M]
  ------------------
 1229|  9.91M|        case SEC_ASN1_IA5_STRING:
  ------------------
  |  |   98|  9.91M|#define SEC_ASN1_IA5_STRING 0x16
  ------------------
  |  Branch (1229:9): [True: 0, False: 9.93M]
  ------------------
 1230|  9.92M|        case SEC_ASN1_OCTET_STRING:
  ------------------
  |  |   80|  9.92M|#define SEC_ASN1_OCTET_STRING 0x04
  ------------------
  |  Branch (1230:9): [True: 8.24k, False: 9.92M]
  ------------------
 1231|  9.92M|        case SEC_ASN1_PRINTABLE_STRING:
  ------------------
  |  |   95|  9.92M|#define SEC_ASN1_PRINTABLE_STRING 0x13
  ------------------
  |  Branch (1231:9): [True: 0, False: 9.93M]
  ------------------
 1232|  9.92M|        case SEC_ASN1_T61_STRING:
  ------------------
  |  |   96|  9.92M|#define SEC_ASN1_T61_STRING 0x14
  ------------------
  |  Branch (1232:9): [True: 0, False: 9.93M]
  ------------------
 1233|  9.92M|        case SEC_ASN1_UTC_TIME:
  ------------------
  |  |   99|  9.92M|#define SEC_ASN1_UTC_TIME 0x17
  ------------------
  |  Branch (1233:9): [True: 0, False: 9.93M]
  ------------------
 1234|  9.92M|        case SEC_ASN1_UTF8_STRING:
  ------------------
  |  |   88|  9.92M|#define SEC_ASN1_UTF8_STRING 0x0c
  ------------------
  |  Branch (1234:9): [True: 0, False: 9.93M]
  ------------------
 1235|  9.92M|        case SEC_ASN1_VISIBLE_STRING:
  ------------------
  |  |  102|  9.92M|#define SEC_ASN1_VISIBLE_STRING 0x1a
  ------------------
  |  Branch (1235:9): [True: 0, False: 9.93M]
  ------------------
 1236|       |            /*
 1237|       |             * We are allocating for a primitive or a constructed string.
 1238|       |             * If it is a constructed string, it may also be indefinite-length.
 1239|       |             * If it is primitive, the length can (legally) be zero.
 1240|       |             * Our first order of business is to allocate the memory for
 1241|       |             * the string, if we can (if we know the length).
 1242|       |             */
 1243|  9.92M|            item = (SECItem *)(state->dest);
 1244|       |
 1245|       |            /*
 1246|       |             * If the item is a definite-length constructed string, then
 1247|       |             * the contents_length is actually larger than what we need
 1248|       |             * (because it also counts each intermediate header which we
 1249|       |             * will be throwing away as we go), but it is a perfectly good
 1250|       |             * upper bound that we just allocate anyway, and then concat
 1251|       |             * as we go; we end up wasting a few extra bytes but save a
 1252|       |             * whole other copy.
 1253|       |             */
 1254|  9.92M|            alloc_len = state->contents_length;
 1255|  9.92M|            poolp = NULL; /* quiet compiler warnings about unused... */
 1256|       |
 1257|  9.92M|            if (item == NULL || state->top->filter_only) {
  ------------------
  |  Branch (1257:17): [True: 0, False: 9.92M]
  |  Branch (1257:33): [True: 0, False: 9.92M]
  ------------------
 1258|      0|                if (item != NULL) {
  ------------------
  |  Branch (1258:21): [True: 0, False: 0]
  ------------------
 1259|      0|                    item->data = NULL;
 1260|      0|                    item->len = 0;
 1261|      0|                }
 1262|      0|                alloc_len = 0;
 1263|  9.92M|            } else if (state->substring) {
  ------------------
  |  Branch (1263:24): [True: 476k, False: 9.45M]
  ------------------
 1264|       |                /*
 1265|       |                 * If we are a substring of a constructed string, then we may
 1266|       |                 * not have to allocate anything (because our parent, the
 1267|       |                 * actual constructed string, did it for us).  If we are a
 1268|       |                 * substring and we *do* have to allocate, that means our
 1269|       |                 * parent is an indefinite-length, so we allocate from our pool;
 1270|       |                 * later our parent will copy our string into the aggregated
 1271|       |                 * whole and free our pool allocation.
 1272|       |                 */
 1273|   476k|                if (item->data == NULL) {
  ------------------
  |  Branch (1273:21): [True: 471k, False: 5.02k]
  ------------------
 1274|   471k|                    PORT_Assert(item->len == 0);
  ------------------
  |  |  120|   471k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   471k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 471k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1275|   471k|                    poolp = state->top->our_pool;
 1276|   471k|                } else {
 1277|  5.02k|                    alloc_len = 0;
 1278|  5.02k|                }
 1279|  9.45M|            } else {
 1280|  9.45M|                item->len = 0;
 1281|  9.45M|                item->data = NULL;
 1282|  9.45M|                poolp = state->top->their_pool;
 1283|  9.45M|            }
 1284|       |
 1285|  9.92M|            if (alloc_len || ((!state->indefinite) && (state->subitems_head != NULL))) {
  ------------------
  |  Branch (1285:17): [True: 2.03M, False: 7.88M]
  |  Branch (1285:31): [True: 7.69M, False: 192k]
  |  Branch (1285:55): [True: 7.69M, False: 5.53k]
  ------------------
 1286|  9.72M|                struct subitem *subitem;
 1287|  9.72M|                int len;
 1288|       |
 1289|  9.72M|                PORT_Assert(item);
  ------------------
  |  |  120|  9.72M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  9.72M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9.72M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1290|  9.72M|                if (!item) {
  ------------------
  |  Branch (1290:21): [True: 0, False: 9.72M]
  ------------------
 1291|      0|                    PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1292|      0|                    state->top->status = decodeError;
 1293|      0|                    return;
 1294|      0|                }
 1295|  9.72M|                PORT_Assert(item->len == 0 && item->data == NULL);
  ------------------
  |  |  120|  9.72M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  19.4M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 9.72M, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 9.72M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1296|       |                /*
 1297|       |                 * Check for and handle an ANY which has stashed aside the
 1298|       |                 * header (identifier and length) bytes for us to include
 1299|       |                 * in the saved contents.
 1300|       |                 */
 1301|  9.72M|                if (state->subitems_head != NULL) {
  ------------------
  |  Branch (1301:21): [True: 9.72M, False: 1.24k]
  ------------------
 1302|  9.72M|                    PORT_Assert(state->underlying_kind == SEC_ASN1_ANY);
  ------------------
  |  |  120|  9.72M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  9.72M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9.72M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1303|  9.72M|                    for (subitem = state->subitems_head;
 1304|  29.2M|                         subitem != NULL; subitem = subitem->next)
  ------------------
  |  Branch (1304:26): [True: 19.4M, False: 9.72M]
  ------------------
 1305|  19.4M|                        alloc_len += subitem->len;
 1306|  9.72M|                }
 1307|       |
 1308|  9.72M|                if (state->top->max_element_size > 0 &&
  ------------------
  |  Branch (1308:21): [True: 9.72M, False: 0]
  ------------------
 1309|  9.72M|                    alloc_len > state->top->max_element_size) {
  ------------------
  |  Branch (1309:21): [True: 191, False: 9.72M]
  ------------------
 1310|    191|                    PORT_SetError(SEC_ERROR_OUTPUT_LEN);
  ------------------
  |  |   65|    191|#define PORT_SetError PORT_SetError_Util
  ------------------
 1311|    191|                    state->top->status = decodeError;
 1312|    191|                    return;
 1313|    191|                }
 1314|       |
 1315|  9.72M|                item->data = (unsigned char *)sec_asn1d_zalloc(poolp, alloc_len);
 1316|  9.72M|                if (item->data == NULL) {
  ------------------
  |  Branch (1316:21): [True: 0, False: 9.72M]
  ------------------
 1317|      0|                    state->top->status = decodeError;
 1318|      0|                    break;
 1319|      0|                }
 1320|       |
 1321|  9.72M|                len = 0;
 1322|  9.72M|                for (subitem = state->subitems_head;
 1323|  29.2M|                     subitem != NULL; subitem = subitem->next) {
  ------------------
  |  Branch (1323:22): [True: 19.4M, False: 9.72M]
  ------------------
 1324|  19.4M|                    PORT_Memcpy(item->data + len, subitem->data, subitem->len);
  ------------------
  |  |  180|  19.4M|#define PORT_Memcpy memcpy
  ------------------
 1325|  19.4M|                    len += subitem->len;
 1326|  19.4M|                }
 1327|  9.72M|                item->len = len;
 1328|       |
 1329|       |                /*
 1330|       |                 * Because we use arenas and have a mark set, we later free
 1331|       |                 * everything we have allocated, so this does *not* present
 1332|       |                 * a memory leak (it is just temporarily left dangling).
 1333|       |                 */
 1334|  9.72M|                state->subitems_head = state->subitems_tail = NULL;
 1335|  9.72M|            }
 1336|       |
 1337|  9.92M|            if (state->contents_length == 0 && (!state->indefinite)) {
  ------------------
  |  Branch (1337:17): [True: 7.88M, False: 2.03M]
  |  Branch (1337:48): [True: 7.69M, False: 192k]
  ------------------
 1338|       |                /*
 1339|       |                 * A zero-length simple or constructed string; we are done.
 1340|       |                 */
 1341|  7.69M|                state->place = afterEndOfContents;
 1342|  7.69M|            } else if (state->found_tag_modifiers & SEC_ASN1_CONSTRUCTED) {
  ------------------
  |  |  117|  2.23M|#define SEC_ASN1_CONSTRUCTED 0x20
  ------------------
  |  Branch (1342:24): [True: 195k, False: 2.03M]
  ------------------
 1343|   195k|                const SEC_ASN1Template *sub;
 1344|       |
 1345|   195k|                switch (state->underlying_kind) {
 1346|   191k|                    case SEC_ASN1_ANY:
  ------------------
  |  |  133|   191k|#define SEC_ASN1_ANY 0x00400
  ------------------
  |  Branch (1346:21): [True: 191k, False: 3.95k]
  ------------------
 1347|   191k|                    case SEC_ASN1_ANY_CONTENTS:
  ------------------
  |  |  168|   191k|#define SEC_ASN1_ANY_CONTENTS (SEC_ASN1_ANY | SEC_ASN1_INNER)
  |  |  ------------------
  |  |  |  |  133|   191k|#define SEC_ASN1_ANY 0x00400
  |  |  ------------------
  |  |               #define SEC_ASN1_ANY_CONTENTS (SEC_ASN1_ANY | SEC_ASN1_INNER)
  |  |  ------------------
  |  |  |  |  141|   191k|#define SEC_ASN1_INNER 0x10000        /* with ANY means capture the      \
  |  |  ------------------
  ------------------
  |  Branch (1347:21): [True: 0, False: 195k]
  ------------------
 1348|   191k|                        sub = SEC_AnyTemplate;
  ------------------
  |  |  148|   191k|#define SEC_AnyTemplate SEC_AnyTemplate_Util
  ------------------
 1349|   191k|                        break;
 1350|      0|                    case SEC_ASN1_BIT_STRING:
  ------------------
  |  |   79|      0|#define SEC_ASN1_BIT_STRING 0x03
  ------------------
  |  Branch (1350:21): [True: 0, False: 195k]
  ------------------
 1351|      0|                        sub = SEC_BitStringTemplate;
  ------------------
  |  |  149|      0|#define SEC_BitStringTemplate SEC_BitStringTemplate_Util
  ------------------
 1352|      0|                        break;
 1353|      0|                    case SEC_ASN1_BMP_STRING:
  ------------------
  |  |  106|      0|#define SEC_ASN1_BMP_STRING 0x1e
  ------------------
  |  Branch (1353:21): [True: 0, False: 195k]
  ------------------
 1354|      0|                        sub = SEC_BMPStringTemplate;
  ------------------
  |  |  150|      0|#define SEC_BMPStringTemplate SEC_BMPStringTemplate_Util
  ------------------
 1355|      0|                        break;
 1356|      0|                    case SEC_ASN1_GENERALIZED_TIME:
  ------------------
  |  |  100|      0|#define SEC_ASN1_GENERALIZED_TIME 0x18
  ------------------
  |  Branch (1356:21): [True: 0, False: 195k]
  ------------------
 1357|      0|                        sub = SEC_GeneralizedTimeTemplate;
  ------------------
  |  |  152|      0|#define SEC_GeneralizedTimeTemplate SEC_GeneralizedTimeTemplate_Util
  ------------------
 1358|      0|                        break;
 1359|      0|                    case SEC_ASN1_IA5_STRING:
  ------------------
  |  |   98|      0|#define SEC_ASN1_IA5_STRING 0x16
  ------------------
  |  Branch (1359:21): [True: 0, False: 195k]
  ------------------
 1360|      0|                        sub = SEC_IA5StringTemplate;
  ------------------
  |  |  153|      0|#define SEC_IA5StringTemplate SEC_IA5StringTemplate_Util
  ------------------
 1361|      0|                        break;
 1362|  3.95k|                    case SEC_ASN1_OCTET_STRING:
  ------------------
  |  |   80|  3.95k|#define SEC_ASN1_OCTET_STRING 0x04
  ------------------
  |  Branch (1362:21): [True: 3.95k, False: 191k]
  ------------------
 1363|  3.95k|                        sub = SEC_OctetStringTemplate;
  ------------------
  |  |  157|  3.95k|#define SEC_OctetStringTemplate SEC_OctetStringTemplate_Util
  ------------------
 1364|  3.95k|                        break;
 1365|      0|                    case SEC_ASN1_PRINTABLE_STRING:
  ------------------
  |  |   95|      0|#define SEC_ASN1_PRINTABLE_STRING 0x13
  ------------------
  |  Branch (1365:21): [True: 0, False: 195k]
  ------------------
 1366|      0|                        sub = SEC_PrintableStringTemplate;
 1367|      0|                        break;
 1368|      0|                    case SEC_ASN1_T61_STRING:
  ------------------
  |  |   96|      0|#define SEC_ASN1_T61_STRING 0x14
  ------------------
  |  Branch (1368:21): [True: 0, False: 195k]
  ------------------
 1369|      0|                        sub = SEC_T61StringTemplate;
 1370|      0|                        break;
 1371|      0|                    case SEC_ASN1_UNIVERSAL_STRING:
  ------------------
  |  |  104|      0|#define SEC_ASN1_UNIVERSAL_STRING 0x1c
  ------------------
  |  Branch (1371:21): [True: 0, False: 195k]
  ------------------
 1372|      0|                        sub = SEC_UniversalStringTemplate;
 1373|      0|                        break;
 1374|      0|                    case SEC_ASN1_UTC_TIME:
  ------------------
  |  |   99|      0|#define SEC_ASN1_UTC_TIME 0x17
  ------------------
  |  Branch (1374:21): [True: 0, False: 195k]
  ------------------
 1375|      0|                        sub = SEC_UTCTimeTemplate;
  ------------------
  |  |  161|      0|#define SEC_UTCTimeTemplate SEC_UTCTimeTemplate_Util
  ------------------
 1376|      0|                        break;
 1377|      0|                    case SEC_ASN1_UTF8_STRING:
  ------------------
  |  |   88|      0|#define SEC_ASN1_UTF8_STRING 0x0c
  ------------------
  |  Branch (1377:21): [True: 0, False: 195k]
  ------------------
 1378|      0|                        sub = SEC_UTF8StringTemplate;
  ------------------
  |  |  162|      0|#define SEC_UTF8StringTemplate SEC_UTF8StringTemplate_Util
  ------------------
 1379|      0|                        break;
 1380|      0|                    case SEC_ASN1_VISIBLE_STRING:
  ------------------
  |  |  102|      0|#define SEC_ASN1_VISIBLE_STRING 0x1a
  ------------------
  |  Branch (1380:21): [True: 0, False: 195k]
  ------------------
 1381|      0|                        sub = SEC_VisibleStringTemplate;
 1382|      0|                        break;
 1383|      0|                    case SEC_ASN1_SKIP:
  ------------------
  |  |  140|      0|#define SEC_ASN1_SKIP 0x08000         /* skip a field; only for decoding */
  ------------------
  |  Branch (1383:21): [True: 0, False: 195k]
  ------------------
 1384|      0|                        sub = SEC_SkipTemplate;
 1385|      0|                        break;
 1386|      0|                    default:            /* redundant given outer switch cases, but */
  ------------------
  |  Branch (1386:21): [True: 0, False: 195k]
  ------------------
 1387|      0|                        PORT_Assert(0); /* the compiler does not seem to know that, */
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1388|      0|                        sub = NULL;     /* so just do enough to quiet it. */
 1389|      0|                        break;
 1390|   195k|                }
 1391|       |
 1392|   195k|                state->place = duringConstructedString;
 1393|   195k|                state = sec_asn1d_push_state(state->top, sub, item, PR_TRUE);
  ------------------
  |  |  437|   195k|#define PR_TRUE 1
  ------------------
 1394|   195k|                if (state != NULL) {
  ------------------
  |  Branch (1394:21): [True: 195k, False: 9]
  ------------------
 1395|   195k|                    state->substring = PR_TRUE; /* XXX propogate? */
  ------------------
  |  |  437|   195k|#define PR_TRUE 1
  ------------------
 1396|   195k|                    (void)sec_asn1d_init_state_based_on_template(state);
 1397|   195k|                }
 1398|  2.03M|            } else if (state->indefinite) {
  ------------------
  |  Branch (1398:24): [True: 71, False: 2.03M]
  ------------------
 1399|       |                /*
 1400|       |                 * An indefinite-length string *must* be constructed!
 1401|       |                 */
 1402|     71|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|     71|#define PORT_SetError PORT_SetError_Util
  ------------------
 1403|     71|                state->top->status = decodeError;
 1404|  2.03M|            } else {
 1405|       |                /*
 1406|       |                 * A non-zero-length simple string.
 1407|       |                 */
 1408|  2.03M|                if (state->underlying_kind == SEC_ASN1_BIT_STRING)
  ------------------
  |  |   79|  2.03M|#define SEC_ASN1_BIT_STRING 0x03
  ------------------
  |  Branch (1408:21): [True: 0, False: 2.03M]
  ------------------
 1409|      0|                    state->place = beforeBitString;
 1410|  2.03M|                else
 1411|  2.03M|                    state->place = duringLeaf;
 1412|  2.03M|            }
 1413|  9.92M|            break;
 1414|       |
 1415|  9.92M|        default:
  ------------------
  |  Branch (1415:9): [True: 4.18k, False: 9.93M]
  ------------------
 1416|       |            /*
 1417|       |             * We are allocating for a simple leaf item.
 1418|       |             */
 1419|  4.18k|            if (state->contents_length) {
  ------------------
  |  Branch (1419:17): [True: 4.18k, False: 3]
  ------------------
 1420|  4.18k|                if (state->dest != NULL) {
  ------------------
  |  Branch (1420:21): [True: 4.18k, False: 0]
  ------------------
 1421|  4.18k|                    item = (SECItem *)(state->dest);
 1422|  4.18k|                    item->len = 0;
 1423|  4.18k|                    if (state->top->max_element_size > 0 &&
  ------------------
  |  Branch (1423:25): [True: 4.18k, False: 0]
  ------------------
 1424|  4.18k|                        state->contents_length > state->top->max_element_size) {
  ------------------
  |  Branch (1424:25): [True: 128, False: 4.05k]
  ------------------
 1425|    128|                        PORT_SetError(SEC_ERROR_OUTPUT_LEN);
  ------------------
  |  |   65|    128|#define PORT_SetError PORT_SetError_Util
  ------------------
 1426|    128|                        state->top->status = decodeError;
 1427|    128|                        return;
 1428|    128|                    }
 1429|       |
 1430|  4.05k|                    if (state->top->filter_only) {
  ------------------
  |  Branch (1430:25): [True: 0, False: 4.05k]
  ------------------
 1431|      0|                        item->data = NULL;
 1432|  4.05k|                    } else {
 1433|  4.05k|                        item->data = (unsigned char *)
 1434|  4.05k|                            sec_asn1d_zalloc(state->top->their_pool,
 1435|  4.05k|                                             state->contents_length);
 1436|  4.05k|                        if (item->data == NULL) {
  ------------------
  |  Branch (1436:29): [True: 0, False: 4.05k]
  ------------------
 1437|      0|                            state->top->status = decodeError;
 1438|      0|                            return;
 1439|      0|                        }
 1440|  4.05k|                    }
 1441|  4.05k|                }
 1442|  4.05k|                state->place = duringLeaf;
 1443|  4.05k|            } else {
 1444|       |                /*
 1445|       |                 * An indefinite-length or zero-length item is not allowed.
 1446|       |                 * (All legal cases of such were handled above.)
 1447|       |                 */
 1448|      3|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      3|#define PORT_SetError PORT_SetError_Util
  ------------------
 1449|      3|                state->top->status = decodeError;
 1450|      3|            }
 1451|  9.93M|    }
 1452|  9.93M|}
secasn1d.c:sec_asn1d_check_and_subtract_length:
  964|  24.4M|{
  965|  24.4M|    PORT_Assert(remaining);
  ------------------
  |  |  120|  24.4M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  24.4M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 24.4M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  966|  24.4M|    PORT_Assert(cx);
  ------------------
  |  |  120|  24.4M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  24.4M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 24.4M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  967|  24.4M|    if (!remaining || !cx) {
  ------------------
  |  Branch (967:9): [True: 0, False: 24.4M]
  |  Branch (967:23): [True: 0, False: 24.4M]
  ------------------
  968|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  969|      0|        cx->status = decodeError;
  970|      0|        return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  971|      0|    }
  972|  24.4M|    if (*remaining < consumed) {
  ------------------
  |  Branch (972:9): [True: 27, False: 24.4M]
  ------------------
  973|     27|        PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|     27|#define PORT_SetError PORT_SetError_Util
  ------------------
  974|     27|        cx->status = decodeError;
  975|     27|        return PR_FALSE;
  ------------------
  |  |  438|     27|#define PR_FALSE 0
  ------------------
  976|     27|    }
  977|  24.4M|    *remaining -= consumed;
  978|  24.4M|    return PR_TRUE;
  ------------------
  |  |  437|  24.4M|#define PR_TRUE 1
  ------------------
  979|  24.4M|}
secasn1d.c:sec_asn1d_zalloc:
  343|  49.3M|{
  344|  49.3M|    void *thing;
  345|       |
  346|  49.3M|    thing = sec_asn1d_alloc(poolp, len);
  347|  49.3M|    if (thing != NULL)
  ------------------
  |  Branch (347:9): [True: 49.3M, False: 0]
  ------------------
  348|  49.3M|        PORT_Memset(thing, 0, len);
  ------------------
  |  |  182|  49.3M|#define PORT_Memset memset
  ------------------
  349|  49.3M|    return thing;
  350|  49.3M|}
secasn1d.c:sec_asn1d_alloc:
  320|  69.2M|{
  321|  69.2M|    void *thing;
  322|       |
  323|  69.2M|    if (poolp != NULL) {
  ------------------
  |  Branch (323:9): [True: 69.2M, False: 0]
  ------------------
  324|       |        /*
  325|       |         * Allocate from the pool.
  326|       |         */
  327|  69.2M|        thing = PORT_ArenaAlloc(poolp, len);
  ------------------
  |  |   53|  69.2M|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  328|  69.2M|    } else {
  329|       |        /*
  330|       |         * Allocate generically.
  331|       |         */
  332|      0|        thing = PORT_Alloc(len);
  ------------------
  |  |   52|      0|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  333|      0|    }
  334|       |
  335|  69.2M|    return thing;
  336|  69.2M|}
secasn1d.c:sec_asn1d_notify_before:
  425|  9.45M|{
  426|  9.45M|    if (cx->notify_proc == NULL)
  ------------------
  |  Branch (426:9): [True: 9.45M, False: 0]
  ------------------
  427|  9.45M|        return;
  428|       |
  429|      0|    cx->during_notify = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  430|      0|    (*cx->notify_proc)(cx->notify_arg, PR_TRUE, dest, depth);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  431|      0|    cx->during_notify = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  432|      0|}
secasn1d.c:sec_asn1d_next_substring:
 1791|   663k|{
 1792|   663k|    sec_asn1d_state *child;
 1793|   663k|    SECItem *item;
 1794|   663k|    unsigned long child_consumed;
 1795|   663k|    PRBool done;
 1796|       |
 1797|   663k|    PORT_Assert(state->place == duringConstructedString);
  ------------------
  |  |  120|   663k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   663k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 663k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1798|   663k|    PORT_Assert(state->child != NULL);
  ------------------
  |  |  120|   663k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   663k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 663k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1799|       |
 1800|   663k|    child = state->child;
 1801|       |
 1802|   663k|    child_consumed = child->consumed;
 1803|   663k|    child->consumed = 0;
 1804|   663k|    state->consumed += child_consumed;
 1805|       |
 1806|   663k|    done = PR_FALSE;
  ------------------
  |  |  438|   663k|#define PR_FALSE 0
  ------------------
 1807|       |
 1808|   663k|    if (state->pending) {
  ------------------
  |  Branch (1808:9): [True: 4.63k, False: 658k]
  ------------------
 1809|  4.63k|        PORT_Assert(!state->indefinite);
  ------------------
  |  |  120|  4.63k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  4.63k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 4.63k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1810|  4.63k|        if (child_consumed > state->pending) {
  ------------------
  |  Branch (1810:13): [True: 0, False: 4.63k]
  ------------------
 1811|      0|            PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1812|      0|            state->top->status = decodeError;
 1813|      0|            return;
 1814|      0|        }
 1815|       |
 1816|  4.63k|        state->pending -= child_consumed;
 1817|  4.63k|        if (state->pending == 0)
  ------------------
  |  Branch (1817:13): [True: 2.35k, False: 2.27k]
  ------------------
 1818|  2.35k|            done = PR_TRUE;
  ------------------
  |  |  437|  2.35k|#define PR_TRUE 1
  ------------------
 1819|   658k|    } else {
 1820|   658k|        PRBool preallocatedString;
 1821|   658k|        sec_asn1d_state *temp_state;
 1822|   658k|        PORT_Assert(state->indefinite);
  ------------------
  |  |  120|   658k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   658k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 658k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1823|       |
 1824|   658k|        item = (SECItem *)(child->dest);
 1825|       |
 1826|       |        /**
 1827|       |         * At this point, there's three states at play:
 1828|       |         *   child: The element that was just parsed
 1829|       |         *   state: The currently processed element
 1830|       |         *   'parent' (aka state->parent): The enclosing construct
 1831|       |         *      of state, or NULL if this is the top-most element.
 1832|       |         *
 1833|       |         * This state handles both substrings of a constructed string AND
 1834|       |         * child elements of items whose template type was that of
 1835|       |         * SEC_ASN1_ANY, SEC_ASN1_SAVE, SEC_ASN1_ANY_CONTENTS, SEC_ASN1_SKIP
 1836|       |         * template, as described in sec_asn1d_prepare_for_contents. For
 1837|       |         * brevity, these will be referred to as 'string' and 'any' types.
 1838|       |         *
 1839|       |         * This leads to the following possibilities:
 1840|       |         *   1: This element is an indefinite length string, part of a
 1841|       |         *      definite length string.
 1842|       |         *   2: This element is an indefinite length string, part of an
 1843|       |         *      indefinite length string.
 1844|       |         *   3: This element is an indefinite length any, part of a
 1845|       |         *      definite length any.
 1846|       |         *   4: This element is an indefinite length any, part of an
 1847|       |         *      indefinite length any.
 1848|       |         *   5: This element is an indefinite length any and does not
 1849|       |         *      meet any of the above criteria. Note that this would include
 1850|       |         *      an indefinite length string type matching an indefinite
 1851|       |         *      length any template.
 1852|       |         *
 1853|       |         * In Cases #1 and #3, the definite length 'parent' element will
 1854|       |         * have allocated state->dest based on the parent elements definite
 1855|       |         * size. During the processing of 'child', sec_asn1d_parse_leaf will
 1856|       |         * have copied the (string, any) data directly into the offset of
 1857|       |         * dest, as appropriate, so there's no need for this class to still
 1858|       |         * store the child - it's already been processed.
 1859|       |         *
 1860|       |         * In Cases #2 and #4, dest will be set to the parent element's dest,
 1861|       |         * but dest->data will not have been allocated yet, due to the
 1862|       |         * indefinite length encoding. In this situation, it's necessary to
 1863|       |         * hold onto child (and all other children) until the EOC, at which
 1864|       |         * point, it becomes possible to compute 'state's overall length. Once
 1865|       |         * 'state' has a computed length, this can then be fed to 'parent' (via
 1866|       |         * this state), and then 'parent' can similarly compute the length of
 1867|       |         * all of its children up to the EOC, which will ultimately transit to
 1868|       |         * sec_asn1d_concat_substrings, determine the overall size needed,
 1869|       |         * allocate, and copy the contents (of all of parent's children, which
 1870|       |         * would include 'state', just as 'state' will have copied all of its
 1871|       |         * children via sec_asn1d_concat_substrings)
 1872|       |         *
 1873|       |         * The final case, Case #5, will manifest in that item->data and
 1874|       |         * item->len will be NULL/0, respectively, since this element was
 1875|       |         * indefinite-length encoded. In that case, both the tag and length will
 1876|       |         * already exist in state's subitems, via sec_asn1d_record_any_header,
 1877|       |         * and so the contents (aka 'child') should be added to that list of
 1878|       |         * items to concatenate in sec_asn1d_concat_substrings once the EOC
 1879|       |         * is encountered.
 1880|       |         *
 1881|       |         * To distinguish #2/#4 from #1/#3, it's sufficient to walk the ancestor
 1882|       |         * tree. If the current type is a string type, then the enclosing
 1883|       |         * construct will be that same type (#1/#2). If the current type is an
 1884|       |         * any type, then the enclosing construct is either an any type (#3/#4)
 1885|       |         * or some other type (#5). Since this is BER, this nesting relationship
 1886|       |         * between 'state' and 'parent' may go through several levels of
 1887|       |         * constructed encoding, so continue walking the ancestor chain until a
 1888|       |         * clear determination can be made.
 1889|       |         *
 1890|       |         * The variable preallocatedString is used to indicate Case #1/#3,
 1891|       |         * indicating an in-place copy has already occurred, and Cases #2, #4,
 1892|       |         * and #5 all have the same behaviour of adding a new substring.
 1893|       |         */
 1894|   658k|        preallocatedString = PR_FALSE;
  ------------------
  |  |  438|   658k|#define PR_FALSE 0
  ------------------
 1895|   658k|        temp_state = state;
 1896|  5.71M|        while (temp_state && item == temp_state->dest && temp_state->indefinite) {
  ------------------
  |  Branch (1896:16): [True: 5.71M, False: 0]
  |  Branch (1896:30): [True: 5.71M, False: 0]
  |  Branch (1896:58): [True: 5.71M, False: 0]
  ------------------
 1897|  5.71M|            sec_asn1d_state *parent = sec_asn1d_get_enclosing_construct(temp_state);
 1898|  5.71M|            if (!parent || parent->underlying_kind != temp_state->underlying_kind) {
  ------------------
  |  Branch (1898:17): [True: 0, False: 5.71M]
  |  Branch (1898:28): [True: 39.8k, False: 5.67M]
  ------------------
 1899|       |                /* Case #5 - Either this is a top-level construct or it is part
 1900|       |                 * of some other element (e.g. a SEQUENCE), in which case, a
 1901|       |                 * new item should be allocated. */
 1902|  39.8k|                break;
 1903|  39.8k|            }
 1904|  5.67M|            if (!parent->indefinite) {
  ------------------
  |  Branch (1904:17): [True: 464, False: 5.67M]
  ------------------
 1905|       |                /* Cases #1 / #3 - A definite length ancestor exists, for which
 1906|       |                 * this is a substring that has already copied into dest. */
 1907|    464|                preallocatedString = PR_TRUE;
  ------------------
  |  |  437|    464|#define PR_TRUE 1
  ------------------
 1908|    464|                break;
 1909|    464|            }
 1910|  5.67M|            if (!parent->substring) {
  ------------------
  |  Branch (1910:17): [True: 618k, False: 5.05M]
  ------------------
 1911|       |                /* Cases #2 / #4 - If the parent is not a substring, but is
 1912|       |                 * indefinite, then there's nothing further up that may have
 1913|       |                 * preallocated dest, thus child will not have already
 1914|       |                 * been copied in place, therefore it's necessary to save child
 1915|       |                 * as a subitem. */
 1916|   618k|                break;
 1917|   618k|            }
 1918|  5.05M|            temp_state = parent;
 1919|  5.05M|        }
 1920|   658k|        if (item != NULL && item->data != NULL && !preallocatedString) {
  ------------------
  |  Branch (1920:13): [True: 658k, False: 0]
  |  Branch (1920:29): [True: 468k, False: 189k]
  |  Branch (1920:51): [True: 468k, False: 464]
  ------------------
 1921|       |            /*
 1922|       |             * Save the string away for later concatenation.
 1923|       |             */
 1924|   468k|            PORT_Assert(item->data != NULL);
  ------------------
  |  |  120|   468k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   468k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 468k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1925|   468k|            sec_asn1d_add_to_subitems(state, item->data, item->len, PR_FALSE);
  ------------------
  |  |  438|   468k|#define PR_FALSE 0
  ------------------
 1926|       |            /*
 1927|       |             * Clear the child item for the next round.
 1928|       |             */
 1929|   468k|            item->data = NULL;
 1930|   468k|            item->len = 0;
 1931|   468k|        }
 1932|       |
 1933|       |        /*
 1934|       |         * If our child was just our end-of-contents octets, we are done.
 1935|       |         */
 1936|   658k|        if (child->endofcontents)
  ------------------
  |  Branch (1936:13): [True: 189k, False: 469k]
  ------------------
 1937|   189k|            done = PR_TRUE;
  ------------------
  |  |  437|   189k|#define PR_TRUE 1
  ------------------
 1938|   658k|    }
 1939|       |
 1940|       |    /*
 1941|       |     * Stop or do the next one.
 1942|       |     */
 1943|   663k|    if (done) {
  ------------------
  |  Branch (1943:9): [True: 191k, False: 471k]
  ------------------
 1944|   191k|        child->place = notInUse;
 1945|   191k|        state->place = afterConstructedString;
 1946|   471k|    } else {
 1947|   471k|        sec_asn1d_scrub_state(child);
 1948|   471k|        state->top->current = child;
 1949|   471k|    }
 1950|   663k|}
secasn1d.c:sec_asn1d_add_to_subitems:
 1723|  29.7M|{
 1724|  29.7M|    struct subitem *thing;
 1725|       |
 1726|  29.7M|    thing = (struct subitem *)sec_asn1d_zalloc(state->top->our_pool,
 1727|  29.7M|                                               sizeof(struct subitem));
 1728|  29.7M|    if (thing == NULL) {
  ------------------
  |  Branch (1728:9): [True: 0, False: 29.7M]
  ------------------
 1729|      0|        state->top->status = decodeError;
 1730|      0|        return NULL;
 1731|      0|    }
 1732|       |
 1733|  29.7M|    if (copy_data) {
  ------------------
  |  Branch (1733:9): [True: 19.8M, False: 9.91M]
  ------------------
 1734|  19.8M|        void *copy;
 1735|  19.8M|        copy = sec_asn1d_alloc(state->top->our_pool, len);
 1736|  19.8M|        if (copy == NULL) {
  ------------------
  |  Branch (1736:13): [True: 0, False: 19.8M]
  ------------------
 1737|      0|            state->top->status = decodeError;
 1738|      0|            if (!state->top->our_pool)
  ------------------
  |  Branch (1738:17): [True: 0, False: 0]
  ------------------
 1739|      0|                PORT_Free(thing);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1740|      0|            return NULL;
 1741|      0|        }
 1742|  19.8M|        PORT_Memcpy(copy, data, len);
  ------------------
  |  |  180|  19.8M|#define PORT_Memcpy memcpy
  ------------------
 1743|  19.8M|        thing->data = copy;
 1744|  19.8M|    } else {
 1745|  9.91M|        thing->data = data;
 1746|  9.91M|    }
 1747|  29.7M|    thing->len = len;
 1748|  29.7M|    thing->next = NULL;
 1749|       |
 1750|  29.7M|    if (state->subitems_head == NULL) {
  ------------------
  |  Branch (1750:9): [True: 9.92M, False: 19.8M]
  ------------------
 1751|  9.92M|        PORT_Assert(state->subitems_tail == NULL);
  ------------------
  |  |  120|  9.92M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  9.92M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9.92M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1752|  9.92M|        state->subitems_head = state->subitems_tail = thing;
 1753|  19.8M|    } else {
 1754|  19.8M|        state->subitems_tail->next = thing;
 1755|  19.8M|        state->subitems_tail = thing;
 1756|  19.8M|    }
 1757|       |
 1758|  29.7M|    return thing;
 1759|  29.7M|}
secasn1d.c:sec_asn1d_scrub_state:
  411|  19.5M|{
  412|       |    /*
  413|       |     * Some default "scrubbing".
  414|       |     * XXX right set of initializations?
  415|       |     */
  416|  19.5M|    state->place = beforeIdentifier;
  417|  19.5M|    state->endofcontents = PR_FALSE;
  ------------------
  |  |  438|  19.5M|#define PR_FALSE 0
  ------------------
  418|  19.5M|    state->indefinite = PR_FALSE;
  ------------------
  |  |  438|  19.5M|#define PR_FALSE 0
  ------------------
  419|  19.5M|    state->missing = PR_FALSE;
  ------------------
  |  |  438|  19.5M|#define PR_FALSE 0
  ------------------
  420|  19.5M|    PORT_Assert(state->consumed == 0);
  ------------------
  |  |  120|  19.5M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  19.5M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 19.5M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  421|  19.5M|}
secasn1d.c:sec_asn1d_next_in_group:
 1957|  9.44M|{
 1958|  9.44M|    sec_asn1d_state *child;
 1959|  9.44M|    unsigned long child_consumed;
 1960|       |
 1961|  9.44M|    PORT_Assert(state->place == duringGroup);
  ------------------
  |  |  120|  9.44M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  9.44M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9.44M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1962|  9.44M|    PORT_Assert(state->child != NULL);
  ------------------
  |  |  120|  9.44M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  9.44M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9.44M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1963|       |
 1964|  9.44M|    child = state->child;
 1965|       |
 1966|  9.44M|    child_consumed = child->consumed;
 1967|  9.44M|    child->consumed = 0;
 1968|  9.44M|    state->consumed += child_consumed;
 1969|       |
 1970|       |    /*
 1971|       |     * If our child was just our end-of-contents octets, we are done.
 1972|       |     */
 1973|  9.44M|    if (child->endofcontents) {
  ------------------
  |  Branch (1973:9): [True: 81, False: 9.44M]
  ------------------
 1974|       |        /* XXX I removed the PORT_Assert (child->dest == NULL) because there
 1975|       |         * was a bug in that a template that was a sequence of which also had
 1976|       |         * a child of a sequence of, in an indefinite group was not working
 1977|       |         * properly.  This fix seems to work, (added the if statement below),
 1978|       |         * and nothing appears broken, but I am putting this note here just
 1979|       |         * in case. */
 1980|       |        /*
 1981|       |         * XXX No matter how many times I read that comment,
 1982|       |         * I cannot figure out what case he was fixing.  I believe what he
 1983|       |         * did was deliberate, so I am loathe to touch it.  I need to
 1984|       |         * understand how it could ever be that child->dest != NULL but
 1985|       |         * child->endofcontents is true, and why it is important to check
 1986|       |         * that state->subitems_head is NULL.  This really needs to be
 1987|       |         * figured out, as I am not sure if the following code should be
 1988|       |         * compensating for "offset", as is done a little farther below
 1989|       |         * in the more normal case.
 1990|       |         */
 1991|       |        /*
 1992|       |         * XXX We used to assert our overall state was that we were decoding
 1993|       |         * an indefinite-length object here (state->indefinite == TRUE and no
 1994|       |         * pending bytes in the decoder), but those assertions aren't correct
 1995|       |         * as it's legitimate to wrap indefinite sequences inside definite ones
 1996|       |         * and this code handles that case. Additionally, when compiled in
 1997|       |         * release mode these assertions aren't checked anyway, yet function
 1998|       |         * safely.
 1999|       |         */
 2000|     81|        if (child->dest && !state->subitems_head) {
  ------------------
  |  Branch (2000:13): [True: 0, False: 81]
  |  Branch (2000:28): [True: 0, False: 0]
  ------------------
 2001|      0|            sec_asn1d_add_to_subitems(state, child->dest, 0, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 2002|      0|            child->dest = NULL;
 2003|      0|        }
 2004|       |
 2005|     81|        child->place = notInUse;
 2006|     81|        state->place = afterGroup;
 2007|     81|        return;
 2008|     81|    }
 2009|       |
 2010|       |    /*
 2011|       |     * Do the "after" field notification for next in group.
 2012|       |     */
 2013|  9.44M|    sec_asn1d_notify_after(state->top, child->dest, child->depth);
 2014|       |
 2015|       |    /*
 2016|       |     * Save it away (unless we are not storing).
 2017|       |     */
 2018|  9.44M|    if (child->dest != NULL) {
  ------------------
  |  Branch (2018:9): [True: 9.44M, False: 0]
  ------------------
 2019|  9.44M|        void *dest;
 2020|       |
 2021|  9.44M|        dest = child->dest;
 2022|  9.44M|        dest = (char *)dest - child->theTemplate->offset;
 2023|  9.44M|        sec_asn1d_add_to_subitems(state, dest, 0, PR_FALSE);
  ------------------
  |  |  438|  9.44M|#define PR_FALSE 0
  ------------------
 2024|  9.44M|        child->dest = NULL;
 2025|  9.44M|    }
 2026|       |
 2027|       |    /*
 2028|       |     * Account for those bytes; see if we are done.
 2029|       |     */
 2030|  9.44M|    if (state->pending) {
  ------------------
  |  Branch (2030:9): [True: 7.68M, False: 1.76M]
  ------------------
 2031|  7.68M|        PORT_Assert(!state->indefinite);
  ------------------
  |  |  120|  7.68M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  7.68M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 7.68M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2032|  7.68M|        if (child_consumed > state->pending) {
  ------------------
  |  Branch (2032:13): [True: 0, False: 7.68M]
  ------------------
 2033|      0|            PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2034|      0|            state->top->status = decodeError;
 2035|      0|            return;
 2036|      0|        }
 2037|       |
 2038|  7.68M|        state->pending -= child_consumed;
 2039|  7.68M|        if (state->pending == 0) {
  ------------------
  |  Branch (2039:13): [True: 118, False: 7.68M]
  ------------------
 2040|    118|            child->place = notInUse;
 2041|    118|            state->place = afterGroup;
 2042|    118|            return;
 2043|    118|        }
 2044|  7.68M|    }
 2045|       |
 2046|       |    /*
 2047|       |     * Do the "before" field notification for next item in group.
 2048|       |     */
 2049|  9.44M|    sec_asn1d_notify_before(state->top, child->dest, child->depth);
 2050|       |
 2051|       |    /*
 2052|       |     * Now we do the next one.
 2053|       |     */
 2054|  9.44M|    sec_asn1d_scrub_state(child);
 2055|       |
 2056|       |    /* Initialize child state from the template */
 2057|  9.44M|    sec_asn1d_init_state_based_on_template(child);
 2058|       |
 2059|  9.44M|    state->top->current = child;
 2060|  9.44M|}
secasn1d.c:sec_asn1d_notify_after:
  436|  9.45M|{
  437|  9.45M|    if (cx->notify_proc == NULL)
  ------------------
  |  Branch (437:9): [True: 9.45M, False: 0]
  ------------------
  438|  9.45M|        return;
  439|       |
  440|      0|    cx->during_notify = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  441|      0|    (*cx->notify_proc)(cx->notify_arg, PR_FALSE, dest, depth);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  442|      0|    cx->during_notify = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  443|      0|}
secasn1d.c:sec_asn1d_parse_leaf:
 1585|  2.04M|{
 1586|  2.04M|    SECItem *item;
 1587|  2.04M|    unsigned long bufLen;
 1588|       |
 1589|  2.04M|    if (len == 0) {
  ------------------
  |  Branch (1589:9): [True: 116, False: 2.04M]
  ------------------
 1590|    116|        state->top->status = needBytes;
 1591|    116|        return 0;
 1592|    116|    }
 1593|       |
 1594|  2.04M|    if (state->pending < len)
  ------------------
  |  Branch (1594:9): [True: 2.04M, False: 227]
  ------------------
 1595|  2.04M|        len = state->pending;
 1596|       |
 1597|  2.04M|    bufLen = len;
 1598|       |
 1599|  2.04M|    item = (SECItem *)(state->dest);
 1600|  2.04M|    if (item != NULL && item->data != NULL) {
  ------------------
  |  Branch (1600:9): [True: 2.04M, False: 0]
  |  Branch (1600:25): [True: 2.04M, False: 0]
  ------------------
 1601|  2.04M|        unsigned long offset;
 1602|       |        /* Strip leading zeroes when target is unsigned integer */
 1603|  2.04M|        if (state->underlying_kind == SEC_ASN1_INTEGER && /* INTEGER   */
  ------------------
  |  |   78|  4.08M|#define SEC_ASN1_INTEGER 0x02
  ------------------
  |  Branch (1603:13): [True: 1.23k, False: 2.04M]
  ------------------
 1604|  2.04M|            item->len == 0 &&                             /* MSB       */
  ------------------
  |  Branch (1604:13): [True: 1.23k, False: 0]
  ------------------
 1605|  2.04M|            item->type == siUnsignedInteger)              /* unsigned  */
  ------------------
  |  Branch (1605:13): [True: 0, False: 1.23k]
  ------------------
 1606|      0|        {
 1607|      0|            while (len > 1 && buf[0] == 0) { /* leading 0 */
  ------------------
  |  Branch (1607:20): [True: 0, False: 0]
  |  Branch (1607:31): [True: 0, False: 0]
  ------------------
 1608|      0|                buf++;
 1609|      0|                len--;
 1610|      0|            }
 1611|      0|        }
 1612|  2.04M|        offset = item->len;
 1613|  2.04M|        if (state->underlying_kind == SEC_ASN1_BIT_STRING) {
  ------------------
  |  |   79|  2.04M|#define SEC_ASN1_BIT_STRING 0x03
  ------------------
  |  Branch (1613:13): [True: 0, False: 2.04M]
  ------------------
 1614|       |            // The previous bit string must have no unused bits.
 1615|      0|            if (item->len & 0x7) {
  ------------------
  |  Branch (1615:17): [True: 0, False: 0]
  ------------------
 1616|      0|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1617|      0|                state->top->status = decodeError;
 1618|      0|                return 0;
 1619|      0|            }
 1620|       |            // If this is a bit string, the length is bits, not bytes.
 1621|      0|            offset = item->len >> 3;
 1622|      0|        }
 1623|  2.04M|        if (state->underlying_kind == SEC_ASN1_BIT_STRING) {
  ------------------
  |  |   79|  2.04M|#define SEC_ASN1_BIT_STRING 0x03
  ------------------
  |  Branch (1623:13): [True: 0, False: 2.04M]
  ------------------
 1624|      0|            unsigned long len_in_bits;
 1625|       |            // Protect against overflow during the bytes-to-bits conversion.
 1626|      0|            if (len >= (ULONG_MAX >> 3) + 1) {
  ------------------
  |  Branch (1626:17): [True: 0, False: 0]
  ------------------
 1627|      0|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1628|      0|                state->top->status = decodeError;
 1629|      0|                return 0;
 1630|      0|            }
 1631|      0|            len_in_bits = (len << 3) - state->bit_string_unused_bits;
 1632|       |            // Protect against overflow when computing the total length in bits.
 1633|      0|            if (UINT_MAX - item->len < len_in_bits) {
  ------------------
  |  Branch (1633:17): [True: 0, False: 0]
  ------------------
 1634|      0|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1635|      0|                state->top->status = decodeError;
 1636|      0|                return 0;
 1637|      0|            }
 1638|      0|            item->len += len_in_bits;
 1639|  2.04M|        } else {
 1640|  2.04M|            if (UINT_MAX - item->len < len) {
  ------------------
  |  Branch (1640:17): [True: 0, False: 2.04M]
  ------------------
 1641|      0|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 1642|      0|                state->top->status = decodeError;
 1643|      0|                return 0;
 1644|      0|            }
 1645|  2.04M|            item->len += len;
 1646|  2.04M|        }
 1647|  2.04M|        PORT_Memcpy(item->data + offset, buf, len);
  ------------------
  |  |  180|  2.04M|#define PORT_Memcpy memcpy
  ------------------
 1648|  2.04M|    }
 1649|  2.04M|    state->pending -= bufLen;
 1650|  2.04M|    if (state->pending == 0)
  ------------------
  |  Branch (1650:9): [True: 2.04M, False: 74]
  ------------------
 1651|  2.04M|        state->place = beforeEndOfContents;
 1652|       |
 1653|  2.04M|    return bufLen;
 1654|  2.04M|}
secasn1d.c:sec_asn1d_next_in_sequence:
 2069|  6.53k|{
 2070|  6.53k|    sec_asn1d_state *child;
 2071|  6.53k|    unsigned long child_consumed;
 2072|  6.53k|    PRBool child_missing;
 2073|       |
 2074|  6.53k|    PORT_Assert(state->place == duringSequence);
  ------------------
  |  |  120|  6.53k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  6.53k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 6.53k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2075|  6.53k|    PORT_Assert(state->child != NULL);
  ------------------
  |  |  120|  6.53k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  6.53k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 6.53k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2076|       |
 2077|  6.53k|    child = state->child;
 2078|       |
 2079|       |    /*
 2080|       |     * Do the "after" field notification.
 2081|       |     */
 2082|  6.53k|    sec_asn1d_notify_after(state->top, child->dest, child->depth);
 2083|       |
 2084|  6.53k|    child_missing = (PRBool)child->missing;
 2085|  6.53k|    child_consumed = child->consumed;
 2086|  6.53k|    child->consumed = 0;
 2087|       |
 2088|       |    /*
 2089|       |     * Take care of accounting.
 2090|       |     */
 2091|  6.53k|    if (child_missing) {
  ------------------
  |  Branch (2091:9): [True: 603, False: 5.93k]
  ------------------
 2092|    603|        PORT_Assert(child->optional);
  ------------------
  |  |  120|    603|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    603|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 603, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2093|  5.93k|    } else {
 2094|  5.93k|        state->consumed += child_consumed;
 2095|       |        /*
 2096|       |         * Free any grandchild.
 2097|       |         */
 2098|  5.93k|        sec_asn1d_free_child(child, PR_FALSE);
  ------------------
  |  |  438|  5.93k|#define PR_FALSE 0
  ------------------
 2099|  5.93k|        if (state->pending) {
  ------------------
  |  Branch (2099:13): [True: 422, False: 5.51k]
  ------------------
 2100|    422|            PORT_Assert(!state->indefinite);
  ------------------
  |  |  120|    422|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    422|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 422, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2101|    422|            if (child_consumed > state->pending) {
  ------------------
  |  Branch (2101:17): [True: 0, False: 422]
  ------------------
 2102|      0|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2103|      0|                state->top->status = decodeError;
 2104|      0|                return;
 2105|      0|            }
 2106|    422|            state->pending -= child_consumed;
 2107|    422|            if (state->pending == 0) {
  ------------------
  |  Branch (2107:17): [True: 61, False: 361]
  ------------------
 2108|     61|                child->theTemplate++;
 2109|    111|                while (child->theTemplate->kind != 0) {
  ------------------
  |  Branch (2109:24): [True: 55, False: 56]
  ------------------
 2110|     55|                    if ((child->theTemplate->kind & SEC_ASN1_OPTIONAL) == 0) {
  ------------------
  |  |  131|     55|#define SEC_ASN1_OPTIONAL 0x00100
  ------------------
  |  Branch (2110:25): [True: 5, False: 50]
  ------------------
 2111|      5|                        PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      5|#define PORT_SetError PORT_SetError_Util
  ------------------
 2112|      5|                        state->top->status = decodeError;
 2113|      5|                        return;
 2114|      5|                    }
 2115|     50|                    child->theTemplate++;
 2116|     50|                }
 2117|     56|                child->place = notInUse;
 2118|     56|                state->place = afterEndOfContents;
 2119|     56|                return;
 2120|     61|            }
 2121|    422|        }
 2122|  5.93k|    }
 2123|       |
 2124|       |    /*
 2125|       |     * Move forward.
 2126|       |     */
 2127|  6.47k|    child->theTemplate++;
 2128|  6.47k|    if (child->theTemplate->kind == 0) {
  ------------------
  |  Branch (2128:9): [True: 886, False: 5.58k]
  ------------------
 2129|       |        /*
 2130|       |         * We are done with this sequence.
 2131|       |         */
 2132|    886|        child->place = notInUse;
 2133|    886|        if (state->pending) {
  ------------------
  |  Branch (2133:13): [True: 70, False: 816]
  ------------------
 2134|     70|            PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|     70|#define PORT_SetError PORT_SetError_Util
  ------------------
 2135|     70|            state->top->status = decodeError;
 2136|    816|        } else if (child_missing) {
  ------------------
  |  Branch (2136:20): [True: 162, False: 654]
  ------------------
 2137|       |            /*
 2138|       |             * We got to the end, but have a child that started parsing
 2139|       |             * and ended up "missing".  The only legitimate reason for
 2140|       |             * this is that we had one or more optional fields at the
 2141|       |             * end of our sequence, and we were encoded indefinite-length,
 2142|       |             * so when we went looking for those optional fields we
 2143|       |             * found our end-of-contents octets instead.
 2144|       |             * (Yes, this is ugly; dunno a better way to handle it.)
 2145|       |             * So, first confirm the situation, and then mark that we
 2146|       |             * are done.
 2147|       |             */
 2148|    162|            if (state->indefinite && child->endofcontents) {
  ------------------
  |  Branch (2148:17): [True: 162, False: 0]
  |  Branch (2148:38): [True: 106, False: 56]
  ------------------
 2149|    106|                PORT_Assert(child_consumed == 2);
  ------------------
  |  |  120|    106|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    106|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 106, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2150|    106|                if (child_consumed != 2) {
  ------------------
  |  Branch (2150:21): [True: 0, False: 106]
  ------------------
 2151|      0|                    PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2152|      0|                    state->top->status = decodeError;
 2153|    106|                } else {
 2154|    106|                    state->consumed += child_consumed;
 2155|    106|                    state->place = afterEndOfContents;
 2156|    106|                }
 2157|    106|            } else {
 2158|     56|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|     56|#define PORT_SetError PORT_SetError_Util
  ------------------
 2159|     56|                state->top->status = decodeError;
 2160|     56|            }
 2161|    654|        } else {
 2162|       |            /*
 2163|       |             * We have to finish out, maybe reading end-of-contents octets;
 2164|       |             * let the normal logic do the right thing.
 2165|       |             */
 2166|    654|            state->place = beforeEndOfContents;
 2167|    654|        }
 2168|  5.58k|    } else {
 2169|  5.58k|        unsigned char child_found_tag_modifiers = 0;
 2170|  5.58k|        unsigned long child_found_tag_number = 0;
 2171|       |
 2172|       |        /*
 2173|       |         * Reset state and push.
 2174|       |         */
 2175|  5.58k|        if (state->dest != NULL)
  ------------------
  |  Branch (2175:13): [True: 5.58k, False: 0]
  ------------------
 2176|  5.58k|            child->dest = (char *)state->dest + child->theTemplate->offset;
 2177|       |
 2178|       |        /*
 2179|       |         * Do the "before" field notification.
 2180|       |         */
 2181|  5.58k|        sec_asn1d_notify_before(state->top, child->dest, child->depth);
 2182|       |
 2183|  5.58k|        if (child_missing) { /* if previous child was missing, copy the tag data we already have */
  ------------------
  |  Branch (2183:13): [True: 378, False: 5.21k]
  ------------------
 2184|    378|            child_found_tag_modifiers = child->found_tag_modifiers;
 2185|    378|            child_found_tag_number = child->found_tag_number;
 2186|    378|        }
 2187|  5.58k|        state->top->current = child;
 2188|  5.58k|        child = sec_asn1d_init_state_based_on_template(child);
 2189|  5.58k|        if (child_missing && child) {
  ------------------
  |  Branch (2189:13): [True: 378, False: 5.21k]
  |  Branch (2189:30): [True: 378, False: 0]
  ------------------
 2190|    378|            child->place = afterIdentifier;
 2191|    378|            child->found_tag_modifiers = child_found_tag_modifiers;
 2192|    378|            child->found_tag_number = child_found_tag_number;
 2193|    378|            child->consumed = child_consumed;
 2194|    378|            if (child->underlying_kind == SEC_ASN1_ANY && !child->top->filter_only) {
  ------------------
  |  |  133|    756|#define SEC_ASN1_ANY 0x00400
  ------------------
  |  Branch (2194:17): [True: 0, False: 378]
  |  Branch (2194:59): [True: 0, False: 0]
  ------------------
 2195|       |                /*
 2196|       |                 * If the new field is an ANY, and we are storing, then
 2197|       |                 * we need to save the tag out.  We would have done this
 2198|       |                 * already in the normal case, but since we were looking
 2199|       |                 * for an optional field, and we did not find it, we only
 2200|       |                 * now realize we need to save the tag.
 2201|       |                 */
 2202|      0|                unsigned char identifier;
 2203|       |
 2204|       |                /*
 2205|       |                 * Check that we did not end up with a high tag; for that
 2206|       |                 * we need to re-encode the tag into multiple bytes in order
 2207|       |                 * to store it back to look like what we parsed originally.
 2208|       |                 * In practice this does not happen, but for completeness
 2209|       |                 * sake it should probably be made to work at some point.
 2210|       |                 */
 2211|      0|                if (child_found_tag_modifiers >= SEC_ASN1_HIGH_TAG_NUMBER) {
  ------------------
  |  |  107|      0|#define SEC_ASN1_HIGH_TAG_NUMBER 0x1f
  ------------------
  |  Branch (2211:21): [True: 0, False: 0]
  ------------------
 2212|      0|                    PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2213|      0|                    state->top->status = decodeError;
 2214|      0|                } else {
 2215|      0|                    identifier = (unsigned char)(child_found_tag_modifiers | child_found_tag_number);
 2216|      0|                    sec_asn1d_record_any_header(child, (char *)&identifier, 1);
 2217|      0|                }
 2218|      0|            }
 2219|    378|        }
 2220|  5.58k|    }
 2221|  6.47k|}
secasn1d.c:sec_asn1d_concat_substrings:
 2225|   191k|{
 2226|   191k|    PORT_Assert(state->place == afterConstructedString);
  ------------------
  |  |  120|   191k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   191k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 191k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2227|       |
 2228|   191k|    if (state->subitems_head != NULL) {
  ------------------
  |  Branch (2228:9): [True: 189k, False: 2.58k]
  ------------------
 2229|   189k|        struct subitem *substring;
 2230|   189k|        unsigned long alloc_len, item_len;
 2231|   189k|        unsigned char *where;
 2232|   189k|        SECItem *item;
 2233|   189k|        PRBool is_bit_string;
 2234|       |
 2235|   189k|        item_len = 0;
 2236|   189k|        is_bit_string = (state->underlying_kind == SEC_ASN1_BIT_STRING)
  ------------------
  |  |   79|   189k|#define SEC_ASN1_BIT_STRING 0x03
  ------------------
  |  Branch (2236:25): [True: 0, False: 189k]
  ------------------
 2237|   189k|                            ? PR_TRUE
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 2238|   189k|                            : PR_FALSE;
  ------------------
  |  |  438|   378k|#define PR_FALSE 0
  ------------------
 2239|       |
 2240|   189k|        substring = state->subitems_head;
 2241|  1.02M|        while (substring != NULL) {
  ------------------
  |  Branch (2241:16): [True: 838k, False: 189k]
  ------------------
 2242|       |            /*
 2243|       |             * All bit-string substrings except the last one should be
 2244|       |             * a clean multiple of 8 bits.
 2245|       |             */
 2246|   838k|            if (is_bit_string && (substring->next != NULL) && (substring->len & 0x7)) {
  ------------------
  |  Branch (2246:17): [True: 0, False: 838k]
  |  Branch (2246:34): [True: 0, False: 0]
  |  Branch (2246:63): [True: 0, False: 0]
  ------------------
 2247|      0|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2248|      0|                state->top->status = decodeError;
 2249|      0|                return;
 2250|      0|            }
 2251|   838k|            item_len += substring->len;
 2252|   838k|            substring = substring->next;
 2253|   838k|        }
 2254|       |
 2255|   189k|        if (is_bit_string) {
  ------------------
  |  Branch (2255:13): [True: 0, False: 189k]
  ------------------
 2256|      0|            alloc_len = ((item_len + 7) >> 3);
 2257|   189k|        } else {
 2258|       |            /*
 2259|       |             * Add 2 for the end-of-contents octets of an indefinite-length
 2260|       |             * ANY that is *not* also an INNER.  Because we zero-allocate
 2261|       |             * below, all we need to do is increase the length here.
 2262|       |             */
 2263|   189k|            if (state->underlying_kind == SEC_ASN1_ANY && state->indefinite)
  ------------------
  |  |  133|   378k|#define SEC_ASN1_ANY 0x00400
  ------------------
  |  Branch (2263:17): [True: 188k, False: 711]
  |  Branch (2263:59): [True: 188k, False: 0]
  ------------------
 2264|   188k|                item_len += 2;
 2265|   189k|            alloc_len = item_len;
 2266|   189k|        }
 2267|       |
 2268|   189k|        if (state->top->max_element_size > 0 &&
  ------------------
  |  Branch (2268:13): [True: 189k, False: 0]
  ------------------
 2269|   189k|            alloc_len > state->top->max_element_size) {
  ------------------
  |  Branch (2269:13): [True: 0, False: 189k]
  ------------------
 2270|      0|            PORT_SetError(SEC_ERROR_OUTPUT_LEN);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2271|      0|            state->top->status = decodeError;
 2272|      0|            return;
 2273|      0|        }
 2274|       |
 2275|   189k|        item = (SECItem *)(state->dest);
 2276|   189k|        PORT_Assert(item != NULL);
  ------------------
  |  |  120|   189k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   189k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 189k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2277|   189k|        PORT_Assert(item->data == NULL);
  ------------------
  |  |  120|   189k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   189k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 189k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2278|   189k|        item->data = (unsigned char *)sec_asn1d_zalloc(state->top->their_pool,
 2279|   189k|                                                       alloc_len);
 2280|   189k|        if (item->data == NULL) {
  ------------------
  |  Branch (2280:13): [True: 0, False: 189k]
  ------------------
 2281|      0|            state->top->status = decodeError;
 2282|      0|            return;
 2283|      0|        }
 2284|   189k|        item->len = item_len;
 2285|       |
 2286|   189k|        where = item->data;
 2287|   189k|        substring = state->subitems_head;
 2288|  1.02M|        while (substring != NULL) {
  ------------------
  |  Branch (2288:16): [True: 838k, False: 189k]
  ------------------
 2289|   838k|            if (is_bit_string)
  ------------------
  |  Branch (2289:17): [True: 0, False: 838k]
  ------------------
 2290|      0|                item_len = (substring->len + 7) >> 3;
 2291|   838k|            else
 2292|   838k|                item_len = substring->len;
 2293|   838k|            PORT_Memcpy(where, substring->data, item_len);
  ------------------
  |  |  180|   838k|#define PORT_Memcpy memcpy
  ------------------
 2294|   838k|            where += item_len;
 2295|   838k|            substring = substring->next;
 2296|   838k|        }
 2297|       |
 2298|       |        /*
 2299|       |         * Because we use arenas and have a mark set, we later free
 2300|       |         * everything we have allocated, so this does *not* present
 2301|       |         * a memory leak (it is just temporarily left dangling).
 2302|       |         */
 2303|   189k|        state->subitems_head = state->subitems_tail = NULL;
 2304|   189k|    }
 2305|       |
 2306|   191k|    state->place = afterEndOfContents;
 2307|   191k|}
secasn1d.c:sec_asn1d_absorb_child:
 2364|  1.81k|{
 2365|       |    /*
 2366|       |     * There is absolutely supposed to be a child there.
 2367|       |     */
 2368|  1.81k|    PORT_Assert(state->child != NULL);
  ------------------
  |  |  120|  1.81k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  1.81k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1.81k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2369|       |
 2370|       |    /*
 2371|       |     * Inherit the missing status of our child, and do the ugly
 2372|       |     * backing-up if necessary.
 2373|       |     */
 2374|  1.81k|    state->missing = state->child->missing;
 2375|  1.81k|    if (state->missing) {
  ------------------
  |  Branch (2375:9): [True: 378, False: 1.43k]
  ------------------
 2376|    378|        state->found_tag_number = state->child->found_tag_number;
 2377|    378|        state->found_tag_modifiers = state->child->found_tag_modifiers;
 2378|    378|        state->endofcontents = state->child->endofcontents;
 2379|    378|    }
 2380|       |
 2381|       |    /*
 2382|       |     * Add in number of bytes consumed by child.
 2383|       |     * (Only EXPLICIT should have already consumed bytes itself.)
 2384|       |     */
 2385|  1.81k|    PORT_Assert(state->place == afterExplicit || state->consumed == 0);
  ------------------
  |  |  120|  1.81k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  3.10k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 526, False: 1.29k]
  |  |  |  |  |  Branch (208:7): [True: 1.29k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2386|  1.81k|    state->consumed += state->child->consumed;
 2387|       |
 2388|       |    /*
 2389|       |     * Subtract from bytes pending; this only applies to a definite-length
 2390|       |     * EXPLICIT field.
 2391|       |     */
 2392|  1.81k|    if (state->pending) {
  ------------------
  |  Branch (2392:9): [True: 274, False: 1.54k]
  ------------------
 2393|    274|        PORT_Assert(!state->indefinite);
  ------------------
  |  |  120|    274|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    274|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 274, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2394|    274|        PORT_Assert(state->place == afterExplicit);
  ------------------
  |  |  120|    274|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    274|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 274, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2395|       |
 2396|       |        /*
 2397|       |         * If we had a definite-length explicit, then what the child
 2398|       |         * consumed should be what was left pending.
 2399|       |         */
 2400|    274|        if (state->pending != state->child->consumed) {
  ------------------
  |  Branch (2400:13): [True: 267, False: 7]
  ------------------
 2401|    267|            if (state->pending < state->child->consumed) {
  ------------------
  |  Branch (2401:17): [True: 0, False: 267]
  ------------------
 2402|      0|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2403|      0|                state->top->status = decodeError;
 2404|      0|                return;
 2405|      0|            }
 2406|       |            /*
 2407|       |             * Okay, this is a hack.  It *should* be an error whether
 2408|       |             * pending is too big or too small, but it turns out that
 2409|       |             * we had a bug in our *old* DER encoder that ended up
 2410|       |             * counting an explicit header twice in the case where
 2411|       |             * the underlying type was an ANY.  So, because we cannot
 2412|       |             * prevent receiving these (our own certificate server can
 2413|       |             * send them to us), we need to be lenient and accept them.
 2414|       |             * To do so, we need to pretend as if we read all of the
 2415|       |             * bytes that the header said we would find, even though
 2416|       |             * we actually came up short.
 2417|       |             */
 2418|    267|            state->consumed += (state->pending - state->child->consumed);
 2419|    267|        }
 2420|    274|        state->pending = 0;
 2421|    274|    }
 2422|       |
 2423|       |    /*
 2424|       |     * Indicate that we are done with child.
 2425|       |     */
 2426|  1.81k|    state->child->consumed = 0;
 2427|       |
 2428|       |    /*
 2429|       |     * And move on to final state.
 2430|       |     * (Technically everybody could move to afterEndOfContents except
 2431|       |     * for an indefinite-length EXPLICIT; for simplicity though we assert
 2432|       |     * that but let the end-of-contents code do the real determination.)
 2433|       |     */
 2434|  1.81k|    PORT_Assert(state->place == afterExplicit || (!state->indefinite));
  ------------------
  |  |  120|  1.81k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  3.10k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 526, False: 1.29k]
  |  |  |  |  |  Branch (208:7): [True: 1.29k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2435|  1.81k|    state->place = beforeEndOfContents;
 2436|  1.81k|}
secasn1d.c:sec_asn1d_concat_group:
 2311|  1.14k|{
 2312|  1.14k|    const void ***placep;
 2313|       |
 2314|  1.14k|    PORT_Assert(state->place == afterGroup);
  ------------------
  |  |  120|  1.14k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  1.14k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1.14k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2315|       |
 2316|  1.14k|    placep = (const void ***)state->dest;
 2317|  1.14k|    PORT_Assert(state->subitems_head == NULL || placep != NULL);
  ------------------
  |  |  120|  1.14k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  1.30k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 974, False: 167]
  |  |  |  |  |  Branch (208:7): [True: 167, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2318|  1.14k|    if (placep != NULL) {
  ------------------
  |  Branch (2318:9): [True: 1.14k, False: 0]
  ------------------
 2319|  1.14k|        struct subitem *item;
 2320|  1.14k|        const void **group;
 2321|  1.14k|        int count;
 2322|       |
 2323|  1.14k|        count = 0;
 2324|  1.14k|        item = state->subitems_head;
 2325|  1.82M|        while (item != NULL) {
  ------------------
  |  Branch (2325:16): [True: 1.81M, False: 1.14k]
  ------------------
 2326|  1.81M|            PORT_Assert(item->next != NULL || item == state->subitems_tail);
  ------------------
  |  |  120|  1.81M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  1.81M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 1.81M, False: 167]
  |  |  |  |  |  Branch (208:7): [True: 167, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2327|  1.81M|            count++;
 2328|  1.81M|            item = item->next;
 2329|  1.81M|        }
 2330|       |
 2331|  1.14k|        group = (const void **)sec_asn1d_zalloc(state->top->their_pool,
 2332|  1.14k|                                                (count + 1) * (sizeof(void *)));
 2333|  1.14k|        if (group == NULL) {
  ------------------
  |  Branch (2333:13): [True: 0, False: 1.14k]
  ------------------
 2334|      0|            state->top->status = decodeError;
 2335|      0|            return;
 2336|      0|        }
 2337|       |
 2338|  1.14k|        *placep = group;
 2339|       |
 2340|  1.14k|        item = state->subitems_head;
 2341|  1.82M|        while (item != NULL) {
  ------------------
  |  Branch (2341:16): [True: 1.81M, False: 1.14k]
  ------------------
 2342|  1.81M|            *group++ = item->data;
 2343|  1.81M|            item = item->next;
 2344|  1.81M|        }
 2345|  1.14k|        *group = NULL;
 2346|       |
 2347|       |        /*
 2348|       |         * Because we use arenas and have a mark set, we later free
 2349|       |         * everything we have allocated, so this does *not* present
 2350|       |         * a memory leak (it is just temporarily left dangling).
 2351|       |         */
 2352|  1.14k|        state->subitems_head = state->subitems_tail = NULL;
 2353|  1.14k|    }
 2354|       |
 2355|  1.14k|    state->place = afterEndOfContents;
 2356|  1.14k|}
secasn1d.c:sec_asn1d_prepare_for_end_of_contents:
 2440|  2.04M|{
 2441|  2.04M|    PORT_Assert(state->place == beforeEndOfContents);
  ------------------
  |  |  120|  2.04M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  2.04M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 2.04M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2442|       |
 2443|  2.04M|    if (state->indefinite) {
  ------------------
  |  Branch (2443:9): [True: 906, False: 2.04M]
  ------------------
 2444|    906|        state->place = duringEndOfContents;
 2445|    906|        state->pending = 2;
 2446|  2.04M|    } else {
 2447|  2.04M|        state->place = afterEndOfContents;
 2448|  2.04M|    }
 2449|  2.04M|}
secasn1d.c:sec_asn1d_parse_end_of_contents:
 2454|   190k|{
 2455|   190k|    unsigned int i;
 2456|       |
 2457|   190k|    PORT_Assert(state->pending <= 2);
  ------------------
  |  |  120|   190k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   190k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 190k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2458|   190k|    PORT_Assert(state->place == duringEndOfContents);
  ------------------
  |  |  120|   190k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   190k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 190k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2459|       |
 2460|   190k|    if (len == 0) {
  ------------------
  |  Branch (2460:9): [True: 254, False: 190k]
  ------------------
 2461|    254|        state->top->status = needBytes;
 2462|    254|        return 0;
 2463|    254|    }
 2464|       |
 2465|   190k|    if (state->pending < len)
  ------------------
  |  Branch (2465:9): [True: 189k, False: 258]
  ------------------
 2466|   189k|        len = state->pending;
 2467|       |
 2468|   570k|    for (i = 0; i < len; i++) {
  ------------------
  |  Branch (2468:17): [True: 380k, False: 190k]
  ------------------
 2469|   380k|        if (buf[i] != 0) {
  ------------------
  |  Branch (2469:13): [True: 51, False: 380k]
  ------------------
 2470|       |            /*
 2471|       |             * We expect to find only zeros; if not, just give up.
 2472|       |             */
 2473|     51|            PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|     51|#define PORT_SetError PORT_SetError_Util
  ------------------
 2474|     51|            state->top->status = decodeError;
 2475|     51|            return 0;
 2476|     51|        }
 2477|   380k|    }
 2478|       |
 2479|   190k|    state->pending -= len;
 2480|       |
 2481|   190k|    if (state->pending == 0) {
  ------------------
  |  Branch (2481:9): [True: 190k, False: 35]
  ------------------
 2482|   190k|        state->place = afterEndOfContents;
 2483|       |        /* These end-of-contents octets either terminate a SEQUENCE, a GROUP,
 2484|       |         * or a constructed string. The SEQUENCE case is unique in that the
 2485|       |         * state parses its own end-of-contents octets and therefore should not
 2486|       |         * have its `endofcontents` flag set. We identify the SEQUENCE case by
 2487|       |         * checking whether the child state's template is pointing at a
 2488|       |         * template terminator (see `sec_asn1d_next_in_sequence`).
 2489|       |         */
 2490|   190k|        if (state->child && state->child->theTemplate->kind == 0) {
  ------------------
  |  Branch (2490:13): [True: 658, False: 189k]
  |  Branch (2490:29): [True: 466, False: 192]
  ------------------
 2491|    466|            state->endofcontents = PR_FALSE;
  ------------------
  |  |  438|    466|#define PR_FALSE 0
  ------------------
 2492|   189k|        } else {
 2493|   189k|            state->endofcontents = PR_TRUE;
  ------------------
  |  |  437|   189k|#define PR_TRUE 1
  ------------------
 2494|   189k|        }
 2495|   190k|    }
 2496|       |
 2497|   190k|    return len;
 2498|   190k|}
secasn1d.c:sec_asn1d_pop_state:
 2502|  10.1M|{
 2503|       |#if 0  /* XXX I think this should always be handled explicitly by parent? */
 2504|       |    /*
 2505|       |     * Account for our child.
 2506|       |     */
 2507|       |    if (state->child != NULL) {
 2508|       |    state->consumed += state->child->consumed;
 2509|       |    if (state->pending) {
 2510|       |        PORT_Assert (!state->indefinite);
 2511|       |        if (state->child->consumed > state->pending) {
 2512|       |        PORT_SetError (SEC_ERROR_BAD_DER);
 2513|       |        state->top->status = decodeError;
 2514|       |        } else {
 2515|       |        state->pending -= state->child->consumed;
 2516|       |        }
 2517|       |    }
 2518|       |    state->child->consumed = 0;
 2519|       |    }
 2520|       |#endif /* XXX */
 2521|       |
 2522|       |    /*
 2523|       |     * Free our child.
 2524|       |     */
 2525|  10.1M|    sec_asn1d_free_child(state, PR_FALSE);
  ------------------
  |  |  438|  10.1M|#define PR_FALSE 0
  ------------------
 2526|       |
 2527|       |    /*
 2528|       |     * Just make my parent be the current state.  It will then clean
 2529|       |     * up after me and free me (or reuse me).
 2530|       |     */
 2531|  10.1M|    state->top->current = state->parent;
 2532|  10.1M|}
secasn1d.c:sec_asn1d_record_any_header:
 1765|  19.8M|{
 1766|  19.8M|    SECItem *item;
 1767|       |
 1768|  19.8M|    item = (SECItem *)(state->dest);
 1769|  19.8M|    if (item != NULL && item->data != NULL) {
  ------------------
  |  Branch (1769:9): [True: 959k, False: 18.9M]
  |  Branch (1769:25): [True: 0, False: 959k]
  ------------------
 1770|      0|        PORT_Assert(state->substring);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1771|      0|        PORT_Memcpy(item->data + item->len, buf, len);
  ------------------
  |  |  180|      0|#define PORT_Memcpy memcpy
  ------------------
 1772|      0|        item->len += len;
 1773|  19.8M|    } else {
 1774|  19.8M|        sec_asn1d_add_to_subitems(state, buf, len, PR_TRUE);
  ------------------
  |  |  437|  19.8M|#define PR_TRUE 1
  ------------------
 1775|  19.8M|    }
 1776|  19.8M|}
secasn1d.c:sec_asn1d_free_child:
 1456|  10.1M|{
 1457|  10.1M|    if (state->child != NULL) {
  ------------------
  |  Branch (1457:9): [True: 198k, False: 9.93M]
  ------------------
 1458|   198k|        PORT_Assert(error || state->child->consumed == 0);
  ------------------
  |  |  120|   198k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   393k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 4.74k, False: 194k]
  |  |  |  |  |  Branch (208:7): [True: 194k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1459|   198k|        PORT_Assert(state->our_mark != NULL);
  ------------------
  |  |  120|   198k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   198k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 198k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1460|   198k|        PORT_ArenaZRelease(state->top->our_pool, state->our_mark);
 1461|   198k|        if (error && state->top->their_pool == NULL) {
  ------------------
  |  Branch (1461:13): [True: 4.74k, False: 194k]
  |  Branch (1461:22): [True: 0, False: 4.74k]
  ------------------
 1462|       |            /*
 1463|       |             * XXX We need to free anything allocated.
 1464|       |             * At this point, we failed in the middle of decoding. But we
 1465|       |             * can't free the data we previously allocated with PR_Malloc
 1466|       |             * unless we keep track of every pointer. So instead we have a
 1467|       |             * memory leak when decoding fails half-way, unless an arena is
 1468|       |             * used. See bug 95311 .
 1469|       |             */
 1470|      0|        }
 1471|   198k|        state->child = NULL;
 1472|   198k|        state->our_mark = NULL;
 1473|  9.93M|    } else {
 1474|       |        /*
 1475|       |         * It is important that we do not leave a mark unreleased/unmarked.
 1476|       |         * But I do not think we should ever have one set in this case, only
 1477|       |         * if we had a child (handled above).  So check for that.  If this
 1478|       |         * assertion should ever get hit, then we probably need to add code
 1479|       |         * here to release back to our_mark (and then set our_mark to NULL).
 1480|       |         */
 1481|  9.93M|        PORT_Assert(state->our_mark == NULL);
  ------------------
  |  |  120|  9.93M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  9.93M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9.93M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1482|  9.93M|    }
 1483|  10.1M|    state->place = beforeEndOfContents;
 1484|  10.1M|}
secasn1d.c:sec_asn1d_push_state:
  356|   208k|{
  357|   208k|    sec_asn1d_state *state, *new_state;
  358|       |
  359|   208k|    state = cx->current;
  360|       |
  361|   208k|    PORT_Assert(state == NULL || state->child == NULL);
  ------------------
  |  |  120|   208k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   414k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 2.04k, False: 206k]
  |  |  |  |  |  Branch (208:7): [True: 206k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  362|       |
  363|   208k|    if (state != NULL) {
  ------------------
  |  Branch (363:9): [True: 206k, False: 2.04k]
  ------------------
  364|   206k|        PORT_Assert(state->our_mark == NULL);
  ------------------
  |  |  120|   206k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   206k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 206k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  365|   206k|        state->our_mark = PORT_ArenaMark(cx->our_pool);
  ------------------
  |  |   55|   206k|#define PORT_ArenaMark PORT_ArenaMark_Util
  ------------------
  366|   206k|    }
  367|       |
  368|   208k|    if (theTemplate == NULL) {
  ------------------
  |  Branch (368:9): [True: 0, False: 208k]
  ------------------
  369|      0|        PORT_SetError(SEC_ERROR_BAD_TEMPLATE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  370|      0|        goto loser;
  371|      0|    }
  372|       |
  373|   208k|    new_state = (sec_asn1d_state *)sec_asn1d_zalloc(cx->our_pool,
  374|   208k|                                                    sizeof(*new_state));
  375|   208k|    if (new_state == NULL) {
  ------------------
  |  Branch (375:9): [True: 0, False: 208k]
  ------------------
  376|      0|        goto loser;
  377|      0|    }
  378|       |
  379|   208k|    new_state->top = cx;
  380|   208k|    new_state->parent = state;
  381|   208k|    new_state->theTemplate = theTemplate;
  382|   208k|    new_state->place = notInUse;
  383|   208k|    if (dest != NULL)
  ------------------
  |  Branch (383:9): [True: 205k, False: 2.94k]
  ------------------
  384|   205k|        new_state->dest = (char *)dest + theTemplate->offset;
  385|       |
  386|   208k|    if (state != NULL) {
  ------------------
  |  Branch (386:9): [True: 206k, False: 2.04k]
  ------------------
  387|   206k|        new_state->depth = state->depth;
  388|   206k|        if (new_depth) {
  ------------------
  |  Branch (388:13): [True: 202k, False: 3.79k]
  ------------------
  389|   202k|            if (++new_state->depth > SEC_ASN1D_MAX_DEPTH) {
  ------------------
  |  |  171|   202k|#define SEC_ASN1D_MAX_DEPTH 32
  ------------------
  |  Branch (389:17): [True: 10, False: 202k]
  ------------------
  390|     10|                PORT_SetError(SEC_ERROR_BAD_DER);
  ------------------
  |  |   65|     10|#define PORT_SetError PORT_SetError_Util
  ------------------
  391|     10|                goto loser;
  392|     10|            }
  393|   202k|        }
  394|   206k|        state->child = new_state;
  395|   206k|    }
  396|       |
  397|   208k|    cx->current = new_state;
  398|   208k|    return new_state;
  399|       |
  400|     10|loser:
  401|     10|    cx->status = decodeError;
  402|     10|    if (state != NULL) {
  ------------------
  |  Branch (402:9): [True: 10, False: 0]
  ------------------
  403|     10|        PORT_ArenaRelease(cx->our_pool, state->our_mark);
  ------------------
  |  |   56|     10|#define PORT_ArenaRelease PORT_ArenaRelease_Util
  ------------------
  404|     10|        state->our_mark = NULL;
  405|     10|    }
  406|     10|    return NULL;
  407|   208k|}
secasn1d.c:sec_asn1d_init_state_based_on_template:
  447|  9.66M|{
  448|  9.66M|    PRBool explicit, optional, universal;
  449|  9.66M|    unsigned char expect_tag_modifiers;
  450|  9.66M|    unsigned long encode_kind, under_kind;
  451|  9.66M|    unsigned long check_tag_mask, expect_tag_number;
  452|       |
  453|       |    /* XXX Check that both of these tests are really needed/appropriate. */
  454|  9.66M|    if (state == NULL || state->top->status == decodeError)
  ------------------
  |  Branch (454:9): [True: 0, False: 9.66M]
  |  Branch (454:26): [True: 0, False: 9.66M]
  ------------------
  455|      0|        return state;
  456|       |
  457|  9.66M|    encode_kind = state->theTemplate->kind;
  458|       |
  459|  9.66M|    if (encode_kind & SEC_ASN1_SAVE) {
  ------------------
  |  |  144|  9.66M|#define SEC_ASN1_SAVE 0x20000         /* stash away the encoded bytes first; \
  ------------------
  |  Branch (459:9): [True: 0, False: 9.66M]
  ------------------
  460|       |        /*
  461|       |         * This is a "magic" field that saves away all bytes, allowing
  462|       |         * the immediately following field to still be decoded from this
  463|       |         * same spot -- sort of a fork.
  464|       |         */
  465|       |        /* check that there are no extraneous bits */
  466|      0|        PORT_Assert(encode_kind == SEC_ASN1_SAVE);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  467|      0|        if (state->top->filter_only) {
  ------------------
  |  Branch (467:13): [True: 0, False: 0]
  ------------------
  468|       |            /*
  469|       |             * If we are not storing, then we do not do the SAVE field
  470|       |             * at all.  Just move ahead to the "real" field instead,
  471|       |             * doing the appropriate notify calls before and after.
  472|       |             */
  473|      0|            sec_asn1d_notify_after(state->top, state->dest, state->depth);
  474|       |            /*
  475|       |             * Since we are not storing, allow for our current dest value
  476|       |             * to be NULL.  (This might not actually occur, but right now I
  477|       |             * cannot convince myself one way or the other.)  If it is NULL,
  478|       |             * assume that our parent dest can help us out.
  479|       |             */
  480|      0|            if (state->dest == NULL)
  ------------------
  |  Branch (480:17): [True: 0, False: 0]
  ------------------
  481|      0|                state->dest = state->parent->dest;
  482|      0|            else
  483|      0|                state->dest = (char *)state->dest - state->theTemplate->offset;
  484|      0|            state->theTemplate++;
  485|      0|            if (state->dest != NULL)
  ------------------
  |  Branch (485:17): [True: 0, False: 0]
  ------------------
  486|      0|                state->dest = (char *)state->dest + state->theTemplate->offset;
  487|      0|            sec_asn1d_notify_before(state->top, state->dest, state->depth);
  488|      0|            encode_kind = state->theTemplate->kind;
  489|      0|            PORT_Assert((encode_kind & SEC_ASN1_SAVE) == 0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  490|      0|        } else {
  491|      0|            sec_asn1d_scrub_state(state);
  492|      0|            state->place = duringSaveEncoding;
  493|      0|            state = sec_asn1d_push_state(state->top, SEC_AnyTemplate,
  ------------------
  |  |  148|      0|#define SEC_AnyTemplate SEC_AnyTemplate_Util
  ------------------
  494|      0|                                         state->dest, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  495|      0|            if (state != NULL)
  ------------------
  |  Branch (495:17): [True: 0, False: 0]
  ------------------
  496|      0|                state = sec_asn1d_init_state_based_on_template(state);
  497|      0|            return state;
  498|      0|        }
  499|      0|    }
  500|       |
  501|  9.66M|    universal = ((encode_kind & SEC_ASN1_CLASS_MASK) == SEC_ASN1_UNIVERSAL)
  ------------------
  |  |  119|  9.66M|#define SEC_ASN1_CLASS_MASK 0xc0
  ------------------
                  universal = ((encode_kind & SEC_ASN1_CLASS_MASK) == SEC_ASN1_UNIVERSAL)
  ------------------
  |  |  120|  9.66M|#define SEC_ASN1_UNIVERSAL 0x00
  ------------------
  |  Branch (501:17): [True: 9.65M, False: 3.30k]
  ------------------
  502|  9.66M|                    ? PR_TRUE
  ------------------
  |  |  437|  9.65M|#define PR_TRUE 1
  ------------------
  503|  9.66M|                    : PR_FALSE;
  ------------------
  |  |  438|  9.66M|#define PR_FALSE 0
  ------------------
  504|       |
  505|  9.66M|    explicit = (encode_kind & SEC_ASN1_EXPLICIT) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  132|  9.66M|#define SEC_ASN1_EXPLICIT 0x00200
  ------------------
                  explicit = (encode_kind & SEC_ASN1_EXPLICIT) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|  2.77k|#define PR_TRUE 1
  ------------------
                  explicit = (encode_kind & SEC_ASN1_EXPLICIT) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|  19.3M|#define PR_FALSE 0
  ------------------
  |  Branch (505:16): [True: 2.77k, False: 9.65M]
  ------------------
  506|  9.66M|    encode_kind &= ~SEC_ASN1_EXPLICIT;
  ------------------
  |  |  132|  9.66M|#define SEC_ASN1_EXPLICIT 0x00200
  ------------------
  507|       |
  508|  9.66M|    optional = (encode_kind & SEC_ASN1_OPTIONAL) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  131|  9.66M|#define SEC_ASN1_OPTIONAL 0x00100
  ------------------
                  optional = (encode_kind & SEC_ASN1_OPTIONAL) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|  3.30k|#define PR_TRUE 1
  ------------------
                  optional = (encode_kind & SEC_ASN1_OPTIONAL) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|  19.3M|#define PR_FALSE 0
  ------------------
  |  Branch (508:16): [True: 3.30k, False: 9.65M]
  ------------------
  509|  9.66M|    encode_kind &= ~SEC_ASN1_OPTIONAL;
  ------------------
  |  |  131|  9.66M|#define SEC_ASN1_OPTIONAL 0x00100
  ------------------
  510|       |
  511|  9.66M|    PORT_Assert(!(explicit && universal)); /* bad templates */
  ------------------
  |  |  120|  9.66M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  9.66M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 2.77k, False: 9.65M]
  |  |  |  |  |  Branch (208:7): [True: 0, False: 2.77k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  512|       |
  513|  9.66M|    encode_kind &= ~SEC_ASN1_DYNAMIC;
  ------------------
  |  |  138|  9.66M|#define SEC_ASN1_DYNAMIC 0x04000      /* subtemplate is found by calling \
  ------------------
  514|  9.66M|    encode_kind &= ~SEC_ASN1_MAY_STREAM;
  ------------------
  |  |  146|  9.66M|#define SEC_ASN1_MAY_STREAM 0x40000   /* field or one of its sub-fields may \
  ------------------
  515|       |
  516|  9.66M|    if (encode_kind & SEC_ASN1_CHOICE) {
  ------------------
  |  |  153|  9.66M|#define SEC_ASN1_CHOICE 0x100000      /* pick one from a template */
  ------------------
  |  Branch (516:9): [True: 0, False: 9.66M]
  ------------------
  517|       |#if 0 /* XXX remove? */
  518|       |      sec_asn1d_state *child = sec_asn1d_push_state(state->top, state->theTemplate, state->dest, PR_FALSE);
  519|       |      if ((sec_asn1d_state *)NULL == child) {
  520|       |        return (sec_asn1d_state *)NULL;
  521|       |      }
  522|       |
  523|       |      child->allocate = state->allocate;
  524|       |      child->place = beforeChoice;
  525|       |      return child;
  526|       |#else
  527|      0|        state->place = beforeChoice;
  528|      0|        return state;
  529|      0|#endif
  530|      0|    }
  531|       |
  532|  9.66M|    if ((encode_kind & (SEC_ASN1_POINTER | SEC_ASN1_INLINE)) || (!universal && !explicit)) {
  ------------------
  |  |  135|  9.66M|#define SEC_ASN1_POINTER 0x01000
  ------------------
                  if ((encode_kind & (SEC_ASN1_POINTER | SEC_ASN1_INLINE)) || (!universal && !explicit)) {
  ------------------
  |  |  134|  9.66M|#define SEC_ASN1_INLINE 0x00800
  ------------------
  |  Branch (532:9): [True: 3.27k, False: 9.65M]
  |  Branch (532:66): [True: 3.30k, False: 9.65M]
  |  Branch (532:80): [True: 526, False: 2.77k]
  ------------------
  533|  3.79k|        const SEC_ASN1Template *subt;
  534|  3.79k|        void *dest;
  535|  3.79k|        PRBool child_allocate;
  536|       |
  537|  3.79k|        PORT_Assert((encode_kind & (SEC_ASN1_ANY | SEC_ASN1_SKIP)) == 0);
  ------------------
  |  |  120|  3.79k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  3.79k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 3.79k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  538|       |
  539|  3.79k|        sec_asn1d_scrub_state(state);
  540|  3.79k|        child_allocate = PR_FALSE;
  ------------------
  |  |  438|  3.79k|#define PR_FALSE 0
  ------------------
  541|       |
  542|  3.79k|        if (encode_kind & SEC_ASN1_POINTER) {
  ------------------
  |  |  135|  3.79k|#define SEC_ASN1_POINTER 0x01000
  ------------------
  |  Branch (542:13): [True: 2.44k, False: 1.35k]
  ------------------
  543|       |            /*
  544|       |             * A POINTER means we need to allocate the destination for
  545|       |             * this field.  But, since it may also be an optional field,
  546|       |             * we defer the allocation until later; we just record that
  547|       |             * it needs to be done.
  548|       |             *
  549|       |             * There are two possible scenarios here -- one is just a
  550|       |             * plain POINTER (kind of like INLINE, except with allocation)
  551|       |             * and the other is an implicitly-tagged POINTER.  We don't
  552|       |             * need to do anything special here for the two cases, but
  553|       |             * since the template definition can be tricky, we do check
  554|       |             * that there are no extraneous bits set in encode_kind.
  555|       |             *
  556|       |             * XXX The same conditions which assert should set an error.
  557|       |             */
  558|  2.44k|            if (universal) {
  ------------------
  |  Branch (558:17): [True: 2.44k, False: 0]
  ------------------
  559|       |                /*
  560|       |                 * "universal" means this entry is a standalone POINTER;
  561|       |                 * there should be no other bits set in encode_kind.
  562|       |                 */
  563|  2.44k|                PORT_Assert(encode_kind == SEC_ASN1_POINTER);
  ------------------
  |  |  120|  2.44k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  2.44k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 2.44k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  564|  2.44k|            } else {
  565|       |                /*
  566|       |                 * If we get here we have an implicitly-tagged field
  567|       |                 * that needs to be put into a POINTER.  The subtemplate
  568|       |                 * will determine how to decode the field, but encode_kind
  569|       |                 * describes the (implicit) tag we are looking for.
  570|       |                 * The non-tag bits of encode_kind will be ignored by
  571|       |                 * the code below; none of them should be set, however,
  572|       |                 * except for the POINTER bit itself -- so check that.
  573|       |                 */
  574|      0|                PORT_Assert((encode_kind & ~SEC_ASN1_TAG_MASK) == SEC_ASN1_POINTER);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  575|      0|            }
  576|  2.44k|            if (!state->top->filter_only)
  ------------------
  |  Branch (576:17): [True: 2.44k, False: 0]
  ------------------
  577|  2.44k|                child_allocate = PR_TRUE;
  ------------------
  |  |  437|  2.44k|#define PR_TRUE 1
  ------------------
  578|  2.44k|            dest = NULL;
  579|  2.44k|            state->place = afterPointer;
  580|  2.44k|        } else {
  581|  1.35k|            dest = state->dest;
  582|  1.35k|            if (encode_kind & SEC_ASN1_INLINE) {
  ------------------
  |  |  134|  1.35k|#define SEC_ASN1_INLINE 0x00800
  ------------------
  |  Branch (582:17): [True: 825, False: 526]
  ------------------
  583|       |                /* check that there are no extraneous bits */
  584|    825|                PORT_Assert(encode_kind == SEC_ASN1_INLINE && !optional);
  ------------------
  |  |  120|    825|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  1.65k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 825, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 825, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  585|    825|                state->place = afterInline;
  586|    825|            } else {
  587|    526|                state->place = afterImplicit;
  588|    526|            }
  589|  1.35k|        }
  590|       |
  591|  3.79k|        state->optional = optional;
  592|  3.79k|        subt = SEC_ASN1GetSubtemplate(state->theTemplate, state->dest, PR_FALSE);
  ------------------
  |  |  438|  3.79k|#define PR_FALSE 0
  ------------------
  593|  3.79k|        state = sec_asn1d_push_state(state->top, subt, dest, PR_FALSE);
  ------------------
  |  |  438|  3.79k|#define PR_FALSE 0
  ------------------
  594|  3.79k|        if (state == NULL)
  ------------------
  |  Branch (594:13): [True: 0, False: 3.79k]
  ------------------
  595|      0|            return NULL;
  596|       |
  597|  3.79k|        state->allocate = child_allocate;
  598|       |
  599|  3.79k|        if (universal) {
  ------------------
  |  Branch (599:13): [True: 3.27k, False: 526]
  ------------------
  600|  3.27k|            state = sec_asn1d_init_state_based_on_template(state);
  601|  3.27k|            if (state != NULL) {
  ------------------
  |  Branch (601:17): [True: 3.27k, False: 0]
  ------------------
  602|       |                /*
  603|       |                 * If this field is optional, we need to record that on
  604|       |                 * the pushed child so it won't fail if the field isn't
  605|       |                 * found.  I can't think of a way that this new state
  606|       |                 * could already have optional set (which we would wipe
  607|       |                 * out below if our local optional is not set) -- but
  608|       |                 * just to be sure, assert that it isn't set.
  609|       |                 */
  610|  3.27k|                PORT_Assert(!state->optional);
  ------------------
  |  |  120|  3.27k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  3.27k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 3.27k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  611|  3.27k|                state->optional = optional;
  612|  3.27k|            }
  613|  3.27k|            return state;
  614|  3.27k|        }
  615|       |
  616|    526|        under_kind = state->theTemplate->kind;
  617|    526|        under_kind &= ~SEC_ASN1_MAY_STREAM;
  ------------------
  |  |  146|    526|#define SEC_ASN1_MAY_STREAM 0x40000   /* field or one of its sub-fields may \
  ------------------
  618|  9.65M|    } else if (explicit) {
  ------------------
  |  Branch (618:16): [True: 2.77k, False: 9.65M]
  ------------------
  619|       |        /*
  620|       |         * For explicit, we only need to match the encoding tag next,
  621|       |         * then we will push another state to handle the entire inner
  622|       |         * part.  In this case, there is no underlying kind which plays
  623|       |         * any part in the determination of the outer, explicit tag.
  624|       |         * So we just set under_kind to 0, which is not a valid tag,
  625|       |         * and the rest of the tag matching stuff should be okay.
  626|       |         */
  627|  2.77k|        under_kind = 0;
  628|  9.65M|    } else {
  629|       |        /*
  630|       |         * Nothing special; the underlying kind and the given encoding
  631|       |         * information are the same.
  632|       |         */
  633|  9.65M|        under_kind = encode_kind;
  634|  9.65M|    }
  635|       |
  636|       |    /* XXX is this the right set of bits to test here? */
  637|  9.65M|    PORT_Assert((under_kind & (SEC_ASN1_EXPLICIT | SEC_ASN1_OPTIONAL | SEC_ASN1_MAY_STREAM | SEC_ASN1_INLINE | SEC_ASN1_POINTER)) == 0);
  ------------------
  |  |  120|  9.65M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  9.65M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9.65M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  638|       |
  639|  9.65M|    if (encode_kind & (SEC_ASN1_ANY | SEC_ASN1_SKIP)) {
  ------------------
  |  |  133|  9.65M|#define SEC_ASN1_ANY 0x00400
  ------------------
                  if (encode_kind & (SEC_ASN1_ANY | SEC_ASN1_SKIP)) {
  ------------------
  |  |  140|  9.65M|#define SEC_ASN1_SKIP 0x08000         /* skip a field; only for decoding */
  ------------------
  |  Branch (639:9): [True: 9.64M, False: 17.3k]
  ------------------
  640|  9.64M|        PORT_Assert(encode_kind == under_kind);
  ------------------
  |  |  120|  9.64M|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  9.64M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 9.64M, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  641|  9.64M|        if (encode_kind & SEC_ASN1_SKIP) {
  ------------------
  |  |  140|  9.64M|#define SEC_ASN1_SKIP 0x08000         /* skip a field; only for decoding */
  ------------------
  |  Branch (641:13): [True: 0, False: 9.64M]
  ------------------
  642|      0|            PORT_Assert(!optional);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  643|      0|            PORT_Assert(encode_kind == SEC_ASN1_SKIP);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  644|      0|            state->dest = NULL;
  645|      0|        }
  646|  9.64M|        check_tag_mask = 0;
  647|  9.64M|        expect_tag_modifiers = 0;
  648|  9.64M|        expect_tag_number = 0;
  649|  9.64M|    } else {
  650|  17.3k|        check_tag_mask = SEC_ASN1_TAG_MASK;
  ------------------
  |  |   65|  17.3k|#define SEC_ASN1_TAG_MASK 0xff
  ------------------
  651|  17.3k|        expect_tag_modifiers = (unsigned char)encode_kind & SEC_ASN1_TAG_MASK & ~SEC_ASN1_TAGNUM_MASK;
  ------------------
  |  |   65|  17.3k|#define SEC_ASN1_TAG_MASK 0xff
  ------------------
                      expect_tag_modifiers = (unsigned char)encode_kind & SEC_ASN1_TAG_MASK & ~SEC_ASN1_TAGNUM_MASK;
  ------------------
  |  |   76|  17.3k|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  652|       |        /*
  653|       |         * XXX This assumes only single-octet identifiers.  To handle
  654|       |         * the HIGH TAG form we would need to do some more work, especially
  655|       |         * in how to specify them in the template, because right now we
  656|       |         * do not provide a way to specify more *tag* bits in encode_kind.
  657|       |         */
  658|  17.3k|        expect_tag_number = encode_kind & SEC_ASN1_TAGNUM_MASK;
  ------------------
  |  |   76|  17.3k|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  659|       |
  660|  17.3k|        switch (under_kind & SEC_ASN1_TAGNUM_MASK) {
  ------------------
  |  |   76|  17.3k|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  |  Branch (660:17): [True: 6.98k, False: 10.3k]
  ------------------
  661|  1.98k|            case SEC_ASN1_SET:
  ------------------
  |  |   93|  1.98k|#define SEC_ASN1_SET 0x11
  ------------------
  |  Branch (661:13): [True: 1.98k, False: 15.3k]
  ------------------
  662|       |                /*
  663|       |                 * XXX A plain old SET (as opposed to a SET OF) is not implemented.
  664|       |                 * If it ever is, remove this assert...
  665|       |                 */
  666|  1.98k|                PORT_Assert((under_kind & SEC_ASN1_GROUP) != 0);
  ------------------
  |  |  120|  1.98k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  1.98k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1.98k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  667|       |            /* fallthru */
  668|  6.25k|            case SEC_ASN1_SEQUENCE:
  ------------------
  |  |   92|  6.25k|#define SEC_ASN1_SEQUENCE 0x10
  ------------------
  |  Branch (668:13): [True: 4.27k, False: 13.0k]
  ------------------
  669|  6.25k|                expect_tag_modifiers |= SEC_ASN1_CONSTRUCTED;
  ------------------
  |  |  117|  6.25k|#define SEC_ASN1_CONSTRUCTED 0x20
  ------------------
  670|  6.25k|                break;
  671|      0|            case SEC_ASN1_BIT_STRING:
  ------------------
  |  |   79|      0|#define SEC_ASN1_BIT_STRING 0x03
  ------------------
  |  Branch (671:13): [True: 0, False: 17.3k]
  ------------------
  672|      0|            case SEC_ASN1_BMP_STRING:
  ------------------
  |  |  106|      0|#define SEC_ASN1_BMP_STRING 0x1e
  ------------------
  |  Branch (672:13): [True: 0, False: 17.3k]
  ------------------
  673|      0|            case SEC_ASN1_GENERALIZED_TIME:
  ------------------
  |  |  100|      0|#define SEC_ASN1_GENERALIZED_TIME 0x18
  ------------------
  |  Branch (673:13): [True: 0, False: 17.3k]
  ------------------
  674|      0|            case SEC_ASN1_IA5_STRING:
  ------------------
  |  |   98|      0|#define SEC_ASN1_IA5_STRING 0x16
  ------------------
  |  Branch (674:13): [True: 0, False: 17.3k]
  ------------------
  675|  4.11k|            case SEC_ASN1_OCTET_STRING:
  ------------------
  |  |   80|  4.11k|#define SEC_ASN1_OCTET_STRING 0x04
  ------------------
  |  Branch (675:13): [True: 4.11k, False: 13.2k]
  ------------------
  676|  4.11k|            case SEC_ASN1_PRINTABLE_STRING:
  ------------------
  |  |   95|  4.11k|#define SEC_ASN1_PRINTABLE_STRING 0x13
  ------------------
  |  Branch (676:13): [True: 0, False: 17.3k]
  ------------------
  677|  4.11k|            case SEC_ASN1_T61_STRING:
  ------------------
  |  |   96|  4.11k|#define SEC_ASN1_T61_STRING 0x14
  ------------------
  |  Branch (677:13): [True: 0, False: 17.3k]
  ------------------
  678|  4.11k|            case SEC_ASN1_UNIVERSAL_STRING:
  ------------------
  |  |  104|  4.11k|#define SEC_ASN1_UNIVERSAL_STRING 0x1c
  ------------------
  |  Branch (678:13): [True: 0, False: 17.3k]
  ------------------
  679|  4.11k|            case SEC_ASN1_UTC_TIME:
  ------------------
  |  |   99|  4.11k|#define SEC_ASN1_UTC_TIME 0x17
  ------------------
  |  Branch (679:13): [True: 0, False: 17.3k]
  ------------------
  680|  4.11k|            case SEC_ASN1_UTF8_STRING:
  ------------------
  |  |   88|  4.11k|#define SEC_ASN1_UTF8_STRING 0x0c
  ------------------
  |  Branch (680:13): [True: 0, False: 17.3k]
  ------------------
  681|  4.11k|            case SEC_ASN1_VISIBLE_STRING:
  ------------------
  |  |  102|  4.11k|#define SEC_ASN1_VISIBLE_STRING 0x1a
  ------------------
  |  Branch (681:13): [True: 0, False: 17.3k]
  ------------------
  682|  4.11k|                check_tag_mask &= ~SEC_ASN1_CONSTRUCTED;
  ------------------
  |  |  117|  4.11k|#define SEC_ASN1_CONSTRUCTED 0x20
  ------------------
  683|  4.11k|                break;
  684|  17.3k|        }
  685|  17.3k|    }
  686|       |
  687|  9.65M|    state->check_tag_mask = check_tag_mask;
  688|  9.65M|    state->expect_tag_modifiers = expect_tag_modifiers;
  689|  9.65M|    state->expect_tag_number = expect_tag_number;
  690|  9.65M|    state->underlying_kind = under_kind;
  691|  9.65M|    state->explicit = explicit;
  692|  9.65M|    state->optional = optional;
  693|       |
  694|  9.65M|    sec_asn1d_scrub_state(state);
  695|       |
  696|  9.65M|    return state;
  697|  9.65M|}

SEC_ASN1EncodeLength:
  397|    646|{
  398|    646|    int lenlen;
  399|       |
  400|    646|    lenlen = SEC_ASN1LengthLength(value);
  ------------------
  |  |  101|    646|#define SEC_ASN1LengthLength SEC_ASN1LengthLength_Util
  ------------------
  401|    646|    if (lenlen == 1) {
  ------------------
  |  Branch (401:9): [True: 520, False: 126]
  ------------------
  402|    520|        buf[0] = value;
  403|    520|    } else {
  404|    126|        int i;
  405|       |
  406|    126|        i = lenlen - 1;
  407|    126|        buf[0] = 0x80 | i;
  408|    252|        while (i) {
  ------------------
  |  Branch (408:16): [True: 126, False: 126]
  ------------------
  409|    126|            buf[i--] = value;
  410|    126|            value >>= 8;
  411|    126|        }
  412|    126|        PORT_Assert(value == 0);
  ------------------
  |  |  120|    126|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    126|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 126, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|    126|    }
  414|    646|    return lenlen;
  415|    646|}
SEC_ASN1EncoderUpdate_Util:
 1201|    646|{
 1202|    646|    sec_asn1e_state *state;
 1203|       |
 1204|    646|    if (cx->status == needBytes) {
  ------------------
  |  Branch (1204:9): [True: 0, False: 646]
  ------------------
 1205|      0|        cx->status = keepGoing;
 1206|      0|    }
 1207|       |
 1208|  1.93k|    while (cx->status == keepGoing) {
  ------------------
  |  Branch (1208:12): [True: 1.93k, False: 0]
  ------------------
 1209|  1.93k|        state = cx->current;
 1210|  1.93k|        switch (state->place) {
 1211|    646|            case beforeHeader:
  ------------------
  |  Branch (1211:13): [True: 646, False: 1.29k]
  ------------------
 1212|    646|                sec_asn1e_write_header(state);
 1213|    646|                break;
 1214|    646|            case duringContents:
  ------------------
  |  Branch (1214:13): [True: 646, False: 1.29k]
  ------------------
 1215|    646|                if (cx->from_buf)
  ------------------
  |  Branch (1215:21): [True: 0, False: 646]
  ------------------
 1216|      0|                    sec_asn1e_write_contents_from_buf(state, buf, len);
 1217|    646|                else
 1218|    646|                    sec_asn1e_write_contents(state);
 1219|    646|                break;
 1220|      0|            case duringGroup:
  ------------------
  |  Branch (1220:13): [True: 0, False: 1.93k]
  ------------------
 1221|      0|                sec_asn1e_next_in_group(state);
 1222|      0|                break;
 1223|      0|            case duringSequence:
  ------------------
  |  Branch (1223:13): [True: 0, False: 1.93k]
  ------------------
 1224|      0|                sec_asn1e_next_in_sequence(state);
 1225|      0|                break;
 1226|    646|            case afterContents:
  ------------------
  |  Branch (1226:13): [True: 646, False: 1.29k]
  ------------------
 1227|    646|                sec_asn1e_after_contents(state);
 1228|    646|                break;
 1229|      0|            case afterImplicit:
  ------------------
  |  Branch (1229:13): [True: 0, False: 1.93k]
  ------------------
 1230|      0|            case afterInline:
  ------------------
  |  Branch (1230:13): [True: 0, False: 1.93k]
  ------------------
 1231|      0|            case afterPointer:
  ------------------
  |  Branch (1231:13): [True: 0, False: 1.93k]
  ------------------
 1232|      0|            case afterChoice:
  ------------------
  |  Branch (1232:13): [True: 0, False: 1.93k]
  ------------------
 1233|       |                /*
 1234|       |                 * These states are more documentation than anything.
 1235|       |                 * They just need to force a pop.
 1236|       |                 */
 1237|      0|                PORT_Assert(!state->indefinite);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1238|      0|                state->place = afterContents;
 1239|      0|                break;
 1240|      0|            case notInUse:
  ------------------
  |  Branch (1240:13): [True: 0, False: 1.93k]
  ------------------
 1241|      0|            default:
  ------------------
  |  Branch (1241:13): [True: 0, False: 1.93k]
  ------------------
 1242|       |                /* This is not an error, but rather a plain old BUG! */
 1243|      0|                PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1244|      0|                cx->status = encodeError;
 1245|      0|                break;
 1246|  1.93k|        }
 1247|       |
 1248|  1.93k|        if (cx->status == encodeError)
  ------------------
  |  Branch (1248:13): [True: 0, False: 1.93k]
  ------------------
 1249|      0|            break;
 1250|       |
 1251|       |        /* It might have changed, so we have to update our local copy.  */
 1252|  1.93k|        state = cx->current;
 1253|       |
 1254|       |        /* If it is NULL, we have popped all the way to the top.  */
 1255|  1.93k|        if (state == NULL) {
  ------------------
  |  Branch (1255:13): [True: 646, False: 1.29k]
  ------------------
 1256|    646|            cx->status = allDone;
 1257|    646|            break;
 1258|    646|        }
 1259|  1.93k|    }
 1260|       |
 1261|    646|    if (cx->status == encodeError) {
  ------------------
  |  Branch (1261:9): [True: 0, False: 646]
  ------------------
 1262|      0|        return SECFailure;
 1263|      0|    }
 1264|       |
 1265|    646|    return SECSuccess;
 1266|    646|}
SEC_ASN1EncoderFinish_Util:
 1270|    646|{
 1271|       |    /*
 1272|       |     * XXX anything else that needs to be finished?
 1273|       |     */
 1274|       |
 1275|    646|    PORT_FreeArena(cx->our_pool, PR_FALSE);
  ------------------
  |  |   61|    646|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                  PORT_FreeArena(cx->our_pool, PR_FALSE);
  ------------------
  |  |  438|    646|#define PR_FALSE 0
  ------------------
 1276|    646|}
SEC_ASN1EncoderStart_Util:
 1281|    646|{
 1282|    646|    PLArenaPool *our_pool;
 1283|    646|    SEC_ASN1EncoderContext *cx;
 1284|       |
 1285|    646|    our_pool = PORT_NewArena(SEC_ASN1_DEFAULT_ARENA_SIZE);
  ------------------
  |  |   63|    646|#define PORT_NewArena PORT_NewArena_Util
  ------------------
                  our_pool = PORT_NewArena(SEC_ASN1_DEFAULT_ARENA_SIZE);
  ------------------
  |  |   60|    646|#define SEC_ASN1_DEFAULT_ARENA_SIZE (2048)
  ------------------
 1286|    646|    if (our_pool == NULL)
  ------------------
  |  Branch (1286:9): [True: 0, False: 646]
  ------------------
 1287|      0|        return NULL;
 1288|       |
 1289|    646|    cx = (SEC_ASN1EncoderContext *)PORT_ArenaZAlloc(our_pool, sizeof(*cx));
  ------------------
  |  |   59|    646|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
 1290|    646|    if (cx == NULL) {
  ------------------
  |  Branch (1290:9): [True: 0, False: 646]
  ------------------
 1291|      0|        PORT_FreeArena(our_pool, PR_FALSE);
  ------------------
  |  |   61|      0|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(our_pool, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1292|      0|        return NULL;
 1293|      0|    }
 1294|       |
 1295|    646|    cx->our_pool = our_pool;
 1296|    646|    cx->output_proc = output_proc;
 1297|    646|    cx->output_arg = output_arg;
 1298|       |
 1299|    646|    cx->status = keepGoing;
 1300|       |
 1301|    646|    if (sec_asn1e_push_state(cx, theTemplate, src, PR_FALSE) == NULL ||
  ------------------
  |  |  438|    646|#define PR_FALSE 0
  ------------------
  |  Branch (1301:9): [True: 0, False: 646]
  ------------------
 1302|    646|        sec_asn1e_init_state_based_on_template(cx->current) == NULL) {
  ------------------
  |  Branch (1302:9): [True: 0, False: 646]
  ------------------
 1303|       |        /*
 1304|       |         * Trouble initializing (probably due to failed allocations)
 1305|       |         * requires that we just give up.
 1306|       |         */
 1307|      0|        PORT_FreeArena(our_pool, PR_FALSE);
  ------------------
  |  |   61|      0|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                      PORT_FreeArena(our_pool, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
 1308|      0|        return NULL;
 1309|      0|    }
 1310|       |
 1311|    646|    return cx;
 1312|    646|}
SEC_ASN1Encode_Util:
 1389|    646|{
 1390|    646|    SEC_ASN1EncoderContext *ecx;
 1391|    646|    SECStatus rv;
 1392|       |
 1393|    646|    ecx = SEC_ASN1EncoderStart(src, theTemplate, output_proc, output_arg);
  ------------------
  |  |   98|    646|#define SEC_ASN1EncoderStart SEC_ASN1EncoderStart_Util
  ------------------
 1394|    646|    if (ecx == NULL)
  ------------------
  |  Branch (1394:9): [True: 0, False: 646]
  ------------------
 1395|      0|        return SECFailure;
 1396|       |
 1397|    646|    rv = SEC_ASN1EncoderUpdate(ecx, NULL, 0);
  ------------------
  |  |   99|    646|#define SEC_ASN1EncoderUpdate SEC_ASN1EncoderUpdate_Util
  ------------------
 1398|       |
 1399|    646|    SEC_ASN1EncoderFinish(ecx);
  ------------------
  |  |   94|    646|#define SEC_ASN1EncoderFinish SEC_ASN1EncoderFinish_Util
  ------------------
 1400|    646|    return rv;
 1401|    646|}
SEC_ASN1EncodeItem_Util:
 1487|    323|{
 1488|    323|    unsigned long encoding_length;
 1489|    323|    SECStatus rv;
 1490|       |
 1491|    323|    PORT_Assert(dest == NULL || dest->data == NULL);
  ------------------
  |  |  120|    323|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    323|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 323, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1492|       |
 1493|    323|    encoding_length = 0;
 1494|    323|    rv = SEC_ASN1Encode(src, theTemplate,
  ------------------
  |  |   87|    323|#define SEC_ASN1Encode SEC_ASN1Encode_Util
  ------------------
 1495|    323|                        sec_asn1e_encode_item_count, &encoding_length);
 1496|    323|    if (rv != SECSuccess)
  ------------------
  |  Branch (1496:9): [True: 0, False: 323]
  ------------------
 1497|      0|        return NULL;
 1498|       |
 1499|    323|    dest = sec_asn1e_allocate_item(poolp, dest, encoding_length);
 1500|    323|    if (dest == NULL)
  ------------------
  |  Branch (1500:9): [True: 0, False: 323]
  ------------------
 1501|      0|        return NULL;
 1502|       |
 1503|       |    /* XXX necessary?  This really just checks for a bug in the allocate fn */
 1504|    323|    PORT_Assert(dest->data != NULL);
  ------------------
  |  |  120|    323|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    323|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 323, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1505|    323|    if (dest->data == NULL)
  ------------------
  |  Branch (1505:9): [True: 0, False: 323]
  ------------------
 1506|      0|        return NULL;
 1507|       |
 1508|    323|    dest->len = 0;
 1509|    323|    (void)SEC_ASN1Encode(src, theTemplate, sec_asn1e_encode_item_store, dest);
  ------------------
  |  |   87|    323|#define SEC_ASN1Encode SEC_ASN1Encode_Util
  ------------------
 1510|       |
 1511|    323|    PORT_Assert(encoding_length == dest->len);
  ------------------
  |  |  120|    323|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    323|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 323, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1512|    323|    return dest;
 1513|    323|}
secasn1e.c:sec_asn1e_write_header:
  734|    646|{
  735|    646|    unsigned long contents_length;
  736|    646|    unsigned char tag_number, tag_modifiers;
  737|    646|    sec_asn1e_hdr_encoding hdrException = hdr_normal;
  738|    646|    PRBool indefinite = PR_FALSE;
  ------------------
  |  |  438|    646|#define PR_FALSE 0
  ------------------
  739|       |
  740|    646|    PORT_Assert(state->place == beforeHeader);
  ------------------
  |  |  120|    646|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    646|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 646, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  741|       |
  742|    646|    tag_number = state->tag_number;
  743|    646|    tag_modifiers = state->tag_modifiers;
  744|       |
  745|    646|    if (state->underlying_kind == SEC_ASN1_ANY) {
  ------------------
  |  |  133|    646|#define SEC_ASN1_ANY 0x00400
  ------------------
  |  Branch (745:9): [True: 0, False: 646]
  ------------------
  746|      0|        state->place = duringContents;
  747|      0|        return;
  748|      0|    }
  749|       |
  750|    646|    if (state->underlying_kind & SEC_ASN1_CHOICE) {
  ------------------
  |  |  153|    646|#define SEC_ASN1_CHOICE 0x100000      /* pick one from a template */
  ------------------
  |  Branch (750:9): [True: 0, False: 646]
  ------------------
  751|      0|        int indx = sec_asn1e_which_choice(state->src, state->theTemplate);
  752|      0|        if (0 == indx) {
  ------------------
  |  Branch (752:13): [True: 0, False: 0]
  ------------------
  753|       |            /* XXX set an error? "choice not found" */
  754|      0|            state->top->status = encodeError;
  755|      0|            return;
  756|      0|        }
  757|      0|        state->place = afterChoice;
  758|      0|        state = sec_asn1e_push_state(state->top, &state->theTemplate[indx],
  759|      0|                                     (char *)state->src - state->theTemplate->offset,
  760|      0|                                     PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  761|      0|        if (state) {
  ------------------
  |  Branch (761:13): [True: 0, False: 0]
  ------------------
  762|       |            /*
  763|       |             * Do the "before" field notification.
  764|       |             */
  765|      0|            sec_asn1e_notify_before(state->top, state->src, state->depth);
  766|      0|            (void)sec_asn1e_init_state_based_on_template(state);
  767|      0|        }
  768|      0|        return;
  769|      0|    }
  770|       |
  771|       |    /* The !isString test below is apparently intended to ensure that all
  772|       |    ** constructed types receive indefinite length encoding.
  773|       |    */
  774|    646|    indefinite = (PRBool)(state->top->streaming && state->may_stream &&
  ------------------
  |  Branch (774:27): [True: 0, False: 646]
  |  Branch (774:52): [True: 0, False: 0]
  ------------------
  775|    646|                          (state->top->from_buf || !state->is_string));
  ------------------
  |  Branch (775:28): [True: 0, False: 0]
  |  Branch (775:52): [True: 0, False: 0]
  ------------------
  776|       |
  777|       |    /*
  778|       |     * If we are doing a definite-length encoding, first we have to
  779|       |     * walk the data structure to calculate the entire contents length.
  780|       |     * If we are doing an indefinite-length encoding, we still need to
  781|       |     * know if the contents is:
  782|       |     *    optional and to be omitted, or
  783|       |     *    an ANY (header is pre-encoded), or
  784|       |     *    a SAVE or some other kind of template used only by the decoder.
  785|       |     * So, we call this function either way.
  786|       |     */
  787|    646|    contents_length = sec_asn1e_contents_length(state->theTemplate,
  788|    646|                                                state->src,
  789|    646|                                                state->disallowStreaming,
  790|    646|                                                indefinite,
  791|    646|                                                &hdrException);
  792|       |    /*
  793|       |     * We might be told explicitly not to put out a header.
  794|       |     * But it can also be the case, via a pushed subtemplate, that
  795|       |     * sec_asn1e_contents_length could not know that this field is
  796|       |     * really optional.  So check for that explicitly, too.
  797|       |     */
  798|    646|    if (hdrException != hdr_normal ||
  ------------------
  |  Branch (798:9): [True: 0, False: 646]
  ------------------
  799|    646|        (contents_length == 0 && state->optional)) {
  ------------------
  |  Branch (799:10): [True: 0, False: 646]
  |  Branch (799:34): [True: 0, False: 0]
  ------------------
  800|      0|        state->place = afterContents;
  801|      0|        if (state->top->streaming &&
  ------------------
  |  Branch (801:13): [True: 0, False: 0]
  ------------------
  802|      0|            state->may_stream &&
  ------------------
  |  Branch (802:13): [True: 0, False: 0]
  ------------------
  803|      0|            state->top->from_buf) {
  ------------------
  |  Branch (803:13): [True: 0, False: 0]
  ------------------
  804|       |            /* we did not find an optional indefinite string, so we
  805|       |             * don't encode it.  However, if TakeFromBuf is on, we stop
  806|       |             * here anyway to give our caller a chance to intercept at the
  807|       |             * same point where we would stop if the field were present.
  808|       |             */
  809|      0|            state->top->status = needBytes;
  810|      0|        }
  811|      0|        return;
  812|      0|    }
  813|       |
  814|    646|    if (indefinite) {
  ------------------
  |  Branch (814:9): [True: 0, False: 646]
  ------------------
  815|       |        /*
  816|       |         * We need to put out an indefinite-length encoding.
  817|       |         * The only universal types that can be constructed are SETs,
  818|       |         * SEQUENCEs, and strings; so check that it is one of those,
  819|       |         * or that it is not universal (e.g. context-specific).
  820|       |         */
  821|      0|        state->indefinite = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  822|      0|        PORT_Assert((tag_number == SEC_ASN1_SET) || (tag_number == SEC_ASN1_SEQUENCE) || ((tag_modifiers & SEC_ASN1_CLASS_MASK) != 0) || state->is_string);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 0, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 0, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 0, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  823|      0|        tag_modifiers |= SEC_ASN1_CONSTRUCTED;
  ------------------
  |  |  117|      0|#define SEC_ASN1_CONSTRUCTED 0x20
  ------------------
  824|      0|        contents_length = 0;
  825|      0|    }
  826|       |
  827|    646|    sec_asn1e_write_identifier_bytes(state,
  828|    646|                                     (unsigned char)(tag_number | tag_modifiers));
  829|    646|    sec_asn1e_write_length_bytes(state, contents_length, state->indefinite);
  830|       |
  831|    646|    if (contents_length == 0 && !state->indefinite) {
  ------------------
  |  Branch (831:9): [True: 0, False: 646]
  |  Branch (831:33): [True: 0, False: 0]
  ------------------
  832|       |        /*
  833|       |         * If no real contents to encode, then we are done with this field.
  834|       |         */
  835|      0|        state->place = afterContents;
  836|      0|        return;
  837|      0|    }
  838|       |
  839|       |    /*
  840|       |     * An EXPLICIT is nothing but an outer header, which we have already
  841|       |     * written.  Now we need to do the inner header and contents.
  842|       |     */
  843|    646|    if (state->isExplicit) {
  ------------------
  |  Branch (843:9): [True: 0, False: 646]
  ------------------
  844|      0|        const SEC_ASN1Template *subt =
  845|      0|            SEC_ASN1GetSubtemplate(state->theTemplate, state->src, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  846|      0|        state->place = afterContents;
  847|      0|        state = sec_asn1e_push_state(state->top, subt, state->src, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  848|      0|        if (state != NULL) {
  ------------------
  |  Branch (848:13): [True: 0, False: 0]
  ------------------
  849|      0|            (void)sec_asn1e_init_state_based_on_template(state);
  850|      0|        }
  851|      0|        return;
  852|      0|    }
  853|       |
  854|    646|    switch (state->underlying_kind) {
  855|      0|        case SEC_ASN1_SET_OF:
  ------------------
  |  |  167|      0|#define SEC_ASN1_SET_OF (SEC_ASN1_GROUP | SEC_ASN1_SET)
  |  |  ------------------
  |  |  |  |  136|      0|#define SEC_ASN1_GROUP 0x02000        /* with SET or SEQUENCE means \
  |  |  ------------------
  |  |               #define SEC_ASN1_SET_OF (SEC_ASN1_GROUP | SEC_ASN1_SET)
  |  |  ------------------
  |  |  |  |   93|      0|#define SEC_ASN1_SET 0x11
  |  |  ------------------
  ------------------
  |  Branch (855:9): [True: 0, False: 646]
  ------------------
  856|      0|        case SEC_ASN1_SEQUENCE_OF:
  ------------------
  |  |  166|      0|#define SEC_ASN1_SEQUENCE_OF (SEC_ASN1_GROUP | SEC_ASN1_SEQUENCE)
  |  |  ------------------
  |  |  |  |  136|      0|#define SEC_ASN1_GROUP 0x02000        /* with SET or SEQUENCE means \
  |  |  ------------------
  |  |               #define SEC_ASN1_SEQUENCE_OF (SEC_ASN1_GROUP | SEC_ASN1_SEQUENCE)
  |  |  ------------------
  |  |  |  |   92|      0|#define SEC_ASN1_SEQUENCE 0x10
  |  |  ------------------
  ------------------
  |  Branch (856:9): [True: 0, False: 646]
  ------------------
  857|       |            /*
  858|       |             * We need to push a child to handle each member.
  859|       |             */
  860|      0|            {
  861|      0|                void **group;
  862|      0|                const SEC_ASN1Template *subt;
  863|       |
  864|      0|                group = *(void ***)state->src;
  865|      0|                if (group == NULL || *group == NULL) {
  ------------------
  |  Branch (865:21): [True: 0, False: 0]
  |  Branch (865:38): [True: 0, False: 0]
  ------------------
  866|       |                    /*
  867|       |                     * Group is empty; we are done.
  868|       |                     */
  869|      0|                    state->place = afterContents;
  870|      0|                    return;
  871|      0|                }
  872|      0|                state->place = duringGroup;
  873|      0|                subt = SEC_ASN1GetSubtemplate(state->theTemplate, state->src,
  874|      0|                                              PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  875|      0|                state = sec_asn1e_push_state(state->top, subt, *group, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  876|      0|                if (state != NULL) {
  ------------------
  |  Branch (876:21): [True: 0, False: 0]
  ------------------
  877|      0|                    (void)sec_asn1e_init_state_based_on_template(state);
  878|      0|                }
  879|      0|            }
  880|      0|            break;
  881|       |
  882|      0|        case SEC_ASN1_SEQUENCE:
  ------------------
  |  |   92|      0|#define SEC_ASN1_SEQUENCE 0x10
  ------------------
  |  Branch (882:9): [True: 0, False: 646]
  ------------------
  883|      0|        case SEC_ASN1_SET:
  ------------------
  |  |   93|      0|#define SEC_ASN1_SET 0x11
  ------------------
  |  Branch (883:9): [True: 0, False: 646]
  ------------------
  884|       |            /*
  885|       |             * We need to push a child to handle the individual fields.
  886|       |             */
  887|      0|            state->place = duringSequence;
  888|      0|            state = sec_asn1e_push_state(state->top, state->theTemplate + 1,
  889|      0|                                         state->src, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  890|      0|            if (state != NULL) {
  ------------------
  |  Branch (890:17): [True: 0, False: 0]
  ------------------
  891|       |                /*
  892|       |                 * Do the "before" field notification.
  893|       |                 */
  894|      0|                sec_asn1e_notify_before(state->top, state->src, state->depth);
  895|      0|                (void)sec_asn1e_init_state_based_on_template(state);
  896|      0|            }
  897|      0|            break;
  898|       |
  899|    646|        default:
  ------------------
  |  Branch (899:9): [True: 646, False: 0]
  ------------------
  900|       |            /*
  901|       |             * I think we do not need to do anything else.
  902|       |             * XXX Correct?
  903|       |             */
  904|    646|            state->place = duringContents;
  905|    646|            break;
  906|    646|    }
  907|    646|}
secasn1e.c:sec_asn1e_contents_length:
  471|    646|{
  472|    646|    unsigned long encode_kind, underlying_kind;
  473|    646|    PRBool isExplicit, optional, universal, may_stream;
  474|    646|    unsigned long len;
  475|       |
  476|       |    /*
  477|       |     * This function currently calculates the length in all cases
  478|       |     * except the following: when writing out the contents of a
  479|       |     * template that belongs to a state where it was a sub-template
  480|       |     * with the SEC_ASN1_MAY_STREAM bit set and it's parent had the
  481|       |     * optional bit set.  The information that the parent is optional
  482|       |     * and that we should return the length of 0 when that length is
  483|       |     * present since that means the optional field is no longer present.
  484|       |     * So we add the disallowStreaming flag which is passed in when
  485|       |     * writing the contents, but for all recursive calls to
  486|       |     * sec_asn1e_contents_length, we pass PR_FALSE, because this
  487|       |     * function correctly calculates the length for children templates
  488|       |     * from that point on.  Confused yet?  At least you didn't have
  489|       |     * to figure it out.  ;)  -javi
  490|       |     */
  491|    646|    encode_kind = theTemplate->kind;
  492|       |
  493|    646|    universal = ((encode_kind & SEC_ASN1_CLASS_MASK) == SEC_ASN1_UNIVERSAL)
  ------------------
  |  |  119|    646|#define SEC_ASN1_CLASS_MASK 0xc0
  ------------------
                  universal = ((encode_kind & SEC_ASN1_CLASS_MASK) == SEC_ASN1_UNIVERSAL)
  ------------------
  |  |  120|    646|#define SEC_ASN1_UNIVERSAL 0x00
  ------------------
  |  Branch (493:17): [True: 646, False: 0]
  ------------------
  494|    646|                    ? PR_TRUE
  ------------------
  |  |  437|    646|#define PR_TRUE 1
  ------------------
  495|    646|                    : PR_FALSE;
  ------------------
  |  |  438|    646|#define PR_FALSE 0
  ------------------
  496|       |
  497|    646|    isExplicit = (encode_kind & SEC_ASN1_EXPLICIT) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  132|    646|#define SEC_ASN1_EXPLICIT 0x00200
  ------------------
                  isExplicit = (encode_kind & SEC_ASN1_EXPLICIT) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
                  isExplicit = (encode_kind & SEC_ASN1_EXPLICIT) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|  1.29k|#define PR_FALSE 0
  ------------------
  |  Branch (497:18): [True: 0, False: 646]
  ------------------
  498|    646|    encode_kind &= ~SEC_ASN1_EXPLICIT;
  ------------------
  |  |  132|    646|#define SEC_ASN1_EXPLICIT 0x00200
  ------------------
  499|       |
  500|    646|    optional = (encode_kind & SEC_ASN1_OPTIONAL) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  131|    646|#define SEC_ASN1_OPTIONAL 0x00100
  ------------------
                  optional = (encode_kind & SEC_ASN1_OPTIONAL) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
                  optional = (encode_kind & SEC_ASN1_OPTIONAL) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|  1.29k|#define PR_FALSE 0
  ------------------
  |  Branch (500:16): [True: 0, False: 646]
  ------------------
  501|    646|    encode_kind &= ~SEC_ASN1_OPTIONAL;
  ------------------
  |  |  131|    646|#define SEC_ASN1_OPTIONAL 0x00100
  ------------------
  502|       |
  503|    646|    PORT_Assert(!(isExplicit && universal)); /* bad templates */
  ------------------
  |  |  120|    646|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    646|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 0, False: 646]
  |  |  |  |  |  Branch (208:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  504|       |
  505|    646|    may_stream = (encode_kind & SEC_ASN1_MAY_STREAM) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  146|    646|#define SEC_ASN1_MAY_STREAM 0x40000   /* field or one of its sub-fields may \
  ------------------
                  may_stream = (encode_kind & SEC_ASN1_MAY_STREAM) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|    646|#define PR_TRUE 1
  ------------------
                  may_stream = (encode_kind & SEC_ASN1_MAY_STREAM) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|    646|#define PR_FALSE 0
  ------------------
  |  Branch (505:18): [True: 646, False: 0]
  ------------------
  506|    646|    encode_kind &= ~SEC_ASN1_MAY_STREAM;
  ------------------
  |  |  146|    646|#define SEC_ASN1_MAY_STREAM 0x40000   /* field or one of its sub-fields may \
  ------------------
  507|       |
  508|       |    /* Just clear this to get it out of the way; we do not need it here */
  509|    646|    encode_kind &= ~SEC_ASN1_DYNAMIC;
  ------------------
  |  |  138|    646|#define SEC_ASN1_DYNAMIC 0x04000      /* subtemplate is found by calling \
  ------------------
  510|       |
  511|    646|    if (encode_kind & SEC_ASN1_NO_STREAM) {
  ------------------
  |  |  154|    646|#define SEC_ASN1_NO_STREAM 0X200000   /* This entry will not stream          \
  ------------------
  |  Branch (511:9): [True: 0, False: 646]
  ------------------
  512|      0|        disallowStreaming = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  513|      0|    }
  514|    646|    encode_kind &= ~SEC_ASN1_NO_STREAM;
  ------------------
  |  |  154|    646|#define SEC_ASN1_NO_STREAM 0X200000   /* This entry will not stream          \
  ------------------
  515|       |
  516|    646|    if (encode_kind & SEC_ASN1_CHOICE) {
  ------------------
  |  |  153|    646|#define SEC_ASN1_CHOICE 0x100000      /* pick one from a template */
  ------------------
  |  Branch (516:9): [True: 0, False: 646]
  ------------------
  517|      0|        void *src2;
  518|      0|        int indx = sec_asn1e_which_choice(src, theTemplate);
  519|      0|        if (0 == indx) {
  ------------------
  |  Branch (519:13): [True: 0, False: 0]
  ------------------
  520|       |            /* XXX set an error? "choice not found" */
  521|       |            /* state->top->status = encodeError; */
  522|      0|            return 0;
  523|      0|        }
  524|       |
  525|      0|        src2 = (void *)((char *)src - theTemplate->offset + theTemplate[indx].offset);
  526|       |
  527|      0|        return sec_asn1e_contents_length(&theTemplate[indx], src2,
  528|      0|                                         disallowStreaming, insideIndefinite,
  529|      0|                                         pHdrException);
  530|      0|    }
  531|       |
  532|    646|    if ((encode_kind & (SEC_ASN1_POINTER | SEC_ASN1_INLINE)) || !universal) {
  ------------------
  |  |  135|    646|#define SEC_ASN1_POINTER 0x01000
  ------------------
                  if ((encode_kind & (SEC_ASN1_POINTER | SEC_ASN1_INLINE)) || !universal) {
  ------------------
  |  |  134|    646|#define SEC_ASN1_INLINE 0x00800
  ------------------
  |  Branch (532:9): [True: 0, False: 646]
  |  Branch (532:65): [True: 0, False: 646]
  ------------------
  533|       |        /* XXX any bits we want to disallow (PORT_Assert against) here? */
  534|      0|        theTemplate = SEC_ASN1GetSubtemplate(theTemplate, src, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  535|      0|        if (encode_kind & SEC_ASN1_POINTER) {
  ------------------
  |  |  135|      0|#define SEC_ASN1_POINTER 0x01000
  ------------------
  |  Branch (535:13): [True: 0, False: 0]
  ------------------
  536|      0|            src = *(void **)src;
  537|      0|            if (src == NULL) {
  ------------------
  |  Branch (537:17): [True: 0, False: 0]
  ------------------
  538|      0|                *pHdrException = optional ? hdr_optional : hdr_normal;
  ------------------
  |  Branch (538:34): [True: 0, False: 0]
  ------------------
  539|      0|                return 0;
  540|      0|            }
  541|      0|        } else if (encode_kind & SEC_ASN1_INLINE) {
  ------------------
  |  |  134|      0|#define SEC_ASN1_INLINE 0x00800
  ------------------
  |  Branch (541:20): [True: 0, False: 0]
  ------------------
  542|       |            /* check that there are no extraneous bits */
  543|      0|            if (optional) {
  ------------------
  |  Branch (543:17): [True: 0, False: 0]
  ------------------
  544|      0|                if (PR_FALSE != SEC_ASN1IsTemplateSimple(theTemplate)) {
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  |  Branch (544:21): [True: 0, False: 0]
  ------------------
  545|       |                    /* we now know that the target is a SECItem*, so we can check
  546|       |                       if the source contains one */
  547|      0|                    SECItem *target = (SECItem *)src;
  548|      0|                    if (!target || !target->data || !target->len) {
  ------------------
  |  Branch (548:25): [True: 0, False: 0]
  |  Branch (548:36): [True: 0, False: 0]
  |  Branch (548:53): [True: 0, False: 0]
  ------------------
  549|       |                        /* no valid data to encode subtemplate */
  550|      0|                        *pHdrException = hdr_optional;
  551|      0|                        return 0;
  552|      0|                    }
  553|      0|                } else {
  554|      0|                    PORT_Assert(0); /* complex templates not handled as inline
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  555|       |                                       optional */
  556|      0|                }
  557|      0|            }
  558|      0|        }
  559|       |
  560|      0|        src = (char *)src + theTemplate->offset;
  561|       |
  562|       |        /* recurse to find the length of the subtemplate */
  563|      0|        len = sec_asn1e_contents_length(theTemplate, src, disallowStreaming,
  564|      0|                                        insideIndefinite, pHdrException);
  565|      0|        if (len == 0 && optional) {
  ------------------
  |  Branch (565:13): [True: 0, False: 0]
  |  Branch (565:25): [True: 0, False: 0]
  ------------------
  566|      0|            *pHdrException = hdr_optional;
  567|      0|        } else if (isExplicit) {
  ------------------
  |  Branch (567:20): [True: 0, False: 0]
  ------------------
  568|      0|            if (*pHdrException == hdr_any) {
  ------------------
  |  Branch (568:17): [True: 0, False: 0]
  ------------------
  569|       |                /* *we* do not want to add in a header,
  570|       |                ** but our caller still does.
  571|       |                */
  572|      0|                *pHdrException = hdr_normal;
  573|      0|            } else if (*pHdrException == hdr_normal) {
  ------------------
  |  Branch (573:24): [True: 0, False: 0]
  ------------------
  574|       |                /* if the inner content exists, our length is
  575|       |                 * len(identifier) + len(length) + len(innercontent)
  576|       |                 * XXX we currently assume len(identifier) == 1;
  577|       |                 * to support a high-tag-number this would need to be smarter.
  578|       |                 */
  579|      0|                len += 1 + SEC_ASN1LengthLength(len);
  ------------------
  |  |  101|      0|#define SEC_ASN1LengthLength SEC_ASN1LengthLength_Util
  ------------------
  580|      0|            }
  581|      0|        }
  582|      0|        return len;
  583|      0|    }
  584|    646|    underlying_kind = encode_kind;
  585|       |
  586|       |    /* This is only used in decoding; it plays no part in encoding.  */
  587|    646|    if (underlying_kind & SEC_ASN1_SAVE) {
  ------------------
  |  |  144|    646|#define SEC_ASN1_SAVE 0x20000         /* stash away the encoded bytes first; \
  ------------------
  |  Branch (587:9): [True: 0, False: 646]
  ------------------
  588|       |        /* check that there are no extraneous bits */
  589|      0|        PORT_Assert(underlying_kind == SEC_ASN1_SAVE);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  590|      0|        *pHdrException = hdr_decoder;
  591|      0|        return 0;
  592|      0|    }
  593|       |
  594|    646|#define UNEXPECTED_FLAGS                                                          \
  595|    646|    (SEC_ASN1_EXPLICIT | SEC_ASN1_OPTIONAL | SEC_ASN1_INLINE | SEC_ASN1_POINTER | \
  596|    646|     SEC_ASN1_DYNAMIC | SEC_ASN1_MAY_STREAM | SEC_ASN1_SAVE | SEC_ASN1_SKIP)
  597|       |
  598|       |    /* Having any of these bits is not expected here...  */
  599|    646|    PORT_Assert((underlying_kind & UNEXPECTED_FLAGS) == 0);
  ------------------
  |  |  120|    646|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    646|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 646, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  600|    646|    underlying_kind &= ~UNEXPECTED_FLAGS;
  ------------------
  |  |  595|    646|    (SEC_ASN1_EXPLICIT | SEC_ASN1_OPTIONAL | SEC_ASN1_INLINE | SEC_ASN1_POINTER | \
  |  |  ------------------
  |  |  |  |  132|    646|#define SEC_ASN1_EXPLICIT 0x00200
  |  |  ------------------
  |  |                   (SEC_ASN1_EXPLICIT | SEC_ASN1_OPTIONAL | SEC_ASN1_INLINE | SEC_ASN1_POINTER | \
  |  |  ------------------
  |  |  |  |  131|    646|#define SEC_ASN1_OPTIONAL 0x00100
  |  |  ------------------
  |  |                   (SEC_ASN1_EXPLICIT | SEC_ASN1_OPTIONAL | SEC_ASN1_INLINE | SEC_ASN1_POINTER | \
  |  |  ------------------
  |  |  |  |  134|    646|#define SEC_ASN1_INLINE 0x00800
  |  |  ------------------
  |  |                   (SEC_ASN1_EXPLICIT | SEC_ASN1_OPTIONAL | SEC_ASN1_INLINE | SEC_ASN1_POINTER | \
  |  |  ------------------
  |  |  |  |  135|    646|#define SEC_ASN1_POINTER 0x01000
  |  |  ------------------
  |  |  596|    646|     SEC_ASN1_DYNAMIC | SEC_ASN1_MAY_STREAM | SEC_ASN1_SAVE | SEC_ASN1_SKIP)
  |  |  ------------------
  |  |  |  |  138|    646|#define SEC_ASN1_DYNAMIC 0x04000      /* subtemplate is found by calling \
  |  |  ------------------
  |  |                    SEC_ASN1_DYNAMIC | SEC_ASN1_MAY_STREAM | SEC_ASN1_SAVE | SEC_ASN1_SKIP)
  |  |  ------------------
  |  |  |  |  146|    646|#define SEC_ASN1_MAY_STREAM 0x40000   /* field or one of its sub-fields may \
  |  |  ------------------
  |  |                    SEC_ASN1_DYNAMIC | SEC_ASN1_MAY_STREAM | SEC_ASN1_SAVE | SEC_ASN1_SKIP)
  |  |  ------------------
  |  |  |  |  144|    646|#define SEC_ASN1_SAVE 0x20000         /* stash away the encoded bytes first; \
  |  |  ------------------
  |  |                    SEC_ASN1_DYNAMIC | SEC_ASN1_MAY_STREAM | SEC_ASN1_SAVE | SEC_ASN1_SKIP)
  |  |  ------------------
  |  |  |  |  140|    646|#define SEC_ASN1_SKIP 0x08000         /* skip a field; only for decoding */
  |  |  ------------------
  ------------------
  601|    646|#undef UNEXPECTED_FLAGS
  602|       |
  603|    646|    if (underlying_kind & SEC_ASN1_CHOICE) {
  ------------------
  |  |  153|    646|#define SEC_ASN1_CHOICE 0x100000      /* pick one from a template */
  ------------------
  |  Branch (603:9): [True: 0, False: 646]
  ------------------
  604|      0|        void *src2;
  605|      0|        int indx = sec_asn1e_which_choice(src, theTemplate);
  606|      0|        if (0 == indx) {
  ------------------
  |  Branch (606:13): [True: 0, False: 0]
  ------------------
  607|       |            /* XXX set an error? "choice not found" */
  608|       |            /* state->top->status = encodeError; */
  609|      0|            return 0;
  610|      0|        }
  611|       |
  612|      0|        src2 = (void *)((char *)src - theTemplate->offset + theTemplate[indx].offset);
  613|      0|        len = sec_asn1e_contents_length(&theTemplate[indx], src2,
  614|      0|                                        disallowStreaming, insideIndefinite,
  615|      0|                                        pHdrException);
  616|    646|    } else {
  617|    646|        switch (underlying_kind) {
  618|      0|            case SEC_ASN1_SEQUENCE_OF:
  ------------------
  |  |  166|      0|#define SEC_ASN1_SEQUENCE_OF (SEC_ASN1_GROUP | SEC_ASN1_SEQUENCE)
  |  |  ------------------
  |  |  |  |  136|      0|#define SEC_ASN1_GROUP 0x02000        /* with SET or SEQUENCE means \
  |  |  ------------------
  |  |               #define SEC_ASN1_SEQUENCE_OF (SEC_ASN1_GROUP | SEC_ASN1_SEQUENCE)
  |  |  ------------------
  |  |  |  |   92|      0|#define SEC_ASN1_SEQUENCE 0x10
  |  |  ------------------
  ------------------
  |  Branch (618:13): [True: 0, False: 646]
  ------------------
  619|      0|            case SEC_ASN1_SET_OF: {
  ------------------
  |  |  167|      0|#define SEC_ASN1_SET_OF (SEC_ASN1_GROUP | SEC_ASN1_SET)
  |  |  ------------------
  |  |  |  |  136|      0|#define SEC_ASN1_GROUP 0x02000        /* with SET or SEQUENCE means \
  |  |  ------------------
  |  |               #define SEC_ASN1_SET_OF (SEC_ASN1_GROUP | SEC_ASN1_SET)
  |  |  ------------------
  |  |  |  |   93|      0|#define SEC_ASN1_SET 0x11
  |  |  ------------------
  ------------------
  |  Branch (619:13): [True: 0, False: 646]
  ------------------
  620|      0|                const SEC_ASN1Template *tmpt;
  621|      0|                void *sub_src;
  622|      0|                unsigned long sub_len;
  623|      0|                void **group;
  624|       |
  625|      0|                len = 0;
  626|       |
  627|      0|                group = *(void ***)src;
  628|      0|                if (group == NULL)
  ------------------
  |  Branch (628:21): [True: 0, False: 0]
  ------------------
  629|      0|                    break;
  630|       |
  631|      0|                tmpt = SEC_ASN1GetSubtemplate(theTemplate, src, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  632|       |
  633|      0|                for (; *group != NULL; group++) {
  ------------------
  |  Branch (633:24): [True: 0, False: 0]
  ------------------
  634|      0|                    sub_src = (char *)(*group) + tmpt->offset;
  635|      0|                    sub_len = sec_asn1e_contents_length(tmpt, sub_src,
  636|      0|                                                        disallowStreaming,
  637|      0|                                                        insideIndefinite,
  638|      0|                                                        pHdrException);
  639|      0|                    len += sub_len;
  640|       |                    /*
  641|       |                     * XXX The 1 below is the presumed length of the identifier;
  642|       |                     * to support a high-tag-number this would need to be smarter.
  643|       |                     */
  644|      0|                    if (*pHdrException == hdr_normal)
  ------------------
  |  Branch (644:25): [True: 0, False: 0]
  ------------------
  645|      0|                        len += 1 + SEC_ASN1LengthLength(sub_len);
  ------------------
  |  |  101|      0|#define SEC_ASN1LengthLength SEC_ASN1LengthLength_Util
  ------------------
  646|      0|                }
  647|      0|            } break;
  648|       |
  649|      0|            case SEC_ASN1_SEQUENCE:
  ------------------
  |  |   92|      0|#define SEC_ASN1_SEQUENCE 0x10
  ------------------
  |  Branch (649:13): [True: 0, False: 646]
  ------------------
  650|      0|            case SEC_ASN1_SET: {
  ------------------
  |  |   93|      0|#define SEC_ASN1_SET 0x11
  ------------------
  |  Branch (650:13): [True: 0, False: 646]
  ------------------
  651|      0|                const SEC_ASN1Template *tmpt;
  652|      0|                void *sub_src;
  653|      0|                unsigned long sub_len;
  654|       |
  655|      0|                len = 0;
  656|      0|                for (tmpt = theTemplate + 1; tmpt->kind; tmpt++) {
  ------------------
  |  Branch (656:46): [True: 0, False: 0]
  ------------------
  657|      0|                    sub_src = (char *)src + tmpt->offset;
  658|      0|                    sub_len = sec_asn1e_contents_length(tmpt, sub_src,
  659|      0|                                                        disallowStreaming,
  660|      0|                                                        insideIndefinite,
  661|      0|                                                        pHdrException);
  662|      0|                    len += sub_len;
  663|       |                    /*
  664|       |                     * XXX The 1 below is the presumed length of the identifier;
  665|       |                     * to support a high-tag-number this would need to be smarter.
  666|       |                     */
  667|      0|                    if (*pHdrException == hdr_normal)
  ------------------
  |  Branch (667:25): [True: 0, False: 0]
  ------------------
  668|      0|                        len += 1 + SEC_ASN1LengthLength(sub_len);
  ------------------
  |  |  101|      0|#define SEC_ASN1LengthLength SEC_ASN1LengthLength_Util
  ------------------
  669|      0|                }
  670|      0|            } break;
  671|       |
  672|      0|            case SEC_ASN1_BIT_STRING:
  ------------------
  |  |   79|      0|#define SEC_ASN1_BIT_STRING 0x03
  ------------------
  |  Branch (672:13): [True: 0, False: 646]
  ------------------
  673|       |                /* convert bit length to byte */
  674|      0|                len = (((SECItem *)src)->len + 7) >> 3;
  675|       |                /* bit string contents involve an extra octet */
  676|      0|                if (len)
  ------------------
  |  Branch (676:21): [True: 0, False: 0]
  ------------------
  677|      0|                    len++;
  678|      0|                break;
  679|       |
  680|      0|            case SEC_ASN1_INTEGER:
  ------------------
  |  |   78|      0|#define SEC_ASN1_INTEGER 0x02
  ------------------
  |  Branch (680:13): [True: 0, False: 646]
  ------------------
  681|       |                /* ASN.1 INTEGERs are signed.
  682|       |                 * If the source is an unsigned integer, the encoder will need
  683|       |                 * to handle the conversion here.
  684|       |                 */
  685|      0|                {
  686|      0|                    unsigned char *buf = ((SECItem *)src)->data;
  687|      0|                    SECItemType integerType = ((SECItem *)src)->type;
  688|      0|                    len = ((SECItem *)src)->len;
  689|      0|                    while (len > 0) {
  ------------------
  |  Branch (689:28): [True: 0, False: 0]
  ------------------
  690|      0|                        if (*buf != 0) {
  ------------------
  |  Branch (690:29): [True: 0, False: 0]
  ------------------
  691|      0|                            if (*buf & 0x80 && integerType == siUnsignedInteger) {
  ------------------
  |  Branch (691:33): [True: 0, False: 0]
  |  Branch (691:48): [True: 0, False: 0]
  ------------------
  692|      0|                                len++; /* leading zero needed to make number signed */
  693|      0|                            }
  694|      0|                            break; /* reached beginning of number */
  695|      0|                        }
  696|      0|                        if (len == 1) {
  ------------------
  |  Branch (696:29): [True: 0, False: 0]
  ------------------
  697|      0|                            break; /* the number 0 */
  698|      0|                        }
  699|      0|                        if (buf[1] & 0x80) {
  ------------------
  |  Branch (699:29): [True: 0, False: 0]
  ------------------
  700|      0|                            break; /* leading zero already present */
  701|      0|                        }
  702|       |                        /* extraneous leading zero, keep going */
  703|      0|                        buf++;
  704|      0|                        len--;
  705|      0|                    }
  706|      0|                }
  707|      0|                break;
  708|       |
  709|    646|            default:
  ------------------
  |  Branch (709:13): [True: 646, False: 0]
  ------------------
  710|    646|                len = ((SECItem *)src)->len;
  711|    646|                break;
  712|    646|        } /* end switch */
  713|       |
  714|    646|#ifndef WHAT_PROBLEM_DOES_THIS_SOLVE
  715|       |        /* if we're streaming, we may have a secitem w/len 0 as placeholder */
  716|    646|        if (!len && insideIndefinite && may_stream && !disallowStreaming) {
  ------------------
  |  Branch (716:13): [True: 0, False: 646]
  |  Branch (716:21): [True: 0, False: 0]
  |  Branch (716:41): [True: 0, False: 0]
  |  Branch (716:55): [True: 0, False: 0]
  ------------------
  717|      0|            len = 1;
  718|      0|        }
  719|    646|#endif
  720|    646|    } /* end else */
  721|       |
  722|    646|    if (len == 0 && optional)
  ------------------
  |  Branch (722:9): [True: 0, False: 646]
  |  Branch (722:21): [True: 0, False: 0]
  ------------------
  723|      0|        *pHdrException = hdr_optional;
  724|    646|    else if (underlying_kind == SEC_ASN1_ANY)
  ------------------
  |  |  133|    646|#define SEC_ASN1_ANY 0x00400
  ------------------
  |  Branch (724:14): [True: 0, False: 646]
  ------------------
  725|      0|        *pHdrException = hdr_any;
  726|    646|    else
  727|    646|        *pHdrException = hdr_normal;
  728|       |
  729|    646|    return len;
  730|    646|}
secasn1e.c:sec_asn1e_write_identifier_bytes:
  388|    646|{
  389|    646|    char byte;
  390|       |
  391|    646|    byte = (char)value;
  392|    646|    sec_asn1e_write_part(state, &byte, 1, SEC_ASN1_Identifier);
  393|    646|}
secasn1e.c:sec_asn1e_write_part:
  374|  1.93k|{
  375|  1.93k|    SEC_ASN1EncoderContext *cx;
  376|       |
  377|  1.93k|    cx = state->top;
  378|  1.93k|    (*cx->output_proc)(cx->output_arg, buf, len, state->depth, part);
  379|  1.93k|}
secasn1e.c:sec_asn1e_write_length_bytes:
  420|    646|{
  421|    646|    int lenlen;
  422|    646|    unsigned char buf[sizeof(unsigned long) + 1];
  423|       |
  424|    646|    if (indefinite) {
  ------------------
  |  Branch (424:9): [True: 0, False: 646]
  ------------------
  425|      0|        PORT_Assert(value == 0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  426|      0|        buf[0] = 0x80;
  427|      0|        lenlen = 1;
  428|    646|    } else {
  429|    646|        lenlen = SEC_ASN1EncodeLength(buf, value);
  430|    646|    }
  431|       |
  432|    646|    sec_asn1e_write_part(state, (char *)buf, lenlen, SEC_ASN1_Length);
  433|    646|}
secasn1e.c:sec_asn1e_write_contents_bytes:
  438|    646|{
  439|    646|    sec_asn1e_write_part(state, buf, len, SEC_ASN1_Contents);
  440|    646|}
secasn1e.c:sec_asn1e_write_contents:
  981|    646|{
  982|    646|    unsigned long len = 0;
  983|       |
  984|    646|    PORT_Assert(state->place == duringContents);
  ------------------
  |  |  120|    646|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    646|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 646, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  985|       |
  986|    646|    switch (state->underlying_kind) {
  987|      0|        case SEC_ASN1_SET:
  ------------------
  |  |   93|      0|#define SEC_ASN1_SET 0x11
  ------------------
  |  Branch (987:9): [True: 0, False: 646]
  ------------------
  988|      0|        case SEC_ASN1_SEQUENCE:
  ------------------
  |  |   92|      0|#define SEC_ASN1_SEQUENCE 0x10
  ------------------
  |  Branch (988:9): [True: 0, False: 646]
  ------------------
  989|      0|            PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  990|      0|            break;
  991|       |
  992|      0|        case SEC_ASN1_BIT_STRING: {
  ------------------
  |  |   79|      0|#define SEC_ASN1_BIT_STRING 0x03
  ------------------
  |  Branch (992:9): [True: 0, False: 646]
  ------------------
  993|      0|            SECItem *item;
  994|      0|            char rem;
  995|       |
  996|      0|            item = (SECItem *)state->src;
  997|      0|            len = (item->len + 7) >> 3;
  998|      0|            rem = (unsigned char)((len << 3) - item->len); /* remaining bits */
  999|      0|            sec_asn1e_write_contents_bytes(state, &rem, 1);
 1000|      0|            sec_asn1e_write_contents_bytes(state, (char *)item->data, len);
 1001|      0|        } break;
 1002|       |
 1003|      0|        case SEC_ASN1_BMP_STRING:
  ------------------
  |  |  106|      0|#define SEC_ASN1_BMP_STRING 0x1e
  ------------------
  |  Branch (1003:9): [True: 0, False: 646]
  ------------------
 1004|       |            /* The number of bytes must be divisable by 2 */
 1005|      0|            if ((((SECItem *)state->src)->len) % 2) {
  ------------------
  |  Branch (1005:17): [True: 0, False: 0]
  ------------------
 1006|      0|                SEC_ASN1EncoderContext *cx;
 1007|       |
 1008|      0|                cx = state->top;
 1009|      0|                cx->status = encodeError;
 1010|      0|                break;
 1011|      0|            }
 1012|       |            /* otherwise, fall through to write the content */
 1013|      0|            goto process_string;
 1014|       |
 1015|      0|        case SEC_ASN1_UNIVERSAL_STRING:
  ------------------
  |  |  104|      0|#define SEC_ASN1_UNIVERSAL_STRING 0x1c
  ------------------
  |  Branch (1015:9): [True: 0, False: 646]
  ------------------
 1016|       |            /* The number of bytes must be divisable by 4 */
 1017|      0|            if ((((SECItem *)state->src)->len) % 4) {
  ------------------
  |  Branch (1017:17): [True: 0, False: 0]
  ------------------
 1018|      0|                SEC_ASN1EncoderContext *cx;
 1019|       |
 1020|      0|                cx = state->top;
 1021|      0|                cx->status = encodeError;
 1022|      0|                break;
 1023|      0|            }
 1024|       |            /* otherwise, fall through to write the content */
 1025|      0|            goto process_string;
 1026|       |
 1027|      0|        case SEC_ASN1_INTEGER:
  ------------------
  |  |   78|      0|#define SEC_ASN1_INTEGER 0x02
  ------------------
  |  Branch (1027:9): [True: 0, False: 646]
  ------------------
 1028|       |            /* ASN.1 INTEGERs are signed.  If the source is an unsigned
 1029|       |             * integer, the encoder will need to handle the conversion here.
 1030|       |             */
 1031|      0|            {
 1032|      0|                unsigned int blen;
 1033|      0|                unsigned char *buf;
 1034|      0|                SECItemType integerType;
 1035|      0|                blen = ((SECItem *)state->src)->len;
 1036|      0|                buf = ((SECItem *)state->src)->data;
 1037|      0|                integerType = ((SECItem *)state->src)->type;
 1038|      0|                while (blen > 0) {
  ------------------
  |  Branch (1038:24): [True: 0, False: 0]
  ------------------
 1039|      0|                    if (*buf & 0x80 && integerType == siUnsignedInteger) {
  ------------------
  |  Branch (1039:25): [True: 0, False: 0]
  |  Branch (1039:40): [True: 0, False: 0]
  ------------------
 1040|      0|                        char zero = 0; /* write a leading 0 */
 1041|      0|                        sec_asn1e_write_contents_bytes(state, &zero, 1);
 1042|       |                        /* and then the remaining buffer */
 1043|      0|                        sec_asn1e_write_contents_bytes(state,
 1044|      0|                                                       (char *)buf, blen);
 1045|      0|                        break;
 1046|      0|                    }
 1047|       |                    /* Check three possibilities:
 1048|       |                     * 1.  No leading zeros, msb of MSB is not 1;
 1049|       |                     * 2.  The number is zero itself;
 1050|       |                     * 3.  Encoding a signed integer with a leading zero,
 1051|       |                     *     keep the zero so that the number is positive.
 1052|       |                     */
 1053|      0|                    if (*buf != 0 ||
  ------------------
  |  Branch (1053:25): [True: 0, False: 0]
  ------------------
 1054|      0|                        blen == 1 ||
  ------------------
  |  Branch (1054:25): [True: 0, False: 0]
  ------------------
 1055|      0|                        (buf[1] & 0x80 && integerType != siUnsignedInteger)) {
  ------------------
  |  Branch (1055:26): [True: 0, False: 0]
  |  Branch (1055:43): [True: 0, False: 0]
  ------------------
 1056|      0|                        sec_asn1e_write_contents_bytes(state,
 1057|      0|                                                       (char *)buf, blen);
 1058|      0|                        break;
 1059|      0|                    }
 1060|       |                    /* byte is 0, continue */
 1061|      0|                    buf++;
 1062|      0|                    blen--;
 1063|      0|                }
 1064|      0|            }
 1065|       |            /* done with this content */
 1066|      0|            break;
 1067|       |
 1068|      0|        process_string:
 1069|    646|        default: {
  ------------------
  |  Branch (1069:9): [True: 646, False: 0]
  ------------------
 1070|    646|            SECItem *item;
 1071|       |
 1072|    646|            item = (SECItem *)state->src;
 1073|    646|            sec_asn1e_write_contents_bytes(state, (char *)item->data,
 1074|    646|                                           item->len);
 1075|    646|        } break;
 1076|    646|    }
 1077|    646|    state->place = afterContents;
 1078|    646|}
secasn1e.c:sec_asn1e_scrub_state:
  130|    646|{
  131|       |    /*
  132|       |     * Some default "scrubbing".
  133|       |     * XXX right set of initializations?
  134|       |     */
  135|    646|    state->place = beforeHeader;
  136|    646|    state->indefinite = PR_FALSE;
  ------------------
  |  |  438|    646|#define PR_FALSE 0
  ------------------
  137|    646|}
secasn1e.c:sec_asn1e_after_contents:
 1174|    646|{
 1175|    646|    PORT_Assert(state->place == afterContents);
  ------------------
  |  |  120|    646|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    646|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 646, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1176|       |
 1177|    646|    if (state->indefinite)
  ------------------
  |  Branch (1177:9): [True: 0, False: 646]
  ------------------
 1178|      0|        sec_asn1e_write_end_of_contents_bytes(state);
 1179|       |
 1180|       |    /*
 1181|       |     * Just make my parent be the current state.  It will then clean
 1182|       |     * up after me and free me (or reuse me).
 1183|       |     */
 1184|    646|    state->top->current = state->parent;
 1185|    646|}
secasn1e.c:sec_asn1e_push_state:
   94|    646|{
   95|    646|    sec_asn1e_state *state, *new_state;
   96|       |
   97|    646|    if (theTemplate == NULL) {
  ------------------
  |  Branch (97:9): [True: 0, False: 646]
  ------------------
   98|      0|        cx->status = encodeError;
   99|      0|        return NULL;
  100|      0|    }
  101|       |
  102|    646|    state = cx->current;
  103|    646|    new_state = (sec_asn1e_state *)PORT_ArenaZAlloc(cx->our_pool,
  ------------------
  |  |   59|    646|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
  104|    646|                                                    sizeof(*new_state));
  105|    646|    if (new_state == NULL) {
  ------------------
  |  Branch (105:9): [True: 0, False: 646]
  ------------------
  106|      0|        cx->status = encodeError;
  107|      0|        return NULL;
  108|      0|    }
  109|       |
  110|    646|    new_state->top = cx;
  111|    646|    new_state->parent = state;
  112|    646|    new_state->theTemplate = theTemplate;
  113|    646|    new_state->place = notInUse;
  114|    646|    if (src != NULL)
  ------------------
  |  Branch (114:9): [True: 646, False: 0]
  ------------------
  115|    646|        new_state->src = (char *)src + theTemplate->offset;
  116|       |
  117|    646|    if (state != NULL) {
  ------------------
  |  Branch (117:9): [True: 0, False: 646]
  ------------------
  118|      0|        new_state->depth = state->depth;
  119|      0|        if (new_depth)
  ------------------
  |  Branch (119:13): [True: 0, False: 0]
  ------------------
  120|      0|            new_state->depth++;
  121|      0|        state->child = new_state;
  122|      0|    }
  123|       |
  124|    646|    cx->current = new_state;
  125|    646|    return new_state;
  126|    646|}
secasn1e.c:sec_asn1e_init_state_based_on_template:
  163|    646|{
  164|    646|    PRBool isExplicit, is_string, may_stream, optional, universal;
  165|    646|    PRBool disallowStreaming;
  166|    646|    unsigned char tag_modifiers;
  167|    646|    unsigned long encode_kind, under_kind;
  168|    646|    unsigned long tag_number;
  169|    646|    PRBool isInline = PR_FALSE;
  ------------------
  |  |  438|    646|#define PR_FALSE 0
  ------------------
  170|       |
  171|    646|    encode_kind = state->theTemplate->kind;
  172|       |
  173|    646|    universal = ((encode_kind & SEC_ASN1_CLASS_MASK) == SEC_ASN1_UNIVERSAL)
  ------------------
  |  |  119|    646|#define SEC_ASN1_CLASS_MASK 0xc0
  ------------------
                  universal = ((encode_kind & SEC_ASN1_CLASS_MASK) == SEC_ASN1_UNIVERSAL)
  ------------------
  |  |  120|    646|#define SEC_ASN1_UNIVERSAL 0x00
  ------------------
  |  Branch (173:17): [True: 646, False: 0]
  ------------------
  174|    646|                    ? PR_TRUE
  ------------------
  |  |  437|    646|#define PR_TRUE 1
  ------------------
  175|    646|                    : PR_FALSE;
  ------------------
  |  |  438|    646|#define PR_FALSE 0
  ------------------
  176|       |
  177|    646|    isExplicit = (encode_kind & SEC_ASN1_EXPLICIT) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  132|    646|#define SEC_ASN1_EXPLICIT 0x00200
  ------------------
                  isExplicit = (encode_kind & SEC_ASN1_EXPLICIT) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
                  isExplicit = (encode_kind & SEC_ASN1_EXPLICIT) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|  1.29k|#define PR_FALSE 0
  ------------------
  |  Branch (177:18): [True: 0, False: 646]
  ------------------
  178|    646|    encode_kind &= ~SEC_ASN1_EXPLICIT;
  ------------------
  |  |  132|    646|#define SEC_ASN1_EXPLICIT 0x00200
  ------------------
  179|       |
  180|    646|    optional = (encode_kind & SEC_ASN1_OPTIONAL) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  131|    646|#define SEC_ASN1_OPTIONAL 0x00100
  ------------------
                  optional = (encode_kind & SEC_ASN1_OPTIONAL) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
                  optional = (encode_kind & SEC_ASN1_OPTIONAL) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|  1.29k|#define PR_FALSE 0
  ------------------
  |  Branch (180:16): [True: 0, False: 646]
  ------------------
  181|    646|    encode_kind &= ~SEC_ASN1_OPTIONAL;
  ------------------
  |  |  131|    646|#define SEC_ASN1_OPTIONAL 0x00100
  ------------------
  182|       |
  183|    646|    PORT_Assert(!(isExplicit && universal)); /* bad templates */
  ------------------
  |  |  120|    646|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    646|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 0, False: 646]
  |  |  |  |  |  Branch (208:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  184|       |
  185|    646|    may_stream = (encode_kind & SEC_ASN1_MAY_STREAM) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  146|    646|#define SEC_ASN1_MAY_STREAM 0x40000   /* field or one of its sub-fields may \
  ------------------
                  may_stream = (encode_kind & SEC_ASN1_MAY_STREAM) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|    646|#define PR_TRUE 1
  ------------------
                  may_stream = (encode_kind & SEC_ASN1_MAY_STREAM) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|    646|#define PR_FALSE 0
  ------------------
  |  Branch (185:18): [True: 646, False: 0]
  ------------------
  186|    646|    encode_kind &= ~SEC_ASN1_MAY_STREAM;
  ------------------
  |  |  146|    646|#define SEC_ASN1_MAY_STREAM 0x40000   /* field or one of its sub-fields may \
  ------------------
  187|       |
  188|    646|    disallowStreaming = (encode_kind & SEC_ASN1_NO_STREAM) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  154|    646|#define SEC_ASN1_NO_STREAM 0X200000   /* This entry will not stream          \
  ------------------
                  disallowStreaming = (encode_kind & SEC_ASN1_NO_STREAM) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
                  disallowStreaming = (encode_kind & SEC_ASN1_NO_STREAM) ? PR_TRUE : PR_FALSE;
  ------------------
  |  |  438|  1.29k|#define PR_FALSE 0
  ------------------
  |  Branch (188:25): [True: 0, False: 646]
  ------------------
  189|    646|    encode_kind &= ~SEC_ASN1_NO_STREAM;
  ------------------
  |  |  154|    646|#define SEC_ASN1_NO_STREAM 0X200000   /* This entry will not stream          \
  ------------------
  190|       |
  191|       |    /* Just clear this to get it out of the way; we do not need it here */
  192|    646|    encode_kind &= ~SEC_ASN1_DYNAMIC;
  ------------------
  |  |  138|    646|#define SEC_ASN1_DYNAMIC 0x04000      /* subtemplate is found by calling \
  ------------------
  193|       |
  194|    646|    if (encode_kind & SEC_ASN1_CHOICE) {
  ------------------
  |  |  153|    646|#define SEC_ASN1_CHOICE 0x100000      /* pick one from a template */
  ------------------
  |  Branch (194:9): [True: 0, False: 646]
  ------------------
  195|      0|        under_kind = SEC_ASN1_CHOICE;
  ------------------
  |  |  153|      0|#define SEC_ASN1_CHOICE 0x100000      /* pick one from a template */
  ------------------
  196|    646|    } else if ((encode_kind & (SEC_ASN1_POINTER | SEC_ASN1_INLINE)) ||
  ------------------
  |  |  135|    646|#define SEC_ASN1_POINTER 0x01000
  ------------------
                  } else if ((encode_kind & (SEC_ASN1_POINTER | SEC_ASN1_INLINE)) ||
  ------------------
  |  |  134|    646|#define SEC_ASN1_INLINE 0x00800
  ------------------
  |  Branch (196:16): [True: 0, False: 646]
  ------------------
  197|    646|               (!universal && !isExplicit)) {
  ------------------
  |  Branch (197:17): [True: 0, False: 646]
  |  Branch (197:31): [True: 0, False: 0]
  ------------------
  198|      0|        const SEC_ASN1Template *subt;
  199|      0|        void *src = NULL;
  200|       |
  201|      0|        PORT_Assert((encode_kind & (SEC_ASN1_ANY | SEC_ASN1_SKIP)) == 0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  202|       |
  203|      0|        sec_asn1e_scrub_state(state);
  204|       |
  205|      0|        if (encode_kind & SEC_ASN1_POINTER) {
  ------------------
  |  |  135|      0|#define SEC_ASN1_POINTER 0x01000
  ------------------
  |  Branch (205:13): [True: 0, False: 0]
  ------------------
  206|      0|            src = *(void **)state->src;
  207|      0|            state->place = afterPointer;
  208|       |
  209|      0|            if (src == NULL) {
  ------------------
  |  Branch (209:17): [True: 0, False: 0]
  ------------------
  210|       |                /*
  211|       |                 * If this is optional, but NULL, then the field does
  212|       |                 * not need to be encoded.  In this case we are done;
  213|       |                 * we do not want to push a subtemplate.
  214|       |                 */
  215|      0|                if (optional)
  ------------------
  |  Branch (215:21): [True: 0, False: 0]
  ------------------
  216|      0|                    return state;
  217|       |
  218|       |                /*
  219|       |                 * XXX this is an error; need to figure out
  220|       |                 * how to handle this
  221|       |                 */
  222|      0|            }
  223|      0|        } else {
  224|      0|            src = state->src;
  225|      0|            if (encode_kind & SEC_ASN1_INLINE) {
  ------------------
  |  |  134|      0|#define SEC_ASN1_INLINE 0x00800
  ------------------
  |  Branch (225:17): [True: 0, False: 0]
  ------------------
  226|       |                /* check that there are no extraneous bits */
  227|       |                /* PORT_Assert (encode_kind == SEC_ASN1_INLINE && !optional); */
  228|      0|                state->place = afterInline;
  229|      0|                isInline = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  230|      0|            } else {
  231|       |                /*
  232|       |                 * Save the tag modifiers and tag number here before moving
  233|       |                 * on to the next state in case this is a member of a
  234|       |                 * SEQUENCE OF
  235|       |                 */
  236|      0|                state->tag_modifiers = (unsigned char)(encode_kind & (SEC_ASN1_TAG_MASK & ~SEC_ASN1_TAGNUM_MASK));
  ------------------
  |  |   65|      0|#define SEC_ASN1_TAG_MASK 0xff
  ------------------
                              state->tag_modifiers = (unsigned char)(encode_kind & (SEC_ASN1_TAG_MASK & ~SEC_ASN1_TAGNUM_MASK));
  ------------------
  |  |   76|      0|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  237|      0|                state->tag_number = (unsigned char)(encode_kind & SEC_ASN1_TAGNUM_MASK);
  ------------------
  |  |   76|      0|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  238|       |
  239|      0|                state->place = afterImplicit;
  240|      0|                state->optional = optional;
  241|      0|            }
  242|      0|        }
  243|       |
  244|      0|        subt = SEC_ASN1GetSubtemplate(state->theTemplate, state->src, PR_TRUE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  245|      0|        if (isInline && optional) {
  ------------------
  |  Branch (245:13): [True: 0, False: 0]
  |  Branch (245:25): [True: 0, False: 0]
  ------------------
  246|       |            /* we only handle a very limited set of optional inline cases at
  247|       |               this time */
  248|      0|            if (PR_FALSE != SEC_ASN1IsTemplateSimple(subt)) {
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  |  Branch (248:17): [True: 0, False: 0]
  ------------------
  249|       |                /* we now know that the target is a SECItem*, so we can check
  250|       |                   if the source contains one */
  251|      0|                SECItem *target = (SECItem *)state->src;
  252|      0|                if (!target || !target->data || !target->len) {
  ------------------
  |  Branch (252:21): [True: 0, False: 0]
  |  Branch (252:32): [True: 0, False: 0]
  |  Branch (252:49): [True: 0, False: 0]
  ------------------
  253|       |                    /* no valid data to encode subtemplate */
  254|      0|                    return state;
  255|      0|                }
  256|      0|            } else {
  257|      0|                PORT_Assert(0); /* complex templates are not handled as
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  258|       |                                   inline optional */
  259|      0|            }
  260|      0|        }
  261|      0|        state = sec_asn1e_push_state(state->top, subt, src, PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  262|      0|        if (state == NULL)
  ------------------
  |  Branch (262:13): [True: 0, False: 0]
  ------------------
  263|      0|            return state;
  264|       |
  265|      0|        if (universal) {
  ------------------
  |  Branch (265:13): [True: 0, False: 0]
  ------------------
  266|       |            /*
  267|       |             * This is a POINTER or INLINE; just init based on that
  268|       |             * and we are done.
  269|       |             */
  270|      0|            return sec_asn1e_init_state_based_on_template(state);
  271|      0|        }
  272|       |
  273|       |        /*
  274|       |         * This is an implicit, non-universal (meaning, application-private
  275|       |         * or context-specific) field.  This results in a "magic" tag but
  276|       |         * encoding based on the underlying type.  We pushed a new state
  277|       |         * that is based on the subtemplate (the underlying type), but
  278|       |         * now we will sort of alias it to give it some of our properties
  279|       |         * (tag, optional status, etc.).
  280|       |         *
  281|       |         * NB: ALL the following flags in the subtemplate are disallowed
  282|       |         *     and/or ignored: EXPLICIT, OPTIONAL, INNER, INLINE, POINTER.
  283|       |         */
  284|       |
  285|      0|        under_kind = state->theTemplate->kind;
  286|      0|        if ((under_kind & SEC_ASN1_MAY_STREAM) && !disallowStreaming) {
  ------------------
  |  |  146|      0|#define SEC_ASN1_MAY_STREAM 0x40000   /* field or one of its sub-fields may \
  ------------------
  |  Branch (286:13): [True: 0, False: 0]
  |  Branch (286:51): [True: 0, False: 0]
  ------------------
  287|      0|            may_stream = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  288|      0|        }
  289|      0|        under_kind &= ~(SEC_ASN1_MAY_STREAM | SEC_ASN1_DYNAMIC);
  ------------------
  |  |  146|      0|#define SEC_ASN1_MAY_STREAM 0x40000   /* field or one of its sub-fields may \
  ------------------
                      under_kind &= ~(SEC_ASN1_MAY_STREAM | SEC_ASN1_DYNAMIC);
  ------------------
  |  |  138|      0|#define SEC_ASN1_DYNAMIC 0x04000      /* subtemplate is found by calling \
  ------------------
  290|    646|    } else {
  291|    646|        under_kind = encode_kind;
  292|    646|    }
  293|       |
  294|       |/*
  295|       | * Sanity check that there are no unwanted bits marked in under_kind.
  296|       | * These bits were either removed above (after we recorded them) or
  297|       | * they simply should not be found (signalling a bad/broken template).
  298|       | * XXX is this the right set of bits to test here? (i.e. need to add
  299|       | * or remove any?)
  300|       | */
  301|    646|#define UNEXPECTED_FLAGS                                                      \
  302|    646|    (SEC_ASN1_EXPLICIT | SEC_ASN1_OPTIONAL | SEC_ASN1_SKIP | SEC_ASN1_INNER | \
  303|    646|     SEC_ASN1_DYNAMIC | SEC_ASN1_MAY_STREAM | SEC_ASN1_INLINE | SEC_ASN1_POINTER)
  304|       |
  305|    646|    PORT_Assert((under_kind & UNEXPECTED_FLAGS) == 0);
  ------------------
  |  |  120|    646|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    646|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 646, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  306|    646|    under_kind &= ~UNEXPECTED_FLAGS;
  ------------------
  |  |  302|    646|    (SEC_ASN1_EXPLICIT | SEC_ASN1_OPTIONAL | SEC_ASN1_SKIP | SEC_ASN1_INNER | \
  |  |  ------------------
  |  |  |  |  132|    646|#define SEC_ASN1_EXPLICIT 0x00200
  |  |  ------------------
  |  |                   (SEC_ASN1_EXPLICIT | SEC_ASN1_OPTIONAL | SEC_ASN1_SKIP | SEC_ASN1_INNER | \
  |  |  ------------------
  |  |  |  |  131|    646|#define SEC_ASN1_OPTIONAL 0x00100
  |  |  ------------------
  |  |                   (SEC_ASN1_EXPLICIT | SEC_ASN1_OPTIONAL | SEC_ASN1_SKIP | SEC_ASN1_INNER | \
  |  |  ------------------
  |  |  |  |  140|    646|#define SEC_ASN1_SKIP 0x08000         /* skip a field; only for decoding */
  |  |  ------------------
  |  |                   (SEC_ASN1_EXPLICIT | SEC_ASN1_OPTIONAL | SEC_ASN1_SKIP | SEC_ASN1_INNER | \
  |  |  ------------------
  |  |  |  |  141|    646|#define SEC_ASN1_INNER 0x10000        /* with ANY means capture the      \
  |  |  ------------------
  |  |  303|    646|     SEC_ASN1_DYNAMIC | SEC_ASN1_MAY_STREAM | SEC_ASN1_INLINE | SEC_ASN1_POINTER)
  |  |  ------------------
  |  |  |  |  138|    646|#define SEC_ASN1_DYNAMIC 0x04000      /* subtemplate is found by calling \
  |  |  ------------------
  |  |                    SEC_ASN1_DYNAMIC | SEC_ASN1_MAY_STREAM | SEC_ASN1_INLINE | SEC_ASN1_POINTER)
  |  |  ------------------
  |  |  |  |  146|    646|#define SEC_ASN1_MAY_STREAM 0x40000   /* field or one of its sub-fields may \
  |  |  ------------------
  |  |                    SEC_ASN1_DYNAMIC | SEC_ASN1_MAY_STREAM | SEC_ASN1_INLINE | SEC_ASN1_POINTER)
  |  |  ------------------
  |  |  |  |  134|    646|#define SEC_ASN1_INLINE 0x00800
  |  |  ------------------
  |  |                    SEC_ASN1_DYNAMIC | SEC_ASN1_MAY_STREAM | SEC_ASN1_INLINE | SEC_ASN1_POINTER)
  |  |  ------------------
  |  |  |  |  135|    646|#define SEC_ASN1_POINTER 0x01000
  |  |  ------------------
  ------------------
  307|    646|#undef UNEXPECTED_FLAGS
  308|       |
  309|    646|    if (encode_kind & SEC_ASN1_ANY) {
  ------------------
  |  |  133|    646|#define SEC_ASN1_ANY 0x00400
  ------------------
  |  Branch (309:9): [True: 0, False: 646]
  ------------------
  310|      0|        PORT_Assert(encode_kind == under_kind);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  311|      0|        tag_modifiers = 0;
  312|      0|        tag_number = 0;
  313|      0|        is_string = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  314|    646|    } else {
  315|    646|        tag_modifiers = (unsigned char)(encode_kind & (SEC_ASN1_TAG_MASK & ~SEC_ASN1_TAGNUM_MASK));
  ------------------
  |  |   65|    646|#define SEC_ASN1_TAG_MASK 0xff
  ------------------
                      tag_modifiers = (unsigned char)(encode_kind & (SEC_ASN1_TAG_MASK & ~SEC_ASN1_TAGNUM_MASK));
  ------------------
  |  |   76|    646|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  316|       |        /*
  317|       |         * XXX This assumes only single-octet identifiers.  To handle
  318|       |         * the HIGH TAG form we would need to do some more work, especially
  319|       |         * in how to specify them in the template, because right now we
  320|       |         * do not provide a way to specify more *tag* bits in encode_kind.
  321|       |         */
  322|    646|        tag_number = encode_kind & SEC_ASN1_TAGNUM_MASK;
  ------------------
  |  |   76|    646|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  323|       |
  324|    646|        is_string = PR_FALSE;
  ------------------
  |  |  438|    646|#define PR_FALSE 0
  ------------------
  325|    646|        switch (under_kind & SEC_ASN1_TAGNUM_MASK) {
  ------------------
  |  |   76|    646|#define SEC_ASN1_TAGNUM_MASK 0x1f
  ------------------
  |  Branch (325:17): [True: 0, False: 646]
  ------------------
  326|      0|            case SEC_ASN1_SET:
  ------------------
  |  |   93|      0|#define SEC_ASN1_SET 0x11
  ------------------
  |  Branch (326:13): [True: 0, False: 646]
  ------------------
  327|       |                /*
  328|       |                 * XXX A plain old SET (as opposed to a SET OF) is not implemented.
  329|       |                 * If it ever is, remove this assert...
  330|       |                 */
  331|      0|                PORT_Assert((under_kind & SEC_ASN1_GROUP) != 0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|       |            /* fallthru */
  333|      0|            case SEC_ASN1_SEQUENCE:
  ------------------
  |  |   92|      0|#define SEC_ASN1_SEQUENCE 0x10
  ------------------
  |  Branch (333:13): [True: 0, False: 646]
  ------------------
  334|      0|                tag_modifiers |= SEC_ASN1_CONSTRUCTED;
  ------------------
  |  |  117|      0|#define SEC_ASN1_CONSTRUCTED 0x20
  ------------------
  335|      0|                break;
  336|      0|            case SEC_ASN1_BIT_STRING:
  ------------------
  |  |   79|      0|#define SEC_ASN1_BIT_STRING 0x03
  ------------------
  |  Branch (336:13): [True: 0, False: 646]
  ------------------
  337|      0|            case SEC_ASN1_BMP_STRING:
  ------------------
  |  |  106|      0|#define SEC_ASN1_BMP_STRING 0x1e
  ------------------
  |  Branch (337:13): [True: 0, False: 646]
  ------------------
  338|      0|            case SEC_ASN1_GENERALIZED_TIME:
  ------------------
  |  |  100|      0|#define SEC_ASN1_GENERALIZED_TIME 0x18
  ------------------
  |  Branch (338:13): [True: 0, False: 646]
  ------------------
  339|      0|            case SEC_ASN1_IA5_STRING:
  ------------------
  |  |   98|      0|#define SEC_ASN1_IA5_STRING 0x16
  ------------------
  |  Branch (339:13): [True: 0, False: 646]
  ------------------
  340|    646|            case SEC_ASN1_OCTET_STRING:
  ------------------
  |  |   80|    646|#define SEC_ASN1_OCTET_STRING 0x04
  ------------------
  |  Branch (340:13): [True: 646, False: 0]
  ------------------
  341|    646|            case SEC_ASN1_PRINTABLE_STRING:
  ------------------
  |  |   95|    646|#define SEC_ASN1_PRINTABLE_STRING 0x13
  ------------------
  |  Branch (341:13): [True: 0, False: 646]
  ------------------
  342|    646|            case SEC_ASN1_T61_STRING:
  ------------------
  |  |   96|    646|#define SEC_ASN1_T61_STRING 0x14
  ------------------
  |  Branch (342:13): [True: 0, False: 646]
  ------------------
  343|    646|            case SEC_ASN1_UNIVERSAL_STRING:
  ------------------
  |  |  104|    646|#define SEC_ASN1_UNIVERSAL_STRING 0x1c
  ------------------
  |  Branch (343:13): [True: 0, False: 646]
  ------------------
  344|    646|            case SEC_ASN1_UTC_TIME:
  ------------------
  |  |   99|    646|#define SEC_ASN1_UTC_TIME 0x17
  ------------------
  |  Branch (344:13): [True: 0, False: 646]
  ------------------
  345|    646|            case SEC_ASN1_UTF8_STRING:
  ------------------
  |  |   88|    646|#define SEC_ASN1_UTF8_STRING 0x0c
  ------------------
  |  Branch (345:13): [True: 0, False: 646]
  ------------------
  346|    646|            case SEC_ASN1_VISIBLE_STRING:
  ------------------
  |  |  102|    646|#define SEC_ASN1_VISIBLE_STRING 0x1a
  ------------------
  |  Branch (346:13): [True: 0, False: 646]
  ------------------
  347|       |                /*
  348|       |                 * We do not yet know if we will be constructing the string,
  349|       |                 * so we have to wait to do this final tag modification.
  350|       |                 */
  351|    646|                is_string = PR_TRUE;
  ------------------
  |  |  437|    646|#define PR_TRUE 1
  ------------------
  352|    646|                break;
  353|    646|        }
  354|    646|    }
  355|       |
  356|    646|    state->tag_modifiers = tag_modifiers;
  357|    646|    state->tag_number = (unsigned char)tag_number;
  358|    646|    state->underlying_kind = under_kind;
  359|    646|    state->isExplicit = isExplicit;
  360|    646|    state->may_stream = may_stream;
  361|    646|    state->is_string = is_string;
  362|    646|    state->optional = optional;
  363|    646|    state->disallowStreaming = disallowStreaming;
  364|       |
  365|    646|    sec_asn1e_scrub_state(state);
  366|       |
  367|    646|    return state;
  368|    646|}
secasn1e.c:sec_asn1e_encode_item_count:
 1410|    969|{
 1411|    969|    unsigned long *count;
 1412|       |
 1413|    969|    count = (unsigned long *)arg;
 1414|    969|    PORT_Assert(count != NULL);
  ------------------
  |  |  120|    969|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    969|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 969, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1415|       |
 1416|    969|    *count += len;
 1417|    969|}
secasn1e.c:sec_asn1e_allocate_item:
 1444|    323|{
 1445|    323|    if (poolp != NULL) {
  ------------------
  |  Branch (1445:9): [True: 0, False: 323]
  ------------------
 1446|      0|        void *release;
 1447|       |
 1448|      0|        release = PORT_ArenaMark(poolp);
  ------------------
  |  |   55|      0|#define PORT_ArenaMark PORT_ArenaMark_Util
  ------------------
 1449|      0|        if (dest == NULL)
  ------------------
  |  Branch (1449:13): [True: 0, False: 0]
  ------------------
 1450|      0|            dest = (SECItem *)PORT_ArenaAlloc(poolp, sizeof(SECItem));
  ------------------
  |  |   53|      0|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
 1451|      0|        if (dest != NULL) {
  ------------------
  |  Branch (1451:13): [True: 0, False: 0]
  ------------------
 1452|      0|            dest->data = (unsigned char *)PORT_ArenaAlloc(poolp, len);
  ------------------
  |  |   53|      0|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
 1453|      0|            if (dest->data == NULL) {
  ------------------
  |  Branch (1453:17): [True: 0, False: 0]
  ------------------
 1454|      0|                dest = NULL;
 1455|      0|            }
 1456|      0|        }
 1457|      0|        if (dest == NULL) {
  ------------------
  |  Branch (1457:13): [True: 0, False: 0]
  ------------------
 1458|       |            /* one or both allocations failed; release everything */
 1459|      0|            PORT_ArenaRelease(poolp, release);
  ------------------
  |  |   56|      0|#define PORT_ArenaRelease PORT_ArenaRelease_Util
  ------------------
 1460|      0|        } else {
 1461|       |            /* everything okay; unmark the arena */
 1462|      0|            PORT_ArenaUnmark(poolp, release);
  ------------------
  |  |   58|      0|#define PORT_ArenaUnmark PORT_ArenaUnmark_Util
  ------------------
 1463|      0|        }
 1464|    323|    } else {
 1465|    323|        SECItem *indest;
 1466|       |
 1467|    323|        indest = dest;
 1468|    323|        if (dest == NULL)
  ------------------
  |  Branch (1468:13): [True: 323, False: 0]
  ------------------
 1469|    323|            dest = (SECItem *)PORT_Alloc(sizeof(SECItem));
  ------------------
  |  |   52|    323|#define PORT_Alloc PORT_Alloc_Util
  ------------------
 1470|    323|        if (dest != NULL) {
  ------------------
  |  Branch (1470:13): [True: 323, False: 0]
  ------------------
 1471|    323|            dest->type = siBuffer;
 1472|    323|            dest->data = (unsigned char *)PORT_Alloc(len);
  ------------------
  |  |   52|    323|#define PORT_Alloc PORT_Alloc_Util
  ------------------
 1473|    323|            if (dest->data == NULL) {
  ------------------
  |  Branch (1473:17): [True: 0, False: 323]
  ------------------
 1474|      0|                if (indest == NULL)
  ------------------
  |  Branch (1474:21): [True: 0, False: 0]
  ------------------
 1475|      0|                    PORT_Free(dest);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 1476|      0|                dest = NULL;
 1477|      0|            }
 1478|    323|        }
 1479|    323|    }
 1480|       |
 1481|    323|    return dest;
 1482|    323|}
secasn1e.c:sec_asn1e_encode_item_store:
 1423|    969|{
 1424|    969|    SECItem *dest;
 1425|       |
 1426|    969|    dest = (SECItem *)arg;
 1427|    969|    PORT_Assert(dest != NULL);
  ------------------
  |  |  120|    969|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    969|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 969, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1428|       |
 1429|    969|    if (len > 0) {
  ------------------
  |  Branch (1429:9): [True: 969, False: 0]
  ------------------
 1430|    969|        PORT_Memcpy(dest->data + dest->len, buf, len);
  ------------------
  |  |  180|    969|#define PORT_Memcpy memcpy
  ------------------
 1431|    969|        dest->len += len;
 1432|    969|    }
 1433|    969|}

SEC_ASN1LengthLength_Util:
   21|    646|{
   22|    646|    int lenlen = 1;
   23|       |
   24|    646|    if (len > 0x7f) {
  ------------------
  |  Branch (24:9): [True: 126, False: 520]
  ------------------
   25|    126|        do {
   26|    126|            lenlen++;
   27|    126|            len >>= 8;
   28|    126|        } while (len);
  ------------------
  |  Branch (28:18): [True: 0, False: 126]
  ------------------
   29|    126|    }
   30|       |
   31|    646|    return lenlen;
   32|    646|}
SEC_ASN1GetSubtemplate:
   53|   187k|{
   54|   187k|    const SEC_ASN1Template *subt = NULL;
   55|       |
   56|   187k|    PORT_Assert(theTemplate->sub != NULL);
  ------------------
  |  |  120|   187k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|   187k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 187k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   57|   187k|    if (theTemplate->sub != NULL) {
  ------------------
  |  Branch (57:9): [True: 187k, False: 0]
  ------------------
   58|   187k|        if (theTemplate->kind & SEC_ASN1_DYNAMIC) {
  ------------------
  |  |  138|   187k|#define SEC_ASN1_DYNAMIC 0x04000      /* subtemplate is found by calling \
  ------------------
  |  Branch (58:13): [True: 2.44k, False: 185k]
  ------------------
   59|  2.44k|            SEC_ASN1TemplateChooserPtr chooserp;
   60|       |
   61|  2.44k|            chooserp = *(SEC_ASN1TemplateChooserPtr *)theTemplate->sub;
   62|  2.44k|            if (chooserp) {
  ------------------
  |  Branch (62:17): [True: 2.44k, False: 0]
  ------------------
   63|  2.44k|                if (thing != NULL)
  ------------------
  |  Branch (63:21): [True: 2.44k, False: 0]
  ------------------
   64|  2.44k|                    thing = (char *)thing - theTemplate->offset;
   65|  2.44k|                subt = (*chooserp)(thing, encoding);
   66|  2.44k|            }
   67|   185k|        } else {
   68|   185k|            subt = (SEC_ASN1Template *)theTemplate->sub;
   69|   185k|        }
   70|   187k|    }
   71|   187k|    return subt;
   72|   187k|}

SECITEM_AllocItem_Util:
   16|  50.7k|{
   17|  50.7k|    SECItem *result = NULL;
   18|  50.7k|    void *mark = NULL;
   19|       |
   20|  50.7k|    if (arena != NULL) {
  ------------------
  |  Branch (20:9): [True: 27.8k, False: 22.9k]
  ------------------
   21|  27.8k|        mark = PORT_ArenaMark(arena);
  ------------------
  |  |   55|  27.8k|#define PORT_ArenaMark PORT_ArenaMark_Util
  ------------------
   22|  27.8k|    }
   23|       |
   24|  50.7k|    if (item == NULL) {
  ------------------
  |  Branch (24:9): [True: 39.1k, False: 11.6k]
  ------------------
   25|  39.1k|        if (arena != NULL) {
  ------------------
  |  Branch (25:13): [True: 16.3k, False: 22.8k]
  ------------------
   26|  16.3k|            result = PORT_ArenaZAlloc(arena, sizeof(SECItem));
  ------------------
  |  |   59|  16.3k|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  ------------------
   27|  22.8k|        } else {
   28|  22.8k|            result = PORT_ZAlloc(sizeof(SECItem));
  ------------------
  |  |   72|  22.8k|#define PORT_ZAlloc PORT_ZAlloc_Util
  ------------------
   29|  22.8k|        }
   30|  39.1k|        if (result == NULL) {
  ------------------
  |  Branch (30:13): [True: 0, False: 39.1k]
  ------------------
   31|      0|            goto loser;
   32|      0|        }
   33|  39.1k|    } else {
   34|  11.6k|        PORT_Assert(item->data == NULL);
  ------------------
  |  |  120|  11.6k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  11.6k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 11.6k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   35|  11.6k|        result = item;
   36|  11.6k|    }
   37|       |
   38|  50.7k|    result->len = len;
   39|  50.7k|    if (len) {
  ------------------
  |  Branch (39:9): [True: 50.6k, False: 52]
  ------------------
   40|  50.6k|        if (arena != NULL) {
  ------------------
  |  Branch (40:13): [True: 27.7k, False: 22.9k]
  ------------------
   41|  27.7k|            result->data = PORT_ArenaAlloc(arena, len);
  ------------------
  |  |   53|  27.7k|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
   42|  27.7k|        } else {
   43|  22.9k|            result->data = PORT_Alloc(len);
  ------------------
  |  |   52|  22.9k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
   44|  22.9k|        }
   45|  50.6k|        if (result->data == NULL) {
  ------------------
  |  Branch (45:13): [True: 0, False: 50.6k]
  ------------------
   46|      0|            goto loser;
   47|      0|        }
   48|  50.6k|    } else {
   49|     52|        result->data = NULL;
   50|     52|    }
   51|       |
   52|  50.7k|    if (mark) {
  ------------------
  |  Branch (52:9): [True: 27.8k, False: 22.9k]
  ------------------
   53|  27.8k|        PORT_ArenaUnmark(arena, mark);
  ------------------
  |  |   58|  27.8k|#define PORT_ArenaUnmark PORT_ArenaUnmark_Util
  ------------------
   54|  27.8k|    }
   55|  50.7k|    return (result);
   56|       |
   57|      0|loser:
   58|      0|    if (arena != NULL) {
  ------------------
  |  Branch (58:9): [True: 0, False: 0]
  ------------------
   59|      0|        if (mark) {
  ------------------
  |  Branch (59:13): [True: 0, False: 0]
  ------------------
   60|      0|            PORT_ArenaRelease(arena, mark);
  ------------------
  |  |   56|      0|#define PORT_ArenaRelease PORT_ArenaRelease_Util
  ------------------
   61|      0|        }
   62|      0|        if (item != NULL) {
  ------------------
  |  Branch (62:13): [True: 0, False: 0]
  ------------------
   63|      0|            item->data = NULL;
   64|      0|            item->len = 0;
   65|      0|        }
   66|      0|    } else {
   67|      0|        if (result != NULL) {
  ------------------
  |  Branch (67:13): [True: 0, False: 0]
  ------------------
   68|      0|            SECITEM_FreeItem(result, (item == NULL) ? PR_TRUE : PR_FALSE);
  ------------------
  |  |  108|      0|#define SECITEM_FreeItem SECITEM_FreeItem_Util
  ------------------
                          SECITEM_FreeItem(result, (item == NULL) ? PR_TRUE : PR_FALSE);
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
                          SECITEM_FreeItem(result, (item == NULL) ? PR_TRUE : PR_FALSE);
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  |  Branch (68:38): [True: 0, False: 0]
  ------------------
   69|      0|        }
   70|       |        /*
   71|       |         * If item is not NULL, the above has set item->data and
   72|       |         * item->len to 0.
   73|       |         */
   74|      0|    }
   75|      0|    return (NULL);
   76|  50.7k|}
SECITEM_CompareItem_Util:
  189|   121k|{
  190|   121k|    unsigned m;
  191|   121k|    int rv;
  192|       |
  193|   121k|    if (a == b)
  ------------------
  |  Branch (193:9): [True: 0, False: 121k]
  ------------------
  194|      0|        return SECEqual;
  195|   121k|    if (!a || !a->len || !a->data)
  ------------------
  |  Branch (195:9): [True: 0, False: 121k]
  |  Branch (195:15): [True: 2.36k, False: 119k]
  |  Branch (195:26): [True: 0, False: 119k]
  ------------------
  196|  2.36k|        return (!b || !b->len || !b->data) ? SECEqual : SECLessThan;
  ------------------
  |  Branch (196:17): [True: 0, False: 2.36k]
  |  Branch (196:23): [True: 2.36k, False: 0]
  |  Branch (196:34): [True: 0, False: 0]
  ------------------
  197|   119k|    if (!b || !b->len || !b->data)
  ------------------
  |  Branch (197:9): [True: 0, False: 119k]
  |  Branch (197:15): [True: 0, False: 119k]
  |  Branch (197:26): [True: 0, False: 119k]
  ------------------
  198|      0|        return SECGreaterThan;
  199|       |
  200|   119k|    m = ((a->len < b->len) ? a->len : b->len);
  ------------------
  |  Branch (200:10): [True: 3.73k, False: 115k]
  ------------------
  201|       |
  202|   119k|    rv = PORT_Memcmp(a->data, b->data, m);
  ------------------
  |  |  179|   119k|#define PORT_Memcmp memcmp
  ------------------
  203|   119k|    if (rv) {
  ------------------
  |  Branch (203:9): [True: 98.0k, False: 21.3k]
  ------------------
  204|  98.0k|        return rv < 0 ? SECLessThan : SECGreaterThan;
  ------------------
  |  Branch (204:16): [True: 42.8k, False: 55.2k]
  ------------------
  205|  98.0k|    }
  206|  21.3k|    if (a->len < b->len) {
  ------------------
  |  Branch (206:9): [True: 300, False: 21.0k]
  ------------------
  207|    300|        return SECLessThan;
  208|    300|    }
  209|  21.0k|    if (a->len == b->len) {
  ------------------
  |  Branch (209:9): [True: 20.8k, False: 236]
  ------------------
  210|  20.8k|        return SECEqual;
  211|  20.8k|    }
  212|    236|    return SECGreaterThan;
  213|  21.0k|}
SECITEM_ItemsAreEqual_Util:
  217|   100k|{
  218|   100k|    if (a->len != b->len)
  ------------------
  |  Branch (218:9): [True: 960, False: 99.9k]
  ------------------
  219|    960|        return PR_FALSE;
  ------------------
  |  |  438|    960|#define PR_FALSE 0
  ------------------
  220|  99.9k|    if (!a->len)
  ------------------
  |  Branch (220:9): [True: 45, False: 99.9k]
  ------------------
  221|     45|        return PR_TRUE;
  ------------------
  |  |  437|     45|#define PR_TRUE 1
  ------------------
  222|  99.9k|    if (!a->data || !b->data) {
  ------------------
  |  Branch (222:9): [True: 0, False: 99.9k]
  |  Branch (222:21): [True: 0, False: 99.9k]
  ------------------
  223|       |        /* avoid null pointer crash. */
  224|      0|        return (PRBool)(a->data == b->data);
  225|      0|    }
  226|  99.9k|    return (PRBool)!PORT_Memcmp(a->data, b->data, a->len);
  ------------------
  |  |  179|  99.9k|#define PORT_Memcmp memcmp
  ------------------
  227|  99.9k|}
SECITEM_DupItem_Util:
  231|  20.9k|{
  232|  20.9k|    return SECITEM_ArenaDupItem(NULL, from);
  ------------------
  |  |  104|  20.9k|#define SECITEM_ArenaDupItem SECITEM_ArenaDupItem_Util
  ------------------
  233|  20.9k|}
SECITEM_ArenaDupItem_Util:
  237|  37.2k|{
  238|  37.2k|    SECItem *to;
  239|       |
  240|  37.2k|    if (from == NULL) {
  ------------------
  |  Branch (240:9): [True: 9, False: 37.2k]
  ------------------
  241|      9|        return NULL;
  242|      9|    }
  243|       |
  244|  37.2k|    to = SECITEM_AllocItem(arena, NULL, from->len);
  ------------------
  |  |  103|  37.2k|#define SECITEM_AllocItem SECITEM_AllocItem_Util
  ------------------
  245|  37.2k|    if (to == NULL) {
  ------------------
  |  Branch (245:9): [True: 0, False: 37.2k]
  ------------------
  246|      0|        return NULL;
  247|      0|    }
  248|       |
  249|  37.2k|    to->type = from->type;
  250|  37.2k|    if (to->len) {
  ------------------
  |  Branch (250:9): [True: 37.1k, False: 52]
  ------------------
  251|  37.1k|        PORT_Memcpy(to->data, from->data, to->len);
  ------------------
  |  |  180|  37.1k|#define PORT_Memcpy memcpy
  ------------------
  252|  37.1k|    }
  253|       |
  254|  37.2k|    return to;
  255|  37.2k|}
SECITEM_CopyItem_Util:
  259|  77.5k|{
  260|  77.5k|    to->type = from->type;
  261|  77.5k|    if (from->data && from->len) {
  ------------------
  |  Branch (261:9): [True: 77.4k, False: 24]
  |  Branch (261:23): [True: 77.4k, False: 0]
  ------------------
  262|  77.4k|        if (arena) {
  ------------------
  |  Branch (262:13): [True: 65.4k, False: 12.0k]
  ------------------
  263|  65.4k|            to->data = (unsigned char *)PORT_ArenaAlloc(arena, from->len);
  ------------------
  |  |   53|  65.4k|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  264|  65.4k|        } else {
  265|  12.0k|            to->data = (unsigned char *)PORT_Alloc(from->len);
  ------------------
  |  |   52|  12.0k|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  266|  12.0k|        }
  267|       |
  268|  77.4k|        if (!to->data) {
  ------------------
  |  Branch (268:13): [True: 0, False: 77.4k]
  ------------------
  269|      0|            return SECFailure;
  270|      0|        }
  271|  77.4k|        PORT_Memcpy(to->data, from->data, from->len);
  ------------------
  |  |  180|  77.4k|#define PORT_Memcpy memcpy
  ------------------
  272|  77.4k|        to->len = from->len;
  273|  77.4k|    } else {
  274|       |        /*
  275|       |         * If from->data is NULL but from->len is nonzero, this function
  276|       |         * will succeed.  Is this right?
  277|       |         */
  278|     24|        to->data = 0;
  279|     24|        to->len = 0;
  280|     24|    }
  281|  77.5k|    return SECSuccess;
  282|  77.5k|}
SECITEM_FreeItem_Util:
  286|  37.5k|{
  287|  37.5k|    if (zap) {
  ------------------
  |  Branch (287:9): [True: 37.5k, False: 1]
  ------------------
  288|  37.5k|        PORT_Free(zap->data);
  ------------------
  |  |   60|  37.5k|#define PORT_Free PORT_Free_Util
  ------------------
  289|  37.5k|        zap->data = 0;
  290|  37.5k|        zap->len = 0;
  291|  37.5k|        if (freeit) {
  ------------------
  |  Branch (291:13): [True: 24.7k, False: 12.8k]
  ------------------
  292|  24.7k|            PORT_Free(zap);
  ------------------
  |  |   60|  24.7k|#define PORT_Free PORT_Free_Util
  ------------------
  293|  24.7k|        }
  294|  37.5k|    }
  295|  37.5k|}
SECITEM_Hash:
  319|   114k|{
  320|   114k|    const SECItem *item = (const SECItem *)key;
  321|   114k|    PLHashNumber rv = 0;
  322|       |
  323|   114k|    PRUint8 *data = (PRUint8 *)item->data;
  324|   114k|    PRUint32 i;
  325|   114k|    PRUint8 *rvc = (PRUint8 *)&rv;
  326|       |
  327|  1.20M|    for (i = 0; i < item->len; i++) {
  ------------------
  |  Branch (327:17): [True: 1.08M, False: 114k]
  ------------------
  328|  1.08M|        rvc[i % sizeof(rv)] ^= *data;
  329|  1.08M|        data++;
  330|  1.08M|    }
  331|       |
  332|   114k|    return rv;
  333|   114k|}
SECITEM_HashCompare:
  343|  94.8k|{
  344|  94.8k|    const SECItem *i1 = (const SECItem *)k1;
  345|  94.8k|    const SECItem *i2 = (const SECItem *)k2;
  346|       |
  347|  94.8k|    return SECITEM_ItemsAreEqual(i1, i2);
  ------------------
  |  |  109|  94.8k|#define SECITEM_ItemsAreEqual SECITEM_ItemsAreEqual_Util
  ------------------
  348|  94.8k|}

SECOID_Init:
 2167|      2|{
 2168|      2|    PLHashEntry *entry;
 2169|      2|    const SECOidData *oid;
 2170|      2|    SECOidTag i;
 2171|      2|    char *envVal;
 2172|       |
 2173|      2|#define NSS_VERSION_VARIABLE __nss_util_version
 2174|      2|#include "verref.h"
  ------------------
  |  |    1|       |/* This Source Code Form is subject to the terms of the Mozilla Public
  |  |    2|       | * License, v. 2.0. If a copy of the MPL was not distributed with this
  |  |    3|       | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  |  |    4|       |
  |  |    5|       |/* This header is used inline in a function to ensure that a version string
  |  |    6|       | * symbol is linked in and not optimized out. A volatile reference is added to
  |  |    7|       | * the variable identified by NSS_VERSION_VARIABLE.
  |  |    8|       | *
  |  |    9|       | * Use this as follows:
  |  |   10|       | *
  |  |   11|       | * #define NSS_VERSION_VARIABLE __nss_ssl_version
  |  |   12|       | * #include "verref.h"
  |  |   13|       | */
  |  |   14|       |
  |  |   15|       |/* Suppress unused variable warnings. */
  |  |   16|       |#ifdef _MSC_VER
  |  |   17|       |#pragma warning(push)
  |  |   18|       |#pragma warning(disable : 4101)
  |  |   19|       |#endif
  |  |   20|       |/* This works for both gcc and clang */
  |  |   21|      2|#if defined(__GNUC__) && !defined(NSS_NO_GCC48)
  |  |   22|      2|#pragma GCC diagnostic push
  |  |   23|      2|#pragma GCC diagnostic ignored "-Wunused-variable"
  |  |   24|      2|#endif
  |  |   25|       |
  |  |   26|       |#ifndef NSS_VERSION_VARIABLE
  |  |   27|       |#error NSS_VERSION_VARIABLE must be set before including "verref.h"
  |  |   28|       |#endif
  |  |   29|      2|{
  |  |   30|      2|    extern const char NSS_VERSION_VARIABLE[];
  |  |   31|      2|#if defined(__GNUC__) || defined(__clang__)
  |  |   32|      2|    __attribute__((unused))
  |  |   33|      2|#endif
  |  |   34|      2|    volatile const char _nss_version_c = NSS_VERSION_VARIABLE[0];
  |  |  ------------------
  |  |  |  | 2173|      2|#define NSS_VERSION_VARIABLE __nss_util_version
  |  |  ------------------
  |  |   35|      2|}
  |  |   36|      2|#undef NSS_VERSION_VARIABLE
  |  |   37|       |
  |  |   38|       |#ifdef _MSC_VER
  |  |   39|       |#pragma warning(pop)
  |  |   40|       |#endif
  |  |   41|      2|#if defined(__GNUC__) && !defined(NSS_NO_GCC48)
  |  |   42|      2|#pragma GCC diagnostic pop
  |  |   43|      2|#endif
  ------------------
 2175|       |
 2176|      2|    if (oidhash) {
  ------------------
  |  Branch (2176:9): [True: 1, False: 1]
  ------------------
 2177|      1|        return SECSuccess; /* already initialized */
 2178|      1|    }
 2179|       |
 2180|       |    /* xyber768d00 must be enabled explicitly */
 2181|      1|    xOids[SEC_OID_XYBER768D00].notPolicyFlags = NSS_USE_ALG_IN_SSL_KX;
  ------------------
  |  |  572|      1|#define NSS_USE_ALG_IN_SSL_KX 0x00000004           /* used in SSL key exchange */
  ------------------
 2182|       |
 2183|      1|    if (!PR_GetEnvSecure("NSS_ALLOW_WEAK_SIGNATURE_ALG")) {
  ------------------
  |  Branch (2183:9): [True: 1, False: 0]
  ------------------
 2184|       |        /* initialize any policy flags that are disabled by default */
 2185|      1|        xOids[SEC_OID_MD2].notPolicyFlags = ~NSS_USE_ALG_IN_PKCS12_DECRYPT;
  ------------------
  |  |  576|      1|#define NSS_USE_ALG_IN_PKCS12_DECRYPT 0x00000040   /* used to decrypt pkcs12 */
  ------------------
 2186|      1|        xOids[SEC_OID_MD4].notPolicyFlags = ~NSS_USE_ALG_IN_PKCS12_DECRYPT;
  ------------------
  |  |  576|      1|#define NSS_USE_ALG_IN_PKCS12_DECRYPT 0x00000040   /* used to decrypt pkcs12 */
  ------------------
 2187|      1|        xOids[SEC_OID_MD5].notPolicyFlags = ~NSS_USE_ALG_IN_PKCS12_DECRYPT;
  ------------------
  |  |  576|      1|#define NSS_USE_ALG_IN_PKCS12_DECRYPT 0x00000040   /* used to decrypt pkcs12 */
  ------------------
 2188|      1|        xOids[SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION].notPolicyFlags = ~0;
 2189|      1|        xOids[SEC_OID_PKCS1_MD4_WITH_RSA_ENCRYPTION].notPolicyFlags = ~0;
 2190|      1|        xOids[SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION].notPolicyFlags = ~0;
 2191|      1|        xOids[SEC_OID_PKCS5_PBE_WITH_MD2_AND_DES_CBC].notPolicyFlags = ~NSS_USE_ALG_IN_PKCS12_DECRYPT;
  ------------------
  |  |  576|      1|#define NSS_USE_ALG_IN_PKCS12_DECRYPT 0x00000040   /* used to decrypt pkcs12 */
  ------------------
 2192|      1|        xOids[SEC_OID_PKCS5_PBE_WITH_MD5_AND_DES_CBC].notPolicyFlags = ~NSS_USE_ALG_IN_PKCS12_DECRYPT;
  ------------------
  |  |  576|      1|#define NSS_USE_ALG_IN_PKCS12_DECRYPT 0x00000040   /* used to decrypt pkcs12 */
  ------------------
 2193|      1|    }
 2194|       |
 2195|       |    /* turn off NSS_USE_POLICY_IN_SSL by default */
 2196|      1|    xOids[SEC_OID_APPLY_SSL_POLICY].notPolicyFlags = NSS_USE_POLICY_IN_SSL;
  ------------------
  |  |  574|      1|#define NSS_USE_POLICY_IN_SSL 0x00000010           /* enable policy in SSL protocol */
  ------------------
 2197|       |    /* turn off TLS REQUIRE EMS by default */
 2198|      1|    xOids[SEC_OID_TLS_REQUIRE_EMS].notPolicyFlags = ~0;
 2199|       |
 2200|      1|    envVal = PR_GetEnvSecure("NSS_HASH_ALG_SUPPORT");
 2201|      1|    if (envVal)
  ------------------
  |  Branch (2201:9): [True: 0, False: 1]
  ------------------
 2202|      0|        handleHashAlgSupport(envVal);
 2203|       |
 2204|      1|    if (secoid_InitDynOidData() != SECSuccess) {
  ------------------
  |  Branch (2204:9): [True: 0, False: 1]
  ------------------
 2205|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2206|      0|        PORT_Assert(0); /* this function should never fail */
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2207|      0|        return SECFailure;
 2208|      0|    }
 2209|       |
 2210|      1|    oidhash = PL_NewHashTable(0, SECITEM_Hash, SECITEM_HashCompare,
 2211|      1|                              PL_CompareValues, NULL, NULL);
 2212|      1|    oidmechhash = PL_NewHashTable(0, secoid_HashNumber, PL_CompareValues,
 2213|      1|                                  PL_CompareValues, NULL, NULL);
 2214|       |
 2215|      1|    if (!oidhash || !oidmechhash) {
  ------------------
  |  Branch (2215:9): [True: 0, False: 1]
  |  Branch (2215:21): [True: 0, False: 1]
  ------------------
 2216|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2217|      0|        PORT_Assert(0); /*This function should never fail. */
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2218|      0|        return (SECFailure);
 2219|      0|    }
 2220|       |
 2221|    392|    for (i = 0; i < SEC_OID_TOTAL; i++) {
  ------------------
  |  Branch (2221:17): [True: 391, False: 1]
  ------------------
 2222|    391|        oid = &oids[i];
 2223|    391|        PORT_Assert(oid->offset == i);
  ------------------
  |  |  120|    391|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    391|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 391, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2224|    391|        entry = PL_HashTableAdd(oidhash, &oid->oid, (void *)oid);
 2225|       |
 2226|    391|        if (entry == NULL) {
  ------------------
  |  Branch (2226:13): [True: 0, False: 391]
  ------------------
 2227|      0|            PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2228|      0|            PORT_Assert(0); /*This function should never fail. */
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2229|      0|            return (SECFailure);
 2230|      0|        }
 2231|       |
 2232|    391|        if (oid->mechanism != CKM_INVALID_MECHANISM) {
  ------------------
  |  |  155|    391|#define CKM_INVALID_MECHANISM 0xffffffffUL
  ------------------
  |  Branch (2232:13): [True: 108, False: 283]
  ------------------
 2233|    108|            entry = PL_HashTableAdd(oidmechhash,
 2234|    108|                                    (void *)(uintptr_t)oid->mechanism, (void *)oid);
 2235|    108|            if (entry == NULL) {
  ------------------
  |  Branch (2235:17): [True: 0, False: 108]
  ------------------
 2236|      0|                PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2237|      0|                PORT_Assert(0); /* This function should never fail. */
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2238|      0|                return (SECFailure);
 2239|      0|            }
 2240|    108|        }
 2241|    391|    }
 2242|       |
 2243|      1|    PORT_Assert(i == SEC_OID_TOTAL);
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      1|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2244|       |    /* finally, clear S/MIME from the policy oids. If no one turns on any
 2245|       |     * S/MIME policies after this, then S/MIME will enable the traditional
 2246|       |     * algs when it initializes */
 2247|      1|    (void)NSS_SetAlgorithmPolicyAll(0, NSS_USE_ALG_IN_SMIME);
  ------------------
  |  |  597|      1|#define NSS_USE_ALG_IN_SMIME (NSS_USE_ALG_IN_SMIME_LEGACY | \
  |  |  ------------------
  |  |  |  |  578|      1|#define NSS_USE_ALG_IN_SMIME_LEGACY 0x00000100     /* used to decrypt smime */
  |  |  ------------------
  |  |  598|      1|                              NSS_USE_ALG_IN_SMIME_ENCRYPT)
  |  |  ------------------
  |  |  |  |  579|      1|#define NSS_USE_ALG_IN_SMIME_ENCRYPT 0x00000200    /* used to decrypt smime */
  |  |  ------------------
  ------------------
 2248|       |
 2249|      1|    return (SECSuccess);
 2250|      1|}
SECOID_FindOID_Util:
 2273|   113k|{
 2274|   113k|    SECOidData *ret;
 2275|       |
 2276|   113k|    PR_ASSERT(oidhash != NULL);
  ------------------
  |  |  208|   113k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:6): [True: 113k, False: 0]
  |  |  ------------------
  ------------------
 2277|   113k|    if (oidhash == NULL && SECOID_Init() != SECSuccess) {
  ------------------
  |  Branch (2277:9): [True: 0, False: 113k]
  |  Branch (2277:28): [True: 0, False: 0]
  ------------------
 2278|      0|        PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2279|      0|        return NULL;
 2280|      0|    }
 2281|       |
 2282|   113k|    if ((oid == NULL) || (oid->data == NULL)) {
  ------------------
  |  Branch (2282:9): [True: 0, False: 113k]
  |  Branch (2282:26): [True: 0, False: 113k]
  ------------------
 2283|      0|        PORT_SetError(SEC_ERROR_UNRECOGNIZED_OID);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2284|      0|        return NULL;
 2285|      0|    }
 2286|       |
 2287|   113k|    ret = PL_HashTableLookupConst(oidhash, oid);
 2288|   113k|    if (ret == NULL) {
  ------------------
  |  Branch (2288:9): [True: 19.5k, False: 94.1k]
  ------------------
 2289|  19.5k|        ret = secoid_FindDynamic(oid);
 2290|  19.5k|        if (ret == NULL) {
  ------------------
  |  Branch (2290:13): [True: 19.5k, False: 0]
  ------------------
 2291|  19.5k|            PORT_SetError(SEC_ERROR_UNRECOGNIZED_OID);
  ------------------
  |  |   65|  19.5k|#define PORT_SetError PORT_SetError_Util
  ------------------
 2292|  19.5k|        }
 2293|  19.5k|    }
 2294|   113k|    return (ret);
 2295|   113k|}
SECOID_FindOIDTag_Util:
 2299|  45.1k|{
 2300|  45.1k|    SECOidData *oiddata;
 2301|       |
 2302|  45.1k|    oiddata = SECOID_FindOID(oid);
  ------------------
  |  |  115|  45.1k|#define SECOID_FindOID SECOID_FindOID_Util
  ------------------
 2303|  45.1k|    if (oiddata == NULL) {
  ------------------
  |  Branch (2303:9): [True: 6.32k, False: 38.7k]
  ------------------
 2304|  6.32k|        return SEC_OID_UNKNOWN;
 2305|  6.32k|    }
 2306|       |
 2307|  38.7k|    return oiddata->offset;
 2308|  45.1k|}
SECOID_FindOIDByTag_Util:
 2313|  79.1k|{
 2314|  79.1k|    if (tagnum >= SEC_OID_TOTAL) {
  ------------------
  |  Branch (2314:9): [True: 0, False: 79.1k]
  ------------------
 2315|      0|        return (SECOidData *)secoid_FindDynamicByTag(tagnum);
 2316|      0|    }
 2317|       |
 2318|  79.1k|    PORT_Assert((unsigned int)tagnum < SEC_OID_TOTAL);
  ------------------
  |  |  120|  79.1k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  79.1k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 79.1k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2319|  79.1k|    return (SECOidData *)(&oids[tagnum]);
 2320|  79.1k|}
SECOID_KnownCertExtenOID:
 2324|    221|{
 2325|    221|    SECOidData *oidData;
 2326|       |
 2327|    221|    oidData = SECOID_FindOID(extenOid);
  ------------------
  |  |  115|    221|#define SECOID_FindOID SECOID_FindOID_Util
  ------------------
 2328|    221|    if (oidData == (SECOidData *)NULL)
  ------------------
  |  Branch (2328:9): [True: 44, False: 177]
  ------------------
 2329|     44|        return (PR_FALSE);
  ------------------
  |  |  438|     44|#define PR_FALSE 0
  ------------------
 2330|    177|    return ((oidData->supportedExtension == SUPPORTED_CERT_EXTENSION) ? PR_TRUE : PR_FALSE);
  ------------------
  |  |  437|    157|#define PR_TRUE 1
  ------------------
                  return ((oidData->supportedExtension == SUPPORTED_CERT_EXTENSION) ? PR_TRUE : PR_FALSE);
  ------------------
  |  |  438|     20|#define PR_FALSE 0
  ------------------
  |  Branch (2330:13): [True: 157, False: 20]
  ------------------
 2331|    221|}
SECOID_GetTotalTags:
 2347|      1|{
 2348|      1|    SECOidTag total;
 2349|       |
 2350|       |    /* get the lock to make sure we don't catch and inconsistant value
 2351|       |     * for dynOidEntriesUsed. */
 2352|      1|    NSSRWLock_LockRead(dynOidLock);
  ------------------
  |  |   47|      1|#define NSSRWLock_LockRead NSSRWLock_LockRead_Util
  ------------------
 2353|      1|    total = SEC_OID_TOTAL + dynOidEntriesUsed;
 2354|      1|    NSSRWLock_UnlockRead(dynOidLock);
  ------------------
  |  |   50|      1|#define NSSRWLock_UnlockRead NSSRWLock_UnlockRead_Util
  ------------------
 2355|      1|    return total;
 2356|      1|}
NSS_GetAlgorithmPolicy:
 2383|  18.3k|{
 2384|  18.3k|    privXOid *pxo = secoid_FindXOidByTag(tag);
 2385|  18.3k|    if (!pxo)
  ------------------
  |  Branch (2385:9): [True: 0, False: 18.3k]
  ------------------
 2386|      0|        return SECFailure;
 2387|  18.3k|    if (!pValue) {
  ------------------
  |  Branch (2387:9): [True: 0, False: 18.3k]
  ------------------
 2388|      0|        PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2389|      0|        return SECFailure;
 2390|      0|    }
 2391|  18.3k|    *pValue = ~(pxo->notPolicyFlags);
 2392|  18.3k|    return SECSuccess;
 2393|  18.3k|}
NSS_SetAlgorithmPolicy:
 2403|    391|{
 2404|    391|    privXOid *pxo = secoid_FindXOidByTag(tag);
 2405|    391|    PRUint32 policyFlags;
 2406|    391|    if (!pxo)
  ------------------
  |  Branch (2406:9): [True: 0, False: 391]
  ------------------
 2407|      0|        return SECFailure;
 2408|       |
 2409|    391|    if (nss_policy_locked) {
  ------------------
  |  Branch (2409:9): [True: 0, False: 391]
  ------------------
 2410|      0|        PORT_SetError(SEC_ERROR_POLICY_LOCKED);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
 2411|      0|        return SECFailure;
 2412|      0|    }
 2413|       |    /* The stored policy flags are the ones complement of the flags as
 2414|       |     * seen by the user.  This is not atomic, but these changes should
 2415|       |     * be done rarely, e.g. at initialization time.
 2416|       |     */
 2417|    391|    policyFlags = ~(pxo->notPolicyFlags);
 2418|    391|    policyFlags = (policyFlags & ~clearBits) | setBits;
 2419|    391|    pxo->notPolicyFlags = ~policyFlags;
 2420|    391|    return SECSuccess;
 2421|    391|}
NSS_SetAlgorithmPolicyAll:
 2426|      1|{
 2427|      1|    SECOidTag tag;
 2428|       |    /* call this once,not once per loop */
 2429|      1|    SECOidTag lastTag = SECOID_GetTotalTags();
 2430|       |
 2431|    392|    for (tag = SEC_OID_UNKNOWN; tag < lastTag; tag++) {
  ------------------
  |  Branch (2431:33): [True: 391, False: 1]
  ------------------
 2432|    391|        SECStatus rv = NSS_SetAlgorithmPolicy(tag, setBits, clearBits);
 2433|       |        /* there are only 2 reasons SetAlgorithmPolicy can fail:
 2434|       |         *  1) we passed an invalid tag, or 2) policy is locked.
 2435|       |         *  The first case should not happen because we are only looping
 2436|       |         *  through known good tags. In the second case, we will always fail,
 2437|       |         *  so there is no point continuing our loop */
 2438|    391|        if (rv != SECSuccess) {
  ------------------
  |  Branch (2438:13): [True: 0, False: 391]
  ------------------
 2439|      0|            return rv;
 2440|      0|        }
 2441|    391|    }
 2442|      1|    return SECSuccess;
 2443|      1|}
SECOID_Shutdown:
 2521|      2|{
 2522|      2|    if (oidhash) {
  ------------------
  |  Branch (2522:9): [True: 1, False: 1]
  ------------------
 2523|      1|        PL_HashTableDestroy(oidhash);
 2524|      1|        oidhash = NULL;
 2525|      1|    }
 2526|      2|    if (oidmechhash) {
  ------------------
  |  Branch (2526:9): [True: 1, False: 1]
  ------------------
 2527|      1|        PL_HashTableDestroy(oidmechhash);
 2528|      1|        oidmechhash = NULL;
 2529|      1|    }
 2530|       |    /* Have to handle the case where the lock was created, but
 2531|       |    ** the pool wasn't.
 2532|       |    ** I'm not going to attempt to create the lock, just to protect
 2533|       |    ** the destruction of data that probably isn't initialized anyway.
 2534|       |    */
 2535|      2|    if (dynOidLock) {
  ------------------
  |  Branch (2535:9): [True: 1, False: 1]
  ------------------
 2536|      1|        SKIP_AFTER_FORK(NSSRWLock_LockWrite(dynOidLock));
  ------------------
  |  | 2513|      1|    if (!parentForkedAfterC_Initialize) \
  |  |  ------------------
  |  |  |  Branch (2513:9): [True: 1, False: 0]
  |  |  ------------------
  |  | 2514|      1|    x
  ------------------
 2537|      1|        if (dynOidHash) {
  ------------------
  |  Branch (2537:13): [True: 0, False: 1]
  ------------------
 2538|      0|            PL_HashTableDestroy(dynOidHash);
 2539|      0|            dynOidHash = NULL;
 2540|      0|        }
 2541|      1|        if (dynOidPool) {
  ------------------
  |  Branch (2541:13): [True: 1, False: 0]
  ------------------
 2542|      1|            PORT_FreeArena(dynOidPool, PR_FALSE);
  ------------------
  |  |   61|      1|#define PORT_FreeArena PORT_FreeArena_Util
  ------------------
                          PORT_FreeArena(dynOidPool, PR_FALSE);
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
 2543|      1|            dynOidPool = NULL;
 2544|      1|        }
 2545|      1|        if (dynOidTable) {
  ------------------
  |  Branch (2545:13): [True: 0, False: 1]
  ------------------
 2546|      0|            PORT_Free(dynOidTable);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
 2547|      0|            dynOidTable = NULL;
 2548|      0|        }
 2549|      1|        dynOidEntriesAllocated = 0;
 2550|      1|        dynOidEntriesUsed = 0;
 2551|       |
 2552|      1|        SKIP_AFTER_FORK(NSSRWLock_UnlockWrite(dynOidLock));
  ------------------
  |  | 2513|      1|    if (!parentForkedAfterC_Initialize) \
  |  |  ------------------
  |  |  |  Branch (2513:9): [True: 1, False: 0]
  |  |  ------------------
  |  | 2514|      1|    x
  ------------------
 2553|      1|        SKIP_AFTER_FORK(NSSRWLock_Destroy(dynOidLock));
  ------------------
  |  | 2513|      1|    if (!parentForkedAfterC_Initialize) \
  |  |  ------------------
  |  |  |  Branch (2513:9): [True: 1, False: 0]
  |  |  ------------------
  |  | 2514|      1|    x
  ------------------
 2554|      1|        dynOidLock = NULL;
 2555|      1|    } else {
 2556|       |        /* Since dynOidLock doesn't exist, then all the data it protects
 2557|       |        ** should be uninitialized.  We'll check that (in DEBUG builds),
 2558|       |        ** and then make sure it is so, in case NSS is reinitialized.
 2559|       |        */
 2560|      1|        PORT_Assert(!dynOidHash && !dynOidPool && !dynOidTable &&
  ------------------
  |  |  120|      1|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      8|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 1, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 1, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 1, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 1, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2561|      1|                    !dynOidEntriesAllocated && !dynOidEntriesUsed);
 2562|      1|        dynOidHash = NULL;
 2563|      1|        dynOidPool = NULL;
 2564|      1|        dynOidTable = NULL;
 2565|      1|        dynOidEntriesAllocated = 0;
 2566|      1|        dynOidEntriesUsed = 0;
 2567|      1|    }
 2568|       |    /* we are trashing the old policy state now, also reenable changing
 2569|       |     * the policy as well */
 2570|      2|    nss_policy_locked = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 2571|      2|    memset(xOids, 0, sizeof xOids);
 2572|      2|    return SECSuccess;
 2573|      2|}
UTIL_SetForkState:
 2577|      2|{
 2578|      2|    parentForkedAfterC_Initialize = forked;
 2579|      2|}
secoid.c:secoid_InitDynOidData:
 1949|      1|{
 1950|      1|    SECStatus rv = SECSuccess;
 1951|       |
 1952|      1|    dynOidLock = NSSRWLock_New(1, "dynamic OID data");
  ------------------
  |  |   49|      1|#define NSSRWLock_New NSSRWLock_New_Util
  ------------------
 1953|      1|    if (!dynOidLock) {
  ------------------
  |  Branch (1953:9): [True: 0, False: 1]
  ------------------
 1954|      0|        return SECFailure; /* Error code should already be set. */
 1955|      0|    }
 1956|      1|    dynOidPool = PORT_NewArena(2048);
  ------------------
  |  |   63|      1|#define PORT_NewArena PORT_NewArena_Util
  ------------------
 1957|      1|    if (!dynOidPool) {
  ------------------
  |  Branch (1957:9): [True: 0, False: 1]
  ------------------
 1958|      0|        rv = SECFailure /* Error code should already be set. */;
 1959|      0|    }
 1960|      1|    return rv;
 1961|      1|}
secoid.c:secoid_HashNumber:
 2128|    108|{
 2129|    108|    return (PLHashNumber)((char *)key - (char *)NULL);
 2130|    108|}
secoid.c:secoid_FindDynamic:
 1988|  19.5k|{
 1989|  19.5k|    SECOidData *ret = NULL;
 1990|       |
 1991|  19.5k|    NSSRWLock_LockRead(dynOidLock);
  ------------------
  |  |   47|  19.5k|#define NSSRWLock_LockRead NSSRWLock_LockRead_Util
  ------------------
 1992|  19.5k|    if (dynOidHash) {
  ------------------
  |  Branch (1992:9): [True: 0, False: 19.5k]
  ------------------
 1993|      0|        ret = (SECOidData *)PL_HashTableLookup(dynOidHash, key);
 1994|      0|    }
 1995|  19.5k|    NSSRWLock_UnlockRead(dynOidLock);
  ------------------
  |  |   50|  19.5k|#define NSSRWLock_UnlockRead NSSRWLock_UnlockRead_Util
  ------------------
 1996|  19.5k|    if (ret == NULL) {
  ------------------
  |  Branch (1996:9): [True: 19.5k, False: 0]
  ------------------
 1997|  19.5k|        PORT_SetError(SEC_ERROR_UNRECOGNIZED_OID);
  ------------------
  |  |   65|  19.5k|#define PORT_SetError PORT_SetError_Util
  ------------------
 1998|  19.5k|    }
 1999|  19.5k|    return ret;
 2000|  19.5k|}
secoid.c:secoid_FindXOidByTag:
 2366|  18.7k|{
 2367|  18.7k|    if (tagnum >= SEC_OID_TOTAL) {
  ------------------
  |  Branch (2367:9): [True: 0, False: 18.7k]
  ------------------
 2368|      0|        dynXOid *dxo = secoid_FindDynamicByTag(tagnum);
 2369|      0|        return (dxo ? &dxo->priv : NULL);
  ------------------
  |  Branch (2369:17): [True: 0, False: 0]
  ------------------
 2370|      0|    }
 2371|       |
 2372|  18.7k|    PORT_Assert((unsigned int)tagnum < SEC_OID_TOTAL);
  ------------------
  |  |  120|  18.7k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  18.7k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 18.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2373|  18.7k|    return &xOids[tagnum];
 2374|  18.7k|}

PORT_Alloc_Util:
   82|   267k|{
   83|   267k|    void *rv = NULL;
   84|       |
   85|   267k|    if (bytes <= MAX_SIZE) {
  ------------------
  |  |   78|   267k|#define MAX_SIZE (PR_UINT32_MAX >> 1)
  |  |  ------------------
  |  |  |  |  302|   267k|#define PR_UINT32_MAX PR_UINT32(4294967295)
  |  |  |  |  ------------------
  |  |  |  |  |  |  282|   267k|#define PR_UINT32(x) x ## U
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (85:9): [True: 267k, False: 0]
  ------------------
   86|       |        /* Always allocate a non-zero amount of bytes */
   87|   267k|        rv = PR_Malloc(bytes ? bytes : 1);
  ------------------
  |  Branch (87:24): [True: 267k, False: 0]
  ------------------
   88|   267k|    }
   89|   267k|    if (!rv) {
  ------------------
  |  Branch (89:9): [True: 0, False: 267k]
  ------------------
   90|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
   91|      0|    }
   92|   267k|    return rv;
   93|   267k|}
PORT_Realloc_Util:
   97|    398|{
   98|    398|    void *rv = NULL;
   99|       |
  100|    398|    if (bytes <= MAX_SIZE) {
  ------------------
  |  |   78|    398|#define MAX_SIZE (PR_UINT32_MAX >> 1)
  |  |  ------------------
  |  |  |  |  302|    398|#define PR_UINT32_MAX PR_UINT32(4294967295)
  |  |  |  |  ------------------
  |  |  |  |  |  |  282|    398|#define PR_UINT32(x) x ## U
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (100:9): [True: 398, False: 0]
  ------------------
  101|    398|        rv = PR_Realloc(oldptr, bytes);
  102|    398|    }
  103|    398|    if (!rv) {
  ------------------
  |  Branch (103:9): [True: 0, False: 398]
  ------------------
  104|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  105|      0|    }
  106|    398|    return rv;
  107|    398|}
PORT_ZAlloc_Util:
  111|  90.0k|{
  112|  90.0k|    void *rv = NULL;
  113|       |
  114|  90.0k|    if (bytes <= MAX_SIZE) {
  ------------------
  |  |   78|  90.0k|#define MAX_SIZE (PR_UINT32_MAX >> 1)
  |  |  ------------------
  |  |  |  |  302|  90.0k|#define PR_UINT32_MAX PR_UINT32(4294967295)
  |  |  |  |  ------------------
  |  |  |  |  |  |  282|  90.0k|#define PR_UINT32(x) x ## U
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (114:9): [True: 90.0k, False: 0]
  ------------------
  115|       |        /* Always allocate a non-zero amount of bytes */
  116|  90.0k|        rv = PR_Calloc(1, bytes ? bytes : 1);
  ------------------
  |  Branch (116:27): [True: 90.0k, False: 0]
  ------------------
  117|  90.0k|    }
  118|  90.0k|    if (!rv) {
  ------------------
  |  Branch (118:9): [True: 0, False: 90.0k]
  ------------------
  119|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  120|      0|    }
  121|  90.0k|    return rv;
  122|  90.0k|}
PORT_Free_Util:
  171|   319k|{
  172|   319k|    if (ptr) {
  ------------------
  |  Branch (172:9): [True: 309k, False: 9.40k]
  ------------------
  173|   309k|        PR_Free(ptr);
  174|   309k|    }
  175|   319k|}
PORT_ZFree_Util:
  179|  48.2k|{
  180|  48.2k|    if (ptr) {
  ------------------
  |  Branch (180:9): [True: 48.2k, False: 0]
  ------------------
  181|  48.2k|        memset(ptr, 0, len);
  182|  48.2k|        PR_Free(ptr);
  183|  48.2k|    }
  184|  48.2k|}
PORT_Strdup_Util:
  188|      3|{
  189|      3|    size_t len = PORT_Strlen(str) + 1;
  ------------------
  |  |  190|      3|#define PORT_Strlen(s) strlen(s)
  ------------------
  190|      3|    char *newstr;
  191|       |
  192|      3|    newstr = (char *)PORT_Alloc(len);
  ------------------
  |  |   52|      3|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  193|      3|    if (newstr) {
  ------------------
  |  Branch (193:9): [True: 3, False: 0]
  ------------------
  194|      3|        PORT_Memcpy(newstr, str, len);
  ------------------
  |  |  180|      3|#define PORT_Memcpy memcpy
  ------------------
  195|      3|    }
  196|      3|    return newstr;
  197|      3|}
PORT_SetError_Util:
  201|   156k|{
  202|   156k|    PR_SetError(value, 0);
  203|   156k|    return;
  204|   156k|}
PORT_GetError_Util:
  208|  20.0k|{
  209|  20.0k|    return (PR_GetError());
  210|  20.0k|}
PORT_SafeZero:
  214|  1.33k|{
  215|       |    /* there are cases where the compiler optimizes away our attempt to clear
  216|       |     * out our stack variables. There are multiple solutions for this problem,
  217|       |     * but they aren't universally accepted on all platforms. This attempts
  218|       |     * to select the best solution available given our os, compilier, and
  219|       |     * libc */
  220|       |#ifdef __STDC_LIB_EXT1__
  221|       |    /* if the os implements C11 annex K, use memset_s */
  222|       |    memset_s(p, n, 0, n);
  223|       |#else
  224|       |    /* _DEFAULT_SORUCE  == BSD source in GCC based environments
  225|       |     * if other environmens support explicit_bzero, their defines
  226|       |     * should be added here */
  227|  1.33k|#if (defined(_DEFAULT_SOURCE) || defined(_BSD_SOURCE)) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 25))
  228|  1.33k|    explicit_bzero(p, n);
  229|       |#else
  230|       |#ifdef XP_WIN
  231|       |    /* windows has a secure zero funtion */
  232|       |    SecureZeroMemory(p, n);
  233|       |#else
  234|       |    /* if the os doesn't support one of the above, but does support
  235|       |     * memset_explicit, you can add the definition for memset with the
  236|       |     * appropriate define check here */
  237|       |    /* define an explicitly implementated Safe zero if the OS
  238|       |     * doesn't provide one */
  239|       |    if (p != NULL) {
  240|       |        volatile unsigned char *__vl = (unsigned char *)p;
  241|       |        size_t __nl = n;
  242|       |        while (__nl--)
  243|       |            *__vl++ = 0;
  244|       |    }
  245|       |#endif /* no windows SecureZeroMemory */
  246|       |#endif /* no explicit_bzero */
  247|  1.33k|#endif /* no memset_s */
  248|  1.33k|}
PORT_NewArena_Util:
  300|  41.0k|{
  301|  41.0k|    PORTArenaPool *pool;
  302|       |
  303|  41.0k|    if (chunksize > MAX_SIZE) {
  ------------------
  |  |   78|  41.0k|#define MAX_SIZE (PR_UINT32_MAX >> 1)
  |  |  ------------------
  |  |  |  |  302|  41.0k|#define PR_UINT32_MAX PR_UINT32(4294967295)
  |  |  |  |  ------------------
  |  |  |  |  |  |  282|  41.0k|#define PR_UINT32(x) x ## U
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (303:9): [True: 0, False: 41.0k]
  ------------------
  304|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  305|      0|        return NULL;
  306|      0|    }
  307|  41.0k|    pool = PORT_ZNew(PORTArenaPool);
  ------------------
  |  |  148|  41.0k|#define PORT_ZNew(type) (type *)PORT_ZAlloc(sizeof(type))
  |  |  ------------------
  |  |  |  |   72|  41.0k|#define PORT_ZAlloc PORT_ZAlloc_Util
  |  |  ------------------
  ------------------
  308|  41.0k|    if (!pool) {
  ------------------
  |  Branch (308:9): [True: 0, False: 41.0k]
  ------------------
  309|      0|        return NULL;
  310|      0|    }
  311|  41.0k|    pool->magic = ARENAPOOL_MAGIC;
  ------------------
  |  |   51|  41.0k|#define ARENAPOOL_MAGIC 0xB8AC9BDF
  ------------------
  312|  41.0k|    pool->lock = PZ_NewLock(nssILockArena);
  ------------------
  |  |  243|  41.0k|#define PZ_NewLock(t) PR_NewLock()
  ------------------
  313|  41.0k|    if (!pool->lock) {
  ------------------
  |  Branch (313:9): [True: 0, False: 41.0k]
  ------------------
  314|      0|        PORT_Free(pool);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  315|      0|        return NULL;
  316|      0|    }
  317|  41.0k|    PL_InitArenaPool(&pool->arena, "security", chunksize, sizeof(double));
  318|  41.0k|    return (&pool->arena);
  319|  41.0k|}
PORT_InitCheapArena:
  323|  77.1k|{
  324|  77.1k|    pool->magic = CHEAP_ARENAPOOL_MAGIC;
  ------------------
  |  |   53|  77.1k|#define CHEAP_ARENAPOOL_MAGIC 0x3F16BB09
  ------------------
  325|  77.1k|    PL_InitArenaPool(&pool->arena, "security", chunksize, sizeof(double));
  326|  77.1k|}
PORT_ArenaAlloc_Util:
  330|  69.5M|{
  331|  69.5M|    void *p = NULL;
  332|       |
  333|  69.5M|    PORTArenaPool *pool = (PORTArenaPool *)arena;
  334|       |
  335|  69.5M|    if (size <= 0) {
  ------------------
  |  Branch (335:9): [True: 460, False: 69.5M]
  ------------------
  336|    460|        size = 1;
  337|    460|    }
  338|       |
  339|  69.5M|    if (size > MAX_SIZE) {
  ------------------
  |  |   78|  69.5M|#define MAX_SIZE (PR_UINT32_MAX >> 1)
  |  |  ------------------
  |  |  |  |  302|  69.5M|#define PR_UINT32_MAX PR_UINT32(4294967295)
  |  |  |  |  ------------------
  |  |  |  |  |  |  282|  69.5M|#define PR_UINT32(x) x ## U
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (339:9): [True: 0, False: 69.5M]
  ------------------
  340|       |        /* you lose. */
  341|      0|    } else
  342|       |        /* Is it one of ours?  Assume so and check the magic */
  343|  69.5M|        if (ARENAPOOL_MAGIC == pool->magic) {
  ------------------
  |  |   51|  69.5M|#define ARENAPOOL_MAGIC 0xB8AC9BDF
  ------------------
  |  Branch (343:13): [True: 69.4M, False: 24.1k]
  ------------------
  344|  69.4M|            PZ_Lock(pool->lock);
  ------------------
  |  |  245|  69.4M|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  345|  69.4M|#ifdef THREADMARK
  346|       |            /* Most likely one of ours.  Is there a thread id? */
  347|  69.4M|            if (pool->marking_thread &&
  ------------------
  |  Branch (347:17): [True: 50.1M, False: 19.3M]
  ------------------
  348|  69.4M|                pool->marking_thread != PR_GetCurrentThread()) {
  ------------------
  |  Branch (348:17): [True: 0, False: 50.1M]
  ------------------
  349|       |                /* Another thread holds a mark in this arena */
  350|      0|                PZ_Unlock(pool->lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  351|      0|                PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  352|      0|                PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  353|      0|                return NULL;
  354|      0|            } /* tid != null */
  355|  69.4M|#endif        /* THREADMARK */
  356|  69.4M|            PL_ARENA_ALLOCATE(p, arena, size);
  ------------------
  |  |  150|   138M|    PR_BEGIN_MACRO \
  |  |  ------------------
  |  |  |  |  123|  69.4M|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  151|   138M|        PLArena *_a = (pool)->current; \
  |  |  152|   138M|        PRUint32 _nb = PL_ARENA_ALIGN(pool, (PRUint32)nb); \
  |  |  ------------------
  |  |  |  |  146|  69.4M|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  |  |  ------------------
  |  |  153|   138M|        PRUword _p = _a->avail; \
  |  |  154|   138M|        if (_nb < (PRUint32)nb) { \
  |  |  ------------------
  |  |  |  Branch (154:13): [True: 0, False: 69.4M]
  |  |  ------------------
  |  |  155|      0|            _p = 0; \
  |  |  156|  69.4M|        } else if (_nb > (_a->limit - _a->avail)) { \
  |  |  ------------------
  |  |  |  Branch (156:20): [True: 661k, False: 68.8M]
  |  |  ------------------
  |  |  157|   661k|            _p = (PRUword)PL_ArenaAllocate(pool, _nb); \
  |  |  158|  68.8M|        } else { \
  |  |  159|  68.8M|            _a->avail += _nb; \
  |  |  160|  68.8M|        } \
  |  |  161|   138M|        p = (void *)_p; \
  |  |  162|   138M|        if (p) { \
  |  |  ------------------
  |  |  |  Branch (162:13): [True: 69.4M, False: 0]
  |  |  ------------------
  |  |  163|  69.4M|            PL_MAKE_MEM_UNDEFINED(p, (PRUint32)nb); \
  |  |  164|  69.4M|            PL_ArenaCountAllocation(pool, (PRUint32)nb); \
  |  |  165|  69.4M|        } \
  |  |  166|   138M|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|  69.4M|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|  69.4M|            PZ_Unlock(pool->lock);
  ------------------
  |  |  246|  69.4M|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  358|  69.4M|        } else {
  359|  24.1k|            PL_ARENA_ALLOCATE(p, arena, size);
  ------------------
  |  |  150|  24.1k|    PR_BEGIN_MACRO \
  |  |  ------------------
  |  |  |  |  123|  24.1k|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  151|  24.1k|        PLArena *_a = (pool)->current; \
  |  |  152|  24.1k|        PRUint32 _nb = PL_ARENA_ALIGN(pool, (PRUint32)nb); \
  |  |  ------------------
  |  |  |  |  146|  24.1k|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  |  |  ------------------
  |  |  153|  24.1k|        PRUword _p = _a->avail; \
  |  |  154|  24.1k|        if (_nb < (PRUint32)nb) { \
  |  |  ------------------
  |  |  |  Branch (154:13): [True: 0, False: 24.1k]
  |  |  ------------------
  |  |  155|      0|            _p = 0; \
  |  |  156|  24.1k|        } else if (_nb > (_a->limit - _a->avail)) { \
  |  |  ------------------
  |  |  |  Branch (156:20): [True: 9.52k, False: 14.6k]
  |  |  ------------------
  |  |  157|  9.52k|            _p = (PRUword)PL_ArenaAllocate(pool, _nb); \
  |  |  158|  14.6k|        } else { \
  |  |  159|  14.6k|            _a->avail += _nb; \
  |  |  160|  14.6k|        } \
  |  |  161|  24.1k|        p = (void *)_p; \
  |  |  162|  24.1k|        if (p) { \
  |  |  ------------------
  |  |  |  Branch (162:13): [True: 24.1k, False: 0]
  |  |  ------------------
  |  |  163|  24.1k|            PL_MAKE_MEM_UNDEFINED(p, (PRUint32)nb); \
  |  |  164|  24.1k|            PL_ArenaCountAllocation(pool, (PRUint32)nb); \
  |  |  165|  24.1k|        } \
  |  |  166|  24.1k|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|  24.1k|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  360|  24.1k|        }
  361|       |
  362|  69.5M|    if (!p) {
  ------------------
  |  Branch (362:9): [True: 0, False: 69.5M]
  ------------------
  363|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  364|      0|    }
  365|       |
  366|  69.5M|    return (p);
  367|  69.5M|}
PORT_ArenaZAlloc_Util:
  371|   120k|{
  372|   120k|    void *p;
  373|       |
  374|   120k|    if (size <= 0)
  ------------------
  |  Branch (374:9): [True: 25, False: 120k]
  ------------------
  375|     25|        size = 1;
  376|       |
  377|   120k|    p = PORT_ArenaAlloc(arena, size);
  ------------------
  |  |   53|   120k|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  378|       |
  379|   120k|    if (p) {
  ------------------
  |  Branch (379:9): [True: 120k, False: 0]
  ------------------
  380|   120k|        PORT_Memset(p, 0, size);
  ------------------
  |  |  182|   120k|#define PORT_Memset memset
  ------------------
  381|   120k|    }
  382|       |
  383|   120k|    return (p);
  384|   120k|}
PORT_FreeArena_Util:
  401|  41.0k|{
  402|  41.0k|    PORTArenaPool *pool = (PORTArenaPool *)arena;
  403|  41.0k|    PRLock *lock = (PRLock *)0;
  404|  41.0k|    size_t len = sizeof *arena;
  405|       |
  406|  41.0k|    if (!pool)
  ------------------
  |  Branch (406:9): [True: 0, False: 41.0k]
  ------------------
  407|      0|        return;
  408|  41.0k|    if (ARENAPOOL_MAGIC == pool->magic) {
  ------------------
  |  |   51|  41.0k|#define ARENAPOOL_MAGIC 0xB8AC9BDF
  ------------------
  |  Branch (408:9): [True: 41.0k, False: 0]
  ------------------
  409|  41.0k|        len = sizeof *pool;
  410|  41.0k|        lock = pool->lock;
  411|  41.0k|        PZ_Lock(lock);
  ------------------
  |  |  245|  41.0k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  412|  41.0k|    }
  413|  41.0k|    if (zero) {
  ------------------
  |  Branch (413:9): [True: 6.47k, False: 34.5k]
  ------------------
  414|  6.47k|        PL_ClearArenaPool(arena, 0);
  415|  6.47k|    }
  416|  41.0k|    (void)PR_CallOnce(&setupUseFreeListOnce, &SetupUseFreeList);
  417|  41.0k|    if (useFreeList) {
  ------------------
  |  Branch (417:9): [True: 41.0k, False: 0]
  ------------------
  418|  41.0k|        PL_FreeArenaPool(arena);
  419|  41.0k|    } else {
  420|      0|        PL_FinishArenaPool(arena);
  421|      0|    }
  422|  41.0k|    PORT_ZFree(arena, len);
  ------------------
  |  |   75|  41.0k|#define PORT_ZFree PORT_ZFree_Util
  ------------------
  423|  41.0k|    if (lock) {
  ------------------
  |  Branch (423:9): [True: 41.0k, False: 0]
  ------------------
  424|  41.0k|        PZ_Unlock(lock);
  ------------------
  |  |  246|  41.0k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  425|  41.0k|        PZ_DestroyLock(lock);
  ------------------
  |  |  244|  41.0k|#define PZ_DestroyLock(k) PR_DestroyLock((k))
  ------------------
  426|  41.0k|    }
  427|  41.0k|}
PORT_DestroyCheapArena:
  431|  77.1k|{
  432|  77.1k|    (void)PR_CallOnce(&setupUseFreeListOnce, &SetupUseFreeList);
  433|  77.1k|    if (useFreeList) {
  ------------------
  |  Branch (433:9): [True: 77.1k, False: 0]
  ------------------
  434|  77.1k|        PL_FreeArenaPool(&pool->arena);
  435|  77.1k|    } else {
  436|      0|        PL_FinishArenaPool(&pool->arena);
  437|      0|    }
  438|  77.1k|}
PORT_ArenaGrow_Util:
  442|  26.2k|{
  443|  26.2k|    PORTArenaPool *pool = (PORTArenaPool *)arena;
  444|  26.2k|    PORT_Assert(newsize >= oldsize);
  ------------------
  |  |  120|  26.2k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  26.2k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 26.2k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  445|       |
  446|  26.2k|    if (newsize > MAX_SIZE) {
  ------------------
  |  |   78|  26.2k|#define MAX_SIZE (PR_UINT32_MAX >> 1)
  |  |  ------------------
  |  |  |  |  302|  26.2k|#define PR_UINT32_MAX PR_UINT32(4294967295)
  |  |  |  |  ------------------
  |  |  |  |  |  |  282|  26.2k|#define PR_UINT32(x) x ## U
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (446:9): [True: 0, False: 26.2k]
  ------------------
  447|      0|        PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  448|      0|        return NULL;
  449|      0|    }
  450|       |
  451|  26.2k|    if (ARENAPOOL_MAGIC == pool->magic) {
  ------------------
  |  |   51|  26.2k|#define ARENAPOOL_MAGIC 0xB8AC9BDF
  ------------------
  |  Branch (451:9): [True: 26.2k, False: 0]
  ------------------
  452|  26.2k|        PZ_Lock(pool->lock);
  ------------------
  |  |  245|  26.2k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  453|       |        /* Do we do a THREADMARK check here? */
  454|  26.2k|        PL_ARENA_GROW(ptr, arena, oldsize, (newsize - oldsize));
  ------------------
  |  |  169|  26.2k|    PR_BEGIN_MACRO \
  |  |  ------------------
  |  |  |  |  123|  26.2k|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  170|  26.2k|        PLArena *_a = (pool)->current; \
  |  |  171|  26.2k|        PRUint32 _incr = PL_ARENA_ALIGN(pool, (PRUint32)incr); \
  |  |  ------------------
  |  |  |  |  146|  26.2k|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  |  |  ------------------
  |  |  172|  26.2k|        if (_incr < (PRUint32)incr) { \
  |  |  ------------------
  |  |  |  Branch (172:13): [True: 0, False: 26.2k]
  |  |  ------------------
  |  |  173|      0|            p = NULL; \
  |  |  174|  26.2k|        } else if (_a->avail == (PRUword)(p) + PL_ARENA_ALIGN(pool, size) && \
  |  |  ------------------
  |  |  |  |  146|  52.5k|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  |  |  ------------------
  |  |  |  Branch (174:20): [True: 264, False: 26.0k]
  |  |  ------------------
  |  |  175|  26.2k|            _incr <= (_a->limit - _a->avail)) { \
  |  |  ------------------
  |  |  |  Branch (175:13): [True: 264, False: 0]
  |  |  ------------------
  |  |  176|    264|            PL_MAKE_MEM_UNDEFINED((unsigned char *)(p) + size, (PRUint32)incr); \
  |  |  177|    264|            _a->avail += _incr; \
  |  |  178|    264|            PL_ArenaCountInplaceGrowth(pool, size, (PRUint32)incr); \
  |  |  179|  26.0k|        } else { \
  |  |  180|  26.0k|            p = PL_ArenaGrow(pool, p, size, (PRUint32)incr); \
  |  |  181|  26.0k|        } \
  |  |  182|  26.2k|        if (p) {\
  |  |  ------------------
  |  |  |  Branch (182:13): [True: 26.2k, False: 0]
  |  |  ------------------
  |  |  183|  26.2k|            PL_ArenaCountGrowth(pool, size, (PRUint32)incr); \
  |  |  184|  26.2k|        } \
  |  |  185|  26.2k|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|  26.2k|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  455|  26.2k|        PZ_Unlock(pool->lock);
  ------------------
  |  |  246|  26.2k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  456|  26.2k|    } else {
  457|      0|        PL_ARENA_GROW(ptr, arena, oldsize, (newsize - oldsize));
  ------------------
  |  |  169|      0|    PR_BEGIN_MACRO \
  |  |  ------------------
  |  |  |  |  123|      0|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  170|      0|        PLArena *_a = (pool)->current; \
  |  |  171|      0|        PRUint32 _incr = PL_ARENA_ALIGN(pool, (PRUint32)incr); \
  |  |  ------------------
  |  |  |  |  146|      0|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  |  |  ------------------
  |  |  172|      0|        if (_incr < (PRUint32)incr) { \
  |  |  ------------------
  |  |  |  Branch (172:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  173|      0|            p = NULL; \
  |  |  174|      0|        } else if (_a->avail == (PRUword)(p) + PL_ARENA_ALIGN(pool, size) && \
  |  |  ------------------
  |  |  |  |  146|      0|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  |  |  ------------------
  |  |  |  Branch (174:20): [True: 0, False: 0]
  |  |  ------------------
  |  |  175|      0|            _incr <= (_a->limit - _a->avail)) { \
  |  |  ------------------
  |  |  |  Branch (175:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  176|      0|            PL_MAKE_MEM_UNDEFINED((unsigned char *)(p) + size, (PRUint32)incr); \
  |  |  177|      0|            _a->avail += _incr; \
  |  |  178|      0|            PL_ArenaCountInplaceGrowth(pool, size, (PRUint32)incr); \
  |  |  179|      0|        } else { \
  |  |  180|      0|            p = PL_ArenaGrow(pool, p, size, (PRUint32)incr); \
  |  |  181|      0|        } \
  |  |  182|      0|        if (p) {\
  |  |  ------------------
  |  |  |  Branch (182:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  183|      0|            PL_ArenaCountGrowth(pool, size, (PRUint32)incr); \
  |  |  184|      0|        } \
  |  |  185|      0|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|      0|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  458|      0|    }
  459|       |
  460|  26.2k|    return (ptr);
  461|  26.2k|}
PORT_ArenaMark_Util:
  465|   234k|{
  466|   234k|    void *result;
  467|       |
  468|   234k|    PORTArenaPool *pool = (PORTArenaPool *)arena;
  469|   234k|    if (ARENAPOOL_MAGIC == pool->magic) {
  ------------------
  |  |   51|   234k|#define ARENAPOOL_MAGIC 0xB8AC9BDF
  ------------------
  |  Branch (469:9): [True: 229k, False: 5.10k]
  ------------------
  470|   229k|        PZ_Lock(pool->lock);
  ------------------
  |  |  245|   229k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  471|   229k|#ifdef THREADMARK
  472|   229k|        {
  473|   229k|            threadmark_mark *tm, **pw;
  474|   229k|            PRThread *currentThread = PR_GetCurrentThread();
  475|       |
  476|   229k|            if (!pool->marking_thread) {
  ------------------
  |  Branch (476:17): [True: 25.3k, False: 204k]
  ------------------
  477|       |                /* First mark */
  478|  25.3k|                pool->marking_thread = currentThread;
  479|   204k|            } else if (currentThread != pool->marking_thread) {
  ------------------
  |  Branch (479:24): [True: 0, False: 204k]
  ------------------
  480|      0|                PZ_Unlock(pool->lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  481|      0|                PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  482|      0|                PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|      0|                return NULL;
  484|      0|            }
  485|       |
  486|   229k|            result = PL_ARENA_MARK(arena);
  ------------------
  |  |  187|   229k|#define PL_ARENA_MARK(pool) ((void *) (pool)->current->avail)
  ------------------
  487|   229k|            PL_ARENA_ALLOCATE(tm, arena, sizeof(threadmark_mark));
  ------------------
  |  |  150|   229k|    PR_BEGIN_MACRO \
  |  |  ------------------
  |  |  |  |  123|   229k|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  151|   229k|        PLArena *_a = (pool)->current; \
  |  |  152|   229k|        PRUint32 _nb = PL_ARENA_ALIGN(pool, (PRUint32)nb); \
  |  |  ------------------
  |  |  |  |  146|   229k|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  |  |  ------------------
  |  |  153|   229k|        PRUword _p = _a->avail; \
  |  |  154|   229k|        if (_nb < (PRUint32)nb) { \
  |  |  ------------------
  |  |  |  Branch (154:13): [True: 0, False: 229k]
  |  |  ------------------
  |  |  155|      0|            _p = 0; \
  |  |  156|   229k|        } else if (_nb > (_a->limit - _a->avail)) { \
  |  |  ------------------
  |  |  |  Branch (156:20): [True: 3.66k, False: 225k]
  |  |  ------------------
  |  |  157|  3.66k|            _p = (PRUword)PL_ArenaAllocate(pool, _nb); \
  |  |  158|   225k|        } else { \
  |  |  159|   225k|            _a->avail += _nb; \
  |  |  160|   225k|        } \
  |  |  161|   229k|        p = (void *)_p; \
  |  |  162|   229k|        if (p) { \
  |  |  ------------------
  |  |  |  Branch (162:13): [True: 229k, False: 0]
  |  |  ------------------
  |  |  163|   229k|            PL_MAKE_MEM_UNDEFINED(p, (PRUint32)nb); \
  |  |  164|   229k|            PL_ArenaCountAllocation(pool, (PRUint32)nb); \
  |  |  165|   229k|        } \
  |  |  166|   229k|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|   229k|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  488|   229k|            if (!tm) {
  ------------------
  |  Branch (488:17): [True: 0, False: 229k]
  ------------------
  489|      0|                PZ_Unlock(pool->lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  490|      0|                PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  491|      0|                return NULL;
  492|      0|            }
  493|       |
  494|   229k|            tm->mark = result;
  495|   229k|            tm->next = (threadmark_mark *)NULL;
  496|       |
  497|   229k|            pw = &pool->first_mark;
  498|  2.86M|            while (*pw) {
  ------------------
  |  Branch (498:20): [True: 2.63M, False: 229k]
  ------------------
  499|  2.63M|                pw = &(*pw)->next;
  500|  2.63M|            }
  501|       |
  502|   229k|            *pw = tm;
  503|   229k|        }
  504|       |#else  /* THREADMARK */
  505|       |        result = PL_ARENA_MARK(arena);
  506|       |#endif /* THREADMARK */
  507|   229k|        PZ_Unlock(pool->lock);
  ------------------
  |  |  246|   229k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  508|   229k|    } else {
  509|       |        /* a "pure" NSPR arena */
  510|  5.10k|        result = PL_ARENA_MARK(arena);
  ------------------
  |  |  187|  5.10k|#define PL_ARENA_MARK(pool) ((void *) (pool)->current->avail)
  ------------------
  511|  5.10k|    }
  512|   234k|    return result;
  513|   234k|}
PORT_ArenaRelease_Util:
  617|    213|{
  618|    213|    port_ArenaRelease(arena, mark, PR_FALSE);
  ------------------
  |  |  438|    213|#define PR_FALSE 0
  ------------------
  619|    213|}
PORT_ArenaZRelease:
  626|   198k|{
  627|   198k|    port_ArenaRelease(arena, mark, PR_TRUE);
  ------------------
  |  |  437|   198k|#define PR_TRUE 1
  ------------------
  628|   198k|}
PORT_ArenaUnmark_Util:
  632|  28.2k|{
  633|  28.2k|#ifdef THREADMARK
  634|  28.2k|    PORTArenaPool *pool = (PORTArenaPool *)arena;
  635|  28.2k|    if (ARENAPOOL_MAGIC == pool->magic) {
  ------------------
  |  |   51|  28.2k|#define ARENAPOOL_MAGIC 0xB8AC9BDF
  ------------------
  |  Branch (635:9): [True: 23.1k, False: 5.10k]
  ------------------
  636|  23.1k|        threadmark_mark **pw;
  637|       |
  638|  23.1k|        PZ_Lock(pool->lock);
  ------------------
  |  |  245|  23.1k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  639|       |
  640|  23.1k|        if (PR_GetCurrentThread() != pool->marking_thread) {
  ------------------
  |  Branch (640:13): [True: 0, False: 23.1k]
  ------------------
  641|      0|            PZ_Unlock(pool->lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  642|      0|            PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  643|      0|            PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  644|      0|            return /* no error indication available */;
  645|      0|        }
  646|       |
  647|  23.1k|        pw = &pool->first_mark;
  648|  23.2k|        while (((threadmark_mark *)NULL != *pw) && (mark != (*pw)->mark)) {
  ------------------
  |  Branch (648:16): [True: 23.2k, False: 0]
  |  Branch (648:52): [True: 82, False: 23.1k]
  ------------------
  649|     82|            pw = &(*pw)->next;
  650|     82|        }
  651|       |
  652|  23.1k|        if ((threadmark_mark *)NULL == *pw) {
  ------------------
  |  Branch (652:13): [True: 0, False: 23.1k]
  ------------------
  653|       |            /* bad mark */
  654|      0|            PZ_Unlock(pool->lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  655|      0|            PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  656|      0|            PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  657|      0|            return /* no error indication available */;
  658|      0|        }
  659|       |
  660|  23.1k|        *pw = (threadmark_mark *)NULL;
  661|       |
  662|  23.1k|        if (!pool->first_mark) {
  ------------------
  |  Branch (662:13): [True: 23.0k, False: 82]
  ------------------
  663|  23.0k|            pool->marking_thread = (PRThread *)NULL;
  664|  23.0k|        }
  665|       |
  666|  23.1k|        PZ_Unlock(pool->lock);
  ------------------
  |  |  246|  23.1k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  667|  23.1k|    }
  668|  28.2k|#endif /* THREADMARK */
  669|  28.2k|}
PORT_ArenaStrdup_Util:
  673|  11.1k|{
  674|  11.1k|    int len = PORT_Strlen(str) + 1;
  ------------------
  |  |  190|  11.1k|#define PORT_Strlen(s) strlen(s)
  ------------------
  675|  11.1k|    char *newstr;
  676|       |
  677|  11.1k|    newstr = (char *)PORT_ArenaAlloc(arena, len);
  ------------------
  |  |   53|  11.1k|#define PORT_ArenaAlloc PORT_ArenaAlloc_Util
  ------------------
  678|  11.1k|    if (newstr) {
  ------------------
  |  Branch (678:9): [True: 11.1k, False: 0]
  ------------------
  679|  11.1k|        PORT_Memcpy(newstr, str, len);
  ------------------
  |  |  180|  11.1k|#define PORT_Memcpy memcpy
  ------------------
  680|  11.1k|    }
  681|  11.1k|    return newstr;
  682|  11.1k|}
PORT_UCS4_UTF8Conversion:
  717|    157|{
  718|    157|    if (!ucs4Utf8ConvertFunc) {
  ------------------
  |  Branch (718:9): [True: 157, False: 0]
  ------------------
  719|    157|        return sec_port_ucs4_utf8_conversion_function(toUnicode,
  720|    157|                                                      inBuf, inBufLen, outBuf, maxOutBufLen, outBufLen);
  721|    157|    }
  722|       |
  723|      0|    return (*ucs4Utf8ConvertFunc)(toUnicode, inBuf, inBufLen, outBuf,
  724|      0|                                  maxOutBufLen, outBufLen);
  725|    157|}
PORT_UCS2_UTF8Conversion_Util:
  731|    268|{
  732|    268|    if (!ucs2Utf8ConvertFunc) {
  ------------------
  |  Branch (732:9): [True: 268, False: 0]
  ------------------
  733|    268|        return sec_port_ucs2_utf8_conversion_function(toUnicode,
  734|    268|                                                      inBuf, inBufLen, outBuf, maxOutBufLen, outBufLen);
  735|    268|    }
  736|       |
  737|      0|    return (*ucs2Utf8ConvertFunc)(toUnicode, inBuf, inBufLen, outBuf,
  738|      0|                                  maxOutBufLen, outBufLen);
  739|    268|}
PORT_ISO88591_UTF8Conversion:
  745|  2.29k|{
  746|  2.29k|    return sec_port_iso88591_utf8_conversion_function(inBuf, inBufLen,
  747|  2.29k|                                                      outBuf, maxOutBufLen, outBufLen);
  748|  2.29k|}
NSS_GetSystemFIPSEnabled:
  925|      2|{
  926|       |/* if FIPS is disabled in NSS, always return FALSE, even if the environment
  927|       | * variable is set, or the system is in FIPS mode */
  928|       |#ifndef NSS_FIPS_DISABLED
  929|       |    const char *env;
  930|       |
  931|       |    /* The environment variable is active for all platforms */
  932|       |    env = PR_GetEnvSecure("NSS_FIPS");
  933|       |    /* we generally accept y, Y, 1, FIPS, TRUE, and ON as turning on FIPS
  934|       |     * mode. Anything else is considered 'off' */
  935|       |    if (env && (*env == 'y' || *env == '1' || *env == 'Y' ||
  936|       |                (PORT_Strcasecmp(env, "fips") == 0) ||
  937|       |                (PORT_Strcasecmp(env, "true") == 0) ||
  938|       |                (PORT_Strcasecmp(env, "on") == 0))) {
  939|       |        return PR_TRUE;
  940|       |    }
  941|       |
  942|       |/* currently only Linux has a system FIPS indicator. Add others here
  943|       | * as they become available/known */
  944|       |#ifdef LINUX
  945|       |    {
  946|       |        FILE *f;
  947|       |        char d;
  948|       |        size_t size;
  949|       |        f = fopen("/proc/sys/crypto/fips_enabled", "r");
  950|       |        if (!f)
  951|       |            return PR_FALSE;
  952|       |
  953|       |        size = fread(&d, 1, 1, f);
  954|       |        fclose(f);
  955|       |        if (size != 1)
  956|       |            return PR_FALSE;
  957|       |        if (d == '1')
  958|       |            return PR_TRUE;
  959|       |    }
  960|       |#endif /* LINUX */
  961|       |#endif /* NSS_FIPS_DISABLED == 0 */
  962|      2|    return PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  963|      2|}
secport.c:SetupUseFreeList:
  391|      1|{
  392|      1|    useFreeList = (PR_GetEnvSecure("NSS_DISABLE_ARENA_FREE_LIST") == NULL);
  393|      1|    return PR_SUCCESS;
  394|      1|}
secport.c:port_ArenaRelease:
  561|   199k|{
  562|   199k|    PORTArenaPool *pool = (PORTArenaPool *)arena;
  563|   199k|    if (ARENAPOOL_MAGIC == pool->magic) {
  ------------------
  |  |   51|   199k|#define ARENAPOOL_MAGIC 0xB8AC9BDF
  ------------------
  |  Branch (563:9): [True: 199k, False: 0]
  ------------------
  564|   199k|        PZ_Lock(pool->lock);
  ------------------
  |  |  245|   199k|#define PZ_Lock(k) PR_Lock((k))
  ------------------
  565|   199k|#ifdef THREADMARK
  566|   199k|        {
  567|   199k|            threadmark_mark **pw;
  568|       |
  569|   199k|            if (PR_GetCurrentThread() != pool->marking_thread) {
  ------------------
  |  Branch (569:17): [True: 0, False: 199k]
  ------------------
  570|      0|                PZ_Unlock(pool->lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  571|      0|                PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  572|      0|                PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  573|      0|                return /* no error indication available */;
  574|      0|            }
  575|       |
  576|   199k|            pw = &pool->first_mark;
  577|  2.78M|            while (*pw && (mark != (*pw)->mark)) {
  ------------------
  |  Branch (577:20): [True: 2.78M, False: 0]
  |  Branch (577:27): [True: 2.59M, False: 199k]
  ------------------
  578|  2.59M|                pw = &(*pw)->next;
  579|  2.59M|            }
  580|       |
  581|   199k|            if (!*pw) {
  ------------------
  |  Branch (581:17): [True: 0, False: 199k]
  ------------------
  582|       |                /* bad mark */
  583|      0|                PZ_Unlock(pool->lock);
  ------------------
  |  |  246|      0|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  584|      0|                PORT_SetError(SEC_ERROR_NO_MEMORY);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  585|      0|                PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  586|      0|                return /* no error indication available */;
  587|      0|            }
  588|       |
  589|   199k|            *pw = (threadmark_mark *)NULL;
  590|       |
  591|   199k|            if (zero) {
  ------------------
  |  Branch (591:17): [True: 198k, False: 213]
  ------------------
  592|   198k|                port_ArenaZeroAfterMark(arena, mark);
  593|   198k|            }
  594|   199k|            PL_ARENA_RELEASE(arena, mark);
  ------------------
  |  |  210|   199k|    PR_BEGIN_MACRO \
  |  |  ------------------
  |  |  |  |  123|   199k|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  211|   199k|        char *_m = (char *)(mark); \
  |  |  212|   199k|        PLArena *_a = (pool)->current; \
  |  |  213|   199k|        if (PR_UPTRDIFF(_m, _a->base) <= PR_UPTRDIFF(_a->avail, _a->base)) { \
  |  |  ------------------
  |  |  |  |  188|   199k|#define PR_UPTRDIFF(p,q) ((PRUword)(p) - (PRUword)(q))
  |  |  ------------------
  |  |                       if (PR_UPTRDIFF(_m, _a->base) <= PR_UPTRDIFF(_a->avail, _a->base)) { \
  |  |  ------------------
  |  |  |  |  188|   199k|#define PR_UPTRDIFF(p,q) ((PRUword)(p) - (PRUword)(q))
  |  |  ------------------
  |  |  |  Branch (213:13): [True: 159k, False: 39.2k]
  |  |  ------------------
  |  |  214|   159k|            _a->avail = (PRUword)PL_ARENA_ALIGN(pool, _m); \
  |  |  ------------------
  |  |  |  |  146|   159k|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  |  |  ------------------
  |  |  215|   159k|            PL_CLEAR_UNUSED(_a); \
  |  |  ------------------
  |  |  |  |  198|   159k|#define PL_CLEAR_UNUSED(a) PL_CLEAR_UNUSED_PATTERN((a), PL_FREE_PATTERN)
  |  |  |  |  ------------------
  |  |  |  |  |  |  191|   159k|    PR_BEGIN_MACRO \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  123|   159k|#define PR_BEGIN_MACRO  do {
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|   159k|        PR_ASSERT((a)->avail <= (a)->limit); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  208|   159k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (208:6): [True: 159k, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|   159k|        PL_MAKE_MEM_UNDEFINED((void*)(a)->avail, (a)->limit - (a)->avail); \
  |  |  |  |  |  |  194|   159k|        memset((void*)(a)->avail, (pattern), (a)->limit - (a)->avail); \
  |  |  |  |  |  |  195|   159k|    PR_END_MACRO
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|   159k|#define PR_END_MACRO    } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  216|   159k|            PL_MAKE_MEM_NOACCESS((void*)_a->avail, _a->limit - _a->avail); \
  |  |  217|   159k|            PL_ArenaCountRetract(pool, _m); \
  |  |  218|   159k|        } else { \
  |  |  219|  39.2k|            PL_ArenaRelease(pool, _m); \
  |  |  220|  39.2k|        } \
  |  |  221|   199k|        PL_ArenaCountRelease(pool, _m); \
  |  |  222|   199k|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|   199k|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  595|       |
  596|   199k|            if (!pool->first_mark) {
  ------------------
  |  Branch (596:17): [True: 1.09k, False: 198k]
  ------------------
  597|  1.09k|                pool->marking_thread = (PRThread *)NULL;
  598|  1.09k|            }
  599|   199k|        }
  600|       |#else  /* THREADMARK */
  601|       |        if (zero) {
  602|       |            port_ArenaZeroAfterMark(arena, mark);
  603|       |        }
  604|       |        PL_ARENA_RELEASE(arena, mark);
  605|       |#endif /* THREADMARK */
  606|   199k|        PZ_Unlock(pool->lock);
  ------------------
  |  |  246|   199k|#define PZ_Unlock(k) PR_Unlock((k))
  ------------------
  607|   199k|    } else {
  608|      0|        if (zero) {
  ------------------
  |  Branch (608:13): [True: 0, False: 0]
  ------------------
  609|      0|            port_ArenaZeroAfterMark(arena, mark);
  610|      0|        }
  611|      0|        PL_ARENA_RELEASE(arena, mark);
  ------------------
  |  |  210|      0|    PR_BEGIN_MACRO \
  |  |  ------------------
  |  |  |  |  123|      0|#define PR_BEGIN_MACRO  do {
  |  |  ------------------
  |  |  211|      0|        char *_m = (char *)(mark); \
  |  |  212|      0|        PLArena *_a = (pool)->current; \
  |  |  213|      0|        if (PR_UPTRDIFF(_m, _a->base) <= PR_UPTRDIFF(_a->avail, _a->base)) { \
  |  |  ------------------
  |  |  |  |  188|      0|#define PR_UPTRDIFF(p,q) ((PRUword)(p) - (PRUword)(q))
  |  |  ------------------
  |  |                       if (PR_UPTRDIFF(_m, _a->base) <= PR_UPTRDIFF(_a->avail, _a->base)) { \
  |  |  ------------------
  |  |  |  |  188|      0|#define PR_UPTRDIFF(p,q) ((PRUword)(p) - (PRUword)(q))
  |  |  ------------------
  |  |  |  Branch (213:13): [True: 0, False: 0]
  |  |  ------------------
  |  |  214|      0|            _a->avail = (PRUword)PL_ARENA_ALIGN(pool, _m); \
  |  |  ------------------
  |  |  |  |  146|      0|#define PL_ARENA_ALIGN(pool, n) (((PRUword)(n) + (pool)->mask) & ~(pool)->mask)
  |  |  ------------------
  |  |  215|      0|            PL_CLEAR_UNUSED(_a); \
  |  |  ------------------
  |  |  |  |  198|      0|#define PL_CLEAR_UNUSED(a) PL_CLEAR_UNUSED_PATTERN((a), PL_FREE_PATTERN)
  |  |  |  |  ------------------
  |  |  |  |  |  |  191|      0|    PR_BEGIN_MACRO \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  123|      0|#define PR_BEGIN_MACRO  do {
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  192|      0|        PR_ASSERT((a)->avail <= (a)->limit); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (208:6): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  193|      0|        PL_MAKE_MEM_UNDEFINED((void*)(a)->avail, (a)->limit - (a)->avail); \
  |  |  |  |  |  |  194|      0|        memset((void*)(a)->avail, (pattern), (a)->limit - (a)->avail); \
  |  |  |  |  |  |  195|      0|    PR_END_MACRO
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  124|      0|#define PR_END_MACRO    } while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  216|      0|            PL_MAKE_MEM_NOACCESS((void*)_a->avail, _a->limit - _a->avail); \
  |  |  217|      0|            PL_ArenaCountRetract(pool, _m); \
  |  |  218|      0|        } else { \
  |  |  219|      0|            PL_ArenaRelease(pool, _m); \
  |  |  220|      0|        } \
  |  |  221|      0|        PL_ArenaCountRelease(pool, _m); \
  |  |  222|      0|    PR_END_MACRO
  |  |  ------------------
  |  |  |  |  124|      0|#define PR_END_MACRO    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (124:34): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  612|      0|    }
  613|   199k|}
secport.c:port_ArenaZeroAfterMark:
  528|   198k|{
  529|   198k|    PLArena *a = arena->current;
  530|   198k|    if (a->base <= (PRUword)mark && (PRUword)mark <= a->avail) {
  ------------------
  |  Branch (530:9): [True: 160k, False: 38.6k]
  |  Branch (530:37): [True: 159k, False: 593]
  ------------------
  531|       |/* fast path: mark falls in the current arena */
  532|   159k|#ifdef PL_MAKE_MEM_UNDEFINED
  533|   159k|        PL_MAKE_MEM_UNDEFINED(mark, a->avail - (PRUword)mark);
  534|   159k|#endif
  535|   159k|        memset(mark, 0, a->avail - (PRUword)mark);
  536|   159k|    } else {
  537|       |        /* slow path: need to find the arena that mark falls in */
  538|  35.8M|        for (a = arena->first.next; a; a = a->next) {
  ------------------
  |  Branch (538:37): [True: 35.8M, False: 0]
  ------------------
  539|  35.8M|            PR_ASSERT(a->base <= a->avail && a->avail <= a->limit);
  ------------------
  |  |  208|  71.7M|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:7): [True: 35.8M, False: 0]
  |  |  |  Branch (208:7): [True: 35.8M, False: 0]
  |  |  ------------------
  ------------------
  540|  35.8M|            if (a->base <= (PRUword)mark && (PRUword)mark <= a->avail) {
  ------------------
  |  Branch (540:17): [True: 35.8M, False: 944]
  |  Branch (540:45): [True: 39.2k, False: 35.8M]
  ------------------
  541|  39.2k|#ifdef PL_MAKE_MEM_UNDEFINED
  542|  39.2k|                PL_MAKE_MEM_UNDEFINED(mark, a->avail - (PRUword)mark);
  543|  39.2k|#endif
  544|  39.2k|                memset(mark, 0, a->avail - (PRUword)mark);
  545|  39.2k|                a = a->next;
  546|  39.2k|                break;
  547|  39.2k|            }
  548|  35.8M|        }
  549|   169k|        for (; a; a = a->next) {
  ------------------
  |  Branch (549:16): [True: 130k, False: 39.2k]
  ------------------
  550|   130k|            PR_ASSERT(a->base <= a->avail && a->avail <= a->limit);
  ------------------
  |  |  208|   261k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  ------------------
  |  |  |  Branch (208:7): [True: 130k, False: 0]
  |  |  |  Branch (208:7): [True: 130k, False: 0]
  |  |  ------------------
  ------------------
  551|   130k|#ifdef PL_MAKE_MEM_UNDEFINED
  552|   130k|            PL_MAKE_MEM_UNDEFINED((void *)a->base, a->avail - a->base);
  553|   130k|#endif
  554|   130k|            memset((void *)a->base, 0, a->avail - a->base);
  555|   130k|        }
  556|  39.2k|    }
  557|   198k|}

DER_DecodeTimeChoice_Util:
  135|  20.2k|{
  136|  20.2k|    switch (input->type) {
  137|    417|        case siGeneralizedTime:
  ------------------
  |  Branch (137:9): [True: 417, False: 19.8k]
  ------------------
  138|    417|            return DER_GeneralizedTimeToTime(output, input);
  ------------------
  |  |   26|    417|#define DER_GeneralizedTimeToTime DER_GeneralizedTimeToTime_Util
  ------------------
  139|       |
  140|  19.8k|        case siUTCTime:
  ------------------
  |  Branch (140:9): [True: 19.8k, False: 417]
  ------------------
  141|  19.8k|            return DER_UTCTimeToTime(output, input);
  ------------------
  |  |   35|  19.8k|#define DER_UTCTimeToTime DER_UTCTimeToTime_Util
  ------------------
  142|       |
  143|      0|        default:
  ------------------
  |  Branch (143:9): [True: 0, False: 20.2k]
  ------------------
  144|      0|            PORT_SetError(SEC_ERROR_INVALID_ARGS);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  145|      0|            PORT_Assert(0);
  ------------------
  |  |  120|      0|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|      0|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  146|      0|            return SECFailure;
  147|  20.2k|    }
  148|  20.2k|}

sec_port_ucs4_utf8_conversion_function:
  132|    157|{
  133|    157|    PORT_Assert((unsigned int *)NULL != outBufLen);
  ------------------
  |  |  120|    157|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    157|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 157, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  134|       |
  135|    157|    if (toUnicode) {
  ------------------
  |  Branch (135:9): [True: 0, False: 157]
  ------------------
  136|      0|        unsigned int i, len = 0;
  137|       |
  138|      0|        for (i = 0; i < inBufLen;) {
  ------------------
  |  Branch (138:21): [True: 0, False: 0]
  ------------------
  139|      0|            if ((inBuf[i] & 0x80) == 0x00)
  ------------------
  |  Branch (139:17): [True: 0, False: 0]
  ------------------
  140|      0|                i += 1;
  141|      0|            else if ((inBuf[i] & 0xE0) == 0xC0)
  ------------------
  |  Branch (141:22): [True: 0, False: 0]
  ------------------
  142|      0|                i += 2;
  143|      0|            else if ((inBuf[i] & 0xF0) == 0xE0)
  ------------------
  |  Branch (143:22): [True: 0, False: 0]
  ------------------
  144|      0|                i += 3;
  145|      0|            else if ((inBuf[i] & 0xF8) == 0xF0)
  ------------------
  |  Branch (145:22): [True: 0, False: 0]
  ------------------
  146|      0|                i += 4;
  147|      0|            else
  148|      0|                return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  149|       |
  150|      0|            len += 4;
  151|      0|        }
  152|       |
  153|      0|        if (len > maxOutBufLen) {
  ------------------
  |  Branch (153:13): [True: 0, False: 0]
  ------------------
  154|      0|            *outBufLen = len;
  155|      0|            return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  156|      0|        }
  157|       |
  158|      0|        len = 0;
  159|       |
  160|      0|        for (i = 0; i < inBufLen;) {
  ------------------
  |  Branch (160:21): [True: 0, False: 0]
  ------------------
  161|      0|            PRUint32 ucs4 = sec_port_read_utf8(&i, inBuf, inBufLen);
  162|       |
  163|      0|            if (ucs4 == BAD_UTF8)
  ------------------
  |  |   63|      0|#define BAD_UTF8 ((PRUint32)-1)
  ------------------
  |  Branch (163:17): [True: 0, False: 0]
  ------------------
  164|      0|                return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  165|       |
  166|      0|            outBuf[len + L_0] = 0x00;
  ------------------
  |  |   56|      0|#define L_0 0
  ------------------
  167|      0|            outBuf[len + L_1] = (unsigned char)(ucs4 >> 16);
  ------------------
  |  |   57|      0|#define L_1 1
  ------------------
  168|      0|            outBuf[len + L_2] = (unsigned char)(ucs4 >> 8);
  ------------------
  |  |   58|      0|#define L_2 2
  ------------------
  169|      0|            outBuf[len + L_3] = (unsigned char)ucs4;
  ------------------
  |  |   59|      0|#define L_3 3
  ------------------
  170|       |
  171|      0|            len += 4;
  172|      0|        }
  173|       |
  174|      0|        *outBufLen = len;
  175|      0|        return PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  176|    157|    } else {
  177|    157|        unsigned int i, len = 0;
  178|    157|        PORT_Assert((inBufLen % 4) == 0);
  ------------------
  |  |  120|    157|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    157|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 157, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|    157|        if ((inBufLen % 4) != 0) {
  ------------------
  |  Branch (179:13): [True: 0, False: 157]
  ------------------
  180|      0|            *outBufLen = 0;
  181|      0|            return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  182|      0|        }
  183|       |
  184|    376|        for (i = 0; i < inBufLen; i += 4) {
  ------------------
  |  Branch (184:21): [True: 277, False: 99]
  ------------------
  185|    277|            if ((inBuf[i + L_0] > 0x00) || (inBuf[i + L_1] > 0x10)) {
  ------------------
  |  |   56|    277|#define L_0 0
  ------------------
                          if ((inBuf[i + L_0] > 0x00) || (inBuf[i + L_1] > 0x10)) {
  ------------------
  |  |   57|    234|#define L_1 1
  ------------------
  |  Branch (185:17): [True: 43, False: 234]
  |  Branch (185:44): [True: 15, False: 219]
  ------------------
  186|     58|                *outBufLen = 0;
  187|     58|                return PR_FALSE;
  ------------------
  |  |  438|     58|#define PR_FALSE 0
  ------------------
  188|    219|            } else if (inBuf[i + L_1] >= 0x01)
  ------------------
  |  |   57|    219|#define L_1 1
  ------------------
  |  Branch (188:24): [True: 45, False: 174]
  ------------------
  189|     45|                len += 4;
  190|    174|            else if (inBuf[i + L_2] >= 0x08)
  ------------------
  |  |   58|    174|#define L_2 2
  ------------------
  |  Branch (190:22): [True: 78, False: 96]
  ------------------
  191|     78|                len += 3;
  192|     96|            else if ((inBuf[i + L_2] > 0x00) || (inBuf[i + L_3] >= 0x80))
  ------------------
  |  |   58|     96|#define L_2 2
  ------------------
                          else if ((inBuf[i + L_2] > 0x00) || (inBuf[i + L_3] >= 0x80))
  ------------------
  |  |   59|     70|#define L_3 3
  ------------------
  |  Branch (192:22): [True: 26, False: 70]
  |  Branch (192:49): [True: 24, False: 46]
  ------------------
  193|     50|                len += 2;
  194|     46|            else
  195|     46|                len += 1;
  196|    277|        }
  197|       |
  198|     99|        if (len > maxOutBufLen) {
  ------------------
  |  Branch (198:13): [True: 0, False: 99]
  ------------------
  199|      0|            *outBufLen = len;
  200|      0|            return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  201|      0|        }
  202|       |
  203|     99|        len = 0;
  204|       |
  205|    287|        for (i = 0; i < inBufLen; i += 4) {
  ------------------
  |  Branch (205:21): [True: 188, False: 99]
  ------------------
  206|    188|            if (inBuf[i + L_1] >= 0x01) {
  ------------------
  |  |   57|    188|#define L_1 1
  ------------------
  |  Branch (206:17): [True: 36, False: 152]
  ------------------
  207|       |                /* 0001 0000-001F FFFF -> 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
  208|       |                /* 00000000 000abcde fghijklm nopqrstu ->
  209|       |                   11110abc 10defghi 10jklmno 10pqrstu */
  210|       |
  211|     36|                outBuf[len + 0] = 0xF0 | ((inBuf[i + L_1] & 0x1C) >> 2);
  ------------------
  |  |   57|     36|#define L_1 1
  ------------------
  212|     36|                outBuf[len + 1] = 0x80 | ((inBuf[i + L_1] & 0x03) << 4) | ((inBuf[i + L_2] & 0xF0) >> 4);
  ------------------
  |  |   57|     36|#define L_1 1
  ------------------
                              outBuf[len + 1] = 0x80 | ((inBuf[i + L_1] & 0x03) << 4) | ((inBuf[i + L_2] & 0xF0) >> 4);
  ------------------
  |  |   58|     36|#define L_2 2
  ------------------
  213|     36|                outBuf[len + 2] = 0x80 | ((inBuf[i + L_2] & 0x0F) << 2) | ((inBuf[i + L_3] & 0xC0) >> 6);
  ------------------
  |  |   58|     36|#define L_2 2
  ------------------
                              outBuf[len + 2] = 0x80 | ((inBuf[i + L_2] & 0x0F) << 2) | ((inBuf[i + L_3] & 0xC0) >> 6);
  ------------------
  |  |   59|     36|#define L_3 3
  ------------------
  214|     36|                outBuf[len + 3] = 0x80 | ((inBuf[i + L_3] & 0x3F) >> 0);
  ------------------
  |  |   59|     36|#define L_3 3
  ------------------
  215|       |
  216|     36|                len += 4;
  217|    152|            } else if (inBuf[i + L_2] >= 0x08) {
  ------------------
  |  |   58|    152|#define L_2 2
  ------------------
  |  Branch (217:24): [True: 67, False: 85]
  ------------------
  218|       |                /* 0000 0800-0000 FFFF -> 1110xxxx 10xxxxxx 10xxxxxx */
  219|       |                /* 00000000 00000000 abcdefgh ijklmnop ->
  220|       |                   1110abcd 10efghij 10klmnop */
  221|       |
  222|     67|                outBuf[len + 0] = 0xE0 | ((inBuf[i + L_2] & 0xF0) >> 4);
  ------------------
  |  |   58|     67|#define L_2 2
  ------------------
  223|     67|                outBuf[len + 1] = 0x80 | ((inBuf[i + L_2] & 0x0F) << 2) | ((inBuf[i + L_3] & 0xC0) >> 6);
  ------------------
  |  |   58|     67|#define L_2 2
  ------------------
                              outBuf[len + 1] = 0x80 | ((inBuf[i + L_2] & 0x0F) << 2) | ((inBuf[i + L_3] & 0xC0) >> 6);
  ------------------
  |  |   59|     67|#define L_3 3
  ------------------
  224|     67|                outBuf[len + 2] = 0x80 | ((inBuf[i + L_3] & 0x3F) >> 0);
  ------------------
  |  |   59|     67|#define L_3 3
  ------------------
  225|       |
  226|     67|                len += 3;
  227|     85|            } else if ((inBuf[i + L_2] > 0x00) || (inBuf[i + L_3] >= 0x80)) {
  ------------------
  |  |   58|     85|#define L_2 2
  ------------------
                          } else if ((inBuf[i + L_2] > 0x00) || (inBuf[i + L_3] >= 0x80)) {
  ------------------
  |  |   59|     61|#define L_3 3
  ------------------
  |  Branch (227:24): [True: 24, False: 61]
  |  Branch (227:51): [True: 18, False: 43]
  ------------------
  228|       |                /* 0000 0080-0000 07FF -> 110xxxxx 10xxxxxx */
  229|       |                /* 00000000 00000000 00000abc defghijk ->
  230|       |                   110abcde 10fghijk */
  231|       |
  232|     42|                outBuf[len + 0] = 0xC0 | ((inBuf[i + L_2] & 0x07) << 2) | ((inBuf[i + L_3] & 0xC0) >> 6);
  ------------------
  |  |   58|     42|#define L_2 2
  ------------------
                              outBuf[len + 0] = 0xC0 | ((inBuf[i + L_2] & 0x07) << 2) | ((inBuf[i + L_3] & 0xC0) >> 6);
  ------------------
  |  |   59|     42|#define L_3 3
  ------------------
  233|     42|                outBuf[len + 1] = 0x80 | ((inBuf[i + L_3] & 0x3F) >> 0);
  ------------------
  |  |   59|     42|#define L_3 3
  ------------------
  234|       |
  235|     42|                len += 2;
  236|     43|            } else {
  237|       |                /* 0000 0000-0000 007F -> 0xxxxxx */
  238|       |                /* 00000000 00000000 00000000 0abcdefg ->
  239|       |                   0abcdefg */
  240|       |
  241|     43|                outBuf[len + 0] = (inBuf[i + L_3] & 0x7F);
  ------------------
  |  |   59|     43|#define L_3 3
  ------------------
  242|       |
  243|     43|                len += 1;
  244|     43|            }
  245|    188|        }
  246|       |
  247|     99|        *outBufLen = len;
  248|     99|        return PR_TRUE;
  ------------------
  |  |  437|     99|#define PR_TRUE 1
  ------------------
  249|     99|    }
  250|    157|}
sec_port_ucs2_utf8_conversion_function:
  260|    268|{
  261|    268|    PORT_Assert((unsigned int *)NULL != outBufLen);
  ------------------
  |  |  120|    268|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    268|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 268, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  262|       |
  263|    268|    if (toUnicode) {
  ------------------
  |  Branch (263:9): [True: 0, False: 268]
  ------------------
  264|      0|        unsigned int i, len = 0;
  265|       |
  266|      0|        for (i = 0; i < inBufLen;) {
  ------------------
  |  Branch (266:21): [True: 0, False: 0]
  ------------------
  267|      0|            if ((inBuf[i] & 0x80) == 0x00) {
  ------------------
  |  Branch (267:17): [True: 0, False: 0]
  ------------------
  268|      0|                i += 1;
  269|      0|                len += 2;
  270|      0|            } else if ((inBuf[i] & 0xE0) == 0xC0) {
  ------------------
  |  Branch (270:24): [True: 0, False: 0]
  ------------------
  271|      0|                i += 2;
  272|      0|                len += 2;
  273|      0|            } else if ((inBuf[i] & 0xF0) == 0xE0) {
  ------------------
  |  Branch (273:24): [True: 0, False: 0]
  ------------------
  274|      0|                i += 3;
  275|      0|                len += 2;
  276|      0|            } else if ((inBuf[i] & 0xF8) == 0xF0) {
  ------------------
  |  Branch (276:24): [True: 0, False: 0]
  ------------------
  277|      0|                i += 4;
  278|      0|                len += 4;
  279|      0|            } else
  280|      0|                return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  281|      0|        }
  282|       |
  283|      0|        if (len > maxOutBufLen) {
  ------------------
  |  Branch (283:13): [True: 0, False: 0]
  ------------------
  284|      0|            *outBufLen = len;
  285|      0|            return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  286|      0|        }
  287|       |
  288|      0|        len = 0;
  289|       |
  290|      0|        for (i = 0; i < inBufLen;) {
  ------------------
  |  Branch (290:21): [True: 0, False: 0]
  ------------------
  291|      0|            PRUint32 ucs4 = sec_port_read_utf8(&i, inBuf, inBufLen);
  292|       |
  293|      0|            if (ucs4 == BAD_UTF8)
  ------------------
  |  |   63|      0|#define BAD_UTF8 ((PRUint32)-1)
  ------------------
  |  Branch (293:17): [True: 0, False: 0]
  ------------------
  294|      0|                return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  295|       |
  296|      0|            if (ucs4 < 0x10000) {
  ------------------
  |  Branch (296:17): [True: 0, False: 0]
  ------------------
  297|      0|                outBuf[len + H_0] = (unsigned char)(ucs4 >> 8);
  ------------------
  |  |   60|      0|#define H_0 0
  ------------------
  298|      0|                outBuf[len + H_1] = (unsigned char)ucs4;
  ------------------
  |  |   61|      0|#define H_1 1
  ------------------
  299|      0|                len += 2;
  300|      0|            } else {
  301|      0|                ucs4 -= 0x10000;
  302|      0|                outBuf[len + 0 + H_0] = (unsigned char)(0xD8 | ((ucs4 >> 18) & 0x3));
  ------------------
  |  |   60|      0|#define H_0 0
  ------------------
  303|      0|                outBuf[len + 0 + H_1] = (unsigned char)(ucs4 >> 10);
  ------------------
  |  |   61|      0|#define H_1 1
  ------------------
  304|      0|                outBuf[len + 2 + H_0] = (unsigned char)(0xDC | ((ucs4 >> 8) & 0x3));
  ------------------
  |  |   60|      0|#define H_0 0
  ------------------
  305|      0|                outBuf[len + 2 + H_1] = (unsigned char)ucs4;
  ------------------
  |  |   61|      0|#define H_1 1
  ------------------
  306|      0|                len += 4;
  307|      0|            }
  308|      0|        }
  309|       |
  310|      0|        *outBufLen = len;
  311|      0|        return PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  312|    268|    } else {
  313|    268|        unsigned int i, len = 0;
  314|    268|        PORT_Assert((inBufLen % 2) == 0);
  ------------------
  |  |  120|    268|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|    268|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 268, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  315|    268|        if ((inBufLen % 2) != 0) {
  ------------------
  |  Branch (315:13): [True: 0, False: 268]
  ------------------
  316|      0|            *outBufLen = 0;
  317|      0|            return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  318|      0|        }
  319|       |
  320|  2.51k|        for (i = 0; i < inBufLen; i += 2) {
  ------------------
  |  Branch (320:21): [True: 2.32k, False: 192]
  ------------------
  321|  2.32k|            if ((inBuf[i + H_0] == 0x00) && ((inBuf[i + H_1] & 0x80) == 0x00))
  ------------------
  |  |   60|  2.32k|#define H_0 0
  ------------------
                          if ((inBuf[i + H_0] == 0x00) && ((inBuf[i + H_1] & 0x80) == 0x00))
  ------------------
  |  |   61|    614|#define H_1 1
  ------------------
  |  Branch (321:17): [True: 614, False: 1.70k]
  |  Branch (321:45): [True: 494, False: 120]
  ------------------
  322|    494|                len += 1;
  323|  1.82k|            else if (inBuf[i + H_0] < 0x08)
  ------------------
  |  |   60|  1.82k|#define H_0 0
  ------------------
  |  Branch (323:22): [True: 374, False: 1.45k]
  ------------------
  324|    374|                len += 2;
  325|  1.45k|            else if (((inBuf[i + H_0] & 0xFC) == 0xD8)) {
  ------------------
  |  |   60|  1.45k|#define H_0 0
  ------------------
  |  Branch (325:22): [True: 60, False: 1.39k]
  ------------------
  326|     60|                if (((inBufLen - i) > 2) && ((inBuf[i + 2 + H_0] & 0xFC) == 0xDC)) {
  ------------------
  |  |   60|     48|#define H_0 0
  ------------------
  |  Branch (326:21): [True: 48, False: 12]
  |  Branch (326:45): [True: 22, False: 26]
  ------------------
  327|     22|                    i += 2;
  328|     22|                    len += 4;
  329|     38|                } else {
  330|     38|                    return PR_FALSE;
  ------------------
  |  |  438|     38|#define PR_FALSE 0
  ------------------
  331|     38|                }
  332|  1.39k|            } else if ((inBuf[i + H_0] & 0xFC) == 0xDC) {
  ------------------
  |  |   60|  1.39k|#define H_0 0
  ------------------
  |  Branch (332:24): [True: 38, False: 1.35k]
  ------------------
  333|     38|                return PR_FALSE;
  ------------------
  |  |  438|     38|#define PR_FALSE 0
  ------------------
  334|  1.35k|            } else {
  335|  1.35k|                len += 3;
  336|  1.35k|            }
  337|  2.32k|        }
  338|       |
  339|    192|        if (len > maxOutBufLen) {
  ------------------
  |  Branch (339:13): [True: 0, False: 192]
  ------------------
  340|      0|            *outBufLen = len;
  341|      0|            return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  342|      0|        }
  343|       |
  344|    192|        len = 0;
  345|       |
  346|  2.17k|        for (i = 0; i < inBufLen; i += 2) {
  ------------------
  |  Branch (346:21): [True: 1.98k, False: 192]
  ------------------
  347|  1.98k|            if ((inBuf[i + H_0] == 0x00) && ((inBuf[i + H_1] & 0x80) == 0x00)) {
  ------------------
  |  |   60|  1.98k|#define H_0 0
  ------------------
                          if ((inBuf[i + H_0] == 0x00) && ((inBuf[i + H_1] & 0x80) == 0x00)) {
  ------------------
  |  |   61|    541|#define H_1 1
  ------------------
  |  Branch (347:17): [True: 541, False: 1.44k]
  |  Branch (347:45): [True: 435, False: 106]
  ------------------
  348|       |                /* 0000-007F -> 0xxxxxx */
  349|       |                /* 00000000 0abcdefg -> 0abcdefg */
  350|       |
  351|    435|                outBuf[len] = inBuf[i + H_1] & 0x7F;
  ------------------
  |  |   61|    435|#define H_1 1
  ------------------
  352|       |
  353|    435|                len += 1;
  354|  1.55k|            } else if (inBuf[i + H_0] < 0x08) {
  ------------------
  |  |   60|  1.55k|#define H_0 0
  ------------------
  |  Branch (354:24): [True: 335, False: 1.21k]
  ------------------
  355|       |                /* 0080-07FF -> 110xxxxx 10xxxxxx */
  356|       |                /* 00000abc defghijk -> 110abcde 10fghijk */
  357|       |
  358|    335|                outBuf[len + 0] = 0xC0 | ((inBuf[i + H_0] & 0x07) << 2) | ((inBuf[i + H_1] & 0xC0) >> 6);
  ------------------
  |  |   60|    335|#define H_0 0
  ------------------
                              outBuf[len + 0] = 0xC0 | ((inBuf[i + H_0] & 0x07) << 2) | ((inBuf[i + H_1] & 0xC0) >> 6);
  ------------------
  |  |   61|    335|#define H_1 1
  ------------------
  359|    335|                outBuf[len + 1] = 0x80 | ((inBuf[i + H_1] & 0x3F) >> 0);
  ------------------
  |  |   61|    335|#define H_1 1
  ------------------
  360|       |
  361|    335|                len += 2;
  362|  1.21k|            } else if ((inBuf[i + H_0] & 0xFC) == 0xD8) {
  ------------------
  |  |   60|  1.21k|#define H_0 0
  ------------------
  |  Branch (362:24): [True: 22, False: 1.19k]
  ------------------
  363|     22|                int abcde, BCDE;
  364|       |
  365|     22|                PORT_Assert(((inBufLen - i) > 2) && ((inBuf[i + 2 + H_0] & 0xFC) == 0xDC));
  ------------------
  |  |  120|     22|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     44|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:7): [True: 22, False: 0]
  |  |  |  |  |  Branch (208:7): [True: 22, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  366|       |
  367|       |                /* D800-DBFF DC00-DFFF -> 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
  368|       |                /* 110110BC DEfghijk 110111lm nopqrstu ->
  369|       |                   { Let abcde = BCDE + 1 }
  370|       |                   11110abc 10defghi 10jklmno 10pqrstu */
  371|       |
  372|     22|                BCDE = ((inBuf[i + H_0] & 0x03) << 2) | ((inBuf[i + H_1] & 0xC0) >> 6);
  ------------------
  |  |   60|     22|#define H_0 0
  ------------------
                              BCDE = ((inBuf[i + H_0] & 0x03) << 2) | ((inBuf[i + H_1] & 0xC0) >> 6);
  ------------------
  |  |   61|     22|#define H_1 1
  ------------------
  373|     22|                abcde = BCDE + 1;
  374|       |
  375|     22|                outBuf[len + 0] = 0xF0 | ((abcde & 0x1C) >> 2);
  376|     22|                outBuf[len + 1] = 0x80 | ((abcde & 0x03) << 4) | ((inBuf[i + 0 + H_1] & 0x3C) >> 2);
  ------------------
  |  |   61|     22|#define H_1 1
  ------------------
  377|     22|                outBuf[len + 2] = 0x80 | ((inBuf[i + 0 + H_1] & 0x03) << 4) | ((inBuf[i + 2 + H_0] & 0x03) << 2) | ((inBuf[i + 2 + H_1] & 0xC0) >> 6);
  ------------------
  |  |   61|     22|#define H_1 1
  ------------------
                              outBuf[len + 2] = 0x80 | ((inBuf[i + 0 + H_1] & 0x03) << 4) | ((inBuf[i + 2 + H_0] & 0x03) << 2) | ((inBuf[i + 2 + H_1] & 0xC0) >> 6);
  ------------------
  |  |   60|     22|#define H_0 0
  ------------------
                              outBuf[len + 2] = 0x80 | ((inBuf[i + 0 + H_1] & 0x03) << 4) | ((inBuf[i + 2 + H_0] & 0x03) << 2) | ((inBuf[i + 2 + H_1] & 0xC0) >> 6);
  ------------------
  |  |   61|     22|#define H_1 1
  ------------------
  378|     22|                outBuf[len + 3] = 0x80 | ((inBuf[i + 2 + H_1] & 0x3F) >> 0);
  ------------------
  |  |   61|     22|#define H_1 1
  ------------------
  379|       |
  380|     22|                i += 2;
  381|     22|                len += 4;
  382|  1.19k|            } else {
  383|       |                /* 0800-FFFF -> 1110xxxx 10xxxxxx 10xxxxxx */
  384|       |                /* abcdefgh ijklmnop -> 1110abcd 10efghij 10klmnop */
  385|       |
  386|  1.19k|                outBuf[len + 0] = 0xE0 | ((inBuf[i + H_0] & 0xF0) >> 4);
  ------------------
  |  |   60|  1.19k|#define H_0 0
  ------------------
  387|  1.19k|                outBuf[len + 1] = 0x80 | ((inBuf[i + H_0] & 0x0F) << 2) | ((inBuf[i + H_1] & 0xC0) >> 6);
  ------------------
  |  |   60|  1.19k|#define H_0 0
  ------------------
                              outBuf[len + 1] = 0x80 | ((inBuf[i + H_0] & 0x0F) << 2) | ((inBuf[i + H_1] & 0xC0) >> 6);
  ------------------
  |  |   61|  1.19k|#define H_1 1
  ------------------
  388|  1.19k|                outBuf[len + 2] = 0x80 | ((inBuf[i + H_1] & 0x3F) >> 0);
  ------------------
  |  |   61|  1.19k|#define H_1 1
  ------------------
  389|       |
  390|  1.19k|                len += 3;
  391|  1.19k|            }
  392|  1.98k|        }
  393|       |
  394|    192|        *outBufLen = len;
  395|    192|        return PR_TRUE;
  ------------------
  |  |  437|    192|#define PR_TRUE 1
  ------------------
  396|    192|    }
  397|    268|}
sec_port_iso88591_utf8_conversion_function:
  406|  2.29k|{
  407|  2.29k|    unsigned int i, len = 0;
  408|       |
  409|  2.29k|    PORT_Assert((unsigned int *)NULL != outBufLen);
  ------------------
  |  |  120|  2.29k|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|  2.29k|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 2.29k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  410|       |
  411|  56.5k|    for (i = 0; i < inBufLen; i++) {
  ------------------
  |  Branch (411:17): [True: 54.2k, False: 2.29k]
  ------------------
  412|  54.2k|        if ((inBuf[i] & 0x80) == 0x00)
  ------------------
  |  Branch (412:13): [True: 51.4k, False: 2.76k]
  ------------------
  413|  51.4k|            len += 1;
  414|  2.76k|        else
  415|  2.76k|            len += 2;
  416|  54.2k|    }
  417|       |
  418|  2.29k|    if (len > maxOutBufLen) {
  ------------------
  |  Branch (418:9): [True: 0, False: 2.29k]
  ------------------
  419|      0|        *outBufLen = len;
  420|      0|        return PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  421|      0|    }
  422|       |
  423|  2.29k|    len = 0;
  424|       |
  425|  56.5k|    for (i = 0; i < inBufLen; i++) {
  ------------------
  |  Branch (425:17): [True: 54.2k, False: 2.29k]
  ------------------
  426|  54.2k|        if ((inBuf[i] & 0x80) == 0x00) {
  ------------------
  |  Branch (426:13): [True: 51.4k, False: 2.76k]
  ------------------
  427|       |            /* 00-7F -> 0xxxxxxx */
  428|       |            /* 0abcdefg -> 0abcdefg */
  429|       |
  430|  51.4k|            outBuf[len] = inBuf[i];
  431|  51.4k|            len += 1;
  432|  51.4k|        } else {
  433|       |            /* 80-FF <- 110xxxxx 10xxxxxx */
  434|       |            /* 00000000 abcdefgh -> 110000ab 10cdefgh */
  435|       |
  436|  2.76k|            outBuf[len + 0] = 0xC0 | ((inBuf[i] & 0xC0) >> 6);
  437|  2.76k|            outBuf[len + 1] = 0x80 | ((inBuf[i] & 0x3F) >> 0);
  438|       |
  439|  2.76k|            len += 2;
  440|  2.76k|        }
  441|  54.2k|    }
  442|       |
  443|  2.29k|    *outBufLen = len;
  444|  2.29k|    return PR_TRUE;
  ------------------
  |  |  437|  2.29k|#define PR_TRUE 1
  ------------------
  445|  2.29k|}

NSSUTIL_DoModuleDBFunction:
  899|      2|{
  900|      2|    char *secmod = NULL;
  901|      2|    char *appName = NULL;
  902|      2|    char *filename = NULL;
  903|      2|    NSSDBType dbType = NSS_DB_TYPE_NONE;
  904|      2|    PRBool rw;
  905|      2|    static char *success = "Success";
  906|      2|    char **rvstr = NULL;
  907|       |
  908|      2|    secmod = _NSSUTIL_GetSecmodName(parameters, &dbType, &appName,
  909|      2|                                    &filename, &rw);
  910|      2|    if ((dbType == NSS_DB_TYPE_LEGACY) ||
  ------------------
  |  Branch (910:9): [True: 0, False: 2]
  ------------------
  911|      2|        (dbType == NSS_DB_TYPE_MULTIACCESS)) {
  ------------------
  |  Branch (911:9): [True: 0, False: 2]
  ------------------
  912|       |        /* we can't handle the old database, only softoken can */
  913|      0|        PORT_SetError(SEC_ERROR_LEGACY_DATABASE);
  ------------------
  |  |   65|      0|#define PORT_SetError PORT_SetError_Util
  ------------------
  914|      0|        rvstr = NULL;
  915|      0|        goto done;
  916|      0|    }
  917|       |
  918|      2|    switch (function) {
  ------------------
  |  Branch (918:13): [True: 0, False: 2]
  ------------------
  919|      1|        case SECMOD_MODULE_DB_FUNCTION_FIND:
  ------------------
  |  |  557|      1|#define SECMOD_MODULE_DB_FUNCTION_FIND 0
  ------------------
  |  Branch (919:9): [True: 1, False: 1]
  ------------------
  920|      1|            rvstr = nssutil_ReadSecmodDB(appName, filename,
  921|      1|                                         secmod, (char *)parameters, rw);
  922|      1|            break;
  923|      0|        case SECMOD_MODULE_DB_FUNCTION_ADD:
  ------------------
  |  |  558|      0|#define SECMOD_MODULE_DB_FUNCTION_ADD 1
  ------------------
  |  Branch (923:9): [True: 0, False: 2]
  ------------------
  924|      0|            rvstr = (nssutil_AddSecmodDBEntry(appName, filename,
  ------------------
  |  Branch (924:21): [True: 0, False: 0]
  ------------------
  925|      0|                                              secmod, (char *)args, rw) == SECSuccess)
  926|      0|                        ? &success
  927|      0|                        : NULL;
  928|      0|            break;
  929|      0|        case SECMOD_MODULE_DB_FUNCTION_DEL:
  ------------------
  |  |  559|      0|#define SECMOD_MODULE_DB_FUNCTION_DEL 2
  ------------------
  |  Branch (929:9): [True: 0, False: 2]
  ------------------
  930|      0|            rvstr = (nssutil_DeleteSecmodDBEntry(appName, filename,
  ------------------
  |  Branch (930:21): [True: 0, False: 0]
  ------------------
  931|      0|                                                 secmod, (char *)args, rw) == SECSuccess)
  932|      0|                        ? &success
  933|      0|                        : NULL;
  934|      0|            break;
  935|      1|        case SECMOD_MODULE_DB_FUNCTION_RELEASE:
  ------------------
  |  |  560|      1|#define SECMOD_MODULE_DB_FUNCTION_RELEASE 3
  ------------------
  |  Branch (935:9): [True: 1, False: 1]
  ------------------
  936|      1|            rvstr = (nssutil_ReleaseSecmodDBData(appName, filename,
  ------------------
  |  Branch (936:21): [True: 1, False: 0]
  ------------------
  937|      1|                                                 secmod, (char **)args, rw) == SECSuccess)
  938|      1|                        ? &success
  939|      1|                        : NULL;
  940|      1|            break;
  941|      2|    }
  942|      2|done:
  943|      2|    if (secmod)
  ------------------
  |  Branch (943:9): [True: 0, False: 2]
  ------------------
  944|      0|        PR_smprintf_free(secmod);
  945|      2|    if (appName)
  ------------------
  |  Branch (945:9): [True: 0, False: 2]
  ------------------
  946|      0|        PORT_Free(appName);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  947|      2|    if (filename)
  ------------------
  |  Branch (947:9): [True: 0, False: 2]
  ------------------
  948|      0|        PORT_Free(filename);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  949|      2|    return rvstr;
  950|      2|}
utilmod.c:nssutil_ReadSecmodDB:
  375|      1|{
  376|      1|    FILE *fd = NULL;
  377|      1|    char **moduleList = NULL;
  378|      1|    int moduleCount = 1;
  379|      1|    int useCount = SECMOD_STEP;
  ------------------
  |  |  294|      1|#define SECMOD_STEP 10
  ------------------
  380|      1|    char line[MAX_LINE_LENGTH];
  381|      1|    PRBool internal = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  382|      1|    PRBool skipParams = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  383|      1|    char *moduleString = NULL;
  384|      1|    char *paramsValue = NULL;
  385|      1|    PRBool failed = PR_TRUE;
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  386|       |
  387|      1|    moduleList = (char **)PORT_ZAlloc(useCount * sizeof(char *));
  ------------------
  |  |   72|      1|#define PORT_ZAlloc PORT_ZAlloc_Util
  ------------------
  388|      1|    if (moduleList == NULL)
  ------------------
  |  Branch (388:9): [True: 0, False: 1]
  ------------------
  389|      0|        return NULL;
  390|       |
  391|      1|    if (dbname == NULL) {
  ------------------
  |  Branch (391:9): [True: 1, False: 0]
  ------------------
  392|      1|        goto return_default;
  393|      1|    }
  394|       |
  395|       |    /* do we really want to use streams here */
  396|      0|    fd = os_fopen(dbname, "r");
  ------------------
  |  |  215|      0|#define os_fopen fopen
  ------------------
  397|      0|    if (fd == NULL)
  ------------------
  |  Branch (397:9): [True: 0, False: 0]
  ------------------
  398|      0|        goto done;
  399|       |
  400|       |    /*
  401|       |     * the following loop takes line separated config lines and collapses
  402|       |     * the lines to a single string, escaping and quoting as necessary.
  403|       |     */
  404|       |    /* loop state variables */
  405|      0|    moduleString = NULL;   /* current concatenated string */
  406|      0|    internal = PR_FALSE;   /* is this an internal module */
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  407|      0|    skipParams = PR_FALSE; /* did we find an override parameter block*/
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  408|      0|    paramsValue = NULL;    /* the current parameter block value */
  409|      0|    do {
  410|      0|        int len;
  411|       |
  412|      0|        if (fgets(line, sizeof(line), fd) == NULL) {
  ------------------
  |  Branch (412:13): [True: 0, False: 0]
  ------------------
  413|      0|            goto endloop;
  414|      0|        }
  415|       |
  416|       |        /* remove the ending newline */
  417|      0|        len = PORT_Strlen(line);
  ------------------
  |  |  190|      0|#define PORT_Strlen(s) strlen(s)
  ------------------
  418|      0|        if (len >= 2 && line[len - 2] == '\r' && line[len - 1] == '\n') {
  ------------------
  |  Branch (418:13): [True: 0, False: 0]
  |  Branch (418:25): [True: 0, False: 0]
  |  Branch (418:50): [True: 0, False: 0]
  ------------------
  419|      0|            len = len - 2;
  420|      0|            line[len] = 0;
  421|      0|        } else if (len && (line[len - 1] == '\n' || line[len - 1] == '\r')) {
  ------------------
  |  Branch (421:20): [True: 0, False: 0]
  |  Branch (421:28): [True: 0, False: 0]
  |  Branch (421:53): [True: 0, False: 0]
  ------------------
  422|      0|            len--;
  423|      0|            line[len] = 0;
  424|      0|        }
  425|      0|        if (*line == '#') {
  ------------------
  |  Branch (425:13): [True: 0, False: 0]
  ------------------
  426|      0|            continue;
  427|      0|        }
  428|      0|        if (*line != 0) {
  ------------------
  |  Branch (428:13): [True: 0, False: 0]
  ------------------
  429|       |            /*
  430|       |             * The PKCS #11 group standard assumes blocks of strings
  431|       |             * separated by new lines, clumped by new lines. Internally
  432|       |             * we take strings separated by spaces, so we may need to escape
  433|       |             * certain spaces.
  434|       |             */
  435|      0|            char *value = PORT_Strchr(line, '=');
  ------------------
  |  |  186|      0|#define PORT_Strchr strchr
  ------------------
  436|       |
  437|       |            /* there is no value, write out the stanza as is */
  438|      0|            if (value == NULL || value[1] == 0) {
  ------------------
  |  Branch (438:17): [True: 0, False: 0]
  |  Branch (438:34): [True: 0, False: 0]
  ------------------
  439|      0|                if (moduleString) {
  ------------------
  |  Branch (439:21): [True: 0, False: 0]
  ------------------
  440|      0|                    moduleString = nssutil_DupnCat(moduleString, " ", 1);
  441|      0|                    if (moduleString == NULL)
  ------------------
  |  Branch (441:25): [True: 0, False: 0]
  ------------------
  442|      0|                        goto loser;
  443|      0|                }
  444|      0|                moduleString = nssutil_DupCat(moduleString, line);
  445|      0|                if (moduleString == NULL)
  ------------------
  |  Branch (445:21): [True: 0, False: 0]
  ------------------
  446|      0|                    goto loser;
  447|       |                /* value is already quoted, just write it out */
  448|      0|            } else if (value[1] == '"') {
  ------------------
  |  Branch (448:24): [True: 0, False: 0]
  ------------------
  449|      0|                if (moduleString) {
  ------------------
  |  Branch (449:21): [True: 0, False: 0]
  ------------------
  450|      0|                    moduleString = nssutil_DupnCat(moduleString, " ", 1);
  451|      0|                    if (moduleString == NULL)
  ------------------
  |  Branch (451:25): [True: 0, False: 0]
  ------------------
  452|      0|                        goto loser;
  453|      0|                }
  454|      0|                moduleString = nssutil_DupCat(moduleString, line);
  455|      0|                if (moduleString == NULL)
  ------------------
  |  Branch (455:21): [True: 0, False: 0]
  ------------------
  456|      0|                    goto loser;
  457|       |                /* we have an override parameter section, remember that
  458|       |                 * we found this (see following comment about why this
  459|       |                 * is necessary). */
  460|      0|                if (PORT_Strncasecmp(line, "parameters", 10) == 0) {
  ------------------
  |  |  191|      0|#define PORT_Strncasecmp PL_strncasecmp
  ------------------
  |  Branch (460:21): [True: 0, False: 0]
  ------------------
  461|      0|                    skipParams = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  462|      0|                }
  463|       |                /*
  464|       |                 * The internal token always overrides it's parameter block
  465|       |                 * from the passed in parameters, so wait until then end
  466|       |                 * before we include the parameter block in case we need to
  467|       |                 * override it. NOTE: if the parameter block is quoted with ("),
  468|       |                 * this override does not happen. This allows you to override
  469|       |                 * the application's parameter configuration.
  470|       |                 *
  471|       |                 * parameter block state is controlled by the following variables:
  472|       |                 *  skipParams - Bool : set to true of we have an override param
  473|       |                 *    block (all other blocks, either implicit or explicit are
  474|       |                 *    ignored).
  475|       |                 *  paramsValue - char * : pointer to the current param block. In
  476|       |                 *    the absence of overrides, paramsValue is set to the first
  477|       |                 *    parameter block we find. All subsequent blocks are ignored.
  478|       |                 *    When we find an internal token, the application passed
  479|       |                 *    parameters take precident.
  480|       |                 */
  481|      0|            } else if (PORT_Strncasecmp(line, "parameters", 10) == 0) {
  ------------------
  |  |  191|      0|#define PORT_Strncasecmp PL_strncasecmp
  ------------------
  |  Branch (481:24): [True: 0, False: 0]
  ------------------
  482|       |                /* already have parameters */
  483|      0|                if (paramsValue) {
  ------------------
  |  Branch (483:21): [True: 0, False: 0]
  ------------------
  484|      0|                    continue;
  485|      0|                }
  486|      0|                paramsValue = NSSUTIL_Quote(&value[1], '"');
  487|      0|                if (paramsValue == NULL)
  ------------------
  |  Branch (487:21): [True: 0, False: 0]
  ------------------
  488|      0|                    goto loser;
  489|      0|                continue;
  490|      0|            } else {
  491|       |                /* may need to quote */
  492|      0|                char *newLine;
  493|      0|                if (moduleString) {
  ------------------
  |  Branch (493:21): [True: 0, False: 0]
  ------------------
  494|      0|                    moduleString = nssutil_DupnCat(moduleString, " ", 1);
  495|      0|                    if (moduleString == NULL)
  ------------------
  |  Branch (495:25): [True: 0, False: 0]
  ------------------
  496|      0|                        goto loser;
  497|      0|                }
  498|      0|                moduleString = nssutil_DupnCat(moduleString, line, value - line + 1);
  499|      0|                if (moduleString == NULL)
  ------------------
  |  Branch (499:21): [True: 0, False: 0]
  ------------------
  500|      0|                    goto loser;
  501|      0|                newLine = NSSUTIL_Quote(&value[1], '"');
  502|      0|                if (newLine == NULL)
  ------------------
  |  Branch (502:21): [True: 0, False: 0]
  ------------------
  503|      0|                    goto loser;
  504|      0|                moduleString = nssutil_DupCat(moduleString, newLine);
  505|      0|                PORT_Free(newLine);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  506|      0|                if (moduleString == NULL)
  ------------------
  |  Branch (506:21): [True: 0, False: 0]
  ------------------
  507|      0|                    goto loser;
  508|      0|            }
  509|       |
  510|       |            /* check to see if it's internal? */
  511|      0|            if (PORT_Strncasecmp(line, "NSS=", 4) == 0) {
  ------------------
  |  |  191|      0|#define PORT_Strncasecmp PL_strncasecmp
  ------------------
  |  Branch (511:17): [True: 0, False: 0]
  ------------------
  512|       |                /* This should be case insensitive! reviewers make
  513|       |                 * me fix it if it's not */
  514|      0|                if (PORT_Strstr(line, "internal")) {
  ------------------
  |  |  196|      0|#define PORT_Strstr strstr
  ------------------
  |  Branch (514:21): [True: 0, False: 0]
  ------------------
  515|      0|                    internal = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  516|       |                    /* override the parameters */
  517|      0|                    if (paramsValue) {
  ------------------
  |  Branch (517:25): [True: 0, False: 0]
  ------------------
  518|      0|                        PORT_Free(paramsValue);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  519|      0|                    }
  520|      0|                    paramsValue = NSSUTIL_Quote(params, '"');
  521|      0|                }
  522|      0|            }
  523|      0|            continue;
  524|      0|        }
  525|      0|        if ((moduleString == NULL) || (*moduleString == 0)) {
  ------------------
  |  Branch (525:13): [True: 0, False: 0]
  |  Branch (525:39): [True: 0, False: 0]
  ------------------
  526|      0|            continue;
  527|      0|        }
  528|       |
  529|      0|    endloop:
  530|       |        /*
  531|       |         * if we are here, we have found a complete stanza. Now write out
  532|       |         * any param section we may have found.
  533|       |         */
  534|      0|        if (paramsValue) {
  ------------------
  |  Branch (534:13): [True: 0, False: 0]
  ------------------
  535|       |            /* we had an override */
  536|      0|            if (!skipParams) {
  ------------------
  |  Branch (536:17): [True: 0, False: 0]
  ------------------
  537|      0|                moduleString = nssutil_DupnCat(moduleString, " parameters=", 12);
  538|      0|                if (moduleString == NULL)
  ------------------
  |  Branch (538:21): [True: 0, False: 0]
  ------------------
  539|      0|                    goto loser;
  540|      0|                moduleString = nssutil_DupCat(moduleString, paramsValue);
  541|      0|                if (moduleString == NULL)
  ------------------
  |  Branch (541:21): [True: 0, False: 0]
  ------------------
  542|      0|                    goto loser;
  543|      0|            }
  544|      0|            PORT_Free(paramsValue);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  545|      0|            paramsValue = NULL;
  546|      0|        }
  547|       |
  548|      0|        if ((moduleCount + 1) >= useCount) {
  ------------------
  |  Branch (548:13): [True: 0, False: 0]
  ------------------
  549|      0|            SECStatus rv;
  550|      0|            rv = nssutil_growList(&moduleList, &useCount, moduleCount + 1);
  551|      0|            if (rv != SECSuccess) {
  ------------------
  |  Branch (551:17): [True: 0, False: 0]
  ------------------
  552|      0|                goto loser;
  553|      0|            }
  554|      0|        }
  555|       |
  556|      0|        if (internal) {
  ------------------
  |  Branch (556:13): [True: 0, False: 0]
  ------------------
  557|      0|            moduleList[0] = moduleString;
  558|      0|        } else {
  559|      0|            moduleList[moduleCount] = moduleString;
  560|      0|            moduleCount++;
  561|      0|        }
  562|      0|        moduleString = NULL;
  563|      0|        internal = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  564|      0|        skipParams = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  565|      0|    } while (!feof(fd));
  ------------------
  |  Branch (565:14): [True: 0, False: 0]
  ------------------
  566|       |
  567|      0|    if (moduleString) {
  ------------------
  |  Branch (567:9): [True: 0, False: 0]
  ------------------
  568|      0|        PORT_Free(moduleString);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  569|      0|        moduleString = NULL;
  570|      0|    }
  571|      0|done:
  572|       |#ifndef NSS_DISABLE_DBM
  573|       |    /* if we couldn't open a pkcs11 database, look for the old one */
  574|       |    if (fd == NULL) {
  575|       |        char *olddbname = _NSSUTIL_GetOldSecmodName(dbname, filename);
  576|       |        PRStatus status;
  577|       |
  578|       |        /* couldn't get the old name */
  579|       |        if (!olddbname) {
  580|       |            goto bail;
  581|       |        }
  582|       |
  583|       |        /* old one exists */
  584|       |        status = _NSSUTIL_Access(olddbname, PR_ACCESS_EXISTS);
  585|       |        if (status == PR_SUCCESS) {
  586|       |            PR_smprintf_free(olddbname);
  587|       |            PORT_ZFree(moduleList, useCount * sizeof(char *));
  588|       |            PORT_SetError(SEC_ERROR_LEGACY_DATABASE);
  589|       |            return NULL;
  590|       |        }
  591|       |
  592|       |    bail:
  593|       |        if (olddbname) {
  594|       |            PR_smprintf_free(olddbname);
  595|       |        }
  596|       |    }
  597|       |#endif // NSS_DISABLE_DBM
  598|       |
  599|      1|return_default:
  600|       |
  601|      1|    if (!moduleList[0]) {
  ------------------
  |  Branch (601:9): [True: 1, False: 0]
  ------------------
  602|      1|        char *newParams;
  603|      1|        moduleString = PORT_Strdup(NSSUTIL_DEFAULT_INTERNAL_INIT1);
  ------------------
  |  |   69|      1|#define PORT_Strdup PORT_Strdup_Util
  ------------------
                      moduleString = PORT_Strdup(NSSUTIL_DEFAULT_INTERNAL_INIT1);
  ------------------
  |  |   40|      1|    "library= name=\"NSS Internal PKCS #11 Module\" parameters="
  ------------------
  604|      1|        newParams = NSSUTIL_Quote(params, '"');
  605|      1|        if (newParams == NULL)
  ------------------
  |  Branch (605:13): [True: 0, False: 1]
  ------------------
  606|      0|            goto loser;
  607|      1|        moduleString = nssutil_DupCat(moduleString, newParams);
  608|      1|        PORT_Free(newParams);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  609|      1|        if (moduleString == NULL)
  ------------------
  |  Branch (609:13): [True: 0, False: 1]
  ------------------
  610|      0|            goto loser;
  611|      1|        moduleString = nssutil_DupCat(moduleString,
  612|      1|                                      NSSUTIL_DEFAULT_INTERNAL_INIT2);
  ------------------
  |  |   42|      1|    " NSS=\"Flags=internal,critical trustOrder=75 cipherOrder=100 slotParams=(1={"
  ------------------
  613|      1|        if (moduleString == NULL)
  ------------------
  |  Branch (613:13): [True: 0, False: 1]
  ------------------
  614|      0|            goto loser;
  615|      1|        moduleString = nssutil_DupCat(moduleString,
  616|      1|                                      NSSUTIL_DEFAULT_SFTKN_FLAGS);
  ------------------
  |  |   46|      1|    "slotFlags=[ECC,RSA,DSA,DH,RC2,RC4,DES,RANDOM,SHA1,MD5,MD2,SSL,TLS,AES,Camellia,SEED,SHA256,SHA512]"
  ------------------
  617|      1|        if (moduleString == NULL)
  ------------------
  |  Branch (617:13): [True: 0, False: 1]
  ------------------
  618|      0|            goto loser;
  619|      1|        moduleString = nssutil_DupCat(moduleString,
  620|      1|                                      NSSUTIL_DEFAULT_INTERNAL_INIT3);
  ------------------
  |  |   44|      1|    " askpw=any timeout=30})\""
  ------------------
  621|      1|        if (moduleString == NULL)
  ------------------
  |  Branch (621:13): [True: 0, False: 1]
  ------------------
  622|      0|            goto loser;
  623|      1|        moduleList[0] = moduleString;
  624|      1|        moduleString = NULL;
  625|      1|    }
  626|      1|    failed = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  627|       |
  628|      1|loser:
  629|       |    /*
  630|       |     * cleanup
  631|       |     */
  632|       |    /* deal with trust cert db here */
  633|      1|    if (moduleString) {
  ------------------
  |  Branch (633:9): [True: 0, False: 1]
  ------------------
  634|      0|        PORT_Free(moduleString);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  635|      0|        moduleString = NULL;
  636|      0|    }
  637|      1|    if (paramsValue) {
  ------------------
  |  Branch (637:9): [True: 0, False: 1]
  ------------------
  638|      0|        PORT_Free(paramsValue);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  639|      0|        paramsValue = NULL;
  640|      0|    }
  641|      1|    if (failed || (moduleList[0] == NULL)) {
  ------------------
  |  Branch (641:9): [True: 0, False: 1]
  |  Branch (641:19): [True: 0, False: 1]
  ------------------
  642|       |        /* This is wrong! FIXME */
  643|      0|        nssutil_releaseSpecList(moduleList);
  644|      0|        moduleList = NULL;
  645|      0|        failed = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  646|      0|    }
  647|      1|    if (fd != NULL) {
  ------------------
  |  Branch (647:9): [True: 0, False: 1]
  ------------------
  648|      0|        fclose(fd);
  649|      1|    } else if (!failed && rw) {
  ------------------
  |  Branch (649:16): [True: 1, False: 0]
  |  Branch (649:27): [True: 0, False: 1]
  ------------------
  650|       |        /* update our internal module */
  651|      0|        nssutil_AddSecmodDBEntry(appName, filename, dbname, moduleList[0], rw);
  652|      0|    }
  653|      1|    return moduleList;
  654|      1|}
utilmod.c:nssutil_DupnCat:
  255|      4|{
  256|      4|    int baseStringLen = baseString ? PORT_Strlen(baseString) : 0;
  ------------------
  |  |  190|      4|#define PORT_Strlen(s) strlen(s)
  ------------------
  |  Branch (256:25): [True: 4, False: 0]
  ------------------
  257|      4|    int len = baseStringLen + 1;
  258|      4|    char *newString;
  259|       |
  260|      4|    len += str_len;
  261|      4|    newString = (char *)PORT_Realloc(baseString, len);
  ------------------
  |  |   64|      4|#define PORT_Realloc PORT_Realloc_Util
  ------------------
  262|      4|    if (newString == NULL) {
  ------------------
  |  Branch (262:9): [True: 0, False: 4]
  ------------------
  263|      0|        PORT_Free(baseString);
  ------------------
  |  |   60|      0|#define PORT_Free PORT_Free_Util
  ------------------
  264|      0|        return NULL;
  265|      0|    }
  266|      4|    PORT_Memcpy(&newString[baseStringLen], str, str_len);
  ------------------
  |  |  180|      4|#define PORT_Memcpy memcpy
  ------------------
  267|      4|    newString[len - 1] = 0;
  268|      4|    return newString;
  269|      4|}
utilmod.c:nssutil_DupCat:
  275|      4|{
  276|      4|    return nssutil_DupnCat(baseString, str, PORT_Strlen(str));
  ------------------
  |  |  190|      4|#define PORT_Strlen(s) strlen(s)
  ------------------
  277|      4|}
utilmod.c:nssutil_releaseSpecList:
  283|      1|{
  284|      1|    if (moduleSpecList) {
  ------------------
  |  Branch (284:9): [True: 1, False: 0]
  ------------------
  285|      1|        char **index;
  286|      2|        for (index = moduleSpecList; *index; index++) {
  ------------------
  |  Branch (286:38): [True: 1, False: 1]
  ------------------
  287|      1|            PORT_Free(*index);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  288|      1|        }
  289|      1|        PORT_Free(moduleSpecList);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  290|      1|    }
  291|      1|    return SECSuccess;
  292|      1|}
utilmod.c:nssutil_ReleaseSecmodDBData:
  660|      1|{
  661|      1|    if (moduleSpecList) {
  ------------------
  |  Branch (661:9): [True: 1, False: 0]
  ------------------
  662|      1|        nssutil_releaseSpecList(moduleSpecList);
  663|      1|    }
  664|      1|    return SECSuccess;
  665|      1|}

NSSUTIL_ArgGetPair:
   20|     90|{
   21|     90|    switch (c) {
   22|     75|        case '\'':
  ------------------
  |  Branch (22:9): [True: 75, False: 15]
  ------------------
   23|     75|            return c;
   24|      6|        case '\"':
  ------------------
  |  Branch (24:9): [True: 6, False: 84]
  ------------------
   25|      6|            return c;
   26|      0|        case '<':
  ------------------
  |  Branch (26:9): [True: 0, False: 90]
  ------------------
   27|      0|            return '>';
   28|      2|        case '{':
  ------------------
  |  Branch (28:9): [True: 2, False: 88]
  ------------------
   29|      2|            return '}';
   30|      5|        case '[':
  ------------------
  |  Branch (30:9): [True: 5, False: 85]
  ------------------
   31|      5|            return ']';
   32|      2|        case '(':
  ------------------
  |  Branch (32:9): [True: 2, False: 88]
  ------------------
   33|      2|            return ')';
   34|      0|        default:
  ------------------
  |  Branch (34:9): [True: 0, False: 90]
  ------------------
   35|      0|            break;
   36|     90|    }
   37|      0|    return ' ';
   38|     90|}
NSSUTIL_ArgIsBlank:
   42|  3.36k|{
   43|  3.36k|    return isspace((unsigned char)c);
   44|  3.36k|}
NSSUTIL_ArgIsEscape:
   48|  6.98k|{
   49|  6.98k|    return c == '\\';
   50|  6.98k|}
NSSUTIL_ArgIsQuote:
   54|    219|{
   55|    219|    switch (c) {
   56|     86|        case '\'':
  ------------------
  |  Branch (56:9): [True: 86, False: 133]
  ------------------
   57|     98|        case '\"':
  ------------------
  |  Branch (57:9): [True: 12, False: 207]
  ------------------
   58|     98|        case '<':
  ------------------
  |  Branch (58:9): [True: 0, False: 219]
  ------------------
   59|    101|        case '{': /* } end curly to keep vi bracket matching working */
  ------------------
  |  Branch (59:9): [True: 3, False: 216]
  ------------------
   60|    104|        case '(': /* ) */
  ------------------
  |  Branch (60:9): [True: 3, False: 216]
  ------------------
   61|    110|        case '[': /* ] */
  ------------------
  |  Branch (61:9): [True: 6, False: 213]
  ------------------
   62|    110|            return PR_TRUE;
  ------------------
  |  |  437|    110|#define PR_TRUE 1
  ------------------
   63|    109|        default:
  ------------------
  |  Branch (63:9): [True: 109, False: 110]
  ------------------
   64|    109|            break;
   65|    219|    }
   66|    109|    return PR_FALSE;
  ------------------
  |  |  438|    109|#define PR_FALSE 0
  ------------------
   67|    219|}
NSSUTIL_ArgStrip:
   71|    121|{
   72|    205|    while (*c && NSSUTIL_ArgIsBlank(*c))
  ------------------
  |  Branch (72:12): [True: 191, False: 14]
  |  Branch (72:18): [True: 84, False: 107]
  ------------------
   73|     84|        c++;
   74|    121|    return c;
   75|    121|}
NSSUTIL_ArgFindEnd:
   83|    155|{
   84|    155|    char endChar = ' ';
   85|    155|    PRBool lastEscape = PR_FALSE;
  ------------------
  |  |  438|    155|#define PR_FALSE 0
  ------------------
   86|       |
   87|    155|    if (NSSUTIL_ArgIsQuote(*string)) {
  ------------------
  |  Branch (87:9): [True: 90, False: 65]
  ------------------
   88|     90|        endChar = NSSUTIL_ArgGetPair(*string);
   89|     90|        string++;
   90|     90|    }
   91|       |
   92|  4.10k|    for (; *string; string++) {
  ------------------
  |  Branch (92:12): [True: 4.08k, False: 22]
  ------------------
   93|  4.08k|        if (lastEscape) {
  ------------------
  |  Branch (93:13): [True: 0, False: 4.08k]
  ------------------
   94|      0|            lastEscape = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
   95|      0|            continue;
   96|      0|        }
   97|  4.08k|        if (NSSUTIL_ArgIsEscape(*string) && !lastEscape) {
  ------------------
  |  Branch (97:13): [True: 0, False: 4.08k]
  |  Branch (97:45): [True: 0, False: 0]
  ------------------
   98|      0|            lastEscape = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
   99|      0|            continue;
  100|      0|        }
  101|  4.08k|        if ((endChar == ' ') && NSSUTIL_ArgIsBlank(*string))
  ------------------
  |  Branch (101:13): [True: 2.37k, False: 1.70k]
  |  Branch (101:33): [True: 43, False: 2.33k]
  ------------------
  102|     43|            break;
  103|  4.04k|        if (*string == endChar) {
  ------------------
  |  Branch (103:13): [True: 90, False: 3.95k]
  ------------------
  104|     90|            break;
  105|     90|        }
  106|  4.04k|    }
  107|       |
  108|    155|    return string;
  109|    155|}
NSSUTIL_ArgFetchValue:
  117|     65|{
  118|     65|    const char *end = NSSUTIL_ArgFindEnd(string);
  119|     65|    char *retString, *copyString;
  120|     65|    PRBool lastEscape = PR_FALSE;
  ------------------
  |  |  438|     65|#define PR_FALSE 0
  ------------------
  121|     65|    int len;
  122|       |
  123|     65|    len = end - string;
  124|     65|    if (len == 0) {
  ------------------
  |  Branch (124:9): [True: 1, False: 64]
  ------------------
  125|      1|        *pcount = 0;
  126|      1|        return NULL;
  127|      1|    }
  128|       |
  129|     64|    copyString = retString = (char *)PORT_Alloc(len + 1);
  ------------------
  |  |   52|     64|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  130|       |
  131|     64|    if (*end)
  ------------------
  |  Branch (131:9): [True: 48, False: 16]
  ------------------
  132|     48|        len++;
  133|     64|    *pcount = len;
  134|     64|    if (retString == NULL)
  ------------------
  |  Branch (134:9): [True: 0, False: 64]
  ------------------
  135|      0|        return NULL;
  136|       |
  137|     64|    if (NSSUTIL_ArgIsQuote(*string))
  ------------------
  |  Branch (137:9): [True: 20, False: 44]
  ------------------
  138|     20|        string++;
  139|  2.96k|    for (; string < end; string++) {
  ------------------
  |  Branch (139:12): [True: 2.90k, False: 64]
  ------------------
  140|  2.90k|        if (NSSUTIL_ArgIsEscape(*string) && !lastEscape) {
  ------------------
  |  Branch (140:13): [True: 0, False: 2.90k]
  |  Branch (140:45): [True: 0, False: 0]
  ------------------
  141|      0|            lastEscape = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  142|      0|            continue;
  143|      0|        }
  144|  2.90k|        lastEscape = PR_FALSE;
  ------------------
  |  |  438|  2.90k|#define PR_FALSE 0
  ------------------
  145|  2.90k|        *copyString++ = *string;
  146|  2.90k|    }
  147|     64|    *copyString = 0;
  148|     64|    return retString;
  149|     64|}
NSSUTIL_ArgSkipParameter:
  156|     90|{
  157|     90|    const char *end;
  158|       |    /* look for the end of the <name>= */
  159|    885|    for (; *string; string++) {
  ------------------
  |  Branch (159:12): [True: 885, False: 0]
  ------------------
  160|    885|        if (*string == '=') {
  ------------------
  |  Branch (160:13): [True: 90, False: 795]
  ------------------
  161|     90|            string++;
  162|     90|            break;
  163|     90|        }
  164|    795|        if (NSSUTIL_ArgIsBlank(*string))
  ------------------
  |  Branch (164:13): [True: 0, False: 795]
  ------------------
  165|      0|            return (string);
  166|    795|    }
  167|       |
  168|     90|    end = NSSUTIL_ArgFindEnd(string);
  169|     90|    if (*end)
  ------------------
  |  Branch (169:9): [True: 84, False: 6]
  ------------------
  170|     84|        end++;
  171|     90|    return end;
  172|     90|}
NSSUTIL_ArgGetParamValue:
  179|     52|{
  180|     52|    char searchValue[256];
  181|     52|    size_t paramLen = strlen(paramName);
  182|     52|    char *returnValue = NULL;
  183|     52|    int next;
  184|       |
  185|     52|    if ((parameters == NULL) || (*parameters == 0))
  ------------------
  |  Branch (185:9): [True: 0, False: 52]
  |  Branch (185:33): [True: 0, False: 52]
  ------------------
  186|      0|        return NULL;
  187|       |
  188|     52|    PORT_Assert(paramLen + 2 < sizeof(searchValue));
  ------------------
  |  |  120|     52|#define PORT_Assert PR_ASSERT
  |  |  ------------------
  |  |  |  |  208|     52|    ((_expr)?((void)0):PR_Assert(# _expr,__FILE__,__LINE__))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:6): [True: 52, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|       |
  190|     52|    PORT_Strcpy(searchValue, paramName);
  ------------------
  |  |  189|     52|#define PORT_Strcpy strcpy
  ------------------
  191|     52|    PORT_Strcat(searchValue, "=");
  ------------------
  |  |  185|     52|#define PORT_Strcat strcat
  ------------------
  192|    123|    while (*parameters) {
  ------------------
  |  Branch (192:12): [True: 116, False: 7]
  ------------------
  193|    116|        if (PORT_Strncasecmp(parameters, searchValue, paramLen + 1) == 0) {
  ------------------
  |  |  191|    116|#define PORT_Strncasecmp PL_strncasecmp
  ------------------
  |  Branch (193:13): [True: 45, False: 71]
  ------------------
  194|     45|            parameters += paramLen + 1;
  195|     45|            returnValue = NSSUTIL_ArgFetchValue(parameters, &next);
  196|     45|            break;
  197|     71|        } else {
  198|     71|            parameters = NSSUTIL_ArgSkipParameter(parameters);
  199|     71|        }
  200|     71|        parameters = NSSUTIL_ArgStrip(parameters);
  201|     71|    }
  202|     52|    return returnValue;
  203|     52|}
NSSUTIL_ArgNextFlag:
  210|    137|{
  211|  1.32k|    for (; *flags; flags++) {
  ------------------
  |  Branch (211:12): [True: 1.30k, False: 23]
  ------------------
  212|  1.30k|        if (*flags == ',') {
  ------------------
  |  Branch (212:13): [True: 114, False: 1.18k]
  ------------------
  213|    114|            flags++;
  214|    114|            break;
  215|    114|        }
  216|  1.30k|    }
  217|    137|    return flags;
  218|    137|}
NSSUTIL_ArgHasFlag:
  225|     41|{
  226|     41|    char *flags;
  227|     41|    const char *index;
  228|     41|    int len = strlen(flag);
  229|     41|    PRBool found = PR_FALSE;
  ------------------
  |  |  438|     41|#define PR_FALSE 0
  ------------------
  230|       |
  231|     41|    flags = NSSUTIL_ArgGetParamValue(label, parameters);
  232|     41|    if (flags == NULL)
  ------------------
  |  Branch (232:9): [True: 2, False: 39]
  ------------------
  233|      2|        return PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
  234|       |
  235|    158|    for (index = flags; *index; index = NSSUTIL_ArgNextFlag(index)) {
  ------------------
  |  Branch (235:25): [True: 136, False: 22]
  ------------------
  236|    136|        if (PORT_Strncasecmp(index, flag, len) == 0) {
  ------------------
  |  |  191|    136|#define PORT_Strncasecmp PL_strncasecmp
  ------------------
  |  Branch (236:13): [True: 17, False: 119]
  ------------------
  237|     17|            found = PR_TRUE;
  ------------------
  |  |  437|     17|#define PR_TRUE 1
  ------------------
  238|     17|            break;
  239|     17|        }
  240|    136|    }
  241|     39|    PORT_Free(flags);
  ------------------
  |  |   60|     39|#define PORT_Free PORT_Free_Util
  ------------------
  242|     39|    return found;
  243|     41|}
NSSUTIL_ArgDecodeNumber:
  250|      4|{
  251|      4|    int radix = 10;
  252|      4|    unsigned long value = 0;
  253|      4|    long retValue = 0;
  254|      4|    int sign = 1;
  255|      4|    int digit;
  256|       |
  257|      4|    if (num == NULL)
  ------------------
  |  Branch (257:9): [True: 0, False: 4]
  ------------------
  258|      0|        return retValue;
  259|       |
  260|      4|    num = NSSUTIL_ArgStrip(num);
  261|       |
  262|      4|    if (*num == '-') {
  ------------------
  |  Branch (262:9): [True: 0, False: 4]
  ------------------
  263|      0|        sign = -1;
  264|      0|        num++;
  265|      0|    }
  266|       |
  267|      4|    if (*num == '0') {
  ------------------
  |  Branch (267:9): [True: 0, False: 4]
  ------------------
  268|      0|        radix = 8;
  269|      0|        num++;
  270|      0|        if ((*num == 'x') || (*num == 'X')) {
  ------------------
  |  Branch (270:13): [True: 0, False: 0]
  |  Branch (270:30): [True: 0, False: 0]
  ------------------
  271|      0|            radix = 16;
  272|      0|            num++;
  273|      0|        }
  274|      0|    }
  275|       |
  276|     12|    for (; *num; num++) {
  ------------------
  |  Branch (276:12): [True: 8, False: 4]
  ------------------
  277|      8|        if (isdigit((unsigned char)*num)) {
  278|      8|            digit = *num - '0';
  279|      8|        } else if ((*num >= 'a') && (*num <= 'f')) {
  ------------------
  |  Branch (279:20): [True: 0, False: 0]
  |  Branch (279:37): [True: 0, False: 0]
  ------------------
  280|      0|            digit = *num - 'a' + 10;
  281|      0|        } else if ((*num >= 'A') && (*num <= 'F')) {
  ------------------
  |  Branch (281:20): [True: 0, False: 0]
  |  Branch (281:37): [True: 0, False: 0]
  ------------------
  282|      0|            digit = *num - 'A' + 10;
  283|      0|        } else {
  284|      0|            break;
  285|      0|        }
  286|      8|        if (digit >= radix)
  ------------------
  |  Branch (286:13): [True: 0, False: 8]
  ------------------
  287|      0|            break;
  288|      8|        value = value * radix + digit;
  289|      8|    }
  290|       |
  291|      4|    retValue = ((int)value) * sign;
  292|      4|    return retValue;
  293|      4|}
NSSUTIL_ArgGetLabel:
  301|      1|{
  302|      1|    char *name = NULL;
  303|      1|    const char *string;
  304|      1|    int len;
  305|       |
  306|       |    /* look for the end of the <label>= */
  307|      2|    for (string = inString; *string; string++) {
  ------------------
  |  Branch (307:29): [True: 2, False: 0]
  ------------------
  308|      2|        if (*string == '=') {
  ------------------
  |  Branch (308:13): [True: 1, False: 1]
  ------------------
  309|      1|            break;
  310|      1|        }
  311|      1|        if (NSSUTIL_ArgIsBlank(*string))
  ------------------
  |  Branch (311:13): [True: 0, False: 1]
  ------------------
  312|      0|            break;
  313|      1|    }
  314|       |
  315|      1|    len = string - inString;
  316|       |
  317|      1|    *next = len;
  318|      1|    if (*string == '=')
  ------------------
  |  Branch (318:9): [True: 1, False: 0]
  ------------------
  319|      1|        (*next) += 1;
  320|      1|    if (len > 0) {
  ------------------
  |  Branch (320:9): [True: 1, False: 0]
  ------------------
  321|      1|        name = PORT_Alloc(len + 1);
  ------------------
  |  |   52|      1|#define PORT_Alloc PORT_Alloc_Util
  ------------------
  322|      1|        PORT_Strncpy(name, inString, len);
  ------------------
  |  |  194|      1|#define PORT_Strncpy strncpy
  ------------------
  323|      1|        name[len] = 0;
  324|      1|    }
  325|      1|    return name;
  326|      1|}
NSSUTIL_ArgReadLong:
  334|      5|{
  335|      5|    char *value;
  336|      5|    long retValue;
  337|      5|    if (isdefault)
  ------------------
  |  Branch (337:9): [True: 0, False: 5]
  ------------------
  338|      0|        *isdefault = PR_FALSE;
  ------------------
  |  |  438|      0|#define PR_FALSE 0
  ------------------
  339|       |
  340|      5|    value = NSSUTIL_ArgGetParamValue(label, params);
  341|      5|    if (value == NULL) {
  ------------------
  |  Branch (341:9): [True: 2, False: 3]
  ------------------
  342|      2|        if (isdefault)
  ------------------
  |  Branch (342:13): [True: 0, False: 2]
  ------------------
  343|      0|            *isdefault = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  344|      2|        return defValue;
  345|      2|    }
  346|      3|    retValue = NSSUTIL_ArgDecodeNumber(value);
  347|      3|    if (value)
  ------------------
  |  Branch (347:9): [True: 3, False: 0]
  ------------------
  348|      3|        PORT_Free(value);
  ------------------
  |  |   60|      3|#define PORT_Free PORT_Free_Util
  ------------------
  349|       |
  350|      3|    return retValue;
  351|      5|}
NSSUTIL_Quote:
  421|      1|{
  422|      1|    return nssutil_escapeQuotes(string, quote, PR_TRUE);
  ------------------
  |  |  437|      1|#define PR_TRUE 1
  ------------------
  423|      1|}
NSSUTIL_DoubleEscape:
  445|      9|{
  446|      9|    char *round1 = NULL;
  447|      9|    char *retValue = NULL;
  448|      9|    if (string == NULL) {
  ------------------
  |  Branch (448:9): [True: 0, False: 9]
  ------------------
  449|      0|        goto done;
  450|      0|    }
  451|      9|    round1 = nssutil_escapeQuotes(string, quote1, PR_FALSE);
  ------------------
  |  |  438|      9|#define PR_FALSE 0
  ------------------
  452|      9|    if (round1) {
  ------------------
  |  Branch (452:9): [True: 9, False: 0]
  ------------------
  453|      9|        retValue = nssutil_escapeQuotes(round1, quote2, PR_FALSE);
  ------------------
  |  |  438|      9|#define PR_FALSE 0
  ------------------
  454|      9|        PORT_Free(round1);
  ------------------
  |  |   60|      9|#define PORT_Free PORT_Free_Util
  ------------------
  455|      9|    }
  456|       |
  457|      9|done:
  458|      9|    if (retValue == NULL) {
  ------------------
  |  Branch (458:9): [True: 0, False: 9]
  ------------------
  459|      0|        retValue = PORT_Strdup("");
  ------------------
  |  |   69|      0|#define PORT_Strdup PORT_Strdup_Util
  ------------------
  460|      0|    }
  461|      9|    return retValue;
  462|      9|}
NSSUTIL_ArgParseSlotFlags:
  621|      1|{
  622|      1|    char *flags;
  623|      1|    const char *index;
  624|      1|    unsigned long retValue = 0;
  625|      1|    int i;
  626|      1|    PRBool all = PR_FALSE;
  ------------------
  |  |  438|      1|#define PR_FALSE 0
  ------------------
  627|       |
  628|      1|    flags = NSSUTIL_ArgGetParamValue(label, params);
  629|      1|    if (flags == NULL)
  ------------------
  |  Branch (629:9): [True: 0, False: 1]
  ------------------
  630|      0|        return 0;
  631|       |
  632|      1|    if (PORT_Strcasecmp(flags, "all") == 0)
  ------------------
  |  |  184|      1|#define PORT_Strcasecmp PL_strcasecmp
  ------------------
  |  Branch (632:9): [True: 0, False: 1]
  ------------------
  633|      0|        all = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
  634|       |
  635|     19|    for (index = flags; *index; index = NSSUTIL_ArgNextFlag(index)) {
  ------------------
  |  Branch (635:25): [True: 18, False: 1]
  ------------------
  636|    414|        for (i = 0; i < nssutil_argSlotFlagTableSize; i++) {
  ------------------
  |  Branch (636:21): [True: 396, False: 18]
  ------------------
  637|    396|            if (all ||
  ------------------
  |  Branch (637:17): [True: 0, False: 396]
  ------------------
  638|    396|                (PORT_Strncasecmp(index, nssutil_argSlotFlagTable[i].name,
  ------------------
  |  |  191|    396|#define PORT_Strncasecmp PL_strncasecmp
  ------------------
  |  Branch (638:17): [True: 18, False: 378]
  ------------------
  639|    396|                                  nssutil_argSlotFlagTable[i].len) == 0)) {
  640|     18|                retValue |= nssutil_argSlotFlagTable[i].value;
  641|     18|            }
  642|    396|        }
  643|     18|    }
  644|      1|    PORT_Free(flags);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  645|      1|    return retValue;
  646|      1|}
NSSUTIL_ArgParseSlotInfo:
  681|      2|{
  682|      2|    const char *slotIndex;
  683|      2|    struct NSSUTILPreSlotInfoStr *slotInfo = NULL;
  684|      2|    int i = 0, count = 0, next;
  685|       |
  686|      2|    *retCount = 0;
  687|      2|    if ((slotParams == NULL) || (*slotParams == 0))
  ------------------
  |  Branch (687:9): [True: 1, False: 1]
  |  Branch (687:33): [True: 0, False: 1]
  ------------------
  688|      1|        return NULL;
  689|       |
  690|       |    /* first count the number of slots */
  691|      2|    for (slotIndex = NSSUTIL_ArgStrip(slotParams); *slotIndex;
  ------------------
  |  Branch (691:52): [True: 1, False: 1]
  ------------------
  692|      1|         slotIndex = NSSUTIL_ArgStrip(NSSUTIL_ArgSkipParameter(slotIndex))) {
  693|      1|        count++;
  694|      1|    }
  695|       |
  696|       |    /* get the data structures */
  697|      1|    if (arena) {
  ------------------
  |  Branch (697:9): [True: 1, False: 0]
  ------------------
  698|      1|        slotInfo = PORT_ArenaZNewArray(arena,
  ------------------
  |  |  163|      1|    (type *)PORT_ArenaZAlloc(poolp, sizeof(type) * (num))
  |  |  ------------------
  |  |  |  |   59|      1|#define PORT_ArenaZAlloc PORT_ArenaZAlloc_Util
  |  |  ------------------
  ------------------
  699|      1|                                       struct NSSUTILPreSlotInfoStr, count);
  700|      1|    } else {
  701|      0|        slotInfo = PORT_ZNewArray(struct NSSUTILPreSlotInfoStr, count);
  ------------------
  |  |  159|      0|    (type *)PORT_ZAlloc(sizeof(type) * (num))
  |  |  ------------------
  |  |  |  |   72|      0|#define PORT_ZAlloc PORT_ZAlloc_Util
  |  |  ------------------
  ------------------
  702|      0|    }
  703|      1|    if (slotInfo == NULL)
  ------------------
  |  Branch (703:9): [True: 0, False: 1]
  ------------------
  704|      0|        return NULL;
  705|       |
  706|      1|    for (slotIndex = NSSUTIL_ArgStrip(slotParams), i = 0;
  707|      2|         *slotIndex && i < count;) {
  ------------------
  |  Branch (707:10): [True: 1, False: 1]
  |  Branch (707:24): [True: 1, False: 0]
  ------------------
  708|      1|        char *name;
  709|      1|        name = NSSUTIL_ArgGetLabel(slotIndex, &next);
  710|      1|        slotIndex += next;
  711|       |
  712|      1|        if (!NSSUTIL_ArgIsBlank(*slotIndex)) {
  ------------------
  |  Branch (712:13): [True: 1, False: 0]
  ------------------
  713|      1|            char *args = NSSUTIL_ArgFetchValue(slotIndex, &next);
  714|      1|            slotIndex += next;
  715|      1|            if (args) {
  ------------------
  |  Branch (715:17): [True: 1, False: 0]
  ------------------
  716|      1|                nssutil_argDecodeSingleSlotInfo(name, args, &slotInfo[i]);
  717|      1|                i++;
  718|      1|                PORT_Free(args);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  719|      1|            }
  720|      1|        }
  721|      1|        if (name)
  ------------------
  |  Branch (721:13): [True: 1, False: 0]
  ------------------
  722|      1|            PORT_Free(name);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  723|      1|        slotIndex = NSSUTIL_ArgStrip(slotIndex);
  724|      1|    }
  725|      1|    *retCount = i;
  726|      1|    return slotInfo;
  727|      1|}
NSSUTIL_ArgParseModuleSpecEx:
  836|      2|{
  837|      2|    int next;
  838|      2|    modulespec = NSSUTIL_ArgStrip(modulespec);
  839|       |
  840|      2|    *lib = *mod = *parameters = *nss = *config = 0;
  841|       |
  842|      9|    while (*modulespec) {
  ------------------
  |  Branch (842:12): [True: 7, False: 2]
  ------------------
  843|      7|        NSSUTIL_HANDLE_STRING_ARG(modulespec, *lib, "library=", ;)
  ------------------
  |  |   21|      7|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      7|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 1, False: 6]
  |  |  ------------------
  |  |   22|      1|        param += sizeof(value) - 1;                               \
  |  |   23|      1|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 1]
  |  |  ------------------
  |  |   24|      1|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      1|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      1|        param += next;                                            \
  |  |   27|      1|        command;                                                  \
  |  |   28|      1|    } else
  ------------------
  844|      6|        NSSUTIL_HANDLE_STRING_ARG(modulespec, *mod, "name=", ;)
  ------------------
  |  |   21|      6|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      6|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 2, False: 4]
  |  |  ------------------
  |  |   22|      2|        param += sizeof(value) - 1;                               \
  |  |   23|      2|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 2]
  |  |  ------------------
  |  |   24|      2|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      2|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      2|        param += next;                                            \
  |  |   27|      2|        command;                                                  \
  |  |   28|      2|    } else
  ------------------
  845|      4|        NSSUTIL_HANDLE_STRING_ARG(modulespec, *parameters, "parameters=", ;)
  ------------------
  |  |   21|      4|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      4|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 2, False: 2]
  |  |  ------------------
  |  |   22|      2|        param += sizeof(value) - 1;                               \
  |  |   23|      2|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 2]
  |  |  ------------------
  |  |   24|      2|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      2|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      2|        param += next;                                            \
  |  |   27|      2|        command;                                                  \
  |  |   28|      2|    } else
  ------------------
  846|      2|        NSSUTIL_HANDLE_STRING_ARG(modulespec, *nss, "nss=", ;)
  ------------------
  |  |   21|      2|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      2|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 2, False: 0]
  |  |  ------------------
  |  |   22|      2|        param += sizeof(value) - 1;                               \
  |  |   23|      2|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 2]
  |  |  ------------------
  |  |   24|      2|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      2|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      2|        param += next;                                            \
  |  |   27|      2|        command;                                                  \
  |  |   28|      2|    } else
  ------------------
  847|      0|        NSSUTIL_HANDLE_STRING_ARG(modulespec, *config, "config=", ;)
  ------------------
  |  |   21|      0|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|      0|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   22|      0|        param += sizeof(value) - 1;                               \
  |  |   23|      0|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   24|      0|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      0|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      0|        param += next;                                            \
  |  |   27|      0|        command;                                                  \
  |  |   28|      0|    } else
  ------------------
  848|      0|        NSSUTIL_HANDLE_FINAL_ARG(modulespec)
  ------------------
  |  |   31|      0|    {                                            \
  |  |   32|      0|        param = NSSUTIL_ArgSkipParameter(param); \
  |  |   33|      0|    }                                            \
  |  |   34|      7|    param = NSSUTIL_ArgStrip(param);
  ------------------
  849|      7|    }
  850|      2|    return SECSuccess;
  851|      2|}
NSSUTIL_ArgParseCipherFlags:
 1008|      2|{
 1009|      2|    newCiphers[0] = newCiphers[1] = 0;
 1010|      2|    if ((cipherList == NULL) || (*cipherList == 0))
  ------------------
  |  Branch (1010:9): [True: 2, False: 0]
  |  Branch (1010:33): [True: 0, False: 0]
  ------------------
 1011|      2|        return;
 1012|       |
 1013|      0|    for (; *cipherList; cipherList = NSSUTIL_ArgNextFlag(cipherList)) {
  ------------------
  |  Branch (1013:12): [True: 0, False: 0]
  ------------------
 1014|      0|        if (PORT_Strncasecmp(cipherList, NSSUTIL_ARG_FORTEZZA_FLAG,
  ------------------
  |  |  191|      0|#define PORT_Strncasecmp PL_strncasecmp
  ------------------
                      if (PORT_Strncasecmp(cipherList, NSSUTIL_ARG_FORTEZZA_FLAG,
  ------------------
  |  | 1002|      0|#define NSSUTIL_ARG_FORTEZZA_FLAG "FORTEZZA"
  ------------------
  |  Branch (1014:13): [True: 0, False: 0]
  ------------------
 1015|      0|                             sizeof(NSSUTIL_ARG_FORTEZZA_FLAG) - 1) == 0) {
  ------------------
  |  | 1002|      0|#define NSSUTIL_ARG_FORTEZZA_FLAG "FORTEZZA"
  ------------------
 1016|      0|            newCiphers[0] |= SECMOD_FORTEZZA_FLAG;
  ------------------
  |  |   18|      0|#define SECMOD_FORTEZZA_FLAG 0x00000040L
  ------------------
 1017|      0|        }
 1018|       |
 1019|       |        /* add additional flags here as necessary */
 1020|       |        /* direct bit mapping escape */
 1021|      0|        if (*cipherList == 0) {
  ------------------
  |  Branch (1021:13): [True: 0, False: 0]
  ------------------
 1022|      0|            if (cipherList[1] == 'l') {
  ------------------
  |  Branch (1022:17): [True: 0, False: 0]
  ------------------
 1023|      0|                newCiphers[1] |= atoi(&cipherList[2]);
 1024|      0|            } else {
 1025|      0|                newCiphers[0] |= atoi(&cipherList[2]);
 1026|      0|            }
 1027|      0|        }
 1028|      0|    }
 1029|      0|}
_NSSUTIL_EvaluateConfigDir:
 1196|      2|{
 1197|      2|    NSSDBType dbType;
 1198|      2|    PRBool checkEnvDefaultDB = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 1199|      2|    *appName = NULL;
 1200|       |    /* force the default */
 1201|      2|    dbType = NSS_DB_TYPE_SQL;
 1202|      2|    if (configdir == NULL) {
  ------------------
  |  Branch (1202:9): [True: 0, False: 2]
  ------------------
 1203|      0|        checkEnvDefaultDB = PR_TRUE;
  ------------------
  |  |  437|      0|#define PR_TRUE 1
  ------------------
 1204|      2|    } else if (PORT_Strncmp(configdir, MULTIACCESS, sizeof(MULTIACCESS) - 1) == 0) {
  ------------------
  |  |  193|      2|#define PORT_Strncmp strncmp
  ------------------
                  } else if (PORT_Strncmp(configdir, MULTIACCESS, sizeof(MULTIACCESS) - 1) == 0) {
  ------------------
  |  | 1191|      2|#define MULTIACCESS "multiaccess:"
  ------------------
                  } else if (PORT_Strncmp(configdir, MULTIACCESS, sizeof(MULTIACCESS) - 1) == 0) {
  ------------------
  |  | 1191|      2|#define MULTIACCESS "multiaccess:"
  ------------------
  |  Branch (1204:16): [True: 0, False: 2]
  ------------------
 1205|      0|        char *cdir;
 1206|      0|        dbType = NSS_DB_TYPE_MULTIACCESS;
 1207|       |
 1208|      0|        *appName = PORT_Strdup(configdir + sizeof(MULTIACCESS) - 1);
  ------------------
  |  |   69|      0|#define PORT_Strdup PORT_Strdup_Util
  ------------------
                      *appName = PORT_Strdup(configdir + sizeof(MULTIACCESS) - 1);
  ------------------
  |  | 1191|      0|#define MULTIACCESS "multiaccess:"
  ------------------
 1209|      0|        if (*appName == NULL) {
  ------------------
  |  Branch (1209:13): [True: 0, False: 0]
  ------------------
 1210|      0|            return configdir;
 1211|      0|        }
 1212|      0|        cdir = *appName;
 1213|      0|        while (*cdir && *cdir != ':') {
  ------------------
  |  Branch (1213:16): [True: 0, False: 0]
  |  Branch (1213:25): [True: 0, False: 0]
  ------------------
 1214|      0|            cdir++;
 1215|      0|        }
 1216|      0|        if (*cdir == ':') {
  ------------------
  |  Branch (1216:13): [True: 0, False: 0]
  ------------------
 1217|      0|            *cdir = 0;
 1218|      0|            cdir++;
 1219|      0|        }
 1220|      0|        configdir = cdir;
 1221|      2|    } else if (PORT_Strncmp(configdir, SQLDB, sizeof(SQLDB) - 1) == 0) {
  ------------------
  |  |  193|      2|#define PORT_Strncmp strncmp
  ------------------
                  } else if (PORT_Strncmp(configdir, SQLDB, sizeof(SQLDB) - 1) == 0) {
  ------------------
  |  | 1188|      2|#define SQLDB "sql:"
  ------------------
                  } else if (PORT_Strncmp(configdir, SQLDB, sizeof(SQLDB) - 1) == 0) {
  ------------------
  |  | 1188|      2|#define SQLDB "sql:"
  ------------------
  |  Branch (1221:16): [True: 0, False: 2]
  ------------------
 1222|      0|        dbType = NSS_DB_TYPE_SQL;
 1223|      0|        configdir = configdir + sizeof(SQLDB) - 1;
  ------------------
  |  | 1188|      0|#define SQLDB "sql:"
  ------------------
 1224|      2|    } else if (PORT_Strncmp(configdir, EXTERNDB, sizeof(EXTERNDB) - 1) == 0) {
  ------------------
  |  |  193|      2|#define PORT_Strncmp strncmp
  ------------------
                  } else if (PORT_Strncmp(configdir, EXTERNDB, sizeof(EXTERNDB) - 1) == 0) {
  ------------------
  |  | 1189|      2|#define EXTERNDB "extern:"
  ------------------
                  } else if (PORT_Strncmp(configdir, EXTERNDB, sizeof(EXTERNDB) - 1) == 0) {
  ------------------
  |  | 1189|      2|#define EXTERNDB "extern:"
  ------------------
  |  Branch (1224:16): [True: 0, False: 2]
  ------------------
 1225|      0|        dbType = NSS_DB_TYPE_EXTERN;
 1226|      0|        configdir = configdir + sizeof(EXTERNDB) - 1;
  ------------------
  |  | 1189|      0|#define EXTERNDB "extern:"
  ------------------
 1227|      2|    } else if (PORT_Strncmp(configdir, LEGACY, sizeof(LEGACY) - 1) == 0) {
  ------------------
  |  |  193|      2|#define PORT_Strncmp strncmp
  ------------------
                  } else if (PORT_Strncmp(configdir, LEGACY, sizeof(LEGACY) - 1) == 0) {
  ------------------
  |  | 1190|      2|#define LEGACY "dbm:"
  ------------------
                  } else if (PORT_Strncmp(configdir, LEGACY, sizeof(LEGACY) - 1) == 0) {
  ------------------
  |  | 1190|      2|#define LEGACY "dbm:"
  ------------------
  |  Branch (1227:16): [True: 0, False: 2]
  ------------------
 1228|      0|        dbType = NSS_DB_TYPE_LEGACY;
 1229|      0|        configdir = configdir + sizeof(LEGACY) - 1;
  ------------------
  |  | 1190|      0|#define LEGACY "dbm:"
  ------------------
 1230|      2|    } else {
 1231|      2|        checkEnvDefaultDB = PR_TRUE;
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
 1232|      2|    }
 1233|       |
 1234|       |    /* look up the default from the environment */
 1235|      2|    if (checkEnvDefaultDB) {
  ------------------
  |  Branch (1235:9): [True: 2, False: 0]
  ------------------
 1236|      2|        char *defaultType = PR_GetEnvSecure("NSS_DEFAULT_DB_TYPE");
 1237|      2|        if (defaultType != NULL) {
  ------------------
  |  Branch (1237:13): [True: 0, False: 2]
  ------------------
 1238|      0|            if (PORT_Strncmp(defaultType, SQLDB, sizeof(SQLDB) - 2) == 0) {
  ------------------
  |  |  193|      0|#define PORT_Strncmp strncmp
  ------------------
                          if (PORT_Strncmp(defaultType, SQLDB, sizeof(SQLDB) - 2) == 0) {
  ------------------
  |  | 1188|      0|#define SQLDB "sql:"
  ------------------
                          if (PORT_Strncmp(defaultType, SQLDB, sizeof(SQLDB) - 2) == 0) {
  ------------------
  |  | 1188|      0|#define SQLDB "sql:"
  ------------------
  |  Branch (1238:17): [True: 0, False: 0]
  ------------------
 1239|      0|                dbType = NSS_DB_TYPE_SQL;
 1240|      0|            } else if (PORT_Strncmp(defaultType, EXTERNDB, sizeof(EXTERNDB) - 2) == 0) {
  ------------------
  |  |  193|      0|#define PORT_Strncmp strncmp
  ------------------
                          } else if (PORT_Strncmp(defaultType, EXTERNDB, sizeof(EXTERNDB) - 2) == 0) {
  ------------------
  |  | 1189|      0|#define EXTERNDB "extern:"
  ------------------
                          } else if (PORT_Strncmp(defaultType, EXTERNDB, sizeof(EXTERNDB) - 2) == 0) {
  ------------------
  |  | 1189|      0|#define EXTERNDB "extern:"
  ------------------
  |  Branch (1240:24): [True: 0, False: 0]
  ------------------
 1241|      0|                dbType = NSS_DB_TYPE_EXTERN;
 1242|      0|            } else if (PORT_Strncmp(defaultType, LEGACY, sizeof(LEGACY) - 2) == 0) {
  ------------------
  |  |  193|      0|#define PORT_Strncmp strncmp
  ------------------
                          } else if (PORT_Strncmp(defaultType, LEGACY, sizeof(LEGACY) - 2) == 0) {
  ------------------
  |  | 1190|      0|#define LEGACY "dbm:"
  ------------------
                          } else if (PORT_Strncmp(defaultType, LEGACY, sizeof(LEGACY) - 2) == 0) {
  ------------------
  |  | 1190|      0|#define LEGACY "dbm:"
  ------------------
  |  Branch (1242:24): [True: 0, False: 0]
  ------------------
 1243|      0|                dbType = NSS_DB_TYPE_LEGACY;
 1244|      0|            }
 1245|      0|        }
 1246|      2|    }
 1247|       |    /* if the caller has already set a type, don't change it */
 1248|      2|    if (*pdbType == NSS_DB_TYPE_NONE) {
  ------------------
  |  Branch (1248:9): [True: 2, False: 0]
  ------------------
 1249|      2|        *pdbType = dbType;
 1250|      2|    }
 1251|      2|    return configdir;
 1252|      2|}
_NSSUTIL_GetSecmodName:
 1257|      2|{
 1258|      2|    int next;
 1259|      2|    char *configdir = NULL;
 1260|      2|    char *secmodName = NULL;
 1261|      2|    char *value = NULL;
 1262|      2|    const char *save_params = param;
 1263|      2|    const char *lconfigdir;
 1264|      2|    PRBool noModDB = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 1265|      2|    param = NSSUTIL_ArgStrip(param);
 1266|       |
 1267|     22|    while (*param) {
  ------------------
  |  Branch (1267:12): [True: 20, False: 2]
  ------------------
 1268|     20|        NSSUTIL_HANDLE_STRING_ARG(param, configdir, "configDir=", ;)
  ------------------
  |  |   21|     20|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|     20|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 2, False: 18]
  |  |  ------------------
  |  |   22|      2|        param += sizeof(value) - 1;                               \
  |  |   23|      2|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 2]
  |  |  ------------------
  |  |   24|      2|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      2|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      2|        param += next;                                            \
  |  |   27|      2|        command;                                                  \
  |  |   28|      2|    } else
  ------------------
 1269|     18|        NSSUTIL_HANDLE_STRING_ARG(param, secmodName, "secmod=", ;)
  ------------------
  |  |   21|     18|    if (PORT_Strncasecmp(param, value, sizeof(value) - 1) == 0) { \
  |  |  ------------------
  |  |  |  |  191|     18|#define PORT_Strncasecmp PL_strncasecmp
  |  |  ------------------
  |  |  |  Branch (21:9): [True: 2, False: 16]
  |  |  ------------------
  |  |   22|      2|        param += sizeof(value) - 1;                               \
  |  |   23|      2|        if (target)                                               \
  |  |  ------------------
  |  |  |  Branch (23:13): [True: 0, False: 2]
  |  |  ------------------
  |  |   24|      2|            PORT_Free(target);                                    \
  |  |  ------------------
  |  |  |  |   60|      0|#define PORT_Free PORT_Free_Util
  |  |  ------------------
  |  |   25|      2|        target = NSSUTIL_ArgFetchValue(param, &next);             \
  |  |   26|      2|        param += next;                                            \
  |  |   27|      2|        command;                                                  \
  |  |   28|      2|    } else
  ------------------
 1270|     16|        NSSUTIL_HANDLE_FINAL_ARG(param)
  ------------------
  |  |   31|     16|    {                                            \
  |  |   32|     16|        param = NSSUTIL_ArgSkipParameter(param); \
  |  |   33|     16|    }                                            \
  |  |   34|     20|    param = NSSUTIL_ArgStrip(param);
  ------------------
 1271|     20|    }
 1272|       |
 1273|      2|    *rw = PR_TRUE;
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
 1274|      2|    if (NSSUTIL_ArgHasFlag("flags", "readOnly", save_params)) {
  ------------------
  |  Branch (1274:9): [True: 2, False: 0]
  ------------------
 1275|      2|        *rw = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 1276|      2|    }
 1277|       |
 1278|      2|    if (!secmodName || *secmodName == '\0') {
  ------------------
  |  Branch (1278:9): [True: 0, False: 2]
  |  Branch (1278:24): [True: 2, False: 0]
  ------------------
 1279|      2|        if (secmodName)
  ------------------
  |  Branch (1279:13): [True: 2, False: 0]
  ------------------
 1280|      2|            PORT_Free(secmodName);
  ------------------
  |  |   60|      2|#define PORT_Free PORT_Free_Util
  ------------------
 1281|      2|        secmodName = PORT_Strdup(SECMOD_DB);
  ------------------
  |  |   69|      2|#define PORT_Strdup PORT_Strdup_Util
  ------------------
                      secmodName = PORT_Strdup(SECMOD_DB);
  ------------------
  |  | 1192|      2|#define SECMOD_DB "secmod.db"
  ------------------
 1282|      2|    }
 1283|       |
 1284|      2|    *filename = secmodName;
 1285|      2|    lconfigdir = _NSSUTIL_EvaluateConfigDir(configdir, dbType, appName);
 1286|       |
 1287|      2|    if (NSSUTIL_ArgHasFlag("flags", "noModDB", save_params)) {
  ------------------
  |  Branch (1287:9): [True: 2, False: 0]
  ------------------
 1288|       |        /* there isn't a module db, don't load the legacy support */
 1289|      2|        noModDB = PR_TRUE;
  ------------------
  |  |  437|      2|#define PR_TRUE 1
  ------------------
 1290|      2|        *dbType = NSS_DB_TYPE_SQL;
 1291|      2|        PORT_Free(*filename);
  ------------------
  |  |   60|      2|#define PORT_Free PORT_Free_Util
  ------------------
 1292|      2|        *filename = NULL;
 1293|      2|        *rw = PR_FALSE;
  ------------------
  |  |  438|      2|#define PR_FALSE 0
  ------------------
 1294|      2|    }
 1295|       |
 1296|       |    /* only use the renamed secmod for legacy databases */
 1297|      2|    if ((*dbType != NSS_DB_TYPE_LEGACY) &&
  ------------------
  |  Branch (1297:9): [True: 2, False: 0]
  ------------------
 1298|      2|        (*dbType != NSS_DB_TYPE_MULTIACCESS) &&
  ------------------
  |  Branch (1298:9): [True: 2, False: 0]
  ------------------
 1299|      2|        !NSSUTIL_ArgHasFlag("flags", "forceSecmodChoice", save_params)) {
  ------------------
  |  Branch (1299:9): [True: 2, False: 0]
  ------------------
 1300|      2|        secmodName = "pkcs11.txt";
 1301|      2|    }
 1302|       |
 1303|      2|    if (noModDB) {
  ------------------
  |  Branch (1303:9): [True: 2, False: 0]
  ------------------
 1304|      2|        value = NULL;
 1305|      2|    } else if (lconfigdir && lconfigdir[0] != '\0') {
  ------------------
  |  Branch (1305:16): [True: 0, False: 0]
  |  Branch (1305:30): [True: 0, False: 0]
  ------------------
 1306|      0|        value = PR_smprintf("%s" NSSUTIL_PATH_SEPARATOR "%s",
 1307|      0|                            lconfigdir, secmodName);
 1308|      0|    } else {
 1309|      0|        value = PR_smprintf("%s", secmodName);
 1310|      0|    }
 1311|      2|    if (configdir)
  ------------------
  |  Branch (1311:9): [True: 2, False: 0]
  ------------------
 1312|      2|        PORT_Free(configdir);
  ------------------
  |  |   60|      2|#define PORT_Free PORT_Free_Util
  ------------------
 1313|      2|    return value;
 1314|      2|}
utilpars.c:nssutil_escapeQuotesSize:
  359|     19|{
  360|     19|    int escapes = 0, size = 0;
  361|     19|    const char *src;
  362|       |
  363|     19|    size = addquotes ? 2 : 0;
  ------------------
  |  Branch (363:12): [True: 1, False: 18]
  ------------------
  364|    215|    for (src = string; *src; src++) {
  ------------------
  |  Branch (364:24): [True: 196, False: 19]
  ------------------
  365|    196|        if ((*src == quote) || (*src == '\\'))
  ------------------
  |  Branch (365:13): [True: 0, False: 196]
  |  Branch (365:32): [True: 0, False: 196]
  ------------------
  366|      0|            escapes++;
  367|    196|        size++;
  368|    196|    }
  369|     19|    return size + escapes + 1;
  370|     19|}
utilpars.c:nssutil_escapeQuotes:
  374|     19|{
  375|     19|    char *newString = 0;
  376|     19|    int size = 0;
  377|     19|    const char *src;
  378|     19|    char *dest;
  379|       |
  380|     19|    size = nssutil_escapeQuotesSize(string, quote, addquotes);
  381|       |
  382|     19|    dest = newString = PORT_ZAlloc(size);
  ------------------
  |  |   72|     19|#define PORT_ZAlloc PORT_ZAlloc_Util
  ------------------
  383|     19|    if (newString == NULL) {
  ------------------
  |  Branch (383:9): [True: 0, False: 19]
  ------------------
  384|      0|        return NULL;
  385|      0|    }
  386|       |
  387|     19|    if (addquotes)
  ------------------
  |  Branch (387:9): [True: 1, False: 18]
  ------------------
  388|      1|        *dest++ = quote;
  389|    215|    for (src = string; *src; src++, dest++) {
  ------------------
  |  Branch (389:24): [True: 196, False: 19]
  ------------------
  390|    196|        if ((*src == '\\') || (*src == quote)) {
  ------------------
  |  Branch (390:13): [True: 0, False: 196]
  |  Branch (390:31): [True: 0, False: 196]
  ------------------
  391|      0|            *dest++ = '\\';
  392|      0|        }
  393|    196|        *dest = *src;
  394|    196|    }
  395|     19|    if (addquotes)
  ------------------
  |  Branch (395:9): [True: 1, False: 18]
  ------------------
  396|      1|        *dest = quote;
  397|       |
  398|     19|    return newString;
  399|     19|}
utilpars.c:nssutil_argDecodeSingleSlotInfo:
  652|      1|{
  653|      1|    char *askpw;
  654|       |
  655|      1|    slotInfo->slotID = NSSUTIL_ArgDecodeNumber(name);
  656|      1|    slotInfo->defaultFlags = NSSUTIL_ArgParseSlotFlags("slotFlags", params);
  657|      1|    slotInfo->timeout = NSSUTIL_ArgReadLong("timeout", params, 0, NULL);
  658|       |
  659|      1|    askpw = NSSUTIL_ArgGetParamValue("askpw", params);
  660|      1|    slotInfo->askpw = 0;
  661|       |
  662|      1|    if (askpw) {
  ------------------
  |  Branch (662:9): [True: 1, False: 0]
  ------------------
  663|      1|        if (PORT_Strcasecmp(askpw, "every") == 0) {
  ------------------
  |  |  184|      1|#define PORT_Strcasecmp PL_strcasecmp
  ------------------
  |  Branch (663:13): [True: 0, False: 1]
  ------------------
  664|      0|            slotInfo->askpw = -1;
  665|      1|        } else if (PORT_Strcasecmp(askpw, "timeout") == 0) {
  ------------------
  |  |  184|      1|#define PORT_Strcasecmp PL_strcasecmp
  ------------------
  |  Branch (665:20): [True: 0, False: 1]
  ------------------
  666|      0|            slotInfo->askpw = 1;
  667|      0|        }
  668|      1|        PORT_Free(askpw);
  ------------------
  |  |   60|      1|#define PORT_Free PORT_Free_Util
  ------------------
  669|      1|        slotInfo->defaultFlags |= PK11_OWN_PW_DEFAULTS;
  ------------------
  |  |   36|      1|#define PK11_OWN_PW_DEFAULTS 0x20000000L
  ------------------
  670|      1|    }
  671|      1|    slotInfo->hasRootCerts = NSSUTIL_ArgHasFlag("rootFlags", "hasRootCerts",
  672|      1|                                                params);
  673|      1|    slotInfo->hasRootTrust = NSSUTIL_ArgHasFlag("rootFlags", "hasRootTrust",
  674|      1|                                                params);
  675|      1|}

