[openfirmware] [commit] r2794 - cpu/arm forth/kernel

repository service svn at openfirmware.info
Sat Dec 31 21:53:45 CET 2011


Author: wmb
Date: Sat Dec 31 21:53:45 2011
New Revision: 2794
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2794

Log:
Added d> to the high-level set of double-precision operators, and augmented the set of double operators in arm/kerncode.fth so that double.fth doesn't need to be loaded.  This fixes a compilation error in the x86 builds.

Modified:
   cpu/arm/kerncode.fth
   cpu/arm/kernel.bth
   forth/kernel/double.fth

Modified: cpu/arm/kerncode.fth
==============================================================================
--- cpu/arm/kerncode.fth	Sat Dec 31 21:53:40 2011	(r2793)
+++ cpu/arm/kerncode.fth	Sat Dec 31 21:53:45 2011	(r2794)
@@ -830,6 +830,7 @@
    psh       tos,sp
    mov       tos,tos,asr #0
 c;
+: u>d  ( n -- d )  0  ;
 code dnegate  ( d -- -d )
    pop       r0,sp
    rsbs      r0,r0,#0
@@ -892,6 +893,32 @@
 : dmax  ( xd1 xd2 -- )  2over 2over d<  if  2swap  then  2drop  ;
 : dmin  ( xd1 xd2 -- )  2over 2over d<  0=  if  2swap  then  2drop  ;
 
+: m+    ( d1|ud1 n -- )  s>d  d+  ;
+: 2rot  ( d1 d2 d3 -- d2 d3 d1 )  2>r 2swap 2r> 2swap  ;
+: 2nip  ( $1 $2 -- $2 )  2swap 2drop  ;
+
+: drot  ( d1 d2 d3 -- d2 d3 d1 )  2>r 2swap 2r> 2swap  ;
+: -drot ( d1 d2 d3 -- d3 d1 d2 )  drot drot  ;
+: dinvert  ( d1 -- d2 )  swap invert  swap invert  ;
+
+: dlshift  ( d1 n -- d2 )
+   tuck lshift >r                           ( low n  r: high2 )
+   2dup bits/cell  swap - rshift  r> or >r  ( low n  r: high2' )
+   lshift r>                                ( d2 )
+;
+: drshift  ( d1 n -- d2 )
+   2dup rshift >r                           ( low high n  r: high2 )
+   tuck  bits/cell swap - lshift            ( low n low2  r: high2 )
+   -rot  rshift  or                         ( low2  r: high2 )
+   r>                                       ( d2 )
+;
+: d>>a  ( d1 n -- d2 )
+   2dup rshift >r                           ( low high n  r: high2 )
+   tuck  bits/cell swap - lshift            ( low n low2  r: high2 )
+   -rot  >>a  or                            ( low2  r: high2 )
+   r>                                       ( d2 )
+;
+
 code fill       ( adr cnt char -- )
    orr       r2,tos,tos,lsl #8 
    ldmia     sp!,{r0,r1,tos}	\ r0-cnt r1-adr r2-data

Modified: cpu/arm/kernel.bth
==============================================================================
--- cpu/arm/kernel.bth	Sat Dec 31 21:53:40 2011	(r2793)
+++ cpu/arm/kernel.bth	Sat Dec 31 21:53:45 2011	(r2794)
@@ -96,7 +96,6 @@
 fload ${BP}/cpu/arm/dodoesad.fth
 fload ${BP}/cpu/arm/version.fth
 
-fload ${BP}/forth/kernel/double.fth  \ ???
 fload ${BP}/forth/kernel/scan.fth
 
 fload ${BP}/cpu/arm/bitops.fth

Modified: forth/kernel/double.fth
==============================================================================
--- forth/kernel/double.fth	Sat Dec 31 21:53:40 2011	(r2793)
+++ forth/kernel/double.fth	Sat Dec 31 21:53:45 2011	(r2794)
@@ -10,6 +10,7 @@
 : d<>   ( d1 d2 -- flag )  d=  0=  ;
 : du<   ( ud1 ud2 -- flag )  rot  swap  2dup <>  if  2swap  then  2drop u<  ;
 : d<    ( d1 d2 -- flag )  2 pick over = if drop nip u< else nip < nip then  ;
+: d>    ( d1 d2 -- flag )  2swap d<  ;
 : dnegate  ( d -- -d )  0 0  2swap  d-  ;
 : dabs     ( d -- +d )  2dup  d0<  if  dnegate  then  ;
 



More information about the openfirmware mailing list