Parent Directory | Revision Log
|Links to HEAD:||(view) (annotate)|
|Links to unicode-snapshot-2009-05:||(view) (annotate)|
* Change the way the x87 precision control is managed. While in Lisp, the precision control will always be set to double precision. For the duration of calls into C, the precision control will be set to the ABI default. On Linux and Darwin this is double extended precision. On all other platforms the precision control is left as double precision. The specious FLOAT-ACCURACY declaration has been eliminated. * Shorten the precision control field to 24-bits by disposing of the unexamined high order eight bits of the status word. This compacts the code generated around floating point mode changes and reduces consing. * Eliminate unnecessary uses of FLDENV and FSTENV. We can substitute a use of FSTENV with FSTSW in FLOATING-POINT-MODES. This reduces the number of cycles to access the relevant mode bits by a factor of thirty. We cannot eliminate FLDENV in SET-FLOATING-POINT-MODES, but the common case does not require an update to the status word. A fast path has been added to the VOP that improves the execution time by at least a factor of fifteen. * Remove the precision control option to SET-FLOATING-POINT-MODES. It is the responsibility of the compiler to generating code that yields correctly rounded results in double and single precision.
Funcalling a special form signals an undefined-function error, but the error object didn't include a value for the cell-error-name. Fix this by defining a separate function for each special form in CMUCL and making it the symbol-function for the symbol. (Previously, it was just the same function for all symbols.) Could we do something better than this?
Port of SBCL's float-accuracy compilation policy. Intended to make double-float-epsilon actually be epsilon on x86. No effect on other ports. The default precision is now 53-bit (double-float) instead of 64-bit (80-bit floats). However, to preserve C expectations, all calls to C have the precision set to 64-bit. This slows down calls to C, but we try to make syscalls and such fast by not changing precision for the call. By default ext:float-accuracy is 3. Use boot7.lisp to bootstrap.
Merge in the mod-arith-branch with support for x86 and sparc.
(compile nil '(lambda (a b c) (block b6 (logeqv (rem c -6758) (rem b (max 44 (return-from b6 a))))))) => error nil is not of type c::node * src/compiler/macros.lisp (do-nodes-backwards): Stop at unused continuations. Reported by Paul Dietz. Ported from SBCL/Alexey Dejneka.
Add destructuring support to &REST, &BODY, &WHOLE. Detected by Paul Dietz' ANSI tests. * src/code/defmacro.lisp (parse-defmacro-lambda-list): Add &parse-body, replacing &body (<body> <decls> <doc>). Add destructuring support to &rest, &body, &whole. * src/code/eval.lisp (lambda-list-keywords): Add &parse-body. * src/code/exports.lisp ("EXTENSIONS"): Export &parse-body. * src/hemlock/table.lisp (do-words, with-folded-string): * src/hemlock/macros.lisp (with-pop-up-display): * src/compiler/macros.lisp (deftransform): * src/compiler/ir1tran.lisp (symbol-macrolet, let, locally) (let*, flet, labels) <ir1-translator>: * src/code/package.lisp (do-symbols, do-external-symbols) (do-all-symbols): * src/code/macros.lisp (defun, prog, prog*, with-open-file) (with-open-stream, with-input-from-string) (with-output-to-string, do, do*): * src/code/mach.lisp (gr-bind): * src/code/extensions.lisp (do-anonymous, do-hash, defun-cached): Use &parse-body instead of &body.
- the :new-compiler and :hash-new features were announced as being deprecated in 18e; remove them and make code that depended on them enabled unconditionally. - if CMUCL is built with the :no-docstrings feature, docstrings are discarded while building. This is intended for embedded-type images.
Name local functions (FLET ...) or (LABELS ...). * compiler/ir1tran.lisp (*current-function-names*): New variable. (find-lexically-apparent-function): Use lexenv-find-function. (ir1-convert): Likewise. (ir1-convert-lambda): Bind *current-function-names*. (do-macrolet-stuff): Likewise. (extract-flet-variables): Determine function name from (%cleanup-function): Use lexenv-find-function. * compiler/main.lisp (compile): Bind *current-function-names*. * compiler/macros.lisp (lexenv-find-function): New function. * code/fdefinition.lisp (flet, labels): Define function names. * pcl/walk.lisp (environment-function): Activate code for handling flet/labels function names.
Signal undefined-function instead of program-error when funcalling the symbol-function of a special form.
From Eric Marsden: The attached patch contains mostly trivial changes, including a few spelling corrections, plus changes to the types of condition raised in various cases. The only significant change, I believe, is - MAKE-DISPATCH-MACRO-CHARACTER no longer raises an error if the character already was defined to be a macro character; it overrides the previous definition (as per a suggestion from Drew McDermott on cmucl-help, dated 2002-09-22).
Change calls to obsolete define-setf-method to define-setf-expander.
Change most PROCLAIMs to DECLAIMs.
Flush unnecessary function proclaim's some of which had incorrect return values, and replace them with function argument declarations which the compiler move carefully checks.
For support of compiler reentry and thread safety, avoid the use of global tables and counters for the continuation, TN, and label debug IDs; rather dynamically bind new tables and counters in the functions compiler and sub-compiler-file with the aid of the new macro with-debug-counters.
This set of changes removes nearly all references to the dylan language. It is a benign revision as no structures are redefined. At some later point the definitions in compiler/objdef could be removed, perhaps in sync with some other type change.
Fix headed boilerplate.
Fix compiler warnings.
Added a hack to keep the compiler from coalescing constants when compiling dylan code, because the dylan test suite modifies manifest constants. This is gross.
Moved various run-time functions it ir1until.
Changed lexenv-find default test to EQ
Moved condition handler binding into with-ir1-namespace, since that is used in all the right places.
Add support for :when DEFTRANSFORM argument.
Changed def-source-transform to work with setf functions also.
Deleted binding of *FAILED-OPTIMIZATIONS* (now component-failed-optimizations
Changed the DEFPRINTER expansion to error if *PRINT-READABLY* is set and to print an atomic version of the structure (just its type and address) if the depth is below *PRINT-LEVEL*. Also, use DESCEND-INTO in the non-pretty case to parallel the DESCEND-INTO inside the PPRINT-LOGICAL-BLOCK in the pretty case.
Added (DECLARE (IGNORABLE STREAM)) to the guts of the defprinter expansion to supress bound-but-not-used warnings.
More defprinter tweeks. Added a :important keyword to deftransform that indicates that failure notes should be printed even when speed==brevity.
In DEFPRINTER, ignore the depth since it is no longer used.
Flushed uses of XP: because the various pretty printer symbols are now exported from LISP.
Changed the :EVAL-NAME option to DEFTRANSFORM to also eval the argument and result type specs.
Added support for DEFTRANSFORM doc strings.
Deleted setf bootstrap hack.
New file header with RCS stuff.
Removed some #-new-compiler conditionals in eval-when compile's, since we really need them to bootstrap, even under the new compiler.
Added new EVAL-NAME keyword to DEFTRANSFORM to allow simple use of closures for making similar transforms.
Added :RESTART-P key to DO-NODES that provides for robust iteration in the presence of arbitrary destructive modifications of the block. Fixed a broken declaration.
Fixed uses of parse-defmacro re changes to it. The error-fun now takes the same kind of arguments as error, and can possibly be called with a condition object instead of a format-string.
Changed DO-NODES to work even when multiple next nodes are deleted. Added some uses of REQUIRED-ARGUMENT in slot defaults.
Fixed name of primitive-arg-count-error. Changed uses of parse-defmacro to supply something more reasonable for error-kind.
Changed def-ir1-translator, def-source-transform, and def-primitive-translator to use the new error-fun keyword to parse-defmacro instead of macroletting error.
Changed uses of lisp::parse-defmacro to conform to what Blaine's parse-defmacro expects now that it's installed.
Rewrote the defprinter stuff to use XP for pretty printing.
Fixed ftype proclaim of defprinter-prin[1c] to allow nil for the indent.
Added exports for the useful macros. Removed undefined-value, 'cause it's in extensions.
Fixed the :POLICY keyword to DEFTRANSFORM.
Made DEF-IR1-TRANSLATOR set the SYMBOL-FUNCTION of special forms to a bogus function
Added *FAILED-OPTIMIZATIONS* to the hashtables we create in WITH-IR1-NAMESPACE so that the compiler will be re-entrant.
Moved parse-lambda-list from macros.lisp to proclaim.lisp.
Lexenv changes, added support for (SETF xxx-ATTRIBUTEP) as a way to set a bunch of attributes at once.
Fixed defprinter stuff to not lose when the charpos can't be determined.
Fixed some broken declarations.
Fixed broken arg type declaration for FINISH-DEFPRINTER
Similarly disabled all the other EVAL-WHEN COMPILEs when under the new compiler.
Made the definition of UNDEFINED-VALUE not be compile-time evaluated in the new compiler. Installing an interpreted definition was breaking the compiler/eval, presumably because some calls aren't inline expanded yet.
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.
|Powered by ViewVC 1.1.5|