Changeset 29862 in project


Ignore:
Timestamp:
10/07/13 05:33:31 (8 years ago)
Author:
Ivan Raikov
Message:

nemo: harmonize rewriting of pow operator in nmodl and nest backends

Location:
release/4/nemo/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • release/4/nemo/trunk/nemo-nest.scm

    r29807 r29862  
    5858      ))
    5959
     60
     61(define (rewrite-pow expr)
     62  (match expr
     63         (('pow x y)  (if (and (integer? y)  (positive? y))
     64                          (if (> y 1)  (let ((tmp (gensym "x")))
     65                                         `(let ((,tmp ,x)) (* . ,(list-tabulate (inexact->exact y) (lambda (i) tmp)))))
     66                              x)
     67                          (if (and (number? y) (zero? y)) 1.0 expr)))
     68         (else expr)))
     69
    6070           
    6171(define (rhsexpr/C++ expr)
    6272  (match expr
    6373         (('if . es)  `(if . ,(map (lambda (x) (rhsexpr/C++ x)) es)))
    64          (('pow x y)  (if (and (integer? y)  (positive? y))
    65                           (if (> y 1)  (let ((tmp (gensym "x")))
    66                                          `(let ((,tmp ,x)) (* . ,(list-tabulate (inexact->exact y) (lambda (i) tmp)))))
    67                               x)
    68                             (if (and (number? y) (zero? y)) 1.0 expr)))
     74         (('pow x y)  (cond ((and (integer? y) (= y 1)) x)
     75                            ((and (number? y) (zero? y)) 1.0)
     76                            (else expr)))
    6977         ((s . es)    (if (symbol? s)  (cons (if (member s builtin-fns) s (nest-name s))
    7078                                             (map (lambda (x) (rhsexpr/C++ x)) es)) expr))
  • release/4/nemo/trunk/nemo-nmodl.scm

    r29472 r29862  
    115115  (match expr
    116116         (('if . es)  `(if . ,(map (lambda (x) (rhsexpr/NMODL x)) es)))
     117         (('pow x y)  (cond ((and (integer? y) (= y 1)) x)
     118                            ((and (number? y) (zero? y)) 1.0)
     119                            (else expr)))
    117120         (('let bnds body) `(let ,(map (lambda (x) (list (car x) (rhsexpr/NMODL (cadr x)))) bnds) ,(rhsexpr/NMODL body)))
    118          
    119121         ((s . es)    (if (symbol? s)   (cons (if (member s builtin-fns) s (nmodl-name s))
    120122                                              (map (lambda (x) (rhsexpr/NMODL x)) es)) expr))
Note: See TracChangeset for help on using the changeset viewer.