Inline more floats.
This commit is contained in:
@ -59,3 +59,19 @@
|
|||||||
: min 2dup < if drop else nip then ;
|
: min 2dup < if drop else nip then ;
|
||||||
: max 2dup < if nip else drop then ;
|
: max 2dup < if nip else drop then ;
|
||||||
: abs ( n -- +n ) dup 0< if negate then ;
|
: abs ( n -- +n ) dup 0< if negate then ;
|
||||||
|
|
||||||
|
: f= ( r r -- f ) f- f0= ;
|
||||||
|
: f< ( r r -- f ) f- f0< ;
|
||||||
|
: f> ( r r -- f ) fswap f< ;
|
||||||
|
: f<> ( r r -- f ) f= 0= ;
|
||||||
|
: f<= ( r r -- f ) f> 0= ;
|
||||||
|
: f>= ( r r -- f ) f< 0= ;
|
||||||
|
|
||||||
|
4 constant sfloat
|
||||||
|
: sfloats ( n -- n*4 ) sfloat * ;
|
||||||
|
: sfloat+ ( a -- a ) sfloat + ;
|
||||||
|
|
||||||
|
3.14159265359e fconstant pi
|
||||||
|
|
||||||
|
: fsqrt ( r -- r ) 1e 20 0 do fover fover f/ f+ 0.5e f* loop fnip ;
|
||||||
|
|
||||||
|
|||||||
@ -12,16 +12,6 @@
|
|||||||
\ See the License for the specific language governing permissions and
|
\ See the License for the specific language governing permissions and
|
||||||
\ limitations under the License.
|
\ limitations under the License.
|
||||||
|
|
||||||
: f= ( r r -- f ) f- f0= ;
|
|
||||||
: f< ( r r -- f ) f- f0< ;
|
|
||||||
: f> ( r r -- f ) fswap f< ;
|
|
||||||
: f<> ( r r -- f ) f= 0= ;
|
|
||||||
: f<= ( r r -- f ) f> 0= ;
|
|
||||||
: f>= ( r r -- f ) f< 0= ;
|
|
||||||
|
|
||||||
4 constant sfloat
|
|
||||||
: sfloats ( n -- n*4 ) sfloat * ;
|
|
||||||
: sfloat+ ( a -- a ) sfloat + ;
|
|
||||||
: sf, ( r -- ) here sf! sfloat allot ;
|
: sf, ( r -- ) here sf! sfloat allot ;
|
||||||
|
|
||||||
: afliteral ( r -- ) ['] DOFLIT , sf, align ;
|
: afliteral ( r -- ) ['] DOFLIT , sf, align ;
|
||||||
@ -30,10 +20,6 @@
|
|||||||
: fconstant ( r "name" ) create sf, align does> sf@ ;
|
: fconstant ( r "name" ) create sf, align does> sf@ ;
|
||||||
: fvariable ( "name" ) create sfloat allot align ;
|
: fvariable ( "name" ) create sfloat allot align ;
|
||||||
|
|
||||||
3.14159265359e fconstant pi
|
|
||||||
|
|
||||||
: fsqrt ( r -- r ) 1e 20 0 do fover fover f/ f+ 0.5e f* loop fnip ;
|
|
||||||
|
|
||||||
6 value precision
|
6 value precision
|
||||||
: set-precision ( n -- ) to precision ;
|
: set-precision ( n -- ) to precision ;
|
||||||
|
|
||||||
|
|||||||
@ -26,6 +26,12 @@
|
|||||||
X("FNEGATE", FNEGATE, *fp = -*fp) \
|
X("FNEGATE", FNEGATE, *fp = -*fp) \
|
||||||
X("F0<", FZLESS, DUP; tos = *fp-- < 0.0f ? -1 : 0) \
|
X("F0<", FZLESS, DUP; tos = *fp-- < 0.0f ? -1 : 0) \
|
||||||
X("F0=", FZEQUAL, DUP; tos = *fp-- == 0.0f ? -1 : 0) \
|
X("F0=", FZEQUAL, DUP; tos = *fp-- == 0.0f ? -1 : 0) \
|
||||||
|
X("F=", FEQUAL, DUP; tos = fp[-1] == fp[0] ? -1 : 0; fp -= 2) \
|
||||||
|
X("F<", FLESS, DUP; tos = fp[-1] < fp[0] ? -1 : 0; fp -= 2) \
|
||||||
|
X("F>", FGREATER, DUP; tos = fp[-1] > fp[0] ? -1 : 0; fp -= 2) \
|
||||||
|
X("F<>", FNEQUAL, DUP; tos = fp[-1] != fp[0] ? -1 : 0; fp -= 2) \
|
||||||
|
X("F<=", FLESSEQ, DUP; tos = fp[-1] <= fp[0] ? -1 : 0; fp -= 2) \
|
||||||
|
X("F>=", FGREATEREQ, DUP; tos = fp[-1] >= fp[0] ? -1 : 0; fp -= 2) \
|
||||||
X("F+", FPLUS, fp[-1] += *fp; --fp) \
|
X("F+", FPLUS, fp[-1] += *fp; --fp) \
|
||||||
X("F-", FMINUS, fp[-1] -= *fp; --fp) \
|
X("F-", FMINUS, fp[-1] -= *fp; --fp) \
|
||||||
X("F*", FSTAR, fp[-1] *= *fp; --fp) \
|
X("F*", FSTAR, fp[-1] *= *fp; --fp) \
|
||||||
@ -33,4 +39,11 @@
|
|||||||
X("1/F", FINVERSE, *fp = 1.0 / *fp) \
|
X("1/F", FINVERSE, *fp = 1.0 / *fp) \
|
||||||
X("S>F", STOF, *++fp = (float) tos; DROP) \
|
X("S>F", STOF, *++fp = (float) tos; DROP) \
|
||||||
X("F>S", FTOS, DUP; tos = (cell_t) *fp--) \
|
X("F>S", FTOS, DUP; tos = (cell_t) *fp--) \
|
||||||
X("F>NUMBER?", FCONVERT, tos = fconvert((const char *) *sp, tos, fp); --sp)
|
X("F>NUMBER?", FCONVERT, tos = fconvert((const char *) *sp, tos, fp); --sp) \
|
||||||
|
Y(SFLOAT, DUP; tos = sizeof(float)) \
|
||||||
|
Y(SFLOATS, tos *= sizeof(float)) \
|
||||||
|
X("SFLOAT+", SFLOATPLUS, DUP; tos += sizeof(float)) \
|
||||||
|
Y(PI, *++fp = 3.14159265359f) \
|
||||||
|
Y(FSQRT, float fx = *fp; float ft = 1.0f; \
|
||||||
|
for (w = 0; w < 20; ++w) ft = (fx / ft + ft) * 0.5f; *fp = ft) \
|
||||||
|
|
||||||
|
|||||||
@ -29,22 +29,11 @@ e: check-highlevel-floats
|
|||||||
out: #fs
|
out: #fs
|
||||||
out: set-precision
|
out: set-precision
|
||||||
out: precision
|
out: precision
|
||||||
out: fsqrt
|
|
||||||
out: pi
|
|
||||||
out: fvariable
|
out: fvariable
|
||||||
out: fconstant
|
out: fconstant
|
||||||
out: fliteral
|
out: fliteral
|
||||||
out: afliteral
|
out: afliteral
|
||||||
out: sf,
|
out: sf,
|
||||||
out: sfloat+
|
|
||||||
out: sfloats
|
|
||||||
out: sfloat
|
|
||||||
out: f>=
|
|
||||||
out: f<=
|
|
||||||
out: f<>
|
|
||||||
out: f>
|
|
||||||
out: f<
|
|
||||||
out: f=
|
|
||||||
;e
|
;e
|
||||||
|
|
||||||
e: check-boot
|
e: check-boot
|
||||||
@ -258,6 +247,11 @@ e: check-core-opcodes
|
|||||||
;e
|
;e
|
||||||
|
|
||||||
e: check-float-opcodes
|
e: check-float-opcodes
|
||||||
|
out: FSQRT
|
||||||
|
out: PI
|
||||||
|
out: SFLOAT+
|
||||||
|
out: SFLOATS
|
||||||
|
out: SFLOAT
|
||||||
out: F>NUMBER?
|
out: F>NUMBER?
|
||||||
out: F>S
|
out: F>S
|
||||||
out: S>F
|
out: S>F
|
||||||
@ -266,6 +260,12 @@ e: check-float-opcodes
|
|||||||
out: F*
|
out: F*
|
||||||
out: F-
|
out: F-
|
||||||
out: F+
|
out: F+
|
||||||
|
out: F>=
|
||||||
|
out: F<=
|
||||||
|
out: F<>
|
||||||
|
out: F>
|
||||||
|
out: F<
|
||||||
|
out: F=
|
||||||
out: F0=
|
out: F0=
|
||||||
out: F0<
|
out: F0<
|
||||||
out: FNEGATE
|
out: FNEGATE
|
||||||
|
|||||||
Reference in New Issue
Block a user