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,951 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 116,402 of 117,951   
   Anton Ertl to All   
   Floating point implementations on AMD64   
   13 Apr 24 17:55:18   
   
   From: anton@mips.complang.tuwien.ac.at   
      
   I just looked at the floating-point implementations of recent   
   SwiftForth and VFX (finally present in the system from the start), and   
   on iForth-5.1-mini (for comparison):   
      
   1 FLOATS .   
      
   reports:   
      
   16 iforth   
   10 sf64   
   10 vfx64   
      
   For   
      
   : foo f+ f* ;   
      
   the resulting code is:   
      
   SwiftForth x64-Linux 4.0.0-RC87 24-Mar-2024   
   : foo f+ f* ;  ok   
   see foo   
   44E8B9   ST(0) ST(1) FADDP              DEC1   
   44E8BB   ST(0) ST(1) FMULP              DEC9   
   44E8BD   RET                            C3 ok   
      
      
   VFX Forth 64 5.43 [build 0199] 2023-11-09 for Linux x64   
   Ā© MicroProcessor Engineering Ltd, 1998-2023   
      
   : foo f+ f* ;  ok   
   see foo   
   FOO   
   ( 0050A250    DEC1 )                  FADDP   ST(1), ST   
   ( 0050A252    DEC9 )                  FMULP   ST(1), ST   
   ( 0050A254    C3 )                    RET/NEXT   
   ( 5 bytes, 3 instructions )   
      
      
   iForth:   
   $10226000  : foo                        488BC04883ED088F4500      H.@H.m..E.   
   $1022600A  fld           [r13 0 +] tbyte41DB6D00                  A[m.   
   $1022600E  fld           [r13 #16 +] tbyte   
                                           41DB6D10                  A[m.   
   $10226012  fxch          ST(2)          D9CA                      YJ   
   $10226014  lea           r13, [r13 #32 +] qword   
                                           4D8D6D20                  M.m   
   $10226018  faddp         ST(1), ST      DEC1                      ^A   
   $1022601A  fxch          ST(1)          D9C9                      YI   
   $1022601C  fpopswap,                    41DB6D00D9CA4D8D6D10      A[m.YJM.m.   
   $10226026  fmulp         ST(1), ST      DEC9                      ^I   
   $10226028  fpush,                       4D8D6DF0D9C941DB7D00      M.mpYIA[}.   
   $10226032  ;                            488B45004883C508FFE0      H.E.H.E..` ok   
      
   So apparently the 8 hardware FP stack items are enough for SwiftForth   
   and VFX, while iForth prefers to use an FP stack in memory to allow   
   for a deeper FP stack.   
      
   Gforth sticks out by using 8-byte FP values; most of those are stored   
   in memory (supporting deep FP stacks), with the top of FP stack in an   
   xmm register on AMD64:   
      
   : foo f+ f* ;  ok   
   see-code foo   
   $7FF2CE8034E0 f+    1->1   
   7FF2CE4A6E43:   mov     rax,r12   
   7FF2CE4A6E46:   lea     r12,$08[r12]   
   7FF2CE4A6E4B:   addsd   xmm15,$08[rax]   
   $7FF2CE8034E8 f*    1->1   
   7FF2CE4A6E51:   mov     rax,r12   
   7FF2CE4A6E54:   lea     r12,$08[r12]   
   7FF2CE4A6E59:   mulsd   xmm15,$08[rax]   
   $7FF2CE8034F0 ;s    1->1   
   7FF2CE4A6E5F:   mov     rbx,[r14]   
   7FF2CE4A6E62:   add     r14,$08   
   7FF2CE4A6E66:   mov     rax,[rbx]   
   7FF2CE4A6E69:   jmp     eax   
      
   - anton   
   --   
   M. Anton Ertl  http://www.complang.tuwien.ac.at/anton/home.html   
   comp.lang.forth FAQs: http://www.complang.tuwien.ac.at/forth/faq/toc.html   
        New standard: https://forth-standard.org/   
      EuroForth 2023: https://euro.theforth.net/2023   
      
   --- 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