Mercurial > hg > openttd
changeset 17521:b0c0aa299763 draft
(svn r22284) -Codechange [FS#4564]: cast values to uint before computing modulus in direction_func.h, so compiler can generate superior code (adf88)
author | smatz <smatz@openttd.org> |
---|---|
date | Fri, 01 Apr 2011 12:17:23 +0000 |
parents | bf14404ac816 |
children | 19ce3a176e65 |
files | src/direction_func.h |
diffstat | 1 files changed, 9 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/direction_func.h +++ b/src/direction_func.h @@ -35,7 +35,9 @@ */ 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 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 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 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); } /**