X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fgeneric%2Ftarget-core.lisp;h=dcc4a97811cdca389dc7f8e2cf7ba76b73eb8ebc;hb=f9d6d21a7f54638292214ceb9886edc03b99d545;hp=b0e698f7e39c45b6336bd9aabe8d12721ae61b50;hpb=aa2dc9529460ea0d9c99998dc87283fc1a43e808;p=sbcl.git diff --git a/src/compiler/generic/target-core.lisp b/src/compiler/generic/target-core.lisp index b0e698f..dcc4a97 100644 --- a/src/compiler/generic/target-core.lisp +++ b/src/compiler/generic/target-core.lisp @@ -24,17 +24,17 @@ (unless (zerop (logand offset sb!vm:lowtag-mask)) (error "Unaligned function object, offset = #X~X." offset)) (let ((res (%primitive compute-function code-obj offset))) - (setf (%function-self res) res) - (setf (%function-next res) (%code-entry-points code-obj)) + (setf (%simple-fun-self res) res) + (setf (%simple-fun-next res) (%code-entry-points code-obj)) (setf (%code-entry-points code-obj) res) - (setf (%function-name res) (entry-info-name entry)) - (setf (%function-arglist res) (entry-info-arguments entry)) - (setf (%function-type res) (entry-info-type entry)) + (setf (%simple-fun-name res) (entry-info-name entry)) + (setf (%simple-fun-arglist res) (entry-info-arguments entry)) + (setf (%simple-fun-type res) (entry-info-type entry)) (note-function entry res object)))) -;;; Dump a component to core. We pass in the assembler fixups, code vector -;;; and node info. +;;; Dump a component to core. We pass in the assembler fixups, code +;;; vector and node info. (defun make-core-component (component segment length trace-table fixups object) (declare (type component component) (type sb!assem:segment segment) @@ -47,7 +47,8 @@ (trace-table (pack-trace-table trace-table)) (trace-table-len (length trace-table)) (trace-table-bits (* trace-table-len tt-bits-per-entry)) - (total-length (+ length (ceiling trace-table-bits sb!vm:byte-bits))) + (total-length (+ length + (ceiling trace-table-bits sb!vm:n-byte-bits))) (box-num (- (length constants) sb!vm:code-trace-table-offset-slot)) (code-obj ;; FIXME: In CMU CL the X86 behavior here depended on @@ -81,9 +82,10 @@ (push info (core-object-debug-info object)) (setf (%code-debug-info code-obj) info)) - (setf (code-header-ref code-obj sb!vm:code-trace-table-offset-slot) length) + (setf (code-header-ref code-obj sb!vm:code-trace-table-offset-slot) + length) (copy-to-system-area trace-table - (* sb!vm:vector-data-offset sb!vm:word-bits) + (* sb!vm:vector-data-offset sb!vm:n-word-bits) fill-ptr 0 trace-table-bits) @@ -105,65 +107,3 @@ (setf (code-header-ref code-obj index) (fdefinition-object (cdr const) t)))))))))) (values)) - -(defun make-core-byte-component (segment length constants xeps object) - (declare (type sb!assem:segment segment) - (type index length) - (type vector constants) - (type list xeps) - (type core-object object)) - (without-gcing - (let* ((num-constants (length constants)) - ;; KLUDGE: On the X86, using ALLOCATE-CODE-OBJECT is - ;; supposed to make the result non-relocatable, which is - ;; probably not what we want. Could this be made into - ;; ALLOCATE-DYNAMIC-CODE-OBJECT? Is there some other fix? - ;; Am I just confused? -- WHN 19990916 - (code-obj (%primitive allocate-code-object - (the index (1+ num-constants)) - length)) - (fill-ptr (code-instructions code-obj))) - (declare (type index length) - (type system-area-pointer fill-ptr)) - (sb!assem:on-segment-contents-vectorly - segment - (lambda (v) - (declare (type (simple-array sb!assem:assembly-unit 1) v)) - (copy-byte-vector-to-system-area v fill-ptr) - (setf fill-ptr (sap+ fill-ptr (length v))))) - - (setf (code-header-ref code-obj sb!vm:code-trace-table-offset-slot) - nil) - (dolist (noise xeps) - (let ((xep (cdr noise))) - (setf (byte-function-component xep) code-obj) - (initialize-byte-compiled-function xep) - (note-function (lambda-info (car noise)) xep object))) - - (dotimes (index num-constants) - (let ((const (aref constants index)) - (code-obj-index (+ index sb!vm:code-constants-offset))) - (etypecase const - (null) - (constant - (setf (code-header-ref code-obj code-obj-index) - (constant-value const))) - (list - (ecase (car const) - (:entry - (reference-core-function code-obj code-obj-index (cdr const) - object)) - (:fdefinition - (setf (code-header-ref code-obj code-obj-index) - (sb!impl::fdefinition-object (cdr const) t))) - (:type-predicate - (let ((*unparse-function-type-simplify* t)) - (setf (code-header-ref code-obj code-obj-index) - (load-type-predicate (type-specifier (cdr const)))))) - (:xep - (let ((xep (cdr (assoc (cdr const) xeps :test #'eq)))) - (aver xep) - (setf (code-header-ref code-obj code-obj-index) xep)))))))))) - - (values)) -