ppc64: enable #+salted-symbol-hash

This commit is contained in:
Douglas Katzman 2024-03-03 20:29:45 -05:00
parent 5a23a28ce7
commit dc8b80d67a
5 changed files with 131 additions and 4 deletions

View file

@ -3,3 +3,4 @@
:64-bit :untagged-fdefns :sb-thread :soft-card-marks
:gencgc
:compare-and-swap-vops :alien-callbacks
:salted-symbol-hash

View file

@ -68,8 +68,8 @@
(assert (= length (length string)))
(cond #+64-bit
((string= string "NIL") ; :NIL must hash the same as NIL
#+x86-64 0 ; return the high 4 bytes in NIL's car slot
#-x86-64
#+salted-symbol-hash 0 ; return the high 4 bytes in NIL's car slot
#-salted-symbol-hash
;; out-of-order with defconstant nil-value
(ash (sb-vm::get-nil-taggedptr) (- sb-vm:n-fixnum-tag-bits)))
(t

View file

@ -272,23 +272,49 @@
(inst b? (if not-p :eq :ne) target)
OUT))
;;; The lowtag arrangement for ppc64 does *NOT* permit accessing
;;; slots of NIL as a symbol. Therefore since it has to be special-cased
;;; there's no reason that NIL couldn't always have had a wired hash.
;;; It doesn't depend on 4 bytes of NIL's address being 0.
(define-vop (symbol-hash)
(:policy :fast-safe)
(:translate symbol-hash)
(:args (symbol :scs (descriptor-reg)))
(:results (res :scs (any-reg)))
(:results (res :scs (unsigned-reg)))
(:result-types positive-fixnum)
(:arg-refs args)
(:generator 4
(when (not-nil-tn-ref-p args)
(loadw res symbol symbol-hash-slot other-pointer-lowtag)
(inst srdi res res 24) ; shift out 3 bytes
(return-from symbol-hash))
(inst cmpld symbol null-tn)
(inst beq NULL)
(loadw res symbol symbol-hash-slot other-pointer-lowtag)
(inst srdi res res 24) ; shift out 3 bytes
(inst b DONE)
NULL
(inst addi res null-tn (- (logand sb-vm:nil-value sb-vm:fixnum-tag-mask)))
(inst li res 0) ; the salt may as well have been zero
DONE))
(define-vop (symbol-name-hash)
(:policy :fast-safe)
(:translate symbol-name-hash)
(:args (symbol :scs (descriptor-reg)))
(:results (res :scs (unsigned-reg)))
(:result-types positive-fixnum)
(:arg-refs args)
(:generator 4
(when (not-nil-tn-ref-p args)
(loadw res symbol symbol-hash-slot other-pointer-lowtag)
(inst srdi res res 32) ; shift out 4 bytes
(return-from symbol-name-hash))
(inst cmpld symbol null-tn)
(inst beq NULL)
(loadw res symbol symbol-hash-slot other-pointer-lowtag)
(inst srdi res res 32) ; shift out 4 bytes
(inst b DONE)
NULL
(inst li res 0)
DONE))
;;;; Fdefinition (fdefn) objects.

View file

@ -1016,6 +1016,7 @@
(< (0 #.(D #x401C0000 0)) T)
(< (0 #.(D #x40200000 0)) T)
(< (0 #.(D #x40400000 0)) T)
(< (0 #.(D #x4130FFFF 0)) T)
(< (0 #.(D #x41BFFFFF #xFFFFFFFF)) T)
(< (0 #.(D #x41CFFFFF #xFC000000)) T)
(< (0 #.(D #x41D921FB #x537B1D3D)) T)
@ -3249,6 +3250,7 @@
(<= (0 #.(D #x40400000 0)) T)
(<= (0 #.(D #x4083BA09 #xA84FBD00)) T)
(<= (0 #.(D #x4083BA73 #x2107A1BA)) T)
(<= (0 #.(D #x4130FFFF 0)) T)
(<= (0 #.(D #x41BFFFFF #xFF000000)) T)
(<= (0 #.(D #x41BFFFFF #xFFFFFFFF)) T)
(<= (0 #.(D #x41C00000 0)) T)
@ -3762,6 +3764,7 @@
(<= (1114063 #.(S #x7F7FFFFF)) T)
(<= (1114063 #.(D #x7FEFFFFF #xFFFFFFFF)) T)
(<= (1114111 #.(S #x7F7FFFFF)) T)
(<= (1114111 #.(D 0 0)) NIL)
(<= (1114111 #.(D #x7FEFFFFF #xFFFFFFFF)) T)
(<= (1114112 #.(S #x7F7FFFFF)) T)
(<= (1114112 #.(D #x7FEFFFFF #xFFFFFFFF)) T)
@ -8359,6 +8362,7 @@
(<= (#.(D #x4130FFC8 0) #.(D #x7FEFFFFF #xFFFFFFFF)) T)
(<= (#.(D #x4130FFCF 0) #.(D #x7FEFFFFF #xFFFFFFFF)) T)
(<= (#.(D #x4130FFFE 0) #.(D #x7FEFFFFF #xFFFFFFFF)) T)
(<= (#.(D #x4130FFFF 0) 0) NIL)
(<= (#.(D #x4130FFFF 0) #.(D 0 0)) NIL)
(<= (#.(D #x4130FFFF 0) #.(D #x4130FFFF 0)) T)
(<= (#.(D #x4130FFFF 0) #.(D #x7FEFFFFF #xFFFFFFFF)) T)
@ -10987,6 +10991,7 @@
(= (0 #.(D #x40080000 0)) NIL)
(= (0 #.(D #x40180000 0)) NIL)
(= (0 #.(D #x40380000 0)) NIL)
(= (0 #.(D #x4130FFFF 0)) NIL)
(= (0 #.(D #x43C00000 0)) NIL)
(= (0 #.(D #x43E00000 0)) NIL)
(= (0 #.(D #x43F00000 0)) NIL)
@ -11133,6 +11138,7 @@
(= (16384 #.(D #x40D00000 0)) T)
(= (65535 #.(D 0 0)) NIL)
(= (65535 #.(D #x40EFFFE0 0)) T)
(= (1114111 #.(D 0 0)) NIL)
(= (1114111 #.(D #x4130FFFF 0)) T)
(= (1114112 #.(D #x41310000 0)) T)
(= (16777216 #.(D #x-38100001 #xE0000000)) NIL)
@ -12973,6 +12979,7 @@
(> (8277 #.(D #x40C02A80 0)) NIL)
(> (32767 #.(D #x-3F200000 0)) T)
(> (65535 #.(D 0 0)) T)
(> (1114111 #.(D 0 0)) T)
(> (16777216 #.(D #x-38100001 #xE0000000)) T)
(> (536870906 #.(D #x3FF00000 0)) T)
(> (536870907 #.(D #x3FF00000 0)) T)
@ -15049,6 +15056,7 @@
(> (#.(D #x412C0100 0) #.(D #x412C01FE 0)) NIL)
(> (#.(D #x412C03E0 0) #.(D #x412C1FFE 0)) NIL)
(> (#.(D #x412FFFFE 0) #.(D 0 0)) T)
(> (#.(D #x4130FFFF 0) 0) T)
(> (#.(D #x4130FFFF 0) 1114111) NIL)
(> (#.(D #x4130FFFF 0) #.(S #x4987FFF8)) NIL)
(> (#.(D #x4130FFFF 0) #.(D 0 0)) T)

View file

@ -1470,5 +1470,97 @@
(let ((b (& val #x7)))
(let ((a (>> val 29)))
(^ a (aref tab b))))))")
(#(0 7980B71D 7C678985 CD22F006)
"(NIL BASE-CHAR CHARACTER *)"
"( (& (+ val (>> val 6)) 3) )")
(#(0 10ACE44E 74748736 971A1DF1)
"(NIL FLOAT RATIONAL INTEGER)"
"( (& (>> val 5) 3) )")
(#(0 E022967D FB685091 FF5AE652)
"(NIL :HEAD :TAIL :BOTH)"
"( (& (>> val 14) 3) )")
(#(0 905F66AC 92586CF4 9D5025AF)
"(:SPECIAL-FORM :MACRO :FUNCTION NIL)"
"( (& (+ val (>> val 2)) 3) )")
(#(0 19627350 3932B57B C3C1E2DD)
"(NIL NOTINLINE MAYBE-INLINE INLINE)"
"( (& (>> val 8) 3) )")
(#(0 12D85B02 47ED28C7 568510D9 EC8EB822)
"(NIL :FORTHCOMING-DEFCLASS-TYPE :INSTANCE :DEFINED :PRIMITIVE)"
"( (& (^ (>> val 1) (>> val 8)) 7))")
(#(0 55E45869 62971997 8F406FFB)
"(:AUTO :IMMOBILE :DYNAMIC NIL)"
"( (& (>> val 3) 3) )")
(#(0 3C28E423 6610551C A1DFDD0E A55DBD6F)
"(:DELETED :INITIAL :COMPLEX-TOPLEVEL :TOPLEVEL NIL)"
"( (& (^ val (>> val 16)) 7))")
(#(0 8D87477C C8A25DB2 F987A176)
"(SB-C::INITIAL-UNUSED T SET NIL)"
"( (& (>> val 1) 3) )")
(#(0 83A45D5A 90B78E0C C8A25DB2)
"(:COMPUTE-ONLY :FORCE-TO-STACK NIL T)"
"( (& (>> val 3) 3) )")
(#(0 519DD3CE 55B0F9E6 70E7C178 92E00046)
"(:FIXED :KNOWN-RETURN :LOCAL-CALL :FULL-CALL NIL)"
"( (& (+ (>> val 1) (>> val 11)) 7))")
(#(0 10ACE44E 2CFE05E6 3539E037 372E43BC 652FED0C 7C31AE8F 7C678985 965CD62A A0FAB3A5 B64902BB B6EC8FEB C8A25DB2 CD22F006
FF5C21D6)
"(T BASE-CHAR STANDARD-CHAR CHARACTER EXTENDED-CHAR BIT FIXNUM UNSIGNED-BYTE SIGNED-BYTE DOUBLE-FLOAT SINGLE-FLOAT MOD INTEGER COMPLEX NIL)"
"((let ((tab #a((8) (unsigned-byte 8) 13 2 0 5 12 0 5 14)))
(let ((b (& (>> val 19) #x7)))
(let ((a (>> (<< val 5) 29)))
(^ a (aref tab b))))))")
(#(0 70CB34EE A74C4D40 E29480A8 FF414202)
"(NIL LIST CONS VECTOR SIMPLE-VECTOR)"
"( (& (- (>> val 1) (>> val 6)) 7))")
(#(0 60574E06 7BC3707A 7F9752D2)
"(:UNSPECIFIC :WILD :NEWEST NIL)"
"( (& (>> val 22) 3) )")
(#(0 60574E06 7F9752D2 ED8B5226)
"(:UNC :WILD :UNSPECIFIC NIL)"
"( (& (+ val (>> val 24)) 3) )")
(#(0 47ED28C7 7980B71D A4323F41 AE780BE9 C8A25DB2)
"(T * INSTANCE FUNCALLABLE-INSTANCE EXTENDED-SEQUENCE NIL)"
"( (& (+ (>> val 1) (>> val 27)) 7))")
(#(0 7A03BEDF 8E8B60F0 9D81B113 D8C1EE02 FBADBE01)
"(:NAMED :PREDICATE :COPIER :CONSTRUCTOR :CONC-NAME NIL)"
"( (& (^ (>> val 1) (>> val 7)) 7))")
(#(0 42F9EC4F 52ECC4FA 53C6AF8C 546D436A D9F0FE17 E77DD8CF)
"(:NEW-VERSION :ERROR NIL :RENAME :RENAME-AND-DELETE :SUPERSEDE :APPEND)"
"( (& (^ (>> val 4) (>> val 13)) 7))")
(#(0 3E421619 42F9EC4F 52ECC4FA 53C6AF8C 546D436A D9F0FE17 E77DD8CF)
"(NIL :SUPERSEDE :APPEND :OVERWRITE :RENAME-AND-DELETE :RENAME :NEW-VERSION :ERROR)"
"( (& (- (>> val 2) (>> val 18)) 7))")
(#(0 12D65FF7 15802369 2F5FD56F 63E7A20E 6FC25D49 804A5D47 9B65AE2D A31AF97E B21914BD CD29540C D278DEA5 E6794721 E67AD41E
E9E52992 EBF9DC24 EFFEC71A FEA15FC4)
"#(:BO-DNZF :BO-DNZFP :BO-DZF :BO-DZFP :BO-F :BO-FP NIL NIL :BO-DNZT :BO-DNZTP :BO-DZT :BO-DZTP :BO-T :BO-TP NIL NIL :BO-DNZ :BO-DNZP :BO-DZ :BO-DZP :BO-U NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)"
"((let ((tab #a((16) (unsigned-byte 8) 0 1 7 0 13 0 0 0 0 13 31 0 8 12 0 18)))
(let ((b (& val #xf)))
(let ((a (>> val 28)))
(^ a (aref tab b))))))")
(#(0 3A909AC4 598548A9 75138050 BCDBA900 F4C5E7A1)
"(:LOAD-NARGS :COMP-LRA :FROB-NFP :SAVE-FP :LOAD-FP NIL)"
"( (& (+ (>> val 4) (>> val 31)) 7))")
(#(0 385ABA4 3A909AC4 67175F5F 75138050)
"(:LOAD-NARGS :LOAD-OLD-FP :LOAD-RETURN-PC :FROB-NFP NIL)"
"( (& (^ (>> val 3) (>> val 20)) 7))")
(#(0 B414EE0 3B3832EC A256D8C6 E3479BD2)
"(:KEY-OR-VALUE :KEY-AND-VALUE :VALUE :KEY NIL)"
"( (& (+ (>> val 1) (>> val 26)) 7))")
(#(0 50EDFBF1 6C16ABD3 AC25889A E8DC3557)
"(EQ EQL EQUAL EQUALP NIL)"
"( (& (^ (>> val 2) (>> val 13)) 7))")
(#(0 C07E71ED E022967D E41ED3F1)
"(NIL :STRINGS :BOTH :SYMBOLS)"
"( (& (>> val 3) 3) )")
(#(0 90EDB7B 1FDE90F6 25164A63 50F5AB12 B800E558 C3EABF48)
"(NIL :HOST :DEVICE :DIRECTORY :NAME :TYPE :VERSION)"
"( (& (>> val 12) 7))")
(#(0 3D6EC19 326CF299 3A1DA026 8CD5B89F 92586CF4 A048B3D2 B7DA6CE4 EB29C836 F987A176)
"(EVAL FUNCTION SB-WALKER::TEST SB-WALKER::EFFECT RETURN QUOTE NIL SET LAMBDA SB-WALKER::CALL)"
"((let ((tab #a((8) (unsigned-byte 8) 8 5 4 0 2 0 0 13)))
(let ((b (& val #x7)))
(let ((a (>> (<< val 5) 29)))
(^ a (aref tab b))))))")
)
;; EOF