mirror of
git://git.code.sf.net/p/sbcl/sbcl
synced 2026-09-10 07:26:40 -04:00
ppc64: enable #+salted-symbol-hash
This commit is contained in:
parent
5a23a28ce7
commit
dc8b80d67a
|
|
@ -3,3 +3,4 @@
|
|||
:64-bit :untagged-fdefns :sb-thread :soft-card-marks
|
||||
:gencgc
|
||||
:compare-and-swap-vops :alien-callbacks
|
||||
:salted-symbol-hash
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue