summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJuho Snellman <jsnell@iki.fi>2005-03-29 03:15:46 +0000
committerJuho Snellman <jsnell@iki.fi>2005-03-29 03:15:46 +0000
commit5bad55941fafc315116f6fcf2c8c2cce8af7ed9a (patch)
treeca059731b34ec6bd866ba634d56bffd45e25eb1d /src
parent338732358d49ab202fe55c3581294597d63aec6b (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.lisp3
-rw-r--r--src/code/debug-int.lisp2
-rw-r--r--src/compiler/x86-64/float.lisp4
-rw-r--r--src/compiler/x86-64/target-insts.lisp13
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)