At a closer inspection, it seems that the culprit is that I use |, not +. + is optimized, while | isn't. That should be easy to fix, shouldn't it?
(mapping size 100000:)
gauge { m|=([-1:17]); };
Result: 0.160000
gauge { m=([-2:17])|m; };
Result: 0.170000
gauge { m+=([-3:17]); };
Result: 0.000000 <- lo!
gauge { m=([-4:17])+m; };
Result: 0.030000
pike-devel@lists.lysator.liu.se