Skip to content

Commit

Permalink
Merge branch 'paper-18' of github.com:bsaleil/lc into paper-18
Browse files Browse the repository at this point in the history
  • Loading branch information
bsaleil committed Jun 18, 2018
2 parents 42f346c + 1485d4a commit 5152acd
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 21 deletions.
4 changes: 3 additions & 1 deletion ast.scm
Original file line number Diff line number Diff line change
Expand Up @@ -359,12 +359,14 @@
(vector (,ATX_VEC) #f ,lco-p-vector #f #t ,ATX_VEC #f )
(f64vector (,ATX_FEC) #f ,lco-p-f64vector #f #f ,ATX_FEC #f ,ATX_FLO )
(list (,ATX_PAI) #f ,lco-p-list #f #t ,ATX_PAI #f )
(bitwise-and (,ATX_INT) ,dummy-cst-all #f ,codegen-p-bitwise-and #f ,ATX_INT 2 ,ATX_INT ,ATX_INT )
;; These primitives are inlined during expansion but still here to build lambda
(real? (,ATX_NUM) ,dummy-cst-all #f #f #f ,ATX_BOO 1 ,ATX_ALL )
(eqv? #f ,dummy-cst-all #f #f #f ,ATX_BOO 2 ,ATX_ALL ,ATX_ALL )
;;
(##print-double #f #f #f ,codegen-p-print-double #f ,ATX_VOI 1 ,ATX_FLO )
(##print-perm-string #f #f #f ,codegen-p-print-perm-string #f ,ATX_VOI 1 ,ATX_STR ))))
(##print-perm-string #f #f #f ,codegen-p-print-perm-string #f ,ATX_VOI 1 ,ATX_STR )
(##process-statistics #f #f #f ,codegen-p-process-statistics #f ,ATX_FEC 0 ))))

(define (get-prim-lambda ast sym primitive)
(let ((nbargs (primitive-nbargs primitive)))
Expand Down
43 changes: 43 additions & 0 deletions codegen.scm
Original file line number Diff line number Diff line change
Expand Up @@ -3459,6 +3459,39 @@
(x86-mov cgc opnd (x86-rax))
(x86-shl cgc opnd (x86-imm-int 2))))))

(define (codegen-p-bitwise-and cgc gc-desc fs ffs op reg inlined-cond? lleft lright lcst? rcst?)
(assert (not (and lcst? rcst?)) "Internal error")

(let ((dest (codegen-reg-to-x86reg reg))
(lopnd (and (not lcst?) (codegen-loc-to-x86opnd fs ffs lleft)))
(ropnd (and (not rcst?) (codegen-loc-to-x86opnd fs ffs lright))))

(cond (lcst?
(if (not (eq? dest ropnd))
(x86-mov cgc dest ropnd))
(let ((imm (obj-encoding lleft)))
(if (int32? imm)
(x86-and cgc dest (x86-imm-int imm))
(begin
(x86-mov cgc (x86-rax) (x86-imm-int imm))
(x86-and cgc dest (x86-rax))))))
(rcst?
(if (not (eq? dest ropnd))
(x86-mov cgc dest lopnd))
(let ((imm (obj-encoding lright)))
(if (int32? imm)
(x86-and cgc dest (x86-imm-int imm))
(begin
(x86-mov cgc (x86-rax) (x86-imm-int imm))
(x86-and cgc dest (x86-rax))))))
((eq? dest ropnd)
(x86-and cgc ropnd lopnd))
((eq? dest lopnd)
(x86-and cgc lopnd ropnd))
(else
(x86-mov cgc dest lopnd)
(x86-and cgc dest ropnd)))))

;;-----------------------------------------------------------------------------
;; Others
;;-----------------------------------------------------------------------------
Expand Down Expand Up @@ -3560,6 +3593,16 @@
(x86-ppop cgc (x86-rsp))))))
(x86-mov cgc dest (x86-imm-int (obj-encoding #!void)))))

(define (codegen-p-process-statistics cgc gc-desc fs ffs op reg inlined-cond?)
(let ((dest (codegen-reg-to-x86reg reg)))
(x86-mov cgc (x86-rax) (x86-imm-int 0))
(x86-upush cgc (x86-rax))
(x86-pcall cgc label-gambit-process-statistics-handler)
(x86-upop cgc dest)
(if opt-nan-boxing
(begin (x86-mov cgc (x86-rax) (x86-imm-int (to-64-value NB_MASK_MEM)))
(x86-lea cgc dest (x86-mem (- TAG_MEMOBJ) dest (x86-rax)))))))

;;-----------------------------------------------------------------------------
;; Type checks
;;-----------------------------------------------------------------------------
Expand Down
31 changes: 22 additions & 9 deletions core.scm
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,13 @@

;;-----------------------------------------------------------------------------

(c-define (gambit-process-statistics usp psp) (long long) void "gambit_process_statistics" ""
(block_gc 7)
(let ((v (##process-statistics)))
(put-i64 (+ usp 88)
(##object->encoding v)))
(unblock_gc))

(c-define (gambit-str-to-sym-tag usp psp) (long long) void "gambit_str_to_sym_tag" ""
(block_gc 1)
(let* ((encoding48 (get-u48 (+ usp 88)))
Expand Down Expand Up @@ -524,6 +531,7 @@
(define (init-labels cgc)
(set-cdef-label! label-rt-error 'rt_error "___result = ___CAST(void*,rt_error);")
(set-cdef-label! label-gambit-call 'gambit_call "___result = ___CAST(void*,gambit_call);")
(set-cdef-label! label-gambit-process-statistics 'gambit_process_statistics "___result = ___CAST(void*,gambit_process_statistics);")
(set-cdef-label! label-gambit-str-to-sym-tag 'gambit_str_to_sym_tag "___result = ___CAST(void*,gambit_str_to_sym_tag);")
(set-cdef-label! label-gambit-str-to-sym-nan 'gambit_str_to_sym_nan "___result = ___CAST(void*,gambit_str_to_sym_nan);")
(set-cdef-label! label-do-callback 'do_callback "___result = ___CAST(void*,do_callback);")
Expand Down Expand Up @@ -705,15 +713,16 @@

;;-----------------------------------------------------------------------------

(define label-heap-limit-handler #f)
(define label-alloc-still-handler #f)
(define label-gambit-call-handler #f)
(define label-gambit-str-to-sym-handler #f)
(define label-do-callback-handler #f)
(define label-do-callback-fn-handler #f)
(define label-do-callback-cont-handler #f)
(define label-rt-error-handler #f)
(define label-err-wrong-num-args #f)
(define label-heap-limit-handler #f)
(define label-alloc-still-handler #f)
(define label-gambit-call-handler #f)
(define label-gambit-process-statistics-handler #f)
(define label-gambit-str-to-sym-handler #f)
(define label-do-callback-handler #f)
(define label-do-callback-fn-handler #f)
(define label-do-callback-cont-handler #f)
(define label-rt-error-handler #f)
(define label-err-wrong-num-args #f)

(define (gen-addr-handler cgc id addr cargs-generator)
(let ((label-handler (asm-make-label cgc id)))
Expand Down Expand Up @@ -855,6 +864,10 @@
(gen-handler cgc 'gambit_call_handler label-gambit-call))
(x86-ret cgc)

(set! label-gambit-process-statistics-handler
(gen-handler cgc 'gambit_process_statistics label-gambit-process-statistics))
(x86-ret cgc)

(set! label-gambit-str-to-sym-handler
(if opt-nan-boxing
(gen-handler cgc 'gambit_str_to_sym_handler label-gambit-str-to-sym-nan)
Expand Down
3 changes: 0 additions & 3 deletions lib/num.scm
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,6 @@
(min-h (cdr els) m)))))
(min-h l a))

(define (bitwise-and a b)
(gambit$$bitwise-and a b))

(define (arithmetic-shift n s)
(cond ((> s 0) (* n (expt 2 s)))
(else
Expand Down
8 changes: 4 additions & 4 deletions tools/benchtimes/prefix/LC.scm
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,13 @@
r)))

(define (##lc-exec-stats thunk)
(let* ((at-start (gambit$$##process-statistics))
(let* ((at-start (##process-statistics))
(result (thunk))
(at-end (gambit$$##process-statistics)))
(at-end (##process-statistics)))
(define (get-info msg idx)
(cons msg
(- (gambit$$##f64vector-ref at-end idx)
(gambit$$##f64vector-ref at-start idx))))
(- (f64vector-ref at-end idx)
(f64vector-ref at-start idx))))
(list
result
(get-info "User time" 0)
Expand Down
8 changes: 4 additions & 4 deletions tools/benchtimes/prefix/LCf64v.scm
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,13 @@
r)))

(define (##lc-exec-stats thunk)
(let* ((at-start (gambit$$##process-statistics))
(let* ((at-start (##process-statistics))
(result (thunk))
(at-end (gambit$$##process-statistics)))
(at-end (##process-statistics)))
(define (get-info msg idx)
(cons msg
(- (gambit$$##f64vector-ref at-end idx)
(gambit$$##f64vector-ref at-start idx))))
(- (f64vector-ref at-end idx)
(f64vector-ref at-start idx))))
(list
result
(get-info "User time" 0)
Expand Down

0 comments on commit 5152acd

Please sign in to comment.