diff options
author | Juho Snellman <jsnell@iki.fi> | 2005-03-29 03:15:46 +0000 |
---|---|---|
committer | Juho Snellman <jsnell@iki.fi> | 2005-03-29 03:15:46 +0000 |
commit | 5bad55941fafc315116f6fcf2c8c2cce8af7ed9a (patch) | |
tree | ca059731b34ec6bd866ba634d56bffd45e25eb1d /src | |
parent | 338732358d49ab202fe55c3581294597d63aec6b (diff) |
0.8.21.6:
Fix some x86-64 issues:
* DOUBLE-FLOAT-{HIGH,LOW}-BITS on doubles stored on the stack
had a off-by-one error on x86-64. (Discovered using Paul Dietz'
random type propagation tester).
* Fix a thinko in the pointer detection code of MAKE-VALID-LISP-OBJ.
This was causing creation of invalid lispobjs under some
rare circumstances, followed by failing GC assertions. (Discovered
using Paul Dietz' random type propagation tester).
* The disassembly done by the compiler if *COMPILER-TRACE-OUTPUT*
is set was erroring out on x86-64 RIP addressing. Add a
workaround.
* Add missing case to !DEFINE-BYTE-BASHERS for a bitsize of 64.
Diffstat (limited to 'src')
-rw-r--r-- | src/code/bit-bash.lisp | 3 | ||||
-rw-r--r-- | src/code/debug-int.lisp | 2 | ||||
-rw-r--r-- | src/compiler/x86-64/float.lisp | 4 | ||||
-rw-r--r-- | src/compiler/x86-64/target-insts.lisp | 13 |
4 files changed, 12 insertions, 10 deletions
diff --git a/src/code/bit-bash.lisp b/src/code/bit-bash.lisp index c2fb216ae..9a6853d93 100644 --- a/src/code/bit-bash.lisp +++ b/src/code/bit-bash.lisp @@ -144,7 +144,8 @@ (4 0) (8 0) (16 0) - (32 0)))) + (32 0) + (64 0)))) (offset `(integer 0 ,max-bytes)) (max-word-offset (ceiling max-bytes bytes-per-word)) (word-offset `(integer 0 ,max-word-offset)) diff --git a/src/code/debug-int.lisp b/src/code/debug-int.lisp index a961e7018..f3062a0a3 100644 --- a/src/code/debug-int.lisp +++ b/src/code/debug-int.lisp @@ -1999,7 +1999,7 @@ register." ;; unbound marker (= val sb!vm:unbound-marker-widetag) ;; pointer - (and (logand val 1) + (and (logbitp 0 val) ;; Check that the pointer is valid. XXX Could do a better ;; job. FIXME: e.g. by calling out to an is_valid_pointer ;; routine in the C runtime support code diff --git a/src/compiler/x86-64/float.lisp b/src/compiler/x86-64/float.lisp index 6cce969f4..f6de9ba5d 100644 --- a/src/compiler/x86-64/float.lisp +++ b/src/compiler/x86-64/float.lisp @@ -828,7 +828,7 @@ (inst movsd temp float) (move hi-bits temp)) (double-stack - (loadw hi-bits ebp-tn (- (tn-offset float)))) + (loadw hi-bits ebp-tn (- (1+ (tn-offset float))))) (descriptor-reg (loadw hi-bits float double-float-value-slot other-pointer-lowtag))) @@ -850,7 +850,7 @@ (inst movsd temp float) (move lo-bits temp)) (double-stack - (loadw lo-bits ebp-tn (- (tn-offset float)))) + (loadw lo-bits ebp-tn (- (1+ (tn-offset float))))) (descriptor-reg (loadw lo-bits float double-float-value-slot other-pointer-lowtag))) diff --git a/src/compiler/x86-64/target-insts.lisp b/src/compiler/x86-64/target-insts.lisp index 5411762a2..8f48d181c 100644 --- a/src/compiler/x86-64/target-insts.lisp +++ b/src/compiler/x86-64/target-insts.lisp @@ -61,12 +61,13 @@ (rip-p (princ offset stream) (let ((addr (+ offset (sb!disassem:dstate-next-addr dstate)))) - (or (nth-value 1 - (sb!disassem::note-code-constant-absolute - addr dstate)) - (sb!disassem:maybe-note-assembler-routine addr - nil - dstate)))) + (when (plusp addr) + (or (nth-value 1 + (sb!disassem::note-code-constant-absolute + addr dstate)) + (sb!disassem:maybe-note-assembler-routine addr + nil + dstate))))) (firstp (progn (sb!disassem:princ16 offset stream) |