summaryrefslogtreecommitdiffstats
path: root/src/misc/vec
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2021-07-13 19:05:02 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2021-07-13 19:05:02 -0700
commit3e67d167f5c07315f3d1bb7d8ae6c079cb451ded (patch)
tree110fa94b95b5c6324ebb823051c8a88efef2e1e2 /src/misc/vec
parentbe14c397409d5d95c066444f9f19aac7c0d5de0e (diff)
downloadabc-3e67d167f5c07315f3d1bb7d8ae6c079cb451ded.tar.gz
abc-3e67d167f5c07315f3d1bb7d8ae6c079cb451ded.tar.bz2
abc-3e67d167f5c07315f3d1bb7d8ae6c079cb451ded.zip
Experiments with LUT mapping for small functions.
Diffstat (limited to 'src/misc/vec')
-rw-r--r--src/misc/vec/vecWec.h19
-rw-r--r--src/misc/vec/vecWrd.h26
2 files changed, 45 insertions, 0 deletions
diff --git a/src/misc/vec/vecWec.h b/src/misc/vec/vecWec.h
index fdbded9c..1c5ac71d 100644
--- a/src/misc/vec/vecWec.h
+++ b/src/misc/vec/vecWec.h
@@ -637,6 +637,25 @@ static inline int Vec_WecCountNonTrivial( Vec_Wec_t * p, int * pnUsed )
SeeAlso []
***********************************************************************/
+static inline int Vec_WecMaxLevelSize( Vec_Wec_t * p )
+{
+ Vec_Int_t * vTemp; int i, Res = 0;
+ Vec_WecForEachLevel( p, vTemp, i )
+ Res = Abc_MaxInt( Res, Vec_IntSize(vTemp) );
+ return Res;
+}
+
+/**Function*************************************************************
+
+ Synopsis []
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
static inline Vec_Int_t * Vec_WecCollectFirsts( Vec_Wec_t * p )
{
Vec_Int_t * vFirsts, * vLevel;
diff --git a/src/misc/vec/vecWrd.h b/src/misc/vec/vecWrd.h
index b0123453..dd030c1a 100644
--- a/src/misc/vec/vecWrd.h
+++ b/src/misc/vec/vecWrd.h
@@ -61,6 +61,8 @@ struct Vec_Wrd_t_
for ( i = Start; (i < Stop) && (((Entry) = Vec_WrdEntry(vVec, i)), 1); i++ )
#define Vec_WrdForEachEntryReverse( vVec, pEntry, i ) \
for ( i = Vec_WrdSize(vVec) - 1; (i >= 0) && (((pEntry) = Vec_WrdEntry(vVec, i)), 1); i-- )
+#define Vec_WrdForEachEntryDouble( vVec, Entry1, Entry2, i ) \
+ for ( i = 0; (i+1 < Vec_WrdSize(vVec)) && (((Entry1) = Vec_WrdEntry(vVec, i)), 1) && (((Entry2) = Vec_WrdEntry(vVec, i+1)), 1); i += 2 )
////////////////////////////////////////////////////////////////////////
/// FUNCTION DEFINITIONS ///
@@ -669,6 +671,30 @@ static inline void Vec_WrdPush( Vec_Wrd_t * p, word Entry )
}
p->pArray[p->nSize++] = Entry;
}
+static inline void Vec_WrdPushTwo( Vec_Wrd_t * p, word Entry1, word Entry2 )
+{
+ Vec_WrdPush( p, Entry1 );
+ Vec_WrdPush( p, Entry2 );
+}
+static inline void Vec_WrdPushThree( Vec_Wrd_t * p, word Entry1, word Entry2, word Entry3 )
+{
+ Vec_WrdPush( p, Entry1 );
+ Vec_WrdPush( p, Entry2 );
+ Vec_WrdPush( p, Entry3 );
+}
+static inline void Vec_WrdPushFour( Vec_Wrd_t * p, word Entry1, word Entry2, word Entry3, word Entry4 )
+{
+ Vec_WrdPush( p, Entry1 );
+ Vec_WrdPush( p, Entry2 );
+ Vec_WrdPush( p, Entry3 );
+ Vec_WrdPush( p, Entry4 );
+}
+static inline void Vec_WrdPushArray( Vec_Wrd_t * p, word * pEntries, int nEntries )
+{
+ int i;
+ for ( i = 0; i < nEntries; i++ )
+ Vec_WrdPush( p, pEntries[i] );
+}
/**Function*************************************************************