[MLton-commit] r6122
Matthew Fluet
fluet at mlton.org
Sat Nov 3 08:25:35 PST 2007
Optimize util/align.h replacing integer division/modulus with bit
mask, assuming the desired alignment is a power of two.
Original suggestion to optimize util/align.h from Florian Weimer.
Optimization patch from Vesa Karvonen.
Benchmark results:
http://mlton.org/pipermail/mlton/2007-November/030042.html
----------------------------------------------------------------------
U mlton/trunk/runtime/util/align.h
----------------------------------------------------------------------
Modified: mlton/trunk/runtime/util/align.h
===================================================================
--- mlton/trunk/runtime/util/align.h 2007-11-03 11:39:42 UTC (rev 6121)
+++ mlton/trunk/runtime/util/align.h 2007-11-03 16:25:34 UTC (rev 6122)
@@ -15,31 +15,31 @@
}
static inline size_t alignDown (size_t a, size_t b) {
- assert (b >= 1);
- a -= a % b;
+ assert (b >= 1 && b == (b & -b));
+ a &= -b;
assert (isAligned (a, b));
return a;
}
static inline uintmax_t alignMaxDown (uintmax_t a, uintmax_t b) {
- assert (b >= 1);
- a -= a % b;
+ assert (b >= 1 && b == (b & -b));
+ a &= -b;
assert (isAlignedMax (a, b));
return a;
}
static inline size_t align (size_t a, size_t b) {
- assert (b >= 1);
+ assert (b >= 1 && b == (b & -b));
a += b - 1;
- a -= a % b;
+ a &= -b;
assert (isAligned (a, b));
return a;
}
static inline uintmax_t alignMax (uintmax_t a, uintmax_t b) {
- assert (b >= 1);
+ assert (b >= 1 && b == (b & -b));
a += b - 1;
- a -= a % b;
+ a &= -b;
assert (isAligned (a, b));
return a;
}
More information about the MLton-commit
mailing list