| 1 | ;;;; -*- Mode: lisp -*- |
|---|
| 2 | ;;;; |
|---|
| 3 | ;;;; Copyright (c) 2007 Raymond Toy |
|---|
| 4 | ;;;; |
|---|
| 5 | ;;;; Permission is hereby granted, free of charge, to any person |
|---|
| 6 | ;;;; obtaining a copy of this software and associated documentation |
|---|
| 7 | ;;;; files (the "Software"), to deal in the Software without |
|---|
| 8 | ;;;; restriction, including without limitation the rights to use, |
|---|
| 9 | ;;;; copy, modify, merge, publish, distribute, sublicense, and/or sell |
|---|
| 10 | ;;;; copies of the Software, and to permit persons to whom the |
|---|
| 11 | ;;;; Software is furnished to do so, subject to the following |
|---|
| 12 | ;;;; conditions: |
|---|
| 13 | ;;;; |
|---|
| 14 | ;;;; The above copyright notice and this permission notice shall be |
|---|
| 15 | ;;;; included in all copies or substantial portions of the Software. |
|---|
| 16 | ;;;; |
|---|
| 17 | ;;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
|---|
| 18 | ;;;; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES |
|---|
| 19 | ;;;; OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
|---|
| 20 | ;;;; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
|---|
| 21 | ;;;; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
|---|
| 22 | ;;;; WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
|---|
| 23 | ;;;; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
|---|
| 24 | ;;;; OTHER DEALINGS IN THE SOFTWARE. |
|---|
| 25 | |
|---|
| 26 | ;;; This is the asdf definition for oct. I don't normally use this, |
|---|
| 27 | ;;; so it might be out of date. Use at your own risk. |
|---|
| 28 | |
|---|
| 29 | ;; If you want all core functions to be inline (like the C++ code |
|---|
| 30 | ;; does), add :qd-inline to *features* by enabling the following line. |
|---|
| 31 | ;; This makes compilation much, much slower, but the resulting code |
|---|
| 32 | ;; conses much less and is significantly faster. |
|---|
| 33 | #+(not (and cmu x86)) |
|---|
| 34 | (eval-when (:load-toplevel :compile-toplevel :execute) |
|---|
| 35 | (pushnew :qd-inline *features*)) |
|---|
| 36 | |
|---|
| 37 | ;; To be able to inline all the functions, we need to make |
|---|
| 38 | ;; *inline-expansion-limit* much larger. |
|---|
| 39 | ;; |
|---|
| 40 | ;; Not sure we really want to inline everything, but the QD C++ code |
|---|
| 41 | ;; inlines all of the functions so we do the same. This makes CMUCL |
|---|
| 42 | ;; take a very long time to compile the code, and the resulting |
|---|
| 43 | ;; functions are huge. (I think div-qd is 8 KB, and sqrt-qd is a |
|---|
| 44 | ;; whopping 30 KB!) |
|---|
| 45 | ;; |
|---|
| 46 | #+(and cmu qd-inline) |
|---|
| 47 | (eval-when (:load-toplevel :compile-toplevel :execute) |
|---|
| 48 | (setf ext:*inline-expansion-limit* 1600)) |
|---|
| 49 | |
|---|
| 50 | ;; |
|---|
| 51 | ;; For all Lisps other than CMUCL, oct uses arrays to store the |
|---|
| 52 | ;; quad-double values. This is denoted by the feature :oct-array. |
|---|
| 53 | ;; For CMUCL, quad-doubles can be stored in a (complex |
|---|
| 54 | ;; double-double-float) object, which is an extension in CMUCL. |
|---|
| 55 | ;; If you want CMUCL to use an array too, add :oct-array to *features*. |
|---|
| 56 | #-cmu |
|---|
| 57 | (pushnew :oct-array *features*) |
|---|
| 58 | |
|---|
| 59 | (defpackage #:oct-system |
|---|
| 60 | (:use #:cl)) |
|---|
| 61 | |
|---|
| 62 | (in-package #:oct-system) |
|---|
| 63 | |
|---|
| 64 | (asdf:defsystem oct |
|---|
| 65 | :description "A portable implementation of quad-double arithmetic. See <http://www.common-lisp.net/project/oct>." |
|---|
| 66 | :author "Raymond Toy" |
|---|
| 67 | :maintainer "See <http://www.common-lisp.net/project/oct>" |
|---|
| 68 | :licence "MIT" |
|---|
| 69 | :version "0.0" ; No real version yet |
|---|
| 70 | :components |
|---|
| 71 | ((:file "qd-package") |
|---|
| 72 | (:file "qd-rep" :depends-on ("qd-package")) |
|---|
| 73 | #-cmu |
|---|
| 74 | (:file "qd-dd" :depends-on ("qd-package" "qd-rep")) |
|---|
| 75 | (:file "qd" |
|---|
| 76 | :depends-on ("qd-rep" #-cmu "qd-dd")) |
|---|
| 77 | (:file "qd-io" |
|---|
| 78 | :depends-on ("qd")) |
|---|
| 79 | (:file "qd-const" |
|---|
| 80 | :depends-on ("qd-io")) |
|---|
| 81 | (:file "qd-fun" |
|---|
| 82 | :depends-on ("qd" "qd-const")) |
|---|
| 83 | (:file "qd-class" |
|---|
| 84 | :depends-on ("qd-fun")) |
|---|
| 85 | (:file "qd-methods" |
|---|
| 86 | :depends-on ("qd-class")) |
|---|
| 87 | (:file "qd-format" |
|---|
| 88 | :depends-on ("qd-methods")) |
|---|
| 89 | (:file "qd-complex" |
|---|
| 90 | :depends-on ("qd-methods")) |
|---|
| 91 | )) |
|---|