Changeset - r17511:6d540ad0971e
[Not reviewed]
master
0 1 0
smatz - 13 years ago 2011-04-01 12:17:23
smatz@openttd.org
(svn r22284) -Codechange [FS#4564]: cast values to uint before computing modulus in direction_func.h, so compiler can generate superior code (adf88)
1 file changed with 9 insertions and 4 deletions:
0 comments (0 inline, 0 general)
src/direction_func.h
Show inline comments
 
@@ -35,7 +35,9 @@ static inline Direction ReverseDir(Direc
 
 */
 
static inline DirDiff DirDifference(Direction d0, Direction d1)
 
{
 
	return (DirDiff)((d0 + 8 - d1) % 8);
 
	/* Cast to uint so compiler can use bitmask. If the difference is negative
 
	 * and we used int instead of uint, further "+ 8" would have to be added. */
 
	return (DirDiff)((uint)(d0 - d1) % 8);
 
}
 

	
 
/**
 
@@ -51,7 +53,8 @@ static inline DirDiff DirDifference(Dire
 
 */
 
static inline DirDiff ChangeDirDiff(DirDiff d, DirDiff delta)
 
{
 
	return (DirDiff)((d + delta) % 8);
 
	/* Cast to uint so compiler can use bitmask. Result can never be negative. */
 
	return (DirDiff)((uint)(d + delta) % 8);
 
}
 

	
 
/**
 
@@ -66,7 +69,8 @@ static inline DirDiff ChangeDirDiff(DirD
 
 */
 
static inline Direction ChangeDir(Direction d, DirDiff delta)
 
{
 
	return (Direction)((d + delta) % 8);
 
	/* Cast to uint so compiler can use bitmask. Result can never be negative. */
 
	return (Direction)((uint)(d + delta) % 8);
 
}
 

	
 

	
 
@@ -94,7 +98,8 @@ static inline DiagDirection ReverseDiagD
 
 */
 
static inline DiagDirection ChangeDiagDir(DiagDirection d, DiagDirDiff delta)
 
{
 
	return (DiagDirection)((d + delta) % 4);
 
	/* Cast to uint so compiler can use bitmask. Result can never be negative. */
 
	return (DiagDirection)((uint)(d + delta) % 4);
 
}
 

	
 
/**
0 comments (0 inline, 0 general)