From: Stephan F. <def...@go...> - 2014-07-17 19:58:32
|
Hi, for many functions in the new allocation branch I get the compiler note ; (SB-GMP::DEFGMPFUN SB-GMP:MPZ-ADD ; (SB-GMP::A SB-GMP::B) ; (SB-GMP::WITH-ALLOCATED-RESULTS ((SB-GMP::RESULT (1+ #))) ; (SB-GMP::WITH-MPZ-VARS ((SB-GMP::A SB-GMP::GA) (SB-GMP::B SB-GMP::GB)) ; (SB-GMP::__GMPZ_ADD (ADDR SB-GMP::RESULT) (ADDR SB-GMP::GA) ; (ADDR SB-GMP::GB))))) ; --> PROGN DEFUN PROGN ; ==> ; (SB-IMPL::%DEFUN 'SB-GMP:MPZ-ADD ; (SB-INT:NAMED-LAMBDA SB-GMP:MPZ-ADD ; (SB-GMP::A SB-GMP::B) ; (DECLARE (OPTIMIZE (SPEED 3) (SPACE 3)) ; (TYPE INTEGER SB-GMP::A SB-GMP::B)) ; (BLOCK SB-GMP:MPZ-ADD ; (SB-GMP::WITH-ALLOCATED-RESULTS (#) ; (SB-GMP::WITH-MPZ-VARS # ; #)))) ; NIL ; '(SB-C:LAMBDA-WITH-LEXENV NIL NIL NIL (SB-GMP::A SB-GMP::B) ; (DECLARE (OPTIMIZE (SPEED 3) (SPACE 3)) ; (TYPE INTEGER SB-GMP::A SB-GMP::B)) ; (BLOCK SB-GMP:MPZ-ADD ; (SB-GMP::WITH-ALLOCATED-RESULTS (#) ; (SB-GMP::WITH-MPZ-VARS # ; #)))) ; (SB-C:SOURCE-LOCATION)) ; ; note: Return type not fixed values, so can't use known return convention: ; NIL One such function is (defgmpfun mpz-add (a b) (with-allocated-results ((result (1+ (max (blength a) (blength b))))) (with-mpz-vars ((a ga) (b gb)) (__gmpz_add (addr result) (addr ga) (addr gb))))) The defgmpfun expansion is (PROGN (DECLAIM (SB-EXT:MAYBE-INLINE MPZ-ADD)) (DEFUN MPZ-ADD (A B) (DECLARE (OPTIMIZE (SPEED 3) (SPACE 3)) (TYPE INTEGER A B)) (WITH-ALLOCATED-RESULTS ((RESULT (1+ (MAX (BLENGTH A) (BLENGTH B))))) (WITH-MPZ-VARS ((A GA) (B GB)) (__GMPZ_ADD (ADDR RESULT) (ADDR GA) (ADDR GB)))))) and the inner expanded part is as follows (LET ((#:RESULT949 (%ALLOCATE-BIGNUM (1+ (MAX (BLENGTH A) (BLENGTH B)))))) (SB-SYS:WITHOUT-GCING (WITH-ALIEN ((RESULT (STRUCT GMPINT))) (SETF (SLOT RESULT 'MP_ALLOC) (1+ (MAX (BLENGTH A) (BLENGTH B))) (SLOT RESULT 'MP_SIZE) 0 (SLOT RESULT 'MP_D) (BIGNUM-DATA-SAP #:RESULT949)) (WITH-MPZ-VARS ((A GA) (B GB)) (__GMPZ_ADD (ADDR RESULT) (ADDR GA) (ADDR GB))) (LET ((#:NRESULT950 (IF (MINUSP (SLOT RESULT 'MP_SIZE)) (- (%NORMALIZE-BIGNUM (DATA-SAP-BIGNUM (ALIEN-SAP (SLOT RESULT 'MP_D))) (SLOT RESULT 'MP_ALLOC))) (%NORMALIZE-BIGNUM (DATA-SAP-BIGNUM (ALIEN-SAP (SLOT RESULT 'MP_D))) (SLOT RESULT 'MP_ALLOC))))) (VALUES #:NRESULT950))))) Values appears to be quite fixed (this is a simple instance, there are other functions with two return values). What do I have to do to make SBCL be aware of the fixed values (and what is this NIL in the compiler note)? Many thanks and best regards, Stephan |