From: Gábor M. <me...@re...> - 2009-03-14 18:22:00
|
On Lunes 02 Marzo 2009, Gábor Melis wrote: > On Lunes 01 Diciembre 2008, Nikodemus Siivola wrote: > > Update of /cvsroot/sbcl/sbcl/src/runtime > > In directory > > fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv29863/src/runtime > > > > Modified Files: > > alloc.c > > Log Message: > > 1.0.23.6: move code-object allocation to C side on x86 and x86-64 > > > > (Code and data separation 1/5.) > > > > * Replace VOPs with alloc_code in alloc.c. > > > > > > Index: alloc.c > > =================================================================== > > RCS file: /cvsroot/sbcl/sbcl/src/runtime/alloc.c,v > > retrieving revision 1.28 > > retrieving revision 1.29 > > diff -u -d -r1.28 -r1.29 > > --- alloc.c 22 Sep 2008 13:55:09 -0000 1.28 > > +++ alloc.c 1 Dec 2008 19:32:33 -0000 1.29 > > @@ -28,6 +28,7 @@ > > #include "genesis/cons.h" > > #include "genesis/bignum.h" > > #include "genesis/sap.h" > > +#include "genesis/code.h" > > > > #define ALIGNED_SIZE(n) ((n) + LOWTAG_MASK) & ~LOWTAG_MASK > > > > @@ -165,3 +166,23 @@ > > sap->pointer = ptr; > > return make_lispobj(sap,OTHER_POINTER_LOWTAG); > > } > > + > > +lispobj > > +alloc_code_object (unsigned boxed, unsigned unboxed) { > > + struct code * code; > > + unsigned size; > > + boxed = make_fixnum(boxed + 1 + 4); /* 4 == trace_table_offset > > offset in words */ + boxed &= ~LOWTAG_MASK; > > + > > + unboxed += LOWTAG_MASK; > > + unboxed &= ~LOWTAG_MASK; > > + > > + code = (struct code *) pa_alloc(ALIGNED_SIZE((boxed + unboxed) > > * sizeof(lispobj))); + > > + boxed = boxed << (N_WIDETAG_BITS - WORD_SHIFT); > > + code->header = boxed | CODE_HEADER_WIDETAG; > > + code->code_size = unboxed; > > + code->entry_points = NIL; > > + code->debug_info = NIL; > > + return make_lispobj(code, OTHER_POINTER_LOWTAG); > > +} > > I think the *sizeof(lispobj) is not necessary, and neither is > ALIGNED_SIZE because both boxed and unboxed are rounded up to double > word boundary. > > Patch attached. > > Cheers, Gabor Committed as 1.0.26.2. |