From: Alexey D. <ade...@us...> - 2004-03-13 19:48:05
|
Update of /cvsroot/sbcl/sbcl/src/compiler/x86 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22083/src/compiler/x86 Modified Files: Tag: stack-analysis-branch values.lisp Log Message: 0.8.8.23.stack.1: * Make two passes: first, compute live _sets_, second, order them to stacks; * new VOP: %%NIP-VALUES, removing dead UVL from the middle of the stack (currently implemented only on X86). Index: values.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86/values.lisp,v retrieving revision 1.6 retrieving revision 1.6.40.1 diff -u -d -r1.6 -r1.6.40.1 --- values.lisp 16 Jan 2002 02:10:42 -0000 1.6 +++ values.lisp 13 Mar 2004 19:39:15 -0000 1.6.40.1 @@ -16,6 +16,34 @@ (:generator 1 (move esp-tn ptr))) +(define-vop (%%nip-values) + (:args (last-nipped-ptr :scs (any-reg) :target edi) + (last-preserved-ptr :scs (any-reg) :target esi) + (moved-ptrs :scs (any-reg) :more t)) + (:results (r-moved-ptrs :scs (any-reg) :more t) + ;; same as MOVED-PTRS + ) + (:temporary (:sc any-reg :offset esi-offset) esi) + (:temporary (:sc any-reg :offset edi-offset) edi) + (:generator 1 + (move edi last-nipped-ptr) + (move esi last-preserved-ptr) + (inst sub esi n-word-bytes) + (inst sub edi n-word-bytes) + (inst cmp esp-tn esi) + (inst jmp :a done) + (inst std) + LOOP + (inst movs :dword) + (inst cmp esp-tn esi) + (inst jmp :be loop) + DONE + (inst lea esp-tn (make-ea :dword :base edi :disp n-word-bytes)) + (inst sub edi esi) + (loop for moved = moved-ptrs then (tn-ref-across moved) + while moved + do (inst add (tn-ref-tn moved) edi)))) + ;;; Push some values onto the stack, returning the start and number of values ;;; pushed as results. It is assumed that the Vals are wired to the standard ;;; argument locations. Nvals is the number of values to push. |