[OpenBIOS] $find
Stefan Reinauer
stepan at suse.de
Tue Jun 25 18:15:17 CEST 2002
* Stefan Reinauer <stepan at suse.de> [020625 13:00]:
> 0 > s" constant" $find ok
> 3 > .s 120019b88 0 -1 ok
> Our definition seems to be wrong:
> col($FIND LAST @ >R 2DUP R@ COMP-WORD ?BRANCH(9) 2DROP R> DUP
> >XCODE SWAP CELL+ C@ TRUE EXIT R> @ ?DUP 0= ?BRANCH(-21) 2DROP FALSE)
>
> what exactly does "SWAP CELL+ C@" do? should this not just be a NIP ?
Ah.. it fetches the word's flags, stupid me. This is not correct
according to the standard, though we do need this flag.
I have two things in mind:
* the word SEE
* the fcode evaluator
for the first one we need to be able to get to a word's header when we
have the execution token (xt). This seems impossible at the moment as
we have a variable header length
for the second we need to know at least whether the word is compile-only
or immediate, given only the xt. Currently my implementation of the
evaluator keeps a lookup table containing of xts for every word
available in fcode, using the fcode# as an index in this table.
This is created via
' end0 ,
[..]
I wrote a little function for this problem, but it runs in O(N), linear
to the number of dictionary entries:
: xt>hdr ( xt -- addr-a )
last @
begin
2dup >xcode = if
nip exit
then
@ dup 0= until
;
This looks suboptimal, but I'm going to use it until something better
comes up.
Anny comments?
Stefan
--
The x86 isn't all that complex - it just doesn't make a lot of
sense. -- Mike Johnson, Leader of 80x86 Design at AMD
Microprocessor Report (1994)
-
To unsubscribe: send mail to majordomo at freiburg.linux.de
with 'unsubscribe openbios' in the body of the message
http://www.freiburg.linux.de/OpenBIOS/ - free your system..
More information about the openbios
mailing list