mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-31 11:42:30 +00:00 
			
		
		
		
	Merge branch 'YosysHQ:main' into main
This commit is contained in:
		
						commit
						0e3adb38fc
					
				
					 12 changed files with 9084 additions and 6596 deletions
				
			
		
							
								
								
									
										1
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -1143,6 +1143,7 @@ vcxsrc: $(GENFILES) $(EXTRA_TARGETS) | |||
| 	rm -rf yosys-win32-vcxsrc-$(YOSYS_VER){,.zip} | ||||
| 	set -e; for f in `ls $(filter %.cc %.cpp,$(GENFILES)) $(addsuffix .cc,$(basename $(OBJS))) $(addsuffix .cpp,$(basename $(OBJS))) 2> /dev/null`; do \
 | ||||
| 		echo "Analyse: $$f" >&2; cpp -std=c++17 -MM -I. -D_YOSYS_ $$f; done | sed 's,.*:,,; s,//*,/,g; s,/[^/]*/\.\./,/,g; y, \\,\n\n,;' | grep '^[^/]' | sort -u | grep -v kernel/version_ > srcfiles.txt | ||||
| 	echo "libs/fst/fst_win_unistd.h" >> srcfiles.txt | ||||
| 	bash misc/create_vcxsrc.sh yosys-win32-vcxsrc $(YOSYS_VER) $(GIT_REV) | ||||
| 	echo "namespace Yosys { extern const char *yosys_version_str; const char *yosys_version_str=\"Yosys (Version Information Unavailable)\"; }" > kernel/version.cc | ||||
| 	zip yosys-win32-vcxsrc-$(YOSYS_VER)/genfiles.zip $(GENFILES) kernel/version.cc | ||||
|  |  | |||
							
								
								
									
										58
									
								
								libs/fst/00_PATCH_win_io.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								libs/fst/00_PATCH_win_io.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,58 @@ | |||
| --- fst_win_unistd.h
 | ||||
| +++ fst_win_unistd.h
 | ||||
| @@ -26,7 +26,7 @@
 | ||||
|  #define WIN_UNISTD_H | ||||
|   | ||||
|  #include <stdlib.h> | ||||
| -#ifdef _WIN64
 | ||||
| +#if defined(_MSC_VER)
 | ||||
|  #include <io.h> | ||||
|  #else | ||||
|  #include <sys/io.h> | ||||
| --- fstapi.cc
 | ||||
| +++ fstapi.cc
 | ||||
| @@ -56,7 +56,7 @@
 | ||||
|  #include <pthread.h> | ||||
|  #endif | ||||
|   | ||||
| -#ifdef __MINGW32__
 | ||||
| +#if defined __CYGWIN__ || defined __MINGW32__ || defined _MSC_VER
 | ||||
|  #define WIN32_LEAN_AND_MEAN | ||||
|  #include <windows.h> | ||||
|  #endif | ||||
| @@ -137,7 +137,7 @@ void **JenkinsIns(void *base_i, const unsigned char *mem, uint32_t length, uint3
 | ||||
|  #include <sys/sysctl.h> | ||||
|  #endif | ||||
|   | ||||
| -#if defined(FST_MACOSX) || defined(__MINGW32__) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
 | ||||
| +#if defined(FST_MACOSX) || defined(__MINGW32__) || defined(_MSC_VER) || defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
 | ||||
|  #define FST_UNBUFFERED_IO | ||||
|  #endif | ||||
|   | ||||
| @@ -159,7 +159,7 @@ void **JenkinsIns(void *base_i, const unsigned char *mem, uint32_t length, uint3
 | ||||
|  /***                 ***/ | ||||
|  /***********************/ | ||||
|   | ||||
| -#ifdef __MINGW32__
 | ||||
| +#if defined(__MINGW32__) || defined(_MSC_VER)
 | ||||
|  #include <io.h> | ||||
|  #ifndef HAVE_FSEEKO | ||||
|  #define ftello _ftelli64 | ||||
| @@ -341,7 +341,7 @@ return(NULL);
 | ||||
|  /* | ||||
|   * mmap compatibility | ||||
|   */ | ||||
| -#if defined __MINGW32__
 | ||||
| +#if defined __CYGWIN__ || defined __MINGW32__ || defined _MSC_VER
 | ||||
|  #include <limits.h> | ||||
|  #define fstMmap(__addr,__len,__prot,__flags,__fd,__off) fstMmap2((__len), (__fd), (__off)) | ||||
|  #define fstMunmap(__addr,__len)                         UnmapViewOfFile((LPCVOID)__addr) | ||||
| @@ -4638,7 +4638,7 @@ if(sectype == FST_BL_ZWRAPPER)
 | ||||
|  #endif | ||||
|   | ||||
|          fstReaderFseeko(xc, xc->f, FST_ZWRAPPER_HDR_SIZE, SEEK_SET); | ||||
| -#ifndef __MINGW32__
 | ||||
| +#if !defined(__MINGW32__) && !defined(_MSC_VER)
 | ||||
|          fflush(xc->f); | ||||
|  #else | ||||
|  	/* Windows UCRT runtime library reads one byte ahead in the file | ||||
							
								
								
									
										16
									
								
								libs/fst/00_PATCH_win_zlib.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								libs/fst/00_PATCH_win_zlib.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| --- fstapi.h
 | ||||
| +++ fstapi.h
 | ||||
| @@ -33,11 +33,12 @@ extern "C" {
 | ||||
|  #include <stdlib.h> | ||||
|  #include <string.h> | ||||
|  #include <ctype.h> | ||||
| -#include <zlib.h>
 | ||||
|  #include <inttypes.h> | ||||
|  #if defined(_MSC_VER) | ||||
| +    #include "libs/zlib/zlib.h"
 | ||||
|      #include "fst_win_unistd.h" | ||||
|  #else | ||||
| +    #include <zlib.h>
 | ||||
|      #include <unistd.h> | ||||
|  #endif | ||||
|  #include <time.h> | ||||
							
								
								
									
										19
									
								
								libs/fst/00_UPDATE.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								libs/fst/00_UPDATE.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| mv config.h config.h.bak | ||||
| rm -f *.txt *.cc *.h | ||||
| git clone --depth 1 https://github.com/gtkwave/gtkwave fst_upstream | ||||
| rm fst_upstream/lib/libfst/CMakeLists.txt | ||||
| mv fst_upstream/lib/libfst/*.{h,c,txt} . | ||||
| rm -rf fst_upstream | ||||
| 
 | ||||
| for src in *.c; do | ||||
|     mv -- "$src" "${src%.c}.cc" | ||||
| done | ||||
| mv config.h.bak config.h | ||||
| 
 | ||||
| sed -i -e 's,<config.h>,"config.h",' *.cc *.h | ||||
| sed -i -e 's,"fastlz.c","fastlz.cc",' *.cc *.h | ||||
| 
 | ||||
| patch -p0 < 00_PATCH_win_zlib.patch | ||||
| patch -p0 < 00_PATCH_win_io.patch | ||||
|  | @ -36,15 +36,16 @@ | |||
|  */ | ||||
| #define FASTLZ_SAFE | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Give hints to the compiler for branch prediction optimization. | ||||
|  */ | ||||
| #if defined(__GNUC__) && (__GNUC__ > 2) | ||||
| #define FASTLZ_EXPECT_CONDITIONAL(c) (__builtin_expect((c), 1)) | ||||
| #define FASTLZ_UNEXPECT_CONDITIONAL(c) (__builtin_expect((c), 0)) | ||||
| #define FASTLZ_EXPECT_CONDITIONAL(c)    (__builtin_expect((c), 1)) | ||||
| #define FASTLZ_UNEXPECT_CONDITIONAL(c)  (__builtin_expect((c), 0)) | ||||
| #else | ||||
| #define FASTLZ_EXPECT_CONDITIONAL(c) (c) | ||||
| #define FASTLZ_UNEXPECT_CONDITIONAL(c) (c) | ||||
| #define FASTLZ_EXPECT_CONDITIONAL(c)    (c) | ||||
| #define FASTLZ_UNEXPECT_CONDITIONAL(c)  (c) | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  | @ -63,7 +64,7 @@ | |||
|  */ | ||||
| #if !defined(FASTLZ_STRICT_ALIGN) | ||||
| #define FASTLZ_STRICT_ALIGN | ||||
| #if defined(__i386__) || defined(__386) /* GNU C, Sun Studio */ | ||||
| #if defined(__i386__) || defined(__386)  /* GNU C, Sun Studio */ | ||||
| #undef FASTLZ_STRICT_ALIGN | ||||
| #elif defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(__amd64) /* GNU C */ | ||||
| #undef FASTLZ_STRICT_ALIGN | ||||
|  | @ -79,29 +80,24 @@ | |||
| #endif | ||||
| 
 | ||||
| /* prototypes */ | ||||
| int fastlz_compress(const void *input, int length, void *output); | ||||
| int fastlz_compress_level(int level, const void *input, int length, void *output); | ||||
| int fastlz_decompress(const void *input, int length, void *output, int maxout); | ||||
| int fastlz_compress(const void* input, int length, void* output); | ||||
| int fastlz_compress_level(int level, const void* input, int length, void* output); | ||||
| int fastlz_decompress(const void* input, int length, void* output, int maxout); | ||||
| 
 | ||||
| #define MAX_COPY 32 | ||||
| #define MAX_LEN 264 /* 256 + 8 */ | ||||
| #define MAX_COPY       32 | ||||
| #define MAX_LEN       264  /* 256 + 8 */ | ||||
| #define MAX_DISTANCE 8192 | ||||
| 
 | ||||
| #if !defined(FASTLZ_STRICT_ALIGN) | ||||
| #define FASTLZ_READU16(p) *((const flzuint16 *)(p)) | ||||
| #define FASTLZ_READU16(p) *((const flzuint16*)(p)) | ||||
| #else | ||||
| #define FASTLZ_READU16(p) ((p)[0] | (p)[1] << 8) | ||||
| #define FASTLZ_READU16(p) ((p)[0] | (p)[1]<<8) | ||||
| #endif | ||||
| 
 | ||||
| #define HASH_LOG 13 | ||||
| #define HASH_SIZE (1 << HASH_LOG) | ||||
| #define HASH_MASK (HASH_SIZE - 1) | ||||
| #define HASH_FUNCTION(v, p)                                                                                            \ | ||||
|     {                                                                                                                  \ | ||||
|         v = FASTLZ_READU16(p);                                                                                         \ | ||||
|         v ^= FASTLZ_READU16(p + 1) ^ (v >> (16 - HASH_LOG));                                                           \ | ||||
|         v &= HASH_MASK;                                                                                                \ | ||||
|     } | ||||
| #define HASH_LOG  13 | ||||
| #define HASH_SIZE (1<< HASH_LOG) | ||||
| #define HASH_MASK  (HASH_SIZE-1) | ||||
| #define HASH_FUNCTION(v,p) { v = FASTLZ_READU16(p); v ^= FASTLZ_READU16(p+1)^(v>>(16-HASH_LOG));v &= HASH_MASK; } | ||||
| 
 | ||||
| #undef FASTLZ_LEVEL | ||||
| #define FASTLZ_LEVEL 1 | ||||
|  | @ -110,8 +106,8 @@ int fastlz_decompress(const void *input, int length, void *output, int maxout); | |||
| #undef FASTLZ_DECOMPRESSOR | ||||
| #define FASTLZ_COMPRESSOR fastlz1_compress | ||||
| #define FASTLZ_DECOMPRESSOR fastlz1_decompress | ||||
| static FASTLZ_INLINE int FASTLZ_COMPRESSOR(const void *input, int length, void *output); | ||||
| static FASTLZ_INLINE int FASTLZ_DECOMPRESSOR(const void *input, int length, void *output, int maxout); | ||||
| static FASTLZ_INLINE int FASTLZ_COMPRESSOR(const void* input, int length, void* output); | ||||
| static FASTLZ_INLINE int FASTLZ_DECOMPRESSOR(const void* input, int length, void* output, int maxout); | ||||
| #include "fastlz.cc" | ||||
| 
 | ||||
| #undef FASTLZ_LEVEL | ||||
|  | @ -119,410 +115,435 @@ static FASTLZ_INLINE int FASTLZ_DECOMPRESSOR(const void *input, int length, void | |||
| 
 | ||||
| #undef MAX_DISTANCE | ||||
| #define MAX_DISTANCE 8191 | ||||
| #define MAX_FARDISTANCE (65535 + MAX_DISTANCE - 1) | ||||
| #define MAX_FARDISTANCE (65535+MAX_DISTANCE-1) | ||||
| 
 | ||||
| #undef FASTLZ_COMPRESSOR | ||||
| #undef FASTLZ_DECOMPRESSOR | ||||
| #define FASTLZ_COMPRESSOR fastlz2_compress | ||||
| #define FASTLZ_DECOMPRESSOR fastlz2_decompress | ||||
| static FASTLZ_INLINE int FASTLZ_COMPRESSOR(const void *input, int length, void *output); | ||||
| static FASTLZ_INLINE int FASTLZ_DECOMPRESSOR(const void *input, int length, void *output, int maxout); | ||||
| static FASTLZ_INLINE int FASTLZ_COMPRESSOR(const void* input, int length, void* output); | ||||
| static FASTLZ_INLINE int FASTLZ_DECOMPRESSOR(const void* input, int length, void* output, int maxout); | ||||
| #include "fastlz.cc" | ||||
| 
 | ||||
| int fastlz_compress(const void *input, int length, void *output) | ||||
| int fastlz_compress(const void* input, int length, void* output) | ||||
| { | ||||
|     /* for short block, choose fastlz1 */ | ||||
|     if (length < 65536) | ||||
|         return fastlz1_compress(input, length, output); | ||||
|   /* for short block, choose fastlz1 */ | ||||
|   if(length < 65536) | ||||
|     return fastlz1_compress(input, length, output); | ||||
| 
 | ||||
|     /* else... */ | ||||
|   /* else... */ | ||||
|   return fastlz2_compress(input, length, output); | ||||
| } | ||||
| 
 | ||||
| int fastlz_decompress(const void* input, int length, void* output, int maxout) | ||||
| { | ||||
|   /* magic identifier for compression level */ | ||||
|   int level = ((*(const flzuint8*)input) >> 5) + 1; | ||||
| 
 | ||||
|   if(level == 1) | ||||
|     return fastlz1_decompress(input, length, output, maxout); | ||||
|   if(level == 2) | ||||
|     return fastlz2_decompress(input, length, output, maxout); | ||||
| 
 | ||||
|   /* unknown level, trigger error */ | ||||
|   return 0; | ||||
| } | ||||
| 
 | ||||
| int fastlz_compress_level(int level, const void* input, int length, void* output) | ||||
| { | ||||
|   if(level == 1) | ||||
|     return fastlz1_compress(input, length, output); | ||||
|   if(level == 2) | ||||
|     return fastlz2_compress(input, length, output); | ||||
| } | ||||
| 
 | ||||
| int fastlz_decompress(const void *input, int length, void *output, int maxout) | ||||
| { | ||||
|     /* magic identifier for compression level */ | ||||
|     int level = ((*(const flzuint8 *)input) >> 5) + 1; | ||||
| 
 | ||||
|     if (level == 1) | ||||
|         return fastlz1_decompress(input, length, output, maxout); | ||||
|     if (level == 2) | ||||
|         return fastlz2_decompress(input, length, output, maxout); | ||||
| 
 | ||||
|     /* unknown level, trigger error */ | ||||
|     return 0; | ||||
| } | ||||
| 
 | ||||
| int fastlz_compress_level(int level, const void *input, int length, void *output) | ||||
| { | ||||
|     if (level == 1) | ||||
|         return fastlz1_compress(input, length, output); | ||||
|     if (level == 2) | ||||
|         return fastlz2_compress(input, length, output); | ||||
| 
 | ||||
|     return 0; | ||||
|   return 0; | ||||
| } | ||||
| 
 | ||||
| #else /* !defined(FASTLZ_COMPRESSOR) && !defined(FASTLZ_DECOMPRESSOR) */ | ||||
| 
 | ||||
| static FASTLZ_INLINE int FASTLZ_COMPRESSOR(const void *input, int length, void *output) | ||||
| static FASTLZ_INLINE int FASTLZ_COMPRESSOR(const void* input, int length, void* output) | ||||
| { | ||||
|     const flzuint8 *ip = (const flzuint8 *)input; | ||||
|     const flzuint8 *ip_bound = ip + length - 2; | ||||
|     const flzuint8 *ip_limit = ip + length - 12; | ||||
|     flzuint8 *op = (flzuint8 *)output; | ||||
|   const flzuint8* ip = (const flzuint8*) input; | ||||
|   const flzuint8* ip_bound = ip + length - 2; | ||||
|   const flzuint8* ip_limit = ip + length - 12; | ||||
|   flzuint8* op = (flzuint8*) output; | ||||
| 
 | ||||
|     const flzuint8 *htab[HASH_SIZE]; | ||||
|     const flzuint8 **hslot; | ||||
|     flzuint32 hval; | ||||
|   const flzuint8* htab[HASH_SIZE]; | ||||
|   const flzuint8** hslot; | ||||
|   flzuint32 hval; | ||||
| 
 | ||||
|     flzuint32 copy; | ||||
|   flzuint32 copy; | ||||
| 
 | ||||
|     /* sanity check */ | ||||
|     if (FASTLZ_UNEXPECT_CONDITIONAL(length < 4)) { | ||||
|         if (length) { | ||||
|             /* create literal copy only */ | ||||
|             *op++ = length - 1; | ||||
|             ip_bound++; | ||||
|             while (ip <= ip_bound) | ||||
|                 *op++ = *ip++; | ||||
|             return length + 1; | ||||
|         } else | ||||
|             return 0; | ||||
|   /* sanity check */ | ||||
|   if(FASTLZ_UNEXPECT_CONDITIONAL(length < 4)) | ||||
|   { | ||||
|     if(length) | ||||
|     { | ||||
|       /* create literal copy only */ | ||||
|       *op++ = length-1; | ||||
|       ip_bound++; | ||||
|       while(ip <= ip_bound) | ||||
|         *op++ = *ip++; | ||||
|       return length+1; | ||||
|     } | ||||
|     else | ||||
|       return 0; | ||||
|   } | ||||
| 
 | ||||
|     /* initializes hash table */ | ||||
|     for (hslot = htab; hslot < htab + HASH_SIZE; hslot++) | ||||
|         *hslot = ip; | ||||
|   /* initializes hash table */ | ||||
|   for (hslot = htab; hslot < htab + HASH_SIZE; hslot++) | ||||
|     *hslot = ip; | ||||
| 
 | ||||
|     /* we start with literal copy */ | ||||
|     copy = 2; | ||||
|     *op++ = MAX_COPY - 1; | ||||
|     *op++ = *ip++; | ||||
|     *op++ = *ip++; | ||||
|   /* we start with literal copy */ | ||||
|   copy = 2; | ||||
|   *op++ = MAX_COPY-1; | ||||
|   *op++ = *ip++; | ||||
|   *op++ = *ip++; | ||||
| 
 | ||||
|     /* main loop */ | ||||
|     while (FASTLZ_EXPECT_CONDITIONAL(ip < ip_limit)) { | ||||
|         const flzuint8 *ref; | ||||
|         flzuint32 distance; | ||||
|   /* main loop */ | ||||
|   while(FASTLZ_EXPECT_CONDITIONAL(ip < ip_limit)) | ||||
|   { | ||||
|     const flzuint8* ref; | ||||
|     flzuint32 distance; | ||||
| 
 | ||||
|         /* minimum match length */ | ||||
|         flzuint32 len = 3; | ||||
|     /* minimum match length */ | ||||
|     flzuint32 len = 3; | ||||
| 
 | ||||
|         /* comparison starting-point */ | ||||
|         const flzuint8 *anchor = ip; | ||||
|     /* comparison starting-point */ | ||||
|     const flzuint8* anchor = ip; | ||||
| 
 | ||||
|         /* check for a run */ | ||||
| #if FASTLZ_LEVEL == 2 | ||||
|         if (ip[0] == ip[-1] && FASTLZ_READU16(ip - 1) == FASTLZ_READU16(ip + 1)) { | ||||
|             distance = 1; | ||||
|             /* ip += 3; */ /* scan-build, never used */ | ||||
|             ref = anchor - 1 + 3; | ||||
|             goto match; | ||||
|         } | ||||
|     /* check for a run */ | ||||
| #if FASTLZ_LEVEL==2 | ||||
|     if(ip[0] == ip[-1] && FASTLZ_READU16(ip-1)==FASTLZ_READU16(ip+1)) | ||||
|     { | ||||
|       distance = 1; | ||||
|       /* ip += 3; */ /* scan-build, never used */ | ||||
|       ref = anchor - 1 + 3; | ||||
|       goto match; | ||||
|     } | ||||
| #endif | ||||
| 
 | ||||
|         /* find potential match */ | ||||
|         HASH_FUNCTION(hval, ip); | ||||
|         hslot = htab + hval; | ||||
|         ref = htab[hval]; | ||||
|     /* find potential match */ | ||||
|     HASH_FUNCTION(hval,ip); | ||||
|     hslot = htab + hval; | ||||
|     ref = htab[hval]; | ||||
| 
 | ||||
|         /* calculate distance to the match */ | ||||
|         distance = anchor - ref; | ||||
|     /* calculate distance to the match */ | ||||
|     distance = anchor - ref; | ||||
| 
 | ||||
|         /* update hash table */ | ||||
|         *hslot = anchor; | ||||
|     /* update hash table */ | ||||
|     *hslot = anchor; | ||||
| 
 | ||||
|         /* is this a match? check the first 3 bytes */ | ||||
|         if (distance == 0 || | ||||
| #if FASTLZ_LEVEL == 1 | ||||
|             (distance >= MAX_DISTANCE) || | ||||
|     /* is this a match? check the first 3 bytes */ | ||||
|     if(distance==0 || | ||||
| #if FASTLZ_LEVEL==1 | ||||
|     (distance >= MAX_DISTANCE) || | ||||
| #else | ||||
|             (distance >= MAX_FARDISTANCE) || | ||||
|     (distance >= MAX_FARDISTANCE) || | ||||
| #endif | ||||
|             *ref++ != *ip++ || *ref++ != *ip++ || *ref++ != *ip++) | ||||
|             goto literal; | ||||
|     *ref++ != *ip++ || *ref++!=*ip++ || *ref++!=*ip++) | ||||
|       goto literal; | ||||
| 
 | ||||
| #if FASTLZ_LEVEL == 2 | ||||
|         /* far, needs at least 5-byte match */ | ||||
|         if (distance >= MAX_DISTANCE) { | ||||
|             if (*ip++ != *ref++ || *ip++ != *ref++) | ||||
|                 goto literal; | ||||
|             len += 2; | ||||
|         } | ||||
| #if FASTLZ_LEVEL==2 | ||||
|     /* far, needs at least 5-byte match */ | ||||
|     if(distance >= MAX_DISTANCE) | ||||
|     { | ||||
|       if(*ip++ != *ref++ || *ip++!= *ref++) | ||||
|         goto literal; | ||||
|       len += 2; | ||||
|     } | ||||
| 
 | ||||
|     match: | ||||
| #endif | ||||
| 
 | ||||
|         /* last matched byte */ | ||||
|         ip = anchor + len; | ||||
|     /* last matched byte */ | ||||
|     ip = anchor + len; | ||||
| 
 | ||||
|         /* distance is biased */ | ||||
|         distance--; | ||||
|     /* distance is biased */ | ||||
|     distance--; | ||||
| 
 | ||||
|         if (!distance) { | ||||
|             /* zero distance means a run */ | ||||
|             flzuint8 x = ip[-1]; | ||||
|             while (ip < ip_bound) | ||||
|                 if (*ref++ != x) | ||||
|                     break; | ||||
|                 else | ||||
|                     ip++; | ||||
|         } else | ||||
|             for (;;) { | ||||
|                 /* safe because the outer check against ip limit */ | ||||
|                 if (*ref++ != *ip++) | ||||
|                     break; | ||||
|                 if (*ref++ != *ip++) | ||||
|                     break; | ||||
|                 if (*ref++ != *ip++) | ||||
|                     break; | ||||
|                 if (*ref++ != *ip++) | ||||
|                     break; | ||||
|                 if (*ref++ != *ip++) | ||||
|                     break; | ||||
|                 if (*ref++ != *ip++) | ||||
|                     break; | ||||
|                 if (*ref++ != *ip++) | ||||
|                     break; | ||||
|                 if (*ref++ != *ip++) | ||||
|                     break; | ||||
|                 while (ip < ip_bound) | ||||
|                     if (*ref++ != *ip++) | ||||
|                         break; | ||||
|                 break; | ||||
|             } | ||||
|     if(!distance) | ||||
|     { | ||||
|       /* zero distance means a run */ | ||||
|       flzuint8 x = ip[-1]; | ||||
|       while(ip < ip_bound) | ||||
|         if(*ref++ != x) break; else ip++; | ||||
|     } | ||||
|     else | ||||
|     for(;;) | ||||
|     { | ||||
|       /* safe because the outer check against ip limit */ | ||||
|       if(*ref++ != *ip++) break; | ||||
|       if(*ref++ != *ip++) break; | ||||
|       if(*ref++ != *ip++) break; | ||||
|       if(*ref++ != *ip++) break; | ||||
|       if(*ref++ != *ip++) break; | ||||
|       if(*ref++ != *ip++) break; | ||||
|       if(*ref++ != *ip++) break; | ||||
|       if(*ref++ != *ip++) break; | ||||
|       while(ip < ip_bound) | ||||
|         if(*ref++ != *ip++) break; | ||||
|       break; | ||||
|     } | ||||
| 
 | ||||
|         /* if we have copied something, adjust the copy count */ | ||||
|         if (copy) | ||||
|             /* copy is biased, '0' means 1 byte copy */ | ||||
|             *(op - copy - 1) = copy - 1; | ||||
|         else | ||||
|             /* back, to overwrite the copy count */ | ||||
|             op--; | ||||
|     /* if we have copied something, adjust the copy count */ | ||||
|     if(copy) | ||||
|       /* copy is biased, '0' means 1 byte copy */ | ||||
|       *(op-copy-1) = copy-1; | ||||
|     else | ||||
|       /* back, to overwrite the copy count */ | ||||
|       op--; | ||||
| 
 | ||||
|         /* reset literal counter */ | ||||
|         copy = 0; | ||||
|     /* reset literal counter */ | ||||
|     copy = 0; | ||||
| 
 | ||||
|         /* length is biased, '1' means a match of 3 bytes */ | ||||
|         ip -= 3; | ||||
|         len = ip - anchor; | ||||
|     /* length is biased, '1' means a match of 3 bytes */ | ||||
|     ip -= 3; | ||||
|     len = ip - anchor; | ||||
| 
 | ||||
|         /* encode the match */ | ||||
| #if FASTLZ_LEVEL == 2 | ||||
|         if (distance < MAX_DISTANCE) { | ||||
|             if (len < 7) { | ||||
|                 *op++ = (len << 5) + (distance >> 8); | ||||
|                 *op++ = (distance & 255); | ||||
|             } else { | ||||
|                 *op++ = (7 << 5) + (distance >> 8); | ||||
|                 for (len -= 7; len >= 255; len -= 255) | ||||
|                     *op++ = 255; | ||||
|                 *op++ = len; | ||||
|                 *op++ = (distance & 255); | ||||
|             } | ||||
|         } else { | ||||
|             /* far away, but not yet in the another galaxy... */ | ||||
|             if (len < 7) { | ||||
|                 distance -= MAX_DISTANCE; | ||||
|                 *op++ = (len << 5) + 31; | ||||
|                 *op++ = 255; | ||||
|                 *op++ = distance >> 8; | ||||
|                 *op++ = distance & 255; | ||||
|             } else { | ||||
|                 distance -= MAX_DISTANCE; | ||||
|                 *op++ = (7 << 5) + 31; | ||||
|                 for (len -= 7; len >= 255; len -= 255) | ||||
|                     *op++ = 255; | ||||
|                 *op++ = len; | ||||
|                 *op++ = 255; | ||||
|                 *op++ = distance >> 8; | ||||
|                 *op++ = distance & 255; | ||||
|             } | ||||
|         } | ||||
|     /* encode the match */ | ||||
| #if FASTLZ_LEVEL==2 | ||||
|     if(distance < MAX_DISTANCE) | ||||
|     { | ||||
|       if(len < 7) | ||||
|       { | ||||
|         *op++ = (len << 5) + (distance >> 8); | ||||
|         *op++ = (distance & 255); | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|         *op++ = (7 << 5) + (distance >> 8); | ||||
|         for(len-=7; len >= 255; len-= 255) | ||||
|           *op++ = 255; | ||||
|         *op++ = len; | ||||
|         *op++ = (distance & 255); | ||||
|       } | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|       /* far away, but not yet in the another galaxy... */ | ||||
|       if(len < 7) | ||||
|       { | ||||
|         distance -= MAX_DISTANCE; | ||||
|         *op++ = (len << 5) + 31; | ||||
|         *op++ = 255; | ||||
|         *op++ = distance >> 8; | ||||
|         *op++ = distance & 255; | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|         distance -= MAX_DISTANCE; | ||||
|         *op++ = (7 << 5) + 31; | ||||
|         for(len-=7; len >= 255; len-= 255) | ||||
|           *op++ = 255; | ||||
|         *op++ = len; | ||||
|         *op++ = 255; | ||||
|         *op++ = distance >> 8; | ||||
|         *op++ = distance & 255; | ||||
|       } | ||||
|     } | ||||
| #else | ||||
| 
 | ||||
|         if (FASTLZ_UNEXPECT_CONDITIONAL(len > MAX_LEN - 2)) | ||||
|             while (len > MAX_LEN - 2) { | ||||
|                 *op++ = (7 << 5) + (distance >> 8); | ||||
|                 *op++ = MAX_LEN - 2 - 7 - 2; | ||||
|                 *op++ = (distance & 255); | ||||
|                 len -= MAX_LEN - 2; | ||||
|             } | ||||
|     if(FASTLZ_UNEXPECT_CONDITIONAL(len > MAX_LEN-2)) | ||||
|       while(len > MAX_LEN-2) | ||||
|       { | ||||
|         *op++ = (7 << 5) + (distance >> 8); | ||||
|         *op++ = MAX_LEN - 2 - 7 -2; | ||||
|         *op++ = (distance & 255); | ||||
|         len -= MAX_LEN-2; | ||||
|       } | ||||
| 
 | ||||
|         if (len < 7) { | ||||
|             *op++ = (len << 5) + (distance >> 8); | ||||
|             *op++ = (distance & 255); | ||||
|         } else { | ||||
|             *op++ = (7 << 5) + (distance >> 8); | ||||
|             *op++ = len - 7; | ||||
|             *op++ = (distance & 255); | ||||
|         } | ||||
|     if(len < 7) | ||||
|     { | ||||
|       *op++ = (len << 5) + (distance >> 8); | ||||
|       *op++ = (distance & 255); | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|       *op++ = (7 << 5) + (distance >> 8); | ||||
|       *op++ = len - 7; | ||||
|       *op++ = (distance & 255); | ||||
|     } | ||||
| #endif | ||||
| 
 | ||||
|         /* update the hash at match boundary */ | ||||
|         HASH_FUNCTION(hval, ip); | ||||
|         htab[hval] = ip++; | ||||
|         HASH_FUNCTION(hval, ip); | ||||
|         htab[hval] = ip++; | ||||
|     /* update the hash at match boundary */ | ||||
|     HASH_FUNCTION(hval,ip); | ||||
|     htab[hval] = ip++; | ||||
|     HASH_FUNCTION(hval,ip); | ||||
|     htab[hval] = ip++; | ||||
| 
 | ||||
|         /* assuming literal copy */ | ||||
|         *op++ = MAX_COPY - 1; | ||||
|     /* assuming literal copy */ | ||||
|     *op++ = MAX_COPY-1; | ||||
| 
 | ||||
|         continue; | ||||
|     continue; | ||||
| 
 | ||||
|     literal: | ||||
|         *op++ = *anchor++; | ||||
|         ip = anchor; | ||||
|         copy++; | ||||
|         if (FASTLZ_UNEXPECT_CONDITIONAL(copy == MAX_COPY)) { | ||||
|             copy = 0; | ||||
|             *op++ = MAX_COPY - 1; | ||||
|         } | ||||
|       *op++ = *anchor++; | ||||
|       ip = anchor; | ||||
|       copy++; | ||||
|       if(FASTLZ_UNEXPECT_CONDITIONAL(copy == MAX_COPY)) | ||||
|       { | ||||
|         copy = 0; | ||||
|         *op++ = MAX_COPY-1; | ||||
|       } | ||||
|   } | ||||
| 
 | ||||
|   /* left-over as literal copy */ | ||||
|   ip_bound++; | ||||
|   while(ip <= ip_bound) | ||||
|   { | ||||
|     *op++ = *ip++; | ||||
|     copy++; | ||||
|     if(copy == MAX_COPY) | ||||
|     { | ||||
|       copy = 0; | ||||
|       *op++ = MAX_COPY-1; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|     /* left-over as literal copy */ | ||||
|     ip_bound++; | ||||
|     while (ip <= ip_bound) { | ||||
|         *op++ = *ip++; | ||||
|         copy++; | ||||
|         if (copy == MAX_COPY) { | ||||
|             copy = 0; | ||||
|             *op++ = MAX_COPY - 1; | ||||
|         } | ||||
|     } | ||||
|   /* if we have copied something, adjust the copy length */ | ||||
|   if(copy) | ||||
|     *(op-copy-1) = copy-1; | ||||
|   else | ||||
|     op--; | ||||
| 
 | ||||
|     /* if we have copied something, adjust the copy length */ | ||||
|     if (copy) | ||||
|         *(op - copy - 1) = copy - 1; | ||||
|     else | ||||
|         op--; | ||||
| 
 | ||||
| #if FASTLZ_LEVEL == 2 | ||||
|     /* marker for fastlz2 */ | ||||
|     *(flzuint8 *)output |= (1 << 5); | ||||
| #if FASTLZ_LEVEL==2 | ||||
|   /* marker for fastlz2 */ | ||||
|   *(flzuint8*)output |= (1 << 5); | ||||
| #endif | ||||
| 
 | ||||
|     return op - (flzuint8 *)output; | ||||
|   return op - (flzuint8*)output; | ||||
| } | ||||
| 
 | ||||
| static FASTLZ_INLINE int FASTLZ_DECOMPRESSOR(const void *input, int length, void *output, int maxout) | ||||
| static FASTLZ_INLINE int FASTLZ_DECOMPRESSOR(const void* input, int length, void* output, int maxout) | ||||
| { | ||||
|     const flzuint8 *ip = (const flzuint8 *)input; | ||||
|     const flzuint8 *ip_limit = ip + length; | ||||
|     flzuint8 *op = (flzuint8 *)output; | ||||
|     flzuint8 *op_limit = op + maxout; | ||||
|     flzuint32 ctrl = (*ip++) & 31; | ||||
|     int loop = 1; | ||||
|   const flzuint8* ip = (const flzuint8*) input; | ||||
|   const flzuint8* ip_limit  = ip + length; | ||||
|   flzuint8* op = (flzuint8*) output; | ||||
|   flzuint8* op_limit = op + maxout; | ||||
|   flzuint32 ctrl = (*ip++) & 31; | ||||
|   int loop = 1; | ||||
| 
 | ||||
|     do { | ||||
|         const flzuint8 *ref = op; | ||||
|         flzuint32 len = ctrl >> 5; | ||||
|         flzuint32 ofs = (ctrl & 31) << 8; | ||||
|   do | ||||
|   { | ||||
|     const flzuint8* ref = op; | ||||
|     flzuint32 len = ctrl >> 5; | ||||
|     flzuint32 ofs = (ctrl & 31) << 8; | ||||
| 
 | ||||
|         if (ctrl >= 32) { | ||||
| #if FASTLZ_LEVEL == 2 | ||||
|             flzuint8 code; | ||||
|     if(ctrl >= 32) | ||||
|     { | ||||
| #if FASTLZ_LEVEL==2 | ||||
|       flzuint8 code; | ||||
| #endif | ||||
|             len--; | ||||
|             ref -= ofs; | ||||
|             if (len == 7 - 1) | ||||
| #if FASTLZ_LEVEL == 1 | ||||
|                 len += *ip++; | ||||
|             ref -= *ip++; | ||||
|       len--; | ||||
|       ref -= ofs; | ||||
|       if (len == 7-1) | ||||
| #if FASTLZ_LEVEL==1 | ||||
|         len += *ip++; | ||||
|       ref -= *ip++; | ||||
| #else | ||||
|                 do { | ||||
|                     code = *ip++; | ||||
|                     len += code; | ||||
|                 } while (code == 255); | ||||
|             code = *ip++; | ||||
|             ref -= code; | ||||
|         do | ||||
|         { | ||||
|           code = *ip++; | ||||
|           len += code; | ||||
|         } while (code==255); | ||||
|       code = *ip++; | ||||
|       ref -= code; | ||||
| 
 | ||||
|             /* match from 16-bit distance */ | ||||
|             if (FASTLZ_UNEXPECT_CONDITIONAL(code == 255)) | ||||
|                 if (FASTLZ_EXPECT_CONDITIONAL(ofs == (31 << 8))) { | ||||
|                     ofs = (*ip++) << 8; | ||||
|                     ofs += *ip++; | ||||
|                     ref = op - ofs - MAX_DISTANCE; | ||||
|                 } | ||||
|       /* match from 16-bit distance */ | ||||
|       if(FASTLZ_UNEXPECT_CONDITIONAL(code==255)) | ||||
|       if(FASTLZ_EXPECT_CONDITIONAL(ofs==(31 << 8))) | ||||
|       { | ||||
|         ofs = (*ip++) << 8; | ||||
|         ofs += *ip++; | ||||
|         ref = op - ofs - MAX_DISTANCE; | ||||
|       } | ||||
| #endif | ||||
| 
 | ||||
| #ifdef FASTLZ_SAFE | ||||
|             if (FASTLZ_UNEXPECT_CONDITIONAL(op + len + 3 > op_limit)) | ||||
|                 return 0; | ||||
|       if (FASTLZ_UNEXPECT_CONDITIONAL(op + len + 3 > op_limit)) | ||||
|         return 0; | ||||
| 
 | ||||
|             if (FASTLZ_UNEXPECT_CONDITIONAL(ref - 1 < (flzuint8 *)output)) | ||||
|                 return 0; | ||||
|       if (FASTLZ_UNEXPECT_CONDITIONAL(ref-1 < (flzuint8 *)output)) | ||||
|         return 0; | ||||
| #endif | ||||
| 
 | ||||
|             if (FASTLZ_EXPECT_CONDITIONAL(ip < ip_limit)) | ||||
|                 ctrl = *ip++; | ||||
|             else | ||||
|                 loop = 0; | ||||
|       if(FASTLZ_EXPECT_CONDITIONAL(ip < ip_limit)) | ||||
|         ctrl = *ip++; | ||||
|       else | ||||
|         loop = 0; | ||||
| 
 | ||||
|             if (ref == op) { | ||||
|                 /* optimize copy for a run */ | ||||
|                 flzuint8 b = ref[-1]; | ||||
|                 *op++ = b; | ||||
|                 *op++ = b; | ||||
|                 *op++ = b; | ||||
|                 for (; len; --len) | ||||
|                     *op++ = b; | ||||
|             } else { | ||||
|       if(ref == op) | ||||
|       { | ||||
|         /* optimize copy for a run */ | ||||
|         flzuint8 b = ref[-1]; | ||||
|         *op++ = b; | ||||
|         *op++ = b; | ||||
|         *op++ = b; | ||||
|         for(; len; --len) | ||||
|           *op++ = b; | ||||
|       } | ||||
|       else | ||||
|       { | ||||
| #if !defined(FASTLZ_STRICT_ALIGN) | ||||
|                 const flzuint16 *p; | ||||
|                 flzuint16 *q; | ||||
|         const flzuint16* p; | ||||
|         flzuint16* q; | ||||
| #endif | ||||
|                 /* copy from reference */ | ||||
|                 ref--; | ||||
|                 *op++ = *ref++; | ||||
|                 *op++ = *ref++; | ||||
|                 *op++ = *ref++; | ||||
|         /* copy from reference */ | ||||
|         ref--; | ||||
|         *op++ = *ref++; | ||||
|         *op++ = *ref++; | ||||
|         *op++ = *ref++; | ||||
| 
 | ||||
| #if !defined(FASTLZ_STRICT_ALIGN) | ||||
|                 /* copy a byte, so that now it's word aligned */ | ||||
|                 if (len & 1) { | ||||
|                     *op++ = *ref++; | ||||
|                     len--; | ||||
|                 } | ||||
| 
 | ||||
|                 /* copy 16-bit at once */ | ||||
|                 q = (flzuint16 *)op; | ||||
|                 op += len; | ||||
|                 p = (const flzuint16 *)ref; | ||||
|                 for (len >>= 1; len > 4; len -= 4) { | ||||
|                     *q++ = *p++; | ||||
|                     *q++ = *p++; | ||||
|                     *q++ = *p++; | ||||
|                     *q++ = *p++; | ||||
|                 } | ||||
|                 for (; len; --len) | ||||
|                     *q++ = *p++; | ||||
| #else | ||||
|                 for (; len; --len) | ||||
|                     *op++ = *ref++; | ||||
| #endif | ||||
|             } | ||||
|         } else { | ||||
|             ctrl++; | ||||
| #ifdef FASTLZ_SAFE | ||||
|             if (FASTLZ_UNEXPECT_CONDITIONAL(op + ctrl > op_limit)) | ||||
|                 return 0; | ||||
|             if (FASTLZ_UNEXPECT_CONDITIONAL(ip + ctrl > ip_limit)) | ||||
|                 return 0; | ||||
| #endif | ||||
| 
 | ||||
|             *op++ = *ip++; | ||||
|             for (--ctrl; ctrl; ctrl--) | ||||
|                 *op++ = *ip++; | ||||
| 
 | ||||
|             loop = FASTLZ_EXPECT_CONDITIONAL(ip < ip_limit); | ||||
|             if (loop) | ||||
|                 ctrl = *ip++; | ||||
|         /* copy a byte, so that now it's word aligned */ | ||||
|         if(len & 1) | ||||
|         { | ||||
|           *op++ = *ref++; | ||||
|           len--; | ||||
|         } | ||||
|     } while (FASTLZ_EXPECT_CONDITIONAL(loop)); | ||||
| 
 | ||||
|     return op - (flzuint8 *)output; | ||||
|         /* copy 16-bit at once */ | ||||
|         q = (flzuint16*) op; | ||||
|         op += len; | ||||
|         p = (const flzuint16*) ref; | ||||
|         for(len>>=1; len > 4; len-=4) | ||||
|         { | ||||
|           *q++ = *p++; | ||||
|           *q++ = *p++; | ||||
|           *q++ = *p++; | ||||
|           *q++ = *p++; | ||||
|         } | ||||
|         for(; len; --len) | ||||
|           *q++ = *p++; | ||||
| #else | ||||
|         for(; len; --len) | ||||
|           *op++ = *ref++; | ||||
| #endif | ||||
|       } | ||||
|     } | ||||
|     else | ||||
|     { | ||||
|       ctrl++; | ||||
| #ifdef FASTLZ_SAFE | ||||
|       if (FASTLZ_UNEXPECT_CONDITIONAL(op + ctrl > op_limit)) | ||||
|         return 0; | ||||
|       if (FASTLZ_UNEXPECT_CONDITIONAL(ip + ctrl > ip_limit)) | ||||
|         return 0; | ||||
| #endif | ||||
| 
 | ||||
|       *op++ = *ip++; | ||||
|       for(--ctrl; ctrl; ctrl--) | ||||
|         *op++ = *ip++; | ||||
| 
 | ||||
|       loop = FASTLZ_EXPECT_CONDITIONAL(ip < ip_limit); | ||||
|       if(loop) | ||||
|         ctrl = *ip++; | ||||
|     } | ||||
|   } | ||||
|   while(FASTLZ_EXPECT_CONDITIONAL(loop)); | ||||
| 
 | ||||
|   return op - (flzuint8*)output; | ||||
| } | ||||
| 
 | ||||
| #endif /* !defined(FASTLZ_COMPRESSOR) && !defined(FASTLZ_DECOMPRESSOR) */ | ||||
|  |  | |||
							
								
								
									
										52
									
								
								libs/fst/fst_win_unistd.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								libs/fst/fst_win_unistd.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,52 @@ | |||
| /*
 | ||||
|  * Copyright (c) 2009-2018 Tony Bybell. | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a | ||||
|  * copy of this software and associated documentation files (the "Software"), | ||||
|  * to deal in the Software without restriction, including without limitation | ||||
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||
|  * and/or sell copies of the Software, and to permit persons to whom the | ||||
|  * Software is furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in | ||||
|  * all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||||
|  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||||
|  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||||
|  * DEALINGS IN THE SOFTWARE. | ||||
|  * | ||||
|  * SPDX-License-Identifier: MIT | ||||
|  */ | ||||
| 
 | ||||
| #ifndef WIN_UNISTD_H | ||||
| #define WIN_UNISTD_H | ||||
| 
 | ||||
| #include <stdlib.h> | ||||
| #if defined(_MSC_VER) | ||||
| #include <io.h> | ||||
| #else | ||||
| #include <sys/io.h> | ||||
| #endif | ||||
| 
 | ||||
| #include <process.h> | ||||
| 
 | ||||
| #define ftruncate _chsize_s | ||||
| #define unlink _unlink | ||||
| #define fileno _fileno | ||||
| #define lseek _lseeki64 | ||||
| 
 | ||||
| #ifdef _WIN64 | ||||
| #define ssize_t __int64 | ||||
| #define SSIZE_MAX 9223372036854775807i64 | ||||
| #else | ||||
| #define ssize_t long | ||||
| #define SSIZE_MAX 2147483647L | ||||
| #endif | ||||
| 
 | ||||
| #include "stdint.h" | ||||
| 
 | ||||
| #endif //WIN_UNISTD_H
 | ||||
							
								
								
									
										9535
									
								
								libs/fst/fstapi.cc
									
										
									
									
									
								
							
							
						
						
									
										9535
									
								
								libs/fst/fstapi.cc
									
										
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -35,28 +35,11 @@ extern "C" { | |||
| #include <ctype.h> | ||||
| #include <inttypes.h> | ||||
| #if defined(_MSC_VER) | ||||
| #include "libs/zlib/zlib.h" | ||||
| #include <io.h> | ||||
| 
 | ||||
| #include <process.h> | ||||
| 
 | ||||
| #define ftruncate _chsize_s | ||||
| #define unlink _unlink | ||||
| #define fileno _fileno | ||||
| #define lseek _lseeki64 | ||||
| 
 | ||||
| #ifdef _WIN64 | ||||
| #define ssize_t __int64 | ||||
| #define SSIZE_MAX 9223372036854775807i64 | ||||
|     #include "libs/zlib/zlib.h" | ||||
|     #include "fst_win_unistd.h" | ||||
| #else | ||||
| #define ssize_t long | ||||
| #define SSIZE_MAX 2147483647L | ||||
| #endif | ||||
| 
 | ||||
| #include "stdint.h" | ||||
| #else | ||||
| #include <zlib.h> | ||||
| #include <unistd.h> | ||||
|     #include <zlib.h> | ||||
|     #include <unistd.h> | ||||
| #endif | ||||
| #include <time.h> | ||||
| 
 | ||||
|  | @ -65,433 +48,417 @@ extern "C" { | |||
| typedef uint32_t fstHandle; | ||||
| typedef uint32_t fstEnumHandle; | ||||
| 
 | ||||
| enum fstWriterPackType | ||||
| { | ||||
|     FST_WR_PT_ZLIB = 0, | ||||
|     FST_WR_PT_FASTLZ = 1, | ||||
|     FST_WR_PT_LZ4 = 2 | ||||
| enum fstWriterPackType { | ||||
|     FST_WR_PT_ZLIB             = 0, | ||||
|     FST_WR_PT_FASTLZ           = 1, | ||||
|     FST_WR_PT_LZ4              = 2 | ||||
| }; | ||||
| 
 | ||||
| enum fstFileType | ||||
| { | ||||
|     FST_FT_MIN = 0, | ||||
| enum fstFileType { | ||||
|     FST_FT_MIN                 = 0, | ||||
| 
 | ||||
|     FST_FT_VERILOG = 0, | ||||
|     FST_FT_VHDL = 1, | ||||
|     FST_FT_VERILOG_VHDL = 2, | ||||
|     FST_FT_VERILOG             = 0, | ||||
|     FST_FT_VHDL                = 1, | ||||
|     FST_FT_VERILOG_VHDL        = 2, | ||||
| 
 | ||||
|     FST_FT_MAX = 2 | ||||
|     FST_FT_MAX                 = 2 | ||||
| }; | ||||
| 
 | ||||
| enum fstBlockType | ||||
| { | ||||
|     FST_BL_HDR = 0, | ||||
|     FST_BL_VCDATA = 1, | ||||
|     FST_BL_BLACKOUT = 2, | ||||
|     FST_BL_GEOM = 3, | ||||
|     FST_BL_HIER = 4, | ||||
|     FST_BL_VCDATA_DYN_ALIAS = 5, | ||||
|     FST_BL_HIER_LZ4 = 6, | ||||
|     FST_BL_HIER_LZ4DUO = 7, | ||||
|     FST_BL_VCDATA_DYN_ALIAS2 = 8, | ||||
| enum fstBlockType { | ||||
|     FST_BL_HDR                 = 0, | ||||
|     FST_BL_VCDATA              = 1, | ||||
|     FST_BL_BLACKOUT            = 2, | ||||
|     FST_BL_GEOM                = 3, | ||||
|     FST_BL_HIER                = 4, | ||||
|     FST_BL_VCDATA_DYN_ALIAS    = 5, | ||||
|     FST_BL_HIER_LZ4            = 6, | ||||
|     FST_BL_HIER_LZ4DUO         = 7, | ||||
|     FST_BL_VCDATA_DYN_ALIAS2   = 8, | ||||
| 
 | ||||
|     FST_BL_ZWRAPPER = 254, /* indicates that whole trace is gz wrapped */ | ||||
|     FST_BL_SKIP = 255      /* used while block is being written */ | ||||
|     FST_BL_ZWRAPPER            = 254,   /* indicates that whole trace is gz wrapped */ | ||||
|     FST_BL_SKIP                = 255    /* used while block is being written */ | ||||
| }; | ||||
| 
 | ||||
| enum fstScopeType | ||||
| { | ||||
|     FST_ST_MIN = 0, | ||||
| enum fstScopeType { | ||||
|     FST_ST_MIN                 = 0, | ||||
| 
 | ||||
|     FST_ST_VCD_MODULE = 0, | ||||
|     FST_ST_VCD_TASK = 1, | ||||
|     FST_ST_VCD_FUNCTION = 2, | ||||
|     FST_ST_VCD_BEGIN = 3, | ||||
|     FST_ST_VCD_FORK = 4, | ||||
|     FST_ST_VCD_GENERATE = 5, | ||||
|     FST_ST_VCD_STRUCT = 6, | ||||
|     FST_ST_VCD_UNION = 7, | ||||
|     FST_ST_VCD_CLASS = 8, | ||||
|     FST_ST_VCD_INTERFACE = 9, | ||||
|     FST_ST_VCD_PACKAGE = 10, | ||||
|     FST_ST_VCD_PROGRAM = 11, | ||||
|     FST_ST_VCD_MODULE          = 0, | ||||
|     FST_ST_VCD_TASK            = 1, | ||||
|     FST_ST_VCD_FUNCTION        = 2, | ||||
|     FST_ST_VCD_BEGIN           = 3, | ||||
|     FST_ST_VCD_FORK            = 4, | ||||
|     FST_ST_VCD_GENERATE        = 5, | ||||
|     FST_ST_VCD_STRUCT          = 6, | ||||
|     FST_ST_VCD_UNION           = 7, | ||||
|     FST_ST_VCD_CLASS           = 8, | ||||
|     FST_ST_VCD_INTERFACE       = 9, | ||||
|     FST_ST_VCD_PACKAGE         = 10, | ||||
|     FST_ST_VCD_PROGRAM         = 11, | ||||
| 
 | ||||
|     FST_ST_VHDL_ARCHITECTURE = 12, | ||||
|     FST_ST_VHDL_PROCEDURE = 13, | ||||
|     FST_ST_VHDL_FUNCTION = 14, | ||||
|     FST_ST_VHDL_RECORD = 15, | ||||
|     FST_ST_VHDL_PROCESS = 16, | ||||
|     FST_ST_VHDL_BLOCK = 17, | ||||
|     FST_ST_VHDL_FOR_GENERATE = 18, | ||||
|     FST_ST_VHDL_IF_GENERATE = 19, | ||||
|     FST_ST_VHDL_GENERATE = 20, | ||||
|     FST_ST_VHDL_PACKAGE = 21, | ||||
|     FST_ST_VHDL_ARCHITECTURE   = 12, | ||||
|     FST_ST_VHDL_PROCEDURE      = 13, | ||||
|     FST_ST_VHDL_FUNCTION       = 14, | ||||
|     FST_ST_VHDL_RECORD         = 15, | ||||
|     FST_ST_VHDL_PROCESS        = 16, | ||||
|     FST_ST_VHDL_BLOCK          = 17, | ||||
|     FST_ST_VHDL_FOR_GENERATE   = 18, | ||||
|     FST_ST_VHDL_IF_GENERATE    = 19, | ||||
|     FST_ST_VHDL_GENERATE       = 20, | ||||
|     FST_ST_VHDL_PACKAGE        = 21, | ||||
| 
 | ||||
|     FST_ST_MAX = 21, | ||||
|     FST_ST_MAX                 = 21, | ||||
| 
 | ||||
|     FST_ST_GEN_ATTRBEGIN = 252, | ||||
|     FST_ST_GEN_ATTREND = 253, | ||||
|     FST_ST_GEN_ATTRBEGIN       = 252, | ||||
|     FST_ST_GEN_ATTREND         = 253, | ||||
| 
 | ||||
|     FST_ST_VCD_SCOPE = 254, | ||||
|     FST_ST_VCD_UPSCOPE = 255 | ||||
|     FST_ST_VCD_SCOPE           = 254, | ||||
|     FST_ST_VCD_UPSCOPE         = 255 | ||||
| }; | ||||
| 
 | ||||
| enum fstVarType | ||||
| { | ||||
|     FST_VT_MIN = 0, /* start of vartypes */ | ||||
| enum fstVarType { | ||||
|     FST_VT_MIN                 = 0,     /* start of vartypes */ | ||||
| 
 | ||||
|     FST_VT_VCD_EVENT = 0, | ||||
|     FST_VT_VCD_INTEGER = 1, | ||||
|     FST_VT_VCD_PARAMETER = 2, | ||||
|     FST_VT_VCD_REAL = 3, | ||||
|     FST_VT_VCD_REAL_PARAMETER = 4, | ||||
|     FST_VT_VCD_REG = 5, | ||||
|     FST_VT_VCD_SUPPLY0 = 6, | ||||
|     FST_VT_VCD_SUPPLY1 = 7, | ||||
|     FST_VT_VCD_TIME = 8, | ||||
|     FST_VT_VCD_TRI = 9, | ||||
|     FST_VT_VCD_TRIAND = 10, | ||||
|     FST_VT_VCD_TRIOR = 11, | ||||
|     FST_VT_VCD_TRIREG = 12, | ||||
|     FST_VT_VCD_TRI0 = 13, | ||||
|     FST_VT_VCD_TRI1 = 14, | ||||
|     FST_VT_VCD_WAND = 15, | ||||
|     FST_VT_VCD_WIRE = 16, | ||||
|     FST_VT_VCD_WOR = 17, | ||||
|     FST_VT_VCD_PORT = 18, | ||||
|     FST_VT_VCD_SPARRAY = 19, /* used to define the rownum (index) port for a sparse array */ | ||||
|     FST_VT_VCD_REALTIME = 20, | ||||
|     FST_VT_VCD_EVENT           = 0, | ||||
|     FST_VT_VCD_INTEGER         = 1, | ||||
|     FST_VT_VCD_PARAMETER       = 2, | ||||
|     FST_VT_VCD_REAL            = 3, | ||||
|     FST_VT_VCD_REAL_PARAMETER  = 4, | ||||
|     FST_VT_VCD_REG             = 5, | ||||
|     FST_VT_VCD_SUPPLY0         = 6, | ||||
|     FST_VT_VCD_SUPPLY1         = 7, | ||||
|     FST_VT_VCD_TIME            = 8, | ||||
|     FST_VT_VCD_TRI             = 9, | ||||
|     FST_VT_VCD_TRIAND          = 10, | ||||
|     FST_VT_VCD_TRIOR           = 11, | ||||
|     FST_VT_VCD_TRIREG          = 12, | ||||
|     FST_VT_VCD_TRI0            = 13, | ||||
|     FST_VT_VCD_TRI1            = 14, | ||||
|     FST_VT_VCD_WAND            = 15, | ||||
|     FST_VT_VCD_WIRE            = 16, | ||||
|     FST_VT_VCD_WOR             = 17, | ||||
|     FST_VT_VCD_PORT            = 18, | ||||
|     FST_VT_VCD_SPARRAY         = 19,    /* used to define the rownum (index) port for a sparse array */ | ||||
|     FST_VT_VCD_REALTIME        = 20, | ||||
| 
 | ||||
|     FST_VT_GEN_STRING = | ||||
|             21, /* generic string type   (max len is defined dynamically via fstWriterEmitVariableLengthValueChange) */ | ||||
|     FST_VT_GEN_STRING          = 21,    /* generic string type   (max len is defined dynamically via fstWriterEmitVariableLengthValueChange) */ | ||||
| 
 | ||||
|     FST_VT_SV_BIT = 22, | ||||
|     FST_VT_SV_LOGIC = 23, | ||||
|     FST_VT_SV_INT = 24,      /* declare as size = 32 */ | ||||
|     FST_VT_SV_SHORTINT = 25, /* declare as size = 16 */ | ||||
|     FST_VT_SV_LONGINT = 26,  /* declare as size = 64 */ | ||||
|     FST_VT_SV_BYTE = 27,     /* declare as size = 8  */ | ||||
|     FST_VT_SV_ENUM = 28,     /* declare as appropriate type range */ | ||||
|     FST_VT_SV_SHORTREAL = | ||||
|             29, /* declare and emit same as FST_VT_VCD_REAL (needs to be emitted as double, not a float) */ | ||||
|     FST_VT_SV_BIT              = 22, | ||||
|     FST_VT_SV_LOGIC            = 23, | ||||
|     FST_VT_SV_INT              = 24,    /* declare as size = 32 */ | ||||
|     FST_VT_SV_SHORTINT         = 25,    /* declare as size = 16 */ | ||||
|     FST_VT_SV_LONGINT          = 26,    /* declare as size = 64 */ | ||||
|     FST_VT_SV_BYTE             = 27,    /* declare as size = 8  */ | ||||
|     FST_VT_SV_ENUM             = 28,    /* declare as appropriate type range */ | ||||
|     FST_VT_SV_SHORTREAL        = 29,    /* declare and emit same as FST_VT_VCD_REAL (needs to be emitted as double, not a float) */ | ||||
| 
 | ||||
|     FST_VT_MAX = 29 /* end of vartypes */ | ||||
|     FST_VT_MAX                 = 29     /* end of vartypes */ | ||||
| }; | ||||
| 
 | ||||
| enum fstVarDir | ||||
| { | ||||
|     FST_VD_MIN = 0, | ||||
| enum fstVarDir { | ||||
|     FST_VD_MIN         = 0, | ||||
| 
 | ||||
|     FST_VD_IMPLICIT = 0, | ||||
|     FST_VD_INPUT = 1, | ||||
|     FST_VD_OUTPUT = 2, | ||||
|     FST_VD_INOUT = 3, | ||||
|     FST_VD_BUFFER = 4, | ||||
|     FST_VD_LINKAGE = 5, | ||||
|     FST_VD_IMPLICIT    = 0, | ||||
|     FST_VD_INPUT       = 1, | ||||
|     FST_VD_OUTPUT      = 2, | ||||
|     FST_VD_INOUT       = 3, | ||||
|     FST_VD_BUFFER      = 4, | ||||
|     FST_VD_LINKAGE     = 5, | ||||
| 
 | ||||
|     FST_VD_MAX = 5 | ||||
|     FST_VD_MAX         = 5 | ||||
| }; | ||||
| 
 | ||||
| enum fstHierType | ||||
| { | ||||
|     FST_HT_MIN = 0, | ||||
| enum fstHierType { | ||||
|     FST_HT_MIN         = 0, | ||||
| 
 | ||||
|     FST_HT_SCOPE = 0, | ||||
|     FST_HT_UPSCOPE = 1, | ||||
|     FST_HT_VAR = 2, | ||||
|     FST_HT_ATTRBEGIN = 3, | ||||
|     FST_HT_ATTREND = 4, | ||||
|     FST_HT_SCOPE       = 0, | ||||
|     FST_HT_UPSCOPE     = 1, | ||||
|     FST_HT_VAR         = 2, | ||||
|     FST_HT_ATTRBEGIN   = 3, | ||||
|     FST_HT_ATTREND     = 4, | ||||
| 
 | ||||
|     /* FST_HT_TREEBEGIN and FST_HT_TREEEND are not yet used by FST but are currently used when fstHier bridges other
 | ||||
|        formats */ | ||||
|     FST_HT_TREEBEGIN = 5, | ||||
|     FST_HT_TREEEND = 6, | ||||
|     /* FST_HT_TREEBEGIN and FST_HT_TREEEND are not yet used by FST but are currently used when fstHier bridges other formats */ | ||||
|     FST_HT_TREEBEGIN   = 5, | ||||
|     FST_HT_TREEEND     = 6, | ||||
| 
 | ||||
|     FST_HT_MAX = 6 | ||||
|     FST_HT_MAX         = 6 | ||||
| }; | ||||
| 
 | ||||
| enum fstAttrType | ||||
| { | ||||
|     FST_AT_MIN = 0, | ||||
| enum fstAttrType { | ||||
|     FST_AT_MIN         = 0, | ||||
| 
 | ||||
|     FST_AT_MISC = 0, /* self-contained: does not need matching FST_HT_ATTREND */ | ||||
|     FST_AT_ARRAY = 1, | ||||
|     FST_AT_ENUM = 2, | ||||
|     FST_AT_PACK = 3, | ||||
|     FST_AT_MISC        = 0,     /* self-contained: does not need matching FST_HT_ATTREND */ | ||||
|     FST_AT_ARRAY       = 1, | ||||
|     FST_AT_ENUM        = 2, | ||||
|     FST_AT_PACK        = 3, | ||||
| 
 | ||||
|     FST_AT_MAX = 3 | ||||
|     FST_AT_MAX         = 3 | ||||
| }; | ||||
| 
 | ||||
| enum fstMiscType | ||||
| { | ||||
|     FST_MT_MIN = 0, | ||||
| enum fstMiscType { | ||||
|     FST_MT_MIN         = 0, | ||||
| 
 | ||||
|     FST_MT_COMMENT = 0,     /* use fstWriterSetComment() to emit */ | ||||
|     FST_MT_ENVVAR = 1,      /* use fstWriterSetEnvVar() to emit */ | ||||
|     FST_MT_SUPVAR = 2,      /* use fstWriterCreateVar2() to emit */ | ||||
|     FST_MT_PATHNAME = 3,    /* reserved for fstWriterSetSourceStem() string -> number management */ | ||||
|     FST_MT_SOURCESTEM = 4,  /* use fstWriterSetSourceStem() to emit */ | ||||
|     FST_MT_SOURCEISTEM = 5, /* use fstWriterSetSourceInstantiationStem() to emit */ | ||||
|     FST_MT_VALUELIST = 6,   /* use fstWriterSetValueList() to emit, followed by fstWriterCreateVar*() */ | ||||
|     FST_MT_ENUMTABLE = 7,   /* use fstWriterCreateEnumTable() and fstWriterEmitEnumTableRef() to emit */ | ||||
|     FST_MT_UNKNOWN = 8, | ||||
|     FST_MT_COMMENT     = 0,     /* use fstWriterSetComment() to emit */ | ||||
|     FST_MT_ENVVAR      = 1,     /* use fstWriterSetEnvVar() to emit */ | ||||
|     FST_MT_SUPVAR      = 2,     /* use fstWriterCreateVar2() to emit */ | ||||
|     FST_MT_PATHNAME    = 3,     /* reserved for fstWriterSetSourceStem() string -> number management */ | ||||
|     FST_MT_SOURCESTEM  = 4,     /* use fstWriterSetSourceStem() to emit */ | ||||
|     FST_MT_SOURCEISTEM = 5,     /* use fstWriterSetSourceInstantiationStem() to emit */ | ||||
|     FST_MT_VALUELIST   = 6,	/* use fstWriterSetValueList() to emit, followed by fstWriterCreateVar*() */ | ||||
|     FST_MT_ENUMTABLE   = 7,	/* use fstWriterCreateEnumTable() and fstWriterEmitEnumTableRef() to emit */ | ||||
|     FST_MT_UNKNOWN     = 8, | ||||
| 
 | ||||
|     FST_MT_MAX = 8 | ||||
|     FST_MT_MAX         = 8 | ||||
| }; | ||||
| 
 | ||||
| enum fstArrayType | ||||
| { | ||||
|     FST_AR_MIN = 0, | ||||
| enum fstArrayType { | ||||
|     FST_AR_MIN         = 0, | ||||
| 
 | ||||
|     FST_AR_NONE = 0, | ||||
|     FST_AR_UNPACKED = 1, | ||||
|     FST_AR_PACKED = 2, | ||||
|     FST_AR_SPARSE = 3, | ||||
|     FST_AR_NONE        = 0, | ||||
|     FST_AR_UNPACKED    = 1, | ||||
|     FST_AR_PACKED      = 2, | ||||
|     FST_AR_SPARSE      = 3, | ||||
| 
 | ||||
|     FST_AR_MAX = 3 | ||||
|     FST_AR_MAX         = 3 | ||||
| }; | ||||
| 
 | ||||
| enum fstEnumValueType | ||||
| { | ||||
|     FST_EV_SV_INTEGER = 0, | ||||
|     FST_EV_SV_BIT = 1, | ||||
|     FST_EV_SV_LOGIC = 2, | ||||
|     FST_EV_SV_INT = 3, | ||||
|     FST_EV_SV_SHORTINT = 4, | ||||
|     FST_EV_SV_LONGINT = 5, | ||||
|     FST_EV_SV_BYTE = 6, | ||||
|     FST_EV_SV_UNSIGNED_INTEGER = 7, | ||||
|     FST_EV_SV_UNSIGNED_BIT = 8, | ||||
|     FST_EV_SV_UNSIGNED_LOGIC = 9, | ||||
|     FST_EV_SV_UNSIGNED_INT = 10, | ||||
| enum fstEnumValueType { | ||||
|     FST_EV_SV_INTEGER           = 0, | ||||
|     FST_EV_SV_BIT               = 1, | ||||
|     FST_EV_SV_LOGIC             = 2, | ||||
|     FST_EV_SV_INT               = 3, | ||||
|     FST_EV_SV_SHORTINT          = 4, | ||||
|     FST_EV_SV_LONGINT           = 5, | ||||
|     FST_EV_SV_BYTE              = 6, | ||||
|     FST_EV_SV_UNSIGNED_INTEGER  = 7, | ||||
|     FST_EV_SV_UNSIGNED_BIT      = 8, | ||||
|     FST_EV_SV_UNSIGNED_LOGIC    = 9, | ||||
|     FST_EV_SV_UNSIGNED_INT      = 10, | ||||
|     FST_EV_SV_UNSIGNED_SHORTINT = 11, | ||||
|     FST_EV_SV_UNSIGNED_LONGINT = 12, | ||||
|     FST_EV_SV_UNSIGNED_BYTE = 13, | ||||
|     FST_EV_SV_UNSIGNED_LONGINT  = 12, | ||||
|     FST_EV_SV_UNSIGNED_BYTE     = 13, | ||||
| 
 | ||||
|     FST_EV_REG = 14, | ||||
|     FST_EV_TIME = 15, | ||||
|     FST_EV_REG			= 14, | ||||
|     FST_EV_TIME			= 15, | ||||
| 
 | ||||
|     FST_EV_MAX = 15 | ||||
|     FST_EV_MAX                  = 15 | ||||
| }; | ||||
| 
 | ||||
| enum fstPackType | ||||
| { | ||||
|     FST_PT_NONE = 0, | ||||
|     FST_PT_UNPACKED = 1, | ||||
|     FST_PT_PACKED = 2, | ||||
| enum fstPackType { | ||||
|     FST_PT_NONE          = 0, | ||||
|     FST_PT_UNPACKED      = 1, | ||||
|     FST_PT_PACKED        = 2, | ||||
|     FST_PT_TAGGED_PACKED = 3, | ||||
| 
 | ||||
|     FST_PT_MAX = 3 | ||||
|     FST_PT_MAX           = 3 | ||||
| }; | ||||
| 
 | ||||
| enum fstSupplementalVarType | ||||
| { | ||||
|     FST_SVT_MIN = 0, | ||||
| enum fstSupplementalVarType { | ||||
|     FST_SVT_MIN                    = 0, | ||||
| 
 | ||||
|     FST_SVT_NONE = 0, | ||||
|     FST_SVT_NONE                   = 0, | ||||
| 
 | ||||
|     FST_SVT_VHDL_SIGNAL = 1, | ||||
|     FST_SVT_VHDL_VARIABLE = 2, | ||||
|     FST_SVT_VHDL_CONSTANT = 3, | ||||
|     FST_SVT_VHDL_FILE = 4, | ||||
|     FST_SVT_VHDL_MEMORY = 5, | ||||
|     FST_SVT_VHDL_SIGNAL            = 1, | ||||
|     FST_SVT_VHDL_VARIABLE          = 2, | ||||
|     FST_SVT_VHDL_CONSTANT          = 3, | ||||
|     FST_SVT_VHDL_FILE              = 4, | ||||
|     FST_SVT_VHDL_MEMORY            = 5, | ||||
| 
 | ||||
|     FST_SVT_MAX = 5 | ||||
|     FST_SVT_MAX                    = 5 | ||||
| }; | ||||
| 
 | ||||
| enum fstSupplementalDataType | ||||
| { | ||||
|     FST_SDT_MIN = 0, | ||||
| enum fstSupplementalDataType { | ||||
|     FST_SDT_MIN                    = 0, | ||||
| 
 | ||||
|     FST_SDT_NONE = 0, | ||||
|     FST_SDT_NONE                   = 0, | ||||
| 
 | ||||
|     FST_SDT_VHDL_BOOLEAN = 1, | ||||
|     FST_SDT_VHDL_BIT = 2, | ||||
|     FST_SDT_VHDL_BIT_VECTOR = 3, | ||||
|     FST_SDT_VHDL_STD_ULOGIC = 4, | ||||
|     FST_SDT_VHDL_BOOLEAN           = 1, | ||||
|     FST_SDT_VHDL_BIT               = 2, | ||||
|     FST_SDT_VHDL_BIT_VECTOR        = 3, | ||||
|     FST_SDT_VHDL_STD_ULOGIC        = 4, | ||||
|     FST_SDT_VHDL_STD_ULOGIC_VECTOR = 5, | ||||
|     FST_SDT_VHDL_STD_LOGIC = 6, | ||||
|     FST_SDT_VHDL_STD_LOGIC_VECTOR = 7, | ||||
|     FST_SDT_VHDL_UNSIGNED = 8, | ||||
|     FST_SDT_VHDL_SIGNED = 9, | ||||
|     FST_SDT_VHDL_INTEGER = 10, | ||||
|     FST_SDT_VHDL_REAL = 11, | ||||
|     FST_SDT_VHDL_NATURAL = 12, | ||||
|     FST_SDT_VHDL_POSITIVE = 13, | ||||
|     FST_SDT_VHDL_TIME = 14, | ||||
|     FST_SDT_VHDL_CHARACTER = 15, | ||||
|     FST_SDT_VHDL_STRING = 16, | ||||
|     FST_SDT_VHDL_STD_LOGIC         = 6, | ||||
|     FST_SDT_VHDL_STD_LOGIC_VECTOR  = 7, | ||||
|     FST_SDT_VHDL_UNSIGNED          = 8, | ||||
|     FST_SDT_VHDL_SIGNED            = 9, | ||||
|     FST_SDT_VHDL_INTEGER           = 10, | ||||
|     FST_SDT_VHDL_REAL              = 11, | ||||
|     FST_SDT_VHDL_NATURAL           = 12, | ||||
|     FST_SDT_VHDL_POSITIVE          = 13, | ||||
|     FST_SDT_VHDL_TIME              = 14, | ||||
|     FST_SDT_VHDL_CHARACTER         = 15, | ||||
|     FST_SDT_VHDL_STRING            = 16, | ||||
| 
 | ||||
|     FST_SDT_MAX = 16, | ||||
|     FST_SDT_MAX                    = 16, | ||||
| 
 | ||||
|     FST_SDT_SVT_SHIFT_COUNT = | ||||
|             10, /* FST_SVT_* is ORed in by fstWriterCreateVar2() to the left after shifting FST_SDT_SVT_SHIFT_COUNT */ | ||||
|     FST_SDT_ABS_MAX = ((1 << (FST_SDT_SVT_SHIFT_COUNT)) - 1) | ||||
|     FST_SDT_SVT_SHIFT_COUNT        = 10, /* FST_SVT_* is ORed in by fstWriterCreateVar2() to the left after shifting FST_SDT_SVT_SHIFT_COUNT */ | ||||
|     FST_SDT_ABS_MAX                = ((1<<(FST_SDT_SVT_SHIFT_COUNT))-1) | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| struct fstHier | ||||
| { | ||||
|     unsigned char htyp; | ||||
| unsigned char htyp; | ||||
| 
 | ||||
|     union | ||||
|     { | ||||
| union { | ||||
|         /* if htyp == FST_HT_SCOPE */ | ||||
|         struct fstHierScope | ||||
|         { | ||||
|             unsigned char typ; /* FST_ST_MIN ... FST_ST_MAX */ | ||||
|             const char *name; | ||||
|             const char *component; | ||||
|             uint32_t name_length;      /* strlen(u.scope.name) */ | ||||
|             uint32_t component_length; /* strlen(u.scope.component) */ | ||||
|         } scope; | ||||
|         struct fstHierScope { | ||||
|                 unsigned char typ; /* FST_ST_MIN ... FST_ST_MAX */ | ||||
|                 const char *name; | ||||
|                 const char *component; | ||||
|                 uint32_t name_length;           /* strlen(u.scope.name) */ | ||||
|                 uint32_t component_length;      /* strlen(u.scope.component) */ | ||||
|                 } scope; | ||||
| 
 | ||||
|         /* if htyp == FST_HT_VAR */ | ||||
|         struct fstHierVar | ||||
|         { | ||||
|             unsigned char typ;           /* FST_VT_MIN ... FST_VT_MAX */ | ||||
|             unsigned char direction;     /* FST_VD_MIN ... FST_VD_MAX */ | ||||
|             unsigned char svt_workspace; /* zeroed out by FST reader, for client code use */ | ||||
|             unsigned char sdt_workspace; /* zeroed out by FST reader, for client code use */ | ||||
|             unsigned int sxt_workspace;  /* zeroed out by FST reader, for client code use */ | ||||
|             const char *name; | ||||
|             uint32_t length; | ||||
|             fstHandle handle; | ||||
|             uint32_t name_length; /* strlen(u.var.name) */ | ||||
|             unsigned is_alias : 1; | ||||
|         } var; | ||||
|         struct fstHierVar { | ||||
|                 unsigned char typ; /* FST_VT_MIN ... FST_VT_MAX */ | ||||
|                 unsigned char direction; /* FST_VD_MIN ... FST_VD_MAX */ | ||||
|                 unsigned char svt_workspace; /* zeroed out by FST reader, for client code use */ | ||||
|                 unsigned char sdt_workspace; /* zeroed out by FST reader, for client code use */ | ||||
|                 unsigned int  sxt_workspace; /* zeroed out by FST reader, for client code use */ | ||||
|                 const char *name; | ||||
|                 uint32_t length; | ||||
|                 fstHandle handle; | ||||
|                 uint32_t name_length; /* strlen(u.var.name) */ | ||||
|                 unsigned is_alias : 1; | ||||
|                 } var; | ||||
| 
 | ||||
|         /* if htyp == FST_HT_ATTRBEGIN */ | ||||
|         struct fstHierAttr | ||||
|         { | ||||
|             unsigned char typ;     /* FST_AT_MIN ... FST_AT_MAX */ | ||||
|             unsigned char subtype; /* from fstMiscType, fstArrayType, fstEnumValueType, fstPackType */ | ||||
|             const char *name; | ||||
|             uint64_t arg; /* number of array elements, struct members, or some other payload (possibly ignored) */ | ||||
|             uint64_t arg_from_name; /* for when name is overloaded as a variable-length integer (FST_AT_MISC +
 | ||||
|                                        FST_MT_SOURCESTEM) */ | ||||
|             uint32_t name_length;   /* strlen(u.attr.name) */ | ||||
|         } attr; | ||||
|     } u; | ||||
|         struct fstHierAttr { | ||||
|                 unsigned char typ; /* FST_AT_MIN ... FST_AT_MAX */ | ||||
|                 unsigned char subtype; /* from fstMiscType, fstArrayType, fstEnumValueType, fstPackType */ | ||||
|                 const char *name; | ||||
|                 uint64_t arg; /* number of array elements, struct members, or some other payload (possibly ignored) */ | ||||
|                 uint64_t arg_from_name; /* for when name is overloaded as a variable-length integer (FST_AT_MISC + FST_MT_SOURCESTEM) */ | ||||
|                 uint32_t name_length; /* strlen(u.attr.name) */ | ||||
|                 } attr; | ||||
|         } u; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| struct fstETab | ||||
| { | ||||
|     char *name; | ||||
|     uint32_t elem_count; | ||||
|     char **literal_arr; | ||||
|     char **val_arr; | ||||
| char *name; | ||||
| uint32_t elem_count; | ||||
| char **literal_arr; | ||||
| char **val_arr; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * writer functions | ||||
|  */ | ||||
| void fstWriterClose(void *ctx); | ||||
| void *fstWriterCreate(const char *nam, int use_compressed_hier); | ||||
| fstEnumHandle fstWriterCreateEnumTable(void *ctx, const char *name, uint32_t elem_count, unsigned int min_valbits, | ||||
|                                        const char **literal_arr, const char **val_arr); | ||||
| /* used for Verilog/SV */ | ||||
| fstHandle fstWriterCreateVar(void *ctx, enum fstVarType vt, enum fstVarDir vd, uint32_t len, const char *nam, | ||||
|                              fstHandle aliasHandle); | ||||
| /* future expansion for VHDL and other languages.  The variable type, data type, etc map onto
 | ||||
|    the current Verilog/SV one.  The "type" string is optional for a more verbose or custom description */ | ||||
| fstHandle fstWriterCreateVar2(void *ctx, enum fstVarType vt, enum fstVarDir vd, uint32_t len, const char *nam, | ||||
|                               fstHandle aliasHandle, const char *type, enum fstSupplementalVarType svt, | ||||
|                               enum fstSupplementalDataType sdt); | ||||
| void fstWriterEmitDumpActive(void *ctx, int enable); | ||||
| void fstWriterEmitEnumTableRef(void *ctx, fstEnumHandle handle); | ||||
| void fstWriterEmitValueChange(void *ctx, fstHandle handle, const void *val); | ||||
| void fstWriterEmitValueChange32(void *ctx, fstHandle handle, uint32_t bits, uint32_t val); | ||||
| void fstWriterEmitValueChange64(void *ctx, fstHandle handle, uint32_t bits, uint64_t val); | ||||
| void fstWriterEmitValueChangeVec32(void *ctx, fstHandle handle, uint32_t bits, const uint32_t *val); | ||||
| void fstWriterEmitValueChangeVec64(void *ctx, fstHandle handle, uint32_t bits, const uint64_t *val); | ||||
| void fstWriterEmitVariableLengthValueChange(void *ctx, fstHandle handle, const void *val, uint32_t len); | ||||
| void fstWriterEmitTimeChange(void *ctx, uint64_t tim); | ||||
| void fstWriterFlushContext(void *ctx); | ||||
| int fstWriterGetDumpSizeLimitReached(void *ctx); | ||||
| int fstWriterGetFseekFailed(void *ctx); | ||||
| void fstWriterSetAttrBegin(void *ctx, enum fstAttrType attrtype, int subtype, const char *attrname, uint64_t arg); | ||||
| void fstWriterSetAttrEnd(void *ctx); | ||||
| void fstWriterSetComment(void *ctx, const char *comm); | ||||
| void fstWriterSetDate(void *ctx, const char *dat); | ||||
| void fstWriterSetDumpSizeLimit(void *ctx, uint64_t numbytes); | ||||
| void fstWriterSetEnvVar(void *ctx, const char *envvar); | ||||
| void fstWriterSetFileType(void *ctx, enum fstFileType filetype); | ||||
| void fstWriterSetPackType(void *ctx, enum fstWriterPackType typ); | ||||
| void fstWriterSetParallelMode(void *ctx, int enable); | ||||
| void fstWriterSetRepackOnClose(void *ctx, int enable); /* type = 0 (none), 1 (libz) */ | ||||
| void fstWriterSetScope(void *ctx, enum fstScopeType scopetype, const char *scopename, const char *scopecomp); | ||||
| void fstWriterSetSourceInstantiationStem(void *ctx, const char *path, unsigned int line, unsigned int use_realpath); | ||||
| void fstWriterSetSourceStem(void *ctx, const char *path, unsigned int line, unsigned int use_realpath); | ||||
| void fstWriterSetTimescale(void *ctx, int ts); | ||||
| void fstWriterSetTimescaleFromString(void *ctx, const char *s); | ||||
| void fstWriterSetTimezero(void *ctx, int64_t tim); | ||||
| void fstWriterSetUpscope(void *ctx); | ||||
| void fstWriterSetValueList(void *ctx, const char *vl); | ||||
| void fstWriterSetVersion(void *ctx, const char *vers); | ||||
| void            fstWriterClose(void *ctx); | ||||
| void *          fstWriterCreate(const char *nam, int use_compressed_hier); | ||||
| fstEnumHandle   fstWriterCreateEnumTable(void *ctx, const char *name, uint32_t elem_count, unsigned int min_valbits, const char **literal_arr, const char **val_arr); | ||||
|                 /* used for Verilog/SV */ | ||||
| fstHandle       fstWriterCreateVar(void *ctx, enum fstVarType vt, enum fstVarDir vd, | ||||
|                         uint32_t len, const char *nam, fstHandle aliasHandle); | ||||
|                 /* future expansion for VHDL and other languages.  The variable type, data type, etc map onto
 | ||||
|                    the current Verilog/SV one.  The "type" string is optional for a more verbose or custom description */ | ||||
| fstHandle       fstWriterCreateVar2(void *ctx, enum fstVarType vt, enum fstVarDir vd, | ||||
|                         uint32_t len, const char *nam, fstHandle aliasHandle, | ||||
|                         const char *type, enum fstSupplementalVarType svt, enum fstSupplementalDataType sdt); | ||||
| void            fstWriterEmitDumpActive(void *ctx, int enable); | ||||
| void 		fstWriterEmitEnumTableRef(void *ctx, fstEnumHandle handle); | ||||
| void            fstWriterEmitValueChange(void *ctx, fstHandle handle, const void *val); | ||||
| void            fstWriterEmitValueChange32(void *ctx, fstHandle handle, | ||||
|                         uint32_t bits, uint32_t val); | ||||
| void            fstWriterEmitValueChange64(void *ctx, fstHandle handle, | ||||
|                         uint32_t bits, uint64_t val); | ||||
| void            fstWriterEmitValueChangeVec32(void *ctx, fstHandle handle, | ||||
|                         uint32_t bits, const uint32_t *val); | ||||
| void            fstWriterEmitValueChangeVec64(void *ctx, fstHandle handle, | ||||
|                         uint32_t bits, const uint64_t *val); | ||||
| void            fstWriterEmitVariableLengthValueChange(void *ctx, fstHandle handle, const void *val, uint32_t len); | ||||
| void            fstWriterEmitTimeChange(void *ctx, uint64_t tim); | ||||
| void            fstWriterFlushContext(void *ctx); | ||||
| int             fstWriterGetDumpSizeLimitReached(void *ctx); | ||||
| int             fstWriterGetFseekFailed(void *ctx); | ||||
| void            fstWriterSetAttrBegin(void *ctx, enum fstAttrType attrtype, int subtype, | ||||
|                         const char *attrname, uint64_t arg); | ||||
| void            fstWriterSetAttrEnd(void *ctx); | ||||
| void            fstWriterSetComment(void *ctx, const char *comm); | ||||
| void            fstWriterSetDate(void *ctx, const char *dat); | ||||
| void            fstWriterSetDumpSizeLimit(void *ctx, uint64_t numbytes); | ||||
| void            fstWriterSetEnvVar(void *ctx, const char *envvar); | ||||
| void            fstWriterSetFileType(void *ctx, enum fstFileType filetype); | ||||
| void            fstWriterSetPackType(void *ctx, enum fstWriterPackType typ); | ||||
| void            fstWriterSetParallelMode(void *ctx, int enable); | ||||
| void            fstWriterSetRepackOnClose(void *ctx, int enable);       /* type = 0 (none), 1 (libz) */ | ||||
| void            fstWriterSetScope(void *ctx, enum fstScopeType scopetype, | ||||
|                         const char *scopename, const char *scopecomp); | ||||
| void            fstWriterSetSourceInstantiationStem(void *ctx, const char *path, unsigned int line, unsigned int use_realpath); | ||||
| void            fstWriterSetSourceStem(void *ctx, const char *path, unsigned int line, unsigned int use_realpath); | ||||
| void            fstWriterSetTimescale(void *ctx, int ts); | ||||
| void            fstWriterSetTimescaleFromString(void *ctx, const char *s); | ||||
| void            fstWriterSetTimezero(void *ctx, int64_t tim); | ||||
| void            fstWriterSetUpscope(void *ctx); | ||||
| void		fstWriterSetValueList(void *ctx, const char *vl); | ||||
| void            fstWriterSetVersion(void *ctx, const char *vers); | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * reader functions | ||||
|  */ | ||||
| void fstReaderClose(void *ctx); | ||||
| void fstReaderClrFacProcessMask(void *ctx, fstHandle facidx); | ||||
| void fstReaderClrFacProcessMaskAll(void *ctx); | ||||
| uint64_t fstReaderGetAliasCount(void *ctx); | ||||
| const char *fstReaderGetCurrentFlatScope(void *ctx); | ||||
| void *fstReaderGetCurrentScopeUserInfo(void *ctx); | ||||
| int fstReaderGetCurrentScopeLen(void *ctx); | ||||
| const char *fstReaderGetDateString(void *ctx); | ||||
| int fstReaderGetDoubleEndianMatchState(void *ctx); | ||||
| uint64_t fstReaderGetDumpActivityChangeTime(void *ctx, uint32_t idx); | ||||
| unsigned char fstReaderGetDumpActivityChangeValue(void *ctx, uint32_t idx); | ||||
| uint64_t fstReaderGetEndTime(void *ctx); | ||||
| int fstReaderGetFacProcessMask(void *ctx, fstHandle facidx); | ||||
| int fstReaderGetFileType(void *ctx); | ||||
| int fstReaderGetFseekFailed(void *ctx); | ||||
| fstHandle fstReaderGetMaxHandle(void *ctx); | ||||
| uint64_t fstReaderGetMemoryUsedByWriter(void *ctx); | ||||
| uint32_t fstReaderGetNumberDumpActivityChanges(void *ctx); | ||||
| uint64_t fstReaderGetScopeCount(void *ctx); | ||||
| uint64_t fstReaderGetStartTime(void *ctx); | ||||
| signed char fstReaderGetTimescale(void *ctx); | ||||
| int64_t fstReaderGetTimezero(void *ctx); | ||||
| uint64_t fstReaderGetValueChangeSectionCount(void *ctx); | ||||
| char *fstReaderGetValueFromHandleAtTime(void *ctx, uint64_t tim, fstHandle facidx, char *buf); | ||||
| uint64_t fstReaderGetVarCount(void *ctx); | ||||
| const char *fstReaderGetVersionString(void *ctx); | ||||
| void            fstReaderClose(void *ctx); | ||||
| void            fstReaderClrFacProcessMask(void *ctx, fstHandle facidx); | ||||
| void            fstReaderClrFacProcessMaskAll(void *ctx); | ||||
| uint64_t        fstReaderGetAliasCount(void *ctx); | ||||
| const char *    fstReaderGetCurrentFlatScope(void *ctx); | ||||
| void *          fstReaderGetCurrentScopeUserInfo(void *ctx); | ||||
| int             fstReaderGetCurrentScopeLen(void *ctx); | ||||
| const char *    fstReaderGetDateString(void *ctx); | ||||
| int             fstReaderGetDoubleEndianMatchState(void *ctx); | ||||
| uint64_t        fstReaderGetDumpActivityChangeTime(void *ctx, uint32_t idx); | ||||
| unsigned char   fstReaderGetDumpActivityChangeValue(void *ctx, uint32_t idx); | ||||
| uint64_t        fstReaderGetEndTime(void *ctx); | ||||
| int             fstReaderGetFacProcessMask(void *ctx, fstHandle facidx); | ||||
| int             fstReaderGetFileType(void *ctx); | ||||
| int             fstReaderGetFseekFailed(void *ctx); | ||||
| fstHandle       fstReaderGetMaxHandle(void *ctx); | ||||
| uint64_t        fstReaderGetMemoryUsedByWriter(void *ctx); | ||||
| uint32_t        fstReaderGetNumberDumpActivityChanges(void *ctx); | ||||
| uint64_t        fstReaderGetScopeCount(void *ctx); | ||||
| uint64_t        fstReaderGetStartTime(void *ctx); | ||||
| signed char     fstReaderGetTimescale(void *ctx); | ||||
| int64_t         fstReaderGetTimezero(void *ctx); | ||||
| uint64_t        fstReaderGetValueChangeSectionCount(void *ctx); | ||||
| char *          fstReaderGetValueFromHandleAtTime(void *ctx, uint64_t tim, fstHandle facidx, char *buf); | ||||
| uint64_t        fstReaderGetVarCount(void *ctx); | ||||
| const char *    fstReaderGetVersionString(void *ctx); | ||||
| struct fstHier *fstReaderIterateHier(void *ctx); | ||||
| int fstReaderIterateHierRewind(void *ctx); | ||||
| int fstReaderIterBlocks(void *ctx, | ||||
|                         void (*value_change_callback)(void *user_callback_data_pointer, uint64_t time, fstHandle facidx, | ||||
|                                                       const unsigned char *value), | ||||
| int             fstReaderIterateHierRewind(void *ctx); | ||||
| int             fstReaderIterBlocks(void *ctx, | ||||
|                         void (*value_change_callback)(void *user_callback_data_pointer, uint64_t time, fstHandle facidx, const unsigned char *value), | ||||
|                         void *user_callback_data_pointer, FILE *vcdhandle); | ||||
| int fstReaderIterBlocks2(void *ctx, | ||||
|                          void (*value_change_callback)(void *user_callback_data_pointer, uint64_t time, | ||||
|                                                        fstHandle facidx, const unsigned char *value), | ||||
|                          void (*value_change_callback_varlen)(void *user_callback_data_pointer, uint64_t time, | ||||
|                                                               fstHandle facidx, const unsigned char *value, | ||||
|                                                               uint32_t len), | ||||
|                          void *user_callback_data_pointer, FILE *vcdhandle); | ||||
| void fstReaderIterBlocksSetNativeDoublesOnCallback(void *ctx, int enable); | ||||
| void *fstReaderOpen(const char *nam); | ||||
| void *fstReaderOpenForUtilitiesOnly(void); | ||||
| const char *fstReaderPopScope(void *ctx); | ||||
| int fstReaderProcessHier(void *ctx, FILE *vcdhandle); | ||||
| const char *fstReaderPushScope(void *ctx, const char *nam, void *user_info); | ||||
| void fstReaderResetScope(void *ctx); | ||||
| void fstReaderSetFacProcessMask(void *ctx, fstHandle facidx); | ||||
| void fstReaderSetFacProcessMaskAll(void *ctx); | ||||
| void fstReaderSetLimitTimeRange(void *ctx, uint64_t start_time, uint64_t end_time); | ||||
| void fstReaderSetUnlimitedTimeRange(void *ctx); | ||||
| void fstReaderSetVcdExtensions(void *ctx, int enable); | ||||
| int             fstReaderIterBlocks2(void *ctx, | ||||
|                         void (*value_change_callback)(void *user_callback_data_pointer, uint64_t time, fstHandle facidx, const unsigned char *value), | ||||
|                         void (*value_change_callback_varlen)(void *user_callback_data_pointer, uint64_t time, fstHandle facidx, const unsigned char *value, uint32_t len), | ||||
|                         void *user_callback_data_pointer, FILE *vcdhandle); | ||||
| void            fstReaderIterBlocksSetNativeDoublesOnCallback(void *ctx, int enable); | ||||
| void *          fstReaderOpen(const char *nam); | ||||
| void *          fstReaderOpenForUtilitiesOnly(void); | ||||
| const char *    fstReaderPopScope(void *ctx); | ||||
| int             fstReaderProcessHier(void *ctx, FILE *vcdhandle); | ||||
| const char *    fstReaderPushScope(void *ctx, const char *nam, void *user_info); | ||||
| void            fstReaderResetScope(void *ctx); | ||||
| void            fstReaderSetFacProcessMask(void *ctx, fstHandle facidx); | ||||
| void            fstReaderSetFacProcessMaskAll(void *ctx); | ||||
| void            fstReaderSetLimitTimeRange(void *ctx, uint64_t start_time, uint64_t end_time); | ||||
| void            fstReaderSetUnlimitedTimeRange(void *ctx); | ||||
| void            fstReaderSetVcdExtensions(void *ctx, int enable); | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * utility functions | ||||
|  */ | ||||
| int fstUtilityBinToEscConvertedLen(const unsigned char *s, int len); /* used for mallocs for fstUtilityBinToEsc() */ | ||||
| int fstUtilityBinToEsc(unsigned char *d, const unsigned char *s, int len); | ||||
| int fstUtilityEscToBin(unsigned char *d, unsigned char *s, int len); | ||||
| int             fstUtilityBinToEscConvertedLen(const unsigned char *s, int len); /* used for mallocs for fstUtilityBinToEsc() */ | ||||
| int             fstUtilityBinToEsc(unsigned char *d, const unsigned char *s, int len); | ||||
| int             fstUtilityEscToBin(unsigned char *d, unsigned char *s, int len); | ||||
| struct fstETab *fstUtilityExtractEnumTableFromString(const char *s); | ||||
| void fstUtilityFreeEnumTable(struct fstETab *etab); /* must use to free fstETab properly */ | ||||
| void 		fstUtilityFreeEnumTable(struct fstETab *etab); /* must use to free fstETab properly */ | ||||
| 
 | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
|  |  | |||
							
								
								
									
										3488
									
								
								libs/fst/lz4.cc
									
										
									
									
									
								
							
							
						
						
									
										3488
									
								
								libs/fst/lz4.cc
									
										
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										1095
									
								
								libs/fst/lz4.h
									
										
									
									
									
								
							
							
						
						
									
										1095
									
								
								libs/fst/lz4.h
									
										
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							|  | @ -438,8 +438,13 @@ struct BufnormPass : public Pass { | |||
| 				bool chain_this_wire = chain_this_wire_f(wire); | ||||
| 
 | ||||
| 				SigSpec keysig = sigmap(wire), insig = wire, outsig = wire; | ||||
| 				for (int i = 0; i < GetSize(insig); i++) | ||||
| 					insig[i] = mapped_bits.at(keysig[i], State::Sx); | ||||
| 				for (int i = 0; i < GetSize(insig); i++) { | ||||
| 					if (keysig[i].is_wire()) | ||||
| 						insig[i] = mapped_bits.at(keysig[i], State::Sx); | ||||
| 					else | ||||
| 						insig[i] = keysig[i]; | ||||
| 				} | ||||
| 
 | ||||
| 				if (chain_this_wire) { | ||||
| 					for (int i = 0; i < GetSize(outsig); i++) | ||||
| 						mapped_bits[keysig[i]] = outsig[i]; | ||||
|  |  | |||
							
								
								
									
										11
									
								
								tests/techmap/bufnorm.ys
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								tests/techmap/bufnorm.ys
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| # Check wires driven by constants are kept | ||||
| read_verilog <<EOT | ||||
| module top(output wire [7:0] y); | ||||
| assign y = 27; | ||||
| endmodule | ||||
| EOT | ||||
| 
 | ||||
| equiv_opt -assert bufnorm | ||||
| design -load postopt | ||||
| select -assert-count 1 t:$buf | ||||
| select -assert-count 1 w:y %ci t:$buf %i | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue