X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fgeneric%2Fobjdef.lisp;h=ccad11bfe1a0eb1c5d5c482db70047e5a296e1ac;hb=e55399309ccb6c40b7ec4841c610d31c3fd487b6;hp=b4d231b3ff1d16280997c19642b029e698487889;hpb=58513220fcf87e161a5e0d3fbadd76c45f27d584;p=sbcl.git diff --git a/src/compiler/generic/objdef.lisp b/src/compiler/generic/objdef.lisp index b4d231b..ccad11b 100644 --- a/src/compiler/generic/objdef.lisp +++ b/src/compiler/generic/objdef.lisp @@ -342,13 +342,17 @@ (define-primitive-object (complex-single-float :lowtag other-pointer-lowtag :widetag complex-single-float-widetag) + #!+x86-64 + (data :c-type "struct { float data[2]; } ") + #!-x86-64 (real :c-type "float") + #!-x86-64 (imag :c-type "float")) (define-primitive-object (complex-double-float :lowtag other-pointer-lowtag :widetag complex-double-float-widetag) - #!-x86-64 (filler) + (filler) (real :c-type "double" :length #!-x86-64 2 #!+x86-64 1) (imag :c-type "double" :length #!-x86-64 2 #!+x86-64 1)) @@ -406,10 +410,24 @@ ;; starting, running, suspended, dead (state :c-type "lispobj") (tls-cookie) ; on x86, the LDT index - #!+(or x86 x86-64) (pseudo-atomic-bits) + #!+(or x86 x86-64 sb-thread) (pseudo-atomic-bits) (interrupt-data :c-type "struct interrupt_data *" :length #!+alpha 2 #!-alpha 1) (stepping) + ;; For various reasons related to pseudo-atomic and interrupt + ;; handling, we need to know if the machine context is in Lisp code + ;; or not. On non-threaded targets, this is a global variable in + ;; the runtime, but it's clearly a per-thread value. + #!+sb-thread + (foreign-function-call-active :c-type "boolean") + ;; Same as above for the location of the current control stack frame. + #!+(and sb-thread (not (or x86 x86-64))) + (control-frame-pointer :c-type "lispobj *") + ;; Same as above for the location of the current control stack + ;; pointer. This is also used on threaded x86oids to allow LDB to + ;; print an approximation of the CSP as needed. + #!+(and sb-thread) + (control-stack-pointer :c-type "lispobj *") ;; KLUDGE: On alpha, until STEPPING we have been lucky and the 32 ;; bit slots came in pairs. However the C compiler will align ;; interrupt_contexts on a double word boundary. This logic should