Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.lang.forth    |    Forth programmers eat a lot of Bratwurst    |    117,927 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 116,327 of 117,927    |
|    Krishna Myneni to All    |
|    D! and D@    |
|    22 Mar 24 08:59:24    |
      From: krishna.myneni@ccreweb.org              For typical implementations of 2! and 2@, the storage of double length       numbers in memory do not correspond to the native byte ordering for a       double length number. For these implementations, the high order bits of       the double number are on the top cell of the stack, which is at a lower       memory address. For example,              2variable x              5 s>d .s               0        5        ok              x 2!              x 8 dump \ on a 32-bit little-endian system              A0AE7C0 : 00 00 00 00 05 00 00 00 ok              In the Forth 2012 standard, and in prior standards, the representation       of double numbers on the stack seems to be allowed to be implementation       defined. Thus, on a 32-bit system, the stack order of a 64 bit double       number, the standard does not specify whether the high 32 bits of the       number are on top of the stack or the low 32 bits. Hence, we have the       rationale (A.8.6.1.1140) for the word D>S to abstract the conversion of       a double to single length number (instead of using DROP).              To overcome this issue, we could simply decide that double length       numbers on the stack have a specific ordering corresponding to their       native memory ordering on the system, but this appears to be contrary to       some existing implementations, and it may also break code.              A better way to do this is to explicitly define D! and D@, so that the       native memory storage order is consistent for this type.              For little-endian Forth systems which place the high order cell of the       double number on top of the stack, the definitions would be              : D! ( d a -- ) >r swap r> 2! ;       : D@ ( a -- d ) 2@ swap ;              === Example ===       5 s>d x d!        ok       x 8 dump              A0AE7C0 : 05 00 00 00 00 00 00 00 ok              x d@ .s        0        5        ok       === End Example ===              More generally, the problem with the double number word set is that it       attempts to use the same word set for two different types:              1) pairs of cell length numbers       2) double length integers              It would be better to separate the words for these two types, the latter       having prefix of "D" and the former having prefix "2".              --       Krishna Myneni              --- SoupGate-Win32 v1.05        * Origin: you cannot sedate... all the things you hate (1:229/2)    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca