diff --git a/source/src/Makefile b/source/src/Makefile index d1089e32..feb84dc6 100644 --- a/source/src/Makefile +++ b/source/src/Makefile @@ -26,11 +26,11 @@ ifeq ($(ACDEBUG),yes) endif ifneq (,$(findstring clang,$(CXX))) - CXXFLAGS= -O2 -fomit-frame-pointer - override CXXFLAGS+= -Wall -fsigned-char + CXXFLAGS= -O3 -fomit-frame-pointer + override CXXFLAGS+= -Wall -fsigned-char -fno-strict-aliasing else CXXFLAGS= -O3 -fomit-frame-pointer - override CXXFLAGS+= -Wall -fsigned-char -ffast-math -rdynamic -Wno-format-zero-length + override CXXFLAGS+= -Wall -fsigned-char -ffast-math -rdynamic -Wno-format-zero-length -fno-strict-aliasing endif INCLUDES= -I. -Ibot -I../enet/include diff --git a/source/src/jpegenc.h b/source/src/jpegenc.h index eec1fa4e..94a05e80 100644 --- a/source/src/jpegenc.h +++ b/source/src/jpegenc.h @@ -210,8 +210,7 @@ class jpegenc void writebits(bitstring bs); void compute_Huffman_table(BYTE *nrcodes, BYTE *std_table, bitstring *HT); void init_Huffman_tables(void); - void exitmessage(const char *error_message); - void set_numbers_category_and_bitcode(); + int set_numbers_category_and_bitcode(); void precalculate_YCbCr_tables(); void prepare_quant_tables(); void fdct_and_quantization(SBYTE *data, float *fdtbl, SWORD *outdata); @@ -567,22 +566,16 @@ void jpegenc::init_Huffman_tables() compute_Huffman_table(std_ac_chrominance_nrcodes, std_ac_chrominance_values, CbAC_HT); } -void jpegenc::exitmessage(const char *error_message) -{ - printf("%s\n",error_message); - exit(EXIT_FAILURE); -} - -void jpegenc::set_numbers_category_and_bitcode() +int jpegenc::set_numbers_category_and_bitcode() { SDWORD nr; SDWORD nrlower, nrupper; BYTE cat; category_alloc = (BYTE *)malloc(65535*sizeof(BYTE)); - if (category_alloc == NULL) exitmessage("Not enough memory."); + if (category_alloc == NULL) return -1; category = category_alloc + 32767; bitcode_alloc=(bitstring *)malloc(65535*sizeof(bitstring)); - if (bitcode_alloc==NULL) exitmessage("Not enough memory."); + if (bitcode_alloc==NULL) { free(category_alloc); return -1; } bitcode = bitcode_alloc + 32767; nrlower = 1; nrupper = 2; @@ -603,6 +596,7 @@ void jpegenc::set_numbers_category_and_bitcode() nrlower <<= 1; nrupper <<= 1; } + return 0; } void jpegenc::precalculate_YCbCr_tables() @@ -836,7 +830,11 @@ int jpegenc::encode(const char *filename, SDL_Surface *image, int jpegquality) set_DQTinfo(jpegquality); set_DHTinfo(); init_Huffman_tables(); - set_numbers_category_and_bitcode(); + if(set_numbers_category_and_bitcode() < 0) + { + delete fp_jpeg_stream; + return -2; + } precalculate_YCbCr_tables(); prepare_quant_tables(); diff --git a/source/src/vertmodel.h b/source/src/vertmodel.h index bf6191d6..66cd3f74 100644 --- a/source/src/vertmodel.h +++ b/source/src/vertmodel.h @@ -179,10 +179,12 @@ struct vertmodel : model numdyndraws = draws.length(); } +#ifdef LINUXBUGISBACK #if defined(__GNUC__) && defined(__OPTIMIZE__) && !defined(__clang__) && !defined(__ICL) && __GNUC__ >= 4 && __GNUC_MINOR__ > 4 __attribute__((optimize(2))) #elif defined(__clang__) && __clang_major__ >= 4 __attribute__((optnone)) +#endif #endif dyncacheentry *gendynverts(animstate &as, anpos &cur, anpos *prev, float ai_t) { @@ -295,10 +297,12 @@ struct vertmodel : model } } +#ifdef LINUXBUGISBACK #if defined(__GNUC__) && defined(__OPTIMIZE__) && !defined(__clang__) && !defined(__ICL) && __GNUC__ >= 4 && __GNUC_MINOR__ > 4 __attribute__((optimize(2))) #elif defined(__clang__) && __clang_major__ >= 4 __attribute__((optnone)) +#endif #endif shadowcacheentry *genshadowvolume(animstate &as, anpos &cur, anpos *prev, float ai_t, vec *buf) { @@ -360,10 +364,12 @@ struct vertmodel : model return d; } +#ifdef LINUXBUGISBACK #if defined(__GNUC__) && defined(__OPTIMIZE__) && !defined(__clang__) && !defined(__ICL) && __GNUC__ >= 4 && __GNUC_MINOR__ > 4 __attribute__((optimize(2))) #elif defined(__clang__) && __clang_major__ >= 4 __attribute__((optnone)) +#endif #endif lightcacheentry *lightvertexes(animstate &as, anpos &cur, anpos *prev, float ai_t, vec *buf) {