mirror of
https://github.com/steveicarus/iverilog.git
synced 2026-09-06 00:57:24 +02:00
By adding ivtest to the iverilog source tree, it is easier to keep the regression test synchronized with the source that is being tested. This should be especially helpful for PRs that add a new feature, and have a matching ivtest PR with the regression test for that feature.
76 lines
1.7 KiB
C
76 lines
1.7 KiB
C
/*
|
|
* Copyright (c) Tony Bybell 1999-2000.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*/
|
|
|
|
#include "analyzer.h"
|
|
#include "misc.h"
|
|
#include "bsearch.h"
|
|
|
|
static TimeType max_compare_time;
|
|
static hptr max_compare_pos;
|
|
static hptr *max_compare_index;
|
|
|
|
static int compar_histent(const void *s1, const void *s2)
|
|
{
|
|
TimeType key, obj, delta;
|
|
hptr cpos;
|
|
int rv;
|
|
|
|
key=*((TimeType *)s1);
|
|
obj=(cpos=(*((hptr *)s2)))->time;
|
|
|
|
if((obj<=key)&&(obj>max_compare_time))
|
|
{
|
|
max_compare_time=obj;
|
|
max_compare_pos=cpos;
|
|
max_compare_index=(hptr *)s2;
|
|
}
|
|
|
|
delta=key-obj;
|
|
if(delta<0) rv=-1;
|
|
else if(delta>0) rv=1;
|
|
else rv=0;
|
|
|
|
return(rv);
|
|
}
|
|
|
|
hptr bsearch_node(nptr n, TimeType key)
|
|
{
|
|
max_compare_time=-2; max_compare_pos=NULL; max_compare_index=NULL;
|
|
|
|
bsearch(&key, n->harray, n->numhist, sizeof(hptr), compar_histent);
|
|
if((!max_compare_pos)||(max_compare_time<0))
|
|
{
|
|
max_compare_pos=n->harray[1]; /* aix bsearch fix */
|
|
max_compare_index=&(n->harray[1]);
|
|
}
|
|
|
|
return(max_compare_pos);
|
|
}
|
|
|
|
/*****************************************************************************************/
|
|
|
|
static int compar_facs(const void *key, const void *v2)
|
|
{
|
|
struct symbol *s2;
|
|
int rc;
|
|
|
|
s2=*((struct symbol **)v2);
|
|
rc=sigcmp((char *)key,s2->name);
|
|
return(rc);
|
|
}
|
|
|
|
struct symbol *bsearch_facs(struct globals *obj, char *ascii)
|
|
{
|
|
struct symbol **rc;
|
|
|
|
if ((!ascii)||(!strlen(ascii))) return(NULL);
|
|
rc=(struct symbol **)bsearch(ascii, obj->facs, obj->numfacs, sizeof(struct symbol *), compar_facs);
|
|
if(rc) return(*rc); else return(NULL);
|
|
}
|