Skip to content

Commit 5152acd

Browse files
committed
Merge branch 'paper-18' of github.com:bsaleil/lc into paper-18
2 parents 42f346c + 1485d4a commit 5152acd

File tree

6 files changed

+76
-21
lines changed

6 files changed

+76
-21
lines changed

ast.scm

+3-1
Original file line numberDiff line numberDiff line change
@@ -359,12 +359,14 @@
359359
(vector (,ATX_VEC) #f ,lco-p-vector #f #t ,ATX_VEC #f )
360360
(f64vector (,ATX_FEC) #f ,lco-p-f64vector #f #f ,ATX_FEC #f ,ATX_FLO )
361361
(list (,ATX_PAI) #f ,lco-p-list #f #t ,ATX_PAI #f )
362+
(bitwise-and (,ATX_INT) ,dummy-cst-all #f ,codegen-p-bitwise-and #f ,ATX_INT 2 ,ATX_INT ,ATX_INT )
362363
;; These primitives are inlined during expansion but still here to build lambda
363364
(real? (,ATX_NUM) ,dummy-cst-all #f #f #f ,ATX_BOO 1 ,ATX_ALL )
364365
(eqv? #f ,dummy-cst-all #f #f #f ,ATX_BOO 2 ,ATX_ALL ,ATX_ALL )
365366
;;
366367
(##print-double #f #f #f ,codegen-p-print-double #f ,ATX_VOI 1 ,ATX_FLO )
367-
(##print-perm-string #f #f #f ,codegen-p-print-perm-string #f ,ATX_VOI 1 ,ATX_STR ))))
368+
(##print-perm-string #f #f #f ,codegen-p-print-perm-string #f ,ATX_VOI 1 ,ATX_STR )
369+
(##process-statistics #f #f #f ,codegen-p-process-statistics #f ,ATX_FEC 0 ))))
368370

369371
(define (get-prim-lambda ast sym primitive)
370372
(let ((nbargs (primitive-nbargs primitive)))

codegen.scm

+43
Original file line numberDiff line numberDiff line change
@@ -3459,6 +3459,39 @@
34593459
(x86-mov cgc opnd (x86-rax))
34603460
(x86-shl cgc opnd (x86-imm-int 2))))))
34613461

3462+
(define (codegen-p-bitwise-and cgc gc-desc fs ffs op reg inlined-cond? lleft lright lcst? rcst?)
3463+
(assert (not (and lcst? rcst?)) "Internal error")
3464+
3465+
(let ((dest (codegen-reg-to-x86reg reg))
3466+
(lopnd (and (not lcst?) (codegen-loc-to-x86opnd fs ffs lleft)))
3467+
(ropnd (and (not rcst?) (codegen-loc-to-x86opnd fs ffs lright))))
3468+
3469+
(cond (lcst?
3470+
(if (not (eq? dest ropnd))
3471+
(x86-mov cgc dest ropnd))
3472+
(let ((imm (obj-encoding lleft)))
3473+
(if (int32? imm)
3474+
(x86-and cgc dest (x86-imm-int imm))
3475+
(begin
3476+
(x86-mov cgc (x86-rax) (x86-imm-int imm))
3477+
(x86-and cgc dest (x86-rax))))))
3478+
(rcst?
3479+
(if (not (eq? dest ropnd))
3480+
(x86-mov cgc dest lopnd))
3481+
(let ((imm (obj-encoding lright)))
3482+
(if (int32? imm)
3483+
(x86-and cgc dest (x86-imm-int imm))
3484+
(begin
3485+
(x86-mov cgc (x86-rax) (x86-imm-int imm))
3486+
(x86-and cgc dest (x86-rax))))))
3487+
((eq? dest ropnd)
3488+
(x86-and cgc ropnd lopnd))
3489+
((eq? dest lopnd)
3490+
(x86-and cgc lopnd ropnd))
3491+
(else
3492+
(x86-mov cgc dest lopnd)
3493+
(x86-and cgc dest ropnd)))))
3494+
34623495
;;-----------------------------------------------------------------------------
34633496
;; Others
34643497
;;-----------------------------------------------------------------------------
@@ -3560,6 +3593,16 @@
35603593
(x86-ppop cgc (x86-rsp))))))
35613594
(x86-mov cgc dest (x86-imm-int (obj-encoding #!void)))))
35623595

3596+
(define (codegen-p-process-statistics cgc gc-desc fs ffs op reg inlined-cond?)
3597+
(let ((dest (codegen-reg-to-x86reg reg)))
3598+
(x86-mov cgc (x86-rax) (x86-imm-int 0))
3599+
(x86-upush cgc (x86-rax))
3600+
(x86-pcall cgc label-gambit-process-statistics-handler)
3601+
(x86-upop cgc dest)
3602+
(if opt-nan-boxing
3603+
(begin (x86-mov cgc (x86-rax) (x86-imm-int (to-64-value NB_MASK_MEM)))
3604+
(x86-lea cgc dest (x86-mem (- TAG_MEMOBJ) dest (x86-rax)))))))
3605+
35633606
;;-----------------------------------------------------------------------------
35643607
;; Type checks
35653608
;;-----------------------------------------------------------------------------

core.scm

+22-9
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,13 @@
303303

304304
;;-----------------------------------------------------------------------------
305305

306+
(c-define (gambit-process-statistics usp psp) (long long) void "gambit_process_statistics" ""
307+
(block_gc 7)
308+
(let ((v (##process-statistics)))
309+
(put-i64 (+ usp 88)
310+
(##object->encoding v)))
311+
(unblock_gc))
312+
306313
(c-define (gambit-str-to-sym-tag usp psp) (long long) void "gambit_str_to_sym_tag" ""
307314
(block_gc 1)
308315
(let* ((encoding48 (get-u48 (+ usp 88)))
@@ -524,6 +531,7 @@
524531
(define (init-labels cgc)
525532
(set-cdef-label! label-rt-error 'rt_error "___result = ___CAST(void*,rt_error);")
526533
(set-cdef-label! label-gambit-call 'gambit_call "___result = ___CAST(void*,gambit_call);")
534+
(set-cdef-label! label-gambit-process-statistics 'gambit_process_statistics "___result = ___CAST(void*,gambit_process_statistics);")
527535
(set-cdef-label! label-gambit-str-to-sym-tag 'gambit_str_to_sym_tag "___result = ___CAST(void*,gambit_str_to_sym_tag);")
528536
(set-cdef-label! label-gambit-str-to-sym-nan 'gambit_str_to_sym_nan "___result = ___CAST(void*,gambit_str_to_sym_nan);")
529537
(set-cdef-label! label-do-callback 'do_callback "___result = ___CAST(void*,do_callback);")
@@ -705,15 +713,16 @@
705713

706714
;;-----------------------------------------------------------------------------
707715

708-
(define label-heap-limit-handler #f)
709-
(define label-alloc-still-handler #f)
710-
(define label-gambit-call-handler #f)
711-
(define label-gambit-str-to-sym-handler #f)
712-
(define label-do-callback-handler #f)
713-
(define label-do-callback-fn-handler #f)
714-
(define label-do-callback-cont-handler #f)
715-
(define label-rt-error-handler #f)
716-
(define label-err-wrong-num-args #f)
716+
(define label-heap-limit-handler #f)
717+
(define label-alloc-still-handler #f)
718+
(define label-gambit-call-handler #f)
719+
(define label-gambit-process-statistics-handler #f)
720+
(define label-gambit-str-to-sym-handler #f)
721+
(define label-do-callback-handler #f)
722+
(define label-do-callback-fn-handler #f)
723+
(define label-do-callback-cont-handler #f)
724+
(define label-rt-error-handler #f)
725+
(define label-err-wrong-num-args #f)
717726

718727
(define (gen-addr-handler cgc id addr cargs-generator)
719728
(let ((label-handler (asm-make-label cgc id)))
@@ -855,6 +864,10 @@
855864
(gen-handler cgc 'gambit_call_handler label-gambit-call))
856865
(x86-ret cgc)
857866

867+
(set! label-gambit-process-statistics-handler
868+
(gen-handler cgc 'gambit_process_statistics label-gambit-process-statistics))
869+
(x86-ret cgc)
870+
858871
(set! label-gambit-str-to-sym-handler
859872
(if opt-nan-boxing
860873
(gen-handler cgc 'gambit_str_to_sym_handler label-gambit-str-to-sym-nan)

lib/num.scm

-3
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,6 @@
6161
(min-h (cdr els) m)))))
6262
(min-h l a))
6363

64-
(define (bitwise-and a b)
65-
(gambit$$bitwise-and a b))
66-
6764
(define (arithmetic-shift n s)
6865
(cond ((> s 0) (* n (expt 2 s)))
6966
(else

tools/benchtimes/prefix/LC.scm

+4-4
Original file line numberDiff line numberDiff line change
@@ -75,13 +75,13 @@
7575
r)))
7676

7777
(define (##lc-exec-stats thunk)
78-
(let* ((at-start (gambit$$##process-statistics))
78+
(let* ((at-start (##process-statistics))
7979
(result (thunk))
80-
(at-end (gambit$$##process-statistics)))
80+
(at-end (##process-statistics)))
8181
(define (get-info msg idx)
8282
(cons msg
83-
(- (gambit$$##f64vector-ref at-end idx)
84-
(gambit$$##f64vector-ref at-start idx))))
83+
(- (f64vector-ref at-end idx)
84+
(f64vector-ref at-start idx))))
8585
(list
8686
result
8787
(get-info "User time" 0)

tools/benchtimes/prefix/LCf64v.scm

+4-4
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,13 @@
8080
r)))
8181

8282
(define (##lc-exec-stats thunk)
83-
(let* ((at-start (gambit$$##process-statistics))
83+
(let* ((at-start (##process-statistics))
8484
(result (thunk))
85-
(at-end (gambit$$##process-statistics)))
85+
(at-end (##process-statistics)))
8686
(define (get-info msg idx)
8787
(cons msg
88-
(- (gambit$$##f64vector-ref at-end idx)
89-
(gambit$$##f64vector-ref at-start idx))))
88+
(- (f64vector-ref at-end idx)
89+
(f64vector-ref at-start idx))))
9090
(list
9191
result
9292
(get-info "User time" 0)

0 commit comments

Comments
 (0)