Related articles |
---|
[17 earlier articles] |
Re: How to implement dynamic typing? bartc@freeuk.com (bartc) (2010-04-14) |
Re: How to implement dynamic typing? dot@dotat.at (Tony Finch) (2010-04-14) |
Re: How to implement dynamic typing? cr88192@hotmail.com (BGB / cr88192) (2010-04-16) |
Re: How to implement dynamic typing? gneuner2@comcast.net (George Neuner) (2010-04-18) |
Re: How to implement dynamic typing? bartc@freeuk.com (bartc) (2010-04-18) |
Re: How to implement dynamic typing? gneuner2@comcast.net (George Neuner) (2010-04-20) |
Re: How to implement dynamic typing? mikelu-1004cc@mike.de (Mike Pall) (2010-04-21) |
Re: How to implement dynamic typing? bartc@freeuk.com (bartc) (2010-04-21) |
Re: How to implement dynamic typing? gneuner2@comcast.net (George Neuner) (2010-04-22) |
Re: How to implement dynamic typing? gneuner2@comcast.net (George Neuner) (2010-04-23) |
Re: How to implement dynamic typing? cr88192@hotmail.com (BGB) (2010-04-23) |
Re: How to implement dynamic typing? bartc@freeuk.com (bartc) (2010-04-24) |
Re: How to implement dynamic typing? cr88192@hotmail.com (BGB / cr88192) (2010-04-26) |
[1 later articles] |
From: | Mike Pall <mikelu-1004cc@mike.de> |
Newsgroups: | comp.compilers |
Date: | Wed, 21 Apr 2010 12:23:48 +0200 |
Organization: | Compilers Central |
References: | 10-04-009 10-04-028 10-04-031 10-04-036 10-04-038 10-04-051 |
Keywords: | types |
Posted-Date: | 21 Apr 2010 10:48:42 EDT |
George Neuner wrote:
> On 14 Apr 2010 17:55:11 +0100 (BST), Tony Finch wrote:
> >LuaJIT takes an interesting approach. Its only numeric type is the
> >double precision floating point number. It uses different kinds of NAN
> >as tags for the other types, with the pointer embedded in the
> >mantissa.
> >
> >http://article.gmane.org/gmane.comp.lang.lua.general/44823
> >
> >Regarding typed word-sized pointers, see for instance
> >http://www.haskell.org/~simonmar/papers/ptr-tagging.pdf
>
> That is interesting. It does, however, prevent loading tagged values
> directly as doubles if the CPU might throw an exception on a NAN.
The type check is performed in the integer unit _before_ loading
anything into the FPU. Only values tagged as numbers are loaded by the
FPU (they may be NaN, too, but this is uncommon).
[Also, none of the popular architectures would throw an exception on a
NaN load. They only slow down when doing arithmetics with NaNs.]
> Also the IEEE storage format for doubles leaves the tag in the
> middle of the first word (the sign bit is first - NANs are encoded
> in the exponent). That makes tag checking/extraction cumbersome on a
> 32-bit machine.
It's not necessary to extract the type tag from the middle. There are
enough tags available in the range 0xfff80001 .. 0xffffffff. Using
small signed numbers (e.g. -1 .. -12) allows shorter instruction
encodings, too.
The following post shows the assembler code for a dynamic type check
(in the context of the interpreter part of LuaJIT):
http://www.reddit.com/r/programming/comments/badl2/luajit_2_beta_3_is_out_support_both_x32_x64/c0lrus0
The dynamic type check is very cheap on a super-scalar CPU as it's
out of the dependency chain. I should mention the trace compiler
can get rid of most of these type checks of course.
--Mike
Return to the
comp.compilers page.
Search the
comp.compilers archives again.