--- ppmdj1/Coder.hpp.bak 2006-05-10 15:20:00.000000000 +0300 +++ ppmdj1/Coder.hpp 2008-04-06 14:08:04.967479850 +0300 @@ -55,6 +55,8 @@ public: }; *****************************************************************************/ +#include "PPMdType.h" + enum { TOP=1 << 24, BOT=1 << 15 }; static _THREAD1 struct SUBRANGE { DWORD low, high, scale; } _THREAD Range; static _THREAD1 DWORD _THREAD low, _THREAD code, _THREAD range; --- ppmdj1/SubAlloc.hpp.bak 2006-05-10 15:20:00.000000000 +0300 +++ ppmdj1/SubAlloc.hpp 2008-04-07 00:14:04.043481793 +0300 @@ -1,3 +1,7 @@ +#include + +#include "PPMdType.h" + /**************************************************************************** * This file is part of PPMd project * * Written and distributed to public domain by Dmitry Shkarin 1997, * @@ -7,12 +11,15 @@ enum { UNIT_SIZE=12, N1=4, N2=4, N3=4, N4=(128+3-1*N1-2*N2-3*N3)/4, N_INDEXES=N1+N2+N3+N4 }; -inline void PrefetchData(void* Addr) +#ifdef __x86_64__ +static inline void PrefetchData(const void *x) { -#if defined(_USE_PREFETCHING) - BYTE PrefetchByte = *(volatile BYTE*)Addr; -#endif /* defined(_USE_PREFETCHING) */ + asm volatile ("prefetchnta (%0)" : :"r"(x)); } +#else +#define prefetch(x) +#endif + static BYTE Indx2Units[N_INDEXES], Units2Indx[128]; // constants static _THREAD1 UINT _THREAD GlueCount, _THREAD GlueCount1, _THREAD SubAllocatorSize=0; static _THREAD1 _BYTE* _THREAD HeapStart, * _THREAD pText, * _THREAD UnitsStart; --- ppmdj1/PPMd.cpp.bak 2006-05-10 15:20:00.000000000 +0300 +++ ppmdj1/PPMd.cpp 2008-04-07 15:51:29.294480078 +0300 @@ -273,12 +273,17 @@ fwrite(&ai,sizeof(ai),1,fpOut); fwrite(pFName,ai.FNLen & 0x1FF,1,fpOut); PrepareCoding(SASize,fpOut); EncodeFile(fpOut,fpIn,MaxOrder,CutOff); putchar('\n'); - if (ferror(fpOut) || ferror(fpIn)) { + if (fflush(fpOut) || ferror(fpOut) || ferror(fpIn)) { + printf(MTxt[1],efr.getFName(),WrkStr); + exit(-1); + } + fclose(fpIn); + if (fclose(fpOut)) { printf(MTxt[1],efr.getFName(),WrkStr); exit(-1); } - fclose(fpIn); fclose(fpOut); } + inline BOOL DecodeOneFile(FILE* fpIn) { char WrkStr[260]; @@ -297,10 +302,15 @@ } PrepareCoding(SASize,fpIn); DecodeFile(fpOut,fpIn,MaxOrder,CutOff); putchar('\n'); - if (ferror(fpOut) || ferror(fpIn) || feof(fpIn)) { - printf(MTxt[1],WrkStr,WrkStr); exit(-1); + if (fflush(fpOut) || ferror(fpOut) || ferror(fpIn) || feof(fpIn)) { + printf(MTxt[1],WrkStr,WrkStr); + exit(-1); + } + if (fclose(fpOut)) { + printf(MTxt[1],WrkStr,WrkStr); + exit(-1); } - fclose(fpOut); EnvSetDateTimeAttr(WrkStr); + EnvSetDateTimeAttr(WrkStr); return TRUE; } inline void DecodeFile(const ENV_FIND_RESULT& efr) --- ppmdj1/makefile.L64.gmk.bak 2006-05-10 15:20:00.000000000 +0300 +++ ppmdj1/makefile.L64.gmk 2008-04-06 14:04:13.781480172 +0300 @@ -4,16 +4,16 @@ DEBUG = 0 CPP_SET = $(PROJECT).cpp Model.cpp C_SET = -CC = gcc -LINK = gcc -CODE_FLAGS = -m64 -march=athlon64 -fno-exceptions -fno-rtti -pedantic -Wall \ +CC = g++ +LINK = g++ +CODE_FLAGS = -m64 -fno-exceptions -fno-rtti -pedantic -Wall \ -Wno-unknown-pragmas -Wno-sign-compare -Wno-conversion LIBS = ifeq ($(DEBUG),0) - OPT_FLAGS = -O1 -funroll-all-loops -floop-optimize2 + OPT_FLAGS = -O1 -funroll-all-loops DEBUG_FLAGS = -g0 - LD_FLAGS = -s -O3 + LD_FLAGS = -O3 else OPT_FLAGS = -O0 DEBUG_FLAGS = -g @@ -23,9 +23,17 @@ endif OBJ_SET = $(CPP_SET:.cpp=.o) $(C_SET:.c=.o) $(PROJECT): $(OBJ_SET) - @$(LINK) -o $(PROJECT) $(OBJ_SET) $(LIBS) -lstdc++ -Xlinker $(LD_FLAGS) + @$(LINK) -o $(PROJECT) $(OBJ_SET) $(LIBS) .cpp.o: @$(CC) $(CODE_FLAGS) $(OPT_FLAGS) $(DEBUG_FLAGS) -c $^ .c.o: @$(CC) $(CODE_FLAGS) $(OPT_FLAGS) $(DEBUG_FLAGS) -c $^ + +PPMd.o: PPMd.cpp PPMd.h PPMdType.h + +Model.o: Model.cpp PPMd.h PPMdType.h Coder.hpp SubAlloc.hpp + +clean: + rm -f PPMd.o Model.o PPMd +