[squeak-dev] Re: floats
Nicolas Cellier
ncellier at ifrance.com
Sun Mar 15 11:35:12 UTC 2009
1) isDoubleOop would be fast
isnan is fast (push oop on fpreg, push oop on fpreg, test fpequal)
would require a second test (int64) oop = NanOop to represent nan in
Smalltalk...
2) conversion oop->native double is 0-OP
3) conversion native double->oop costs a isnan:
oop=(isnan(d))?NanOop:(oop)d;
4) 32 bits native integer stored in low 32 bits would be very fast
isSmallIntOop just cost a comparison of high 32 bits with
SmallIntegerNanTag
conversions is just accessing low 32 bits, or filling high 32 bits with
this tag
5) Addressing a 32bit space would be just as fast as with above trick
6) Addressing a 48bit space would cost a bitAnd:/bitOr: to tag/untag high 16
bits with Pointer48BitNanTag.
Given there are 4 bits for tags, this let us implement an immediate 32 bit
character!
7) GarbageCollector trick could use highest of these 4 bits, isOop tests
would cost more
Jecel, i just love the idea!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20090315/71e56010/attachment.htm
More information about the Squeak-dev
mailing list
|