freenode/#clasp - IRC Chatlog
Search
14:24:43
Bike
so the problem with this mask thing is that we're working with three arrays at once (the result and two inputs), and we need to do the same number of iterations for all them
14:25:15
Bike
and i just checked and sbcl just does it slowly, bit by bit, in the case of the start being nonzero, which is the only case this is needed for
14:26:30
Bike
It's needed if the end doesn't align with a word boundary AND we actually care about what's beyond the end, which can happen with displaced arrays only
14:26:43
Bike
if they're just simple bit vectors there's no harm in ANDing the noise at the end together
14:27:24
drmeister
Currently (defparameter *foo* (make-array 127 :element-type 'bit :initial-element 1)) (core:popcount *foo*) -> 128
14:40:40
Bike
well here's a stupid problem, there's a different popcount intrinsic for int and long and long long, but Fixnum is a int64_t and who knows what it is
14:53:06
Bike
it's actually byte32_t (aka uint32_t)... and i can look at the defs and see it's unsigned int... but when i've tried this sort of thing before it's been different on linux
15:26:04
Bike
i think it's fine. it's like twenty lines. works on longer vectors too and i don't see any noise.
19:23:08
Bike
drmeister: googling seems to agree that a script you run can't change environment variables. so i don't know.
20:44:23
Bike
i don't think there's a way to do this mask thing that isn't overcomplicated. maybe we can try it at some point in the future when there's actually someone who wants it, but leaving fast operations to simple bit vectors is probably okay