From: <cli...@li...> - 2010-05-29 12:04:41
|
Send clisp-cvs mailing list submissions to cli...@li... To subscribe or unsubscribe via the World Wide Web, visit https://lists.sourceforge.net/lists/listinfo/clisp-cvs or, via email, send a message with subject or body 'help' to cli...@li... You can reach the person managing the list at cli...@li... When replying, please edit your Subject line so it is more specific than "Re: Contents of clisp-cvs digest..." CLISP CVS commits for today Today's Topics: 1. clisp/src ChangeLog,1.7377,1.7378 (Sam Steingold) 2. clisp/modules/pari pari.lisp,1.51,1.52 (Sam Steingold) 3. clisp/modules/pari pari.lisp,1.52,1.53 (Sam Steingold) ---------------------------------------------------------------------- Message: 1 Date: Fri, 28 May 2010 21:24:53 +0000 From: Sam Steingold <sd...@us...> Subject: clisp/src ChangeLog,1.7377,1.7378 To: cli...@li... Message-ID: <E1O...@sf...> Update of /cvsroot/clisp/clisp/src In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv21715/src Modified Files: ChangeLog Log Message: (pari-get-integer-data, pari-set-integer-data): define using DEF-CALL-OUT and int_W because the order of words in the data segment of integers depend on whether PARI is build with gmp (low bytes first) or not (high bytes first); see <http://article.gmane.org/gmane.comp.mathematics.pari.user/1574> <http://pari.math.u-bordeaux.fr/archives/pari-users-1005/msg00008.html> (convert-to-pari@integer): use PARI-SET-INTEGER-DATA (convert-from-pari-1): use PARI-GET-INTEGER-DATA Index: ChangeLog =================================================================== RCS file: /cvsroot/clisp/clisp/src/ChangeLog,v retrieving revision 1.7377 retrieving revision 1.7378 diff -u -d -r1.7377 -r1.7378 --- ChangeLog 28 May 2010 19:40:19 -0000 1.7377 +++ ChangeLog 28 May 2010 21:24:51 -0000 1.7378 @@ -8,6 +8,14 @@ (primpart, primitive-part, maxprime): add declarations (make-initargs): do not upcase SYMBOL-NAME (convert-from-pari-10, convert-from-pari-11): use %COMPONENT + (pari-get-integer-data, pari-set-integer-data): define using + DEF-CALL-OUT and int_W because the order of words in the data + segment of integers depend on whether PARI is build with gmp (low + bytes first) or not (high bytes first); see + <http://article.gmane.org/gmane.comp.mathematics.pari.user/1574> + <http://pari.math.u-bordeaux.fr/archives/pari-users-1005/msg00008.html> + (convert-to-pari@integer): use PARI-SET-INTEGER-DATA + (convert-from-pari-1): use PARI-GET-INTEGER-DATA 2010-05-27 Sam Steingold <sd...@gn...> ------------------------------ Message: 2 Date: Fri, 28 May 2010 21:24:53 +0000 From: Sam Steingold <sd...@us...> Subject: clisp/modules/pari pari.lisp,1.51,1.52 To: cli...@li... Message-ID: <E1O...@sf...> Update of /cvsroot/clisp/clisp/modules/pari In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv21715/modules/pari Modified Files: pari.lisp Log Message: (pari-get-integer-data, pari-set-integer-data): define using DEF-CALL-OUT and int_W because the order of words in the data segment of integers depend on whether PARI is build with gmp (low bytes first) or not (high bytes first); see <http://article.gmane.org/gmane.comp.mathematics.pari.user/1574> <http://pari.math.u-bordeaux.fr/archives/pari-users-1005/msg00008.html> (convert-to-pari@integer): use PARI-SET-INTEGER-DATA (convert-from-pari-1): use PARI-GET-INTEGER-DATA Index: pari.lisp =================================================================== RCS file: /cvsroot/clisp/clisp/modules/pari/pari.lisp,v retrieving revision 1.51 retrieving revision 1.52 diff -u -d -r1.51 -r1.52 --- pari.lisp 28 May 2010 19:40:19 -0000 1.51 +++ pari.lisp 28 May 2010 21:24:51 -0000 1.52 @@ -1839,7 +1839,7 @@ (ldb pari-length-byte elt0))) ;; #define setlg(x,s) (((GEN)(x))[0]=(((GEN)(x))[0]&(~LGBITS))+(s)) -;; #define lgef(x) ((long)(((GEN)(x))[1]&LGBITS)) +;; #define lgefint(x) ((long)(((ulong*)(x))[1]&LGBITS)) (defun pari-effective-length-raw (x) (extract1 (elt1 x) (ldb pari-length-byte elt1))) @@ -1890,6 +1890,32 @@ (incf (cast v 'ulong) #,(* 2 (sizeof 'c-pointer))) (deref (cast v `(c-ptr (c-array ulong ,(- len 2)))))))) +;; life sucks: the order of words in the data segment of integers depend on +;; whether pari is build with gmp (low bytes first) or not (high bytes first). +;; <http://article.gmane.org/gmane.comp.mathematics.pari.user/1574> +;; <http://pari.math.u-bordeaux.fr/archives/pari-users-1005/msg00008.html> +(c-lines " +void get_integer_data (GEN x, ulong len, ulong *data); +void get_integer_data (GEN x, ulong len, ulong *data) +{ ulong i; for (i=0; i < len; i++) data[len-i-1] = *int_W(x,i); } +void set_integer_data (GEN x, ulong len, ulong *data); +void set_integer_data (GEN x, ulong len, ulong *data) +{ ulong i; for (i=0; i < len; i++) *int_W(x,i) = data[len-i-1]; } +~%") +(def-call-out get_integer_data (:return-type nil) + (:arguments (x pari-gen) (len ulong) (data c-pointer))) +(defun pari-get-integer-data (x) + (let ((len (- (pari-effective-length-raw x) 2))) + (with-foreign-object (data `(c-array ulong ,len)) + (get_integer_data x len data) + (foreign-value data)))) +(def-call-out set_integer_data (:return-type nil) + (:arguments (x pari-gen) (len ulong) (data c-pointer))) +(defun pari-set-integer-data (x data) + (let ((len (length data))) + (with-foreign-object (data `(c-array ulong ,len) data) + (set_integer_data x len data)))) + (defun pari-mantissa-eff (x) ; do we really need this? (with-c-var (v 'c-pointer x) (incf (cast v 'ulong) #,(sizeof 'c-pointer)) @@ -2074,7 +2100,9 @@ (dpb sign pari-sign-byte (dpb (+ len 2) pari-length-byte 0))) (extract-mantissa vec len val) - (pari-make-object vec 1))) + (let ((ptr (pari-make-object vec 1))) + (pari-set-integer-data ptr vec) + ptr))) (defun collect-mantissa (mantissa) (let ((result 0)) @@ -2082,7 +2110,7 @@ (setq result (+ (ash result #,(bitsizeof 'ulong)) (svref mantissa i)))))) (defun convert-from-pari-1 (ptr) - (* (pari-sign-raw ptr) (collect-mantissa (pari-mantissa-eff ptr)))) + (* (pari-sign-raw ptr) (collect-mantissa (pari-get-integer-data ptr)))) ;; Type 2: real numbers -- represented by CLISP floats ------------------------------ Message: 3 Date: Fri, 28 May 2010 21:42:10 +0000 From: Sam Steingold <sd...@us...> Subject: clisp/modules/pari pari.lisp,1.52,1.53 To: cli...@li... Message-ID: <E1O...@sf...> Update of /cvsroot/clisp/clisp/modules/pari In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv26809 Modified Files: pari.lisp Log Message: set_integer_data: 1st data element is the header, skip it Index: pari.lisp =================================================================== RCS file: /cvsroot/clisp/clisp/modules/pari/pari.lisp,v retrieving revision 1.52 retrieving revision 1.53 diff -u -d -r1.52 -r1.53 --- pari.lisp 28 May 2010 21:24:51 -0000 1.52 +++ pari.lisp 28 May 2010 21:42:08 -0000 1.53 @@ -1899,9 +1899,11 @@ void get_integer_data (GEN x, ulong len, ulong *data) { ulong i; for (i=0; i < len; i++) data[len-i-1] = *int_W(x,i); } void set_integer_data (GEN x, ulong len, ulong *data); -void set_integer_data (GEN x, ulong len, ulong *data) -{ ulong i; for (i=0; i < len; i++) *int_W(x,i) = data[len-i-1]; } -~%") +void set_integer_data (GEN x, ulong len, ulong *data) { + /* 1st data element is the header, skip it */ + ulong i; len--; data++; + for (i=0; i < len; i++) *int_W(x,i) = data[len-i-1]; +}~%") (def-call-out get_integer_data (:return-type nil) (:arguments (x pari-gen) (len ulong) (data c-pointer))) (defun pari-get-integer-data (x) ------------------------------ ------------------------------------------------------------------------------ ------------------------------ _______________________________________________ clisp-cvs mailing list cli...@li... https://lists.sourceforge.net/lists/listinfo/clisp-cvs End of clisp-cvs Digest, Vol 49, Issue 31 ***************************************** |