Changeset 8230
- Timestamp:
- Jan 20, 2008, 2:47:13 PM (17 years ago)
- Location:
- trunk/source
- Files:
-
- 2 edited
-
level-0/PPC/ppc-misc.lisp (modified) (1 diff)
-
lib/misc.lisp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/level-0/PPC/ppc-misc.lisp
r7624 r8230 980 980 (li arg_z t) 981 981 (blr)) 982 983 (defppclapfunction %atomic-pop-static-cons () 984 (li imm0 (+ target::nil-value (target::kernel-global static-conses))) 985 @again 986 (lrarx arg_z rzero imm0) 987 (cmpri arg_z target::nil-value) 988 (be @lose) 989 (%cdr arg_z arg_y) 990 (strcx. arg_y rzero imm0) 991 (bne @again) 992 @lose 993 (blr)) 982 994 983 995 -
trunk/source/lib/misc.lisp
r8229 r8230 824 824 (gc)) 825 825 826 (defmacro atomic-pop-kernel-global (place)827 "Pops an cons cell off a kernel global, in a way that's atomic w.r.t.828 garbage collection. Uses gc-lock a.t.m., which is too829 expensive."830 `(without-interrupts831 (%lock-gc-lock)832 (let ((value (%get-kernel-global ,place)))833 (%set-kernel-global ,place (cdr value))834 (%unlock-gc-lock)835 value)))836 837 826 (defun static-cons (car-value cdr-value) 838 827 "Allocates a cons cell that doesn't move on garbage collection, … … 841 830 (when (eq (%get-kernel-global 'static-conses) 0) 842 831 (initialize-static-cons)) 843 (let ((cell #-x8664-target (atomic-pop-kernel-global 'static-conses) 844 #+x8664-target (%atomic-pop-static-cons))) 832 (let ((cell (%atomic-pop-static-cons))) 845 833 (if cell 846 834 (progn
Note:
See TracChangeset
for help on using the changeset viewer.
