X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=OPTIMIZATIONS;h=acbd0d09b3be6ab88d8f4547e555de5b73021325;hb=5919ecc5fee77630855da6aeeabdc7d8cc4f2762;hp=47a7e41415ec9258cb7d94e8de184086fef660a6;hpb=6d69dfcc438b3530fa922e518919158ccf1af497;p=sbcl.git diff --git a/OPTIMIZATIONS b/OPTIMIZATIONS index 47a7e41..acbd0d0 100644 --- a/OPTIMIZATIONS +++ b/OPTIMIZATIONS @@ -162,15 +162,6 @@ through TYPEP UNBOXED-ARRAY, within the compiler itself. rather than either constant-folding or manipulating NIL-VALUE or NULL-TN directly. -------------------------------------------------------------------------------- -#19 - (let ((dx (if (foo) - (list x) - (list y z)))) - (declare (dynamic-extent dx)) - ...) - -DX is not allocated on stack. --------------------------------------------------------------------------------- #20 (defun-with-dx foo (x) (flet ((make (x) @@ -320,32 +311,6 @@ using the x86 FP stack. It would be nice if SBCL included an SSE2-based floating point backend with a compile-time option to switch between the two. -------------------------------------------------------------------------------- -#34 -Compiling - -(defun foo (x y) - (declare (type (integer 0 45) x y)) - (+ x y)) - -results in the following error trapping code for type-checking the -arguments: - -; 424: L0: 8B058CE31812 MOV EAX, [#x1218E38C] ; '(MOD 46) -; 42A: 0F0B0A BREAK 10 ; error trap -; 42D: 05 BYTE #X05 -; 42E: 1F BYTE #X1F ; OBJECT-NOT-TYPE-ERROR -; 42F: FECE01 BYTE #XFE, #XCE, #X01 ; EDI -; 432: 0E BYTE #X0E ; EAX -; 433: L1: 8B0590E31812 MOV EAX, [#x1218E390] ; '(MOD 46) -; 439: 0F0B0A BREAK 10 ; error trap -; 43C: 03 BYTE #X03 -; 43D: 1F BYTE #X1F ; OBJECT-NOT-TYPE-ERROR -; 43E: 8E BYTE #X8E ; EDX -; 43F: 0E BYTE #X0E ; EAX - -Notice that '(MOD 46) has two entries in the constant vector. Having -one would be preferable. --------------------------------------------------------------------------------- #35 Compiling @@ -425,3 +390,18 @@ currently compiles to code that ensures the TLS index at runtime, which is both a decently large chunk of code and unnecessary, as we could ensure the TLS index at load-time as well. +-------------------------------------------------------------------------------- +#40 + +When FTYPE is declared -- to say (function (t t t t t) t), and +function has a compiler-macro, + + (apply #'foo 'x1 x2 'x3 more) + +can be transformed into + + (apply (lambda (x2 x4 x5) (foo 'x1 x2 'x3 x4 x5)) x2 more) + +which allows compiler-macro-expansion for FOO. (Only constant +arguments can be moved inside the new lambda -- otherwise evaluation +order is altered.)