"create-named-in" cosmetix
[urforth.git] / meta / meta-40-tc-compiler-06-name-hash.f
blobeb67c20b93e4ff39c7c1a1b9938d9864a05bb547
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; UrForth level 1: self-hosting 32-bit Forth compiler
3 ;; Metacompiler
4 ;; Copyright (C) 2020 Ketmar Dark // Invisible Vector
5 ;; GPLv3 ONLY
6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7 ;; word name hashing
8 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
10 defer-not-yet tc-str-name-hash-real-addr ( addr count -- u32hash )
12 :noname ;; setup name hashing function
13 tc-wordhash-type case
14 tc-nhash-elf of ['] tc-str-name-hash-elf endof
15 tc-nhash-joaat of ['] tc-str-name-hash-joaat endof
16 tc-nhash-rot of ['] tc-str-name-hash-rot endof
17 abort" unknown name hash type"
18 endcase
19 dup to tc-str-name-hash-real-addr execute
20 ; to tc-str-name-hash-real-addr
22 : tc-str-name-hash ( rva-addr count -- u32hash )
23 swap tc->real swap tc-str-name-hash-real-addr
26 : tc-name-hash-fold-mask ( u32hash -- folded-masked-hash )
27 uhash32->8 -1 forth-hashtable-bits lshift bitnot and