home bbs files messages ]

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,337 of 117,927   
   Krishna Myneni to Krishna Myneni   
   Re: D! and D@   
   23 Mar 24 14:16:18   
   
   From: krishna.myneni@ccreweb.org   
      
   On 3/23/24 14:13, Krishna Myneni wrote:   
   ...   
   > I had need for DLSHIFT and DRSHIFT recently, and this is what I came up   
   > with.   
   >   
   > \ u is the number of bits to shift   
   > 1 cells 8 * constant BITS_PER_CELL   
   > 0 value ubits   
   >   
   > : DLSHIFT ( ud u -- ud2 ) BITS_PER_CELL min 0 ?DO D2* LOOP ;   
   >      dup 0= IF drop EXIT THEN   
   >      BITS_PER_CELL min to ubits   
   >      ubits lshift swap   
   >      dup >r ubits msbits or   
   >      r> ubits lshift swap ;   
   >   
   > : DRSHIFT ( ud u -- ud2 )   
   >      dup 0= IF drop EXIT THEN   
   >      BITS_PER_CELL min to ubits   
   >      swap ubits rshift   
   >      swap dup >r ubits lsbits or   
   >      r> ubits rshift ;   
   >   
   > With x86, it should be possible to write efficient versions of DLSHIFT   
   > and DRSHIFT using SHLD and SHRD instructions.   
   >   
      
   I left out the definitions of MSBITS and LSBITS (shown below):   
      
     Return the u least significant bits of cell value u1   
   \ as the most significant bits of u2   
   : lsbits ( u1 u -- u2 )   
        BITS_PER_CELL min   
        BITS_PER_CELL - negate   
        lshift ;   
      
   \ Return the u most significant bits of cell value u1   
   \ as the least significant bits of u2   
   : msbits ( u1 u -- u2 )   
        BITS_PER_CELL min   
        BITS_PER_CELL - negate   
        rshift ;   
      
   --   
   KM   
      
   --- 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