Changeset - r9543:54a9c0376831
[Not reviewed]
master
0 9 1
smatz - 16 years ago 2008-06-17 19:38:00
smatz@openttd.org
(svn r13552) -Codechange: use TTD_ENDIAN comparations instead of tests if TTD_[BIG/LITTLE]_ENDIAN is defined
10 files changed with 74 insertions and 36 deletions:
0 comments (0 inline, 0 general)
projects/openttd_vs80.vcproj
Show inline comments
 
@@ -1000,6 +1000,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\core\endian_type.hpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\engine_base.h"
 
				>
 
			</File>
projects/openttd_vs90.vcproj
Show inline comments
 
@@ -997,6 +997,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\core\endian_type.hpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\engine_base.h"
 
				>
 
			</File>
source.list
Show inline comments
 
@@ -175,6 +175,7 @@ effectvehicle_func.h
 
effectvehicle_base.h
 
elrail_func.h
 
core/endian_func.hpp
 
core/endian_type.hpp
 
engine_base.h
 
engine_func.h
 
engine_gui.h
src/core/endian_func.hpp
Show inline comments
 
@@ -5,26 +5,11 @@
 
#ifndef ENDIAN_FUNC_H
 
#define ENDIAN_FUNC_H
 

	
 
#include "endian_type.hpp"
 
#include "bitmath_func.hpp"
 

	
 
#if defined(ARM) || defined(__arm__) || defined(__alpha__)
 
	#define OTTD_ALIGNMENT
 
#endif
 

	
 
/* Windows has always LITTLE_ENDIAN */
 
#if defined(WIN32) || defined(__OS2__) || defined(WIN64)
 
	#define TTD_LITTLE_ENDIAN
 
#elif !defined(TESTING)
 
	/* Else include endian[target/host].h, which has the endian-type, autodetected by the Makefile */
 
	#if defined(STRGEN)
 
		#include "endian_host.h"
 
	#else
 
		#include "endian_target.h"
 
	#endif
 
#endif /* WIN32 || __OS2__ || WIN64 */
 

	
 
/* Setup alignment and conversion macros */
 
#if defined(TTD_BIG_ENDIAN)
 
#if TTD_ENDIAN == TTD_BIG_ENDIAN
 
	#define FROM_BE16(x) (x)
 
	#define FROM_BE32(x) (x)
 
	#define TO_BE16(x)   (x)
 
@@ -46,7 +31,7 @@
 
	#define TO_LE16(x)   (x)
 
	#define TO_LE32(x)   (x)
 
	#define TO_LE32X(x)  (x)
 
#endif /* TTD_BIG_ENDIAN */
 
#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */
 

	
 
static inline uint16 ReadLE16Aligned(const void *x)
 
{
 
@@ -55,11 +40,11 @@ static inline uint16 ReadLE16Aligned(con
 

	
 
static inline uint16 ReadLE16Unaligned(const void *x)
 
{
 
#ifdef OTTD_ALIGNMENT
 
#if OTTD_ALIGNMENT == 1
 
	return ((const byte*)x)[0] | ((const byte*)x)[1] << 8;
 
#else
 
	return FROM_LE16(*(const uint16*)x);
 
#endif
 
#endif /* OTTD_ALIGNMENT == 1 */
 
}
 

	
 
#endif /* ENDIAN_FUNC_HPP */
src/core/endian_type.hpp
Show inline comments
 
new file 100644
 
/* $Id$ */
 

	
 
/** @file endian_type.hpp Definition of various endian-dependant macros. */
 

	
 
#ifndef ENDIAN_TYPE_H
 
#define ENDIAN_TYPE_H
 

	
 
#if defined(ARM) || defined(__arm__) || defined(__alpha__)
 
	#define OTTD_ALIGNMENT 1
 
#else
 
	#define OTTD_ALIGNMENT 0
 
#endif
 

	
 
#define TTD_LITTLE_ENDIAN 0
 
#define TTD_BIG_ENDIAN 1
 

	
 
/* Windows has always LITTLE_ENDIAN */
 
#if defined(WIN32) || defined(__OS2__) || defined(WIN64)
 
	#define TTD_ENDIAN TTD_LITTLE_ENDIAN
 
#elif !defined(TESTING)
 
	/* Else include endian[target/host].h, which has the endian-type, autodetected by the Makefile */
 
	#if defined(STRGEN)
 
		#include "endian_host.h"
 
	#else
 
		#include "endian_target.h"
 
	#endif
 
#endif /* WIN32 || __OS2__ || WIN64 */
 

	
 
#endif /* ENDIAN_TYPE_HPP */
src/endian_check.cpp
Show inline comments
 
@@ -12,6 +12,21 @@
 
#include <stdio.h>
 
#include <string.h>
 

	
 
/** Supported endian types */
 
enum Endian {
 
	ENDIAN_LITTLE, ///< little endian
 
	ENDIAN_BIG     ///< big endian
 
};
 

	
 
/**
 
 * Shortcut to printf("#define TTD_*_ENDIAN 0/1")
 
 * @param endian endian type to define
 
 */
 
static inline void printf_endian(Endian endian)
 
{
 
	printf("#define TTD_ENDIAN %s\n", endian == ENDIAN_LITTLE ? "TTD_LITTLE_ENDIAN" : "TTD_BIG_ENDIAN");
 
}
 

	
 
/**
 
 * Main call of the endian_check program
 
 * @param argc argument count
 
@@ -30,23 +45,23 @@ int main (int argc, char *argv[])
 
	printf("#ifndef ENDIAN_H\n#define ENDIAN_H\n");
 

	
 
	if (force_LE == 1) {
 
		printf("#define TTD_LITTLE_ENDIAN\n");
 
		printf_endian(ENDIAN_LITTLE);
 
	} else if (force_BE == 1) {
 
		printf("#define TTD_BIG_ENDIAN\n");
 
		printf_endian(ENDIAN_BIG);
 
	} else if (force_PREPROCESSOR == 1) {
 
		/* Support for universal binaries on OSX
 
		 * Universal binaries supports both PPC and x86
 
		 * If a compiler for OSX gets this setting, it will always pick the correct endian and no test is needed
 
		 */
 
		printf("#ifdef __BIG_ENDIAN__\n");
 
		printf("#define TTD_BIG_ENDIAN\n");
 
		printf_endian(ENDIAN_BIG);
 
		printf("#else\n");
 
		printf("#define TTD_LITTLE_ENDIAN\n");
 
		printf_endian(ENDIAN_LITTLE);
 
		printf("#endif\n");
 
	} else if (*(short*)endian_test == 1 ) {
 
		printf("#define TTD_LITTLE_ENDIAN\n");
 
		printf_endian(ENDIAN_LITTLE);
 
	} else {
 
		printf("#define TTD_BIG_ENDIAN\n");
 
		printf_endian(ENDIAN_BIG);
 
	}
 
	printf("#endif\n");
 

	
src/minilzo.cpp
Show inline comments
 
@@ -230,9 +230,9 @@
 
#  error "LZO_ALIGNED_OK_4 must not be defined on this system"
 
#endif
 

	
 
#define LZO_LITTLE_ENDIAN	   1234
 
#define LZO_BIG_ENDIAN		  4321
 
#define LZO_PDP_ENDIAN		  3412
 
#define LZO_LITTLE_ENDIAN 1234
 
#define LZO_BIG_ENDIAN    4321
 
#define LZO_PDP_ENDIAN    3412
 

	
 
#if !defined(LZO_BYTE_ORDER)
 
#  if defined(MFX_BYTE_ORDER)
src/screenshot.cpp
Show inline comments
 
@@ -247,12 +247,12 @@ static bool MakePNGImage(const char *nam
 
		sig_bit.gray  = 8;
 
		png_set_sBIT(png_ptr, info_ptr, &sig_bit);
 

	
 
#ifdef TTD_LITTLE_ENDIAN
 
#if TTD_ENDIAN == TTD_LITTLE_ENDIAN
 
		png_set_bgr(png_ptr);
 
		png_set_filler(png_ptr, 0, PNG_FILLER_AFTER);
 
#else
 
		png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
 
#endif
 
#endif /* TTD_ENDIAN == TTD_LITTLE_ENDIAN */
 
	}
 

	
 
	/* use by default 64k temp memory */
src/sound/cocoa_s.cpp
Show inline comments
 
@@ -24,7 +24,7 @@
 
#include "../debug.h"
 
#include "../driver.h"
 
#include "../mixer.h"
 
#include "../core/endian_func.hpp"
 
#include "../core/endian_type.hpp"
 

	
 
#include "cocoa_s.h"
 

	
 
@@ -61,9 +61,9 @@ const char *SoundDriver_Cocoa::Start(con
 
	requestedDesc.mBitsPerChannel = 16;
 
	requestedDesc.mFormatFlags |= kLinearPCMFormatFlagIsSignedInteger;
 

	
 
#ifdef TTD_BIG_ENDIAN
 
#if TTD_ENDIAN == TTD_BIG_ENDIAN
 
	requestedDesc.mFormatFlags |= kLinearPCMFormatFlagIsBigEndian;
 
#endif
 
#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */
 

	
 
	requestedDesc.mFramesPerPacket = 1;
 
	requestedDesc.mBytesPerFrame = requestedDesc.mBitsPerChannel * requestedDesc.mChannelsPerFrame / 8;
src/strings.cpp
Show inline comments
 
@@ -1251,11 +1251,11 @@ bool ReadLanguagePack(int lang_index)
 
		return false;
 
	}
 

	
 
#if defined(TTD_BIG_ENDIAN)
 
#if TTD_ENDIAN == TTD_BIG_ENDIAN
 
	for (i = 0; i != 32; i++) {
 
		lang_pack->offsets[i] = ReadLE16Aligned(&lang_pack->offsets[i]);
 
	}
 
#endif
 
#endif /* TTD_ENDIAN == TTD_BIG_ENDIAN */
 

	
 
	tot_count = 0;
 
	for (i = 0; i != 32; i++) {
0 comments (0 inline, 0 general)