moving the trampoline testing to the front of each basic block

This commit is contained in:
Danny Yoo 2011-02-08 17:20:55 -05:00
parent 61a245e4b4
commit 3755768485

12
cm.rkt
View File

@ -582,7 +582,8 @@
;; assemble-basic-block: basic-block -> string ;; assemble-basic-block: basic-block -> string
(define (assemble-basic-block a-basic-block) (define (assemble-basic-block a-basic-block)
(format "var ~a=function(){~a};" (format "var ~a=function(){\nif(--MACHINE.callsBeforeTrampoline < 0) { throw ~a; }\n~a};"
(basic-block-name a-basic-block)
(basic-block-name a-basic-block) (basic-block-name a-basic-block)
(string-join (map assemble-stmt (basic-block-stmts a-basic-block)) (string-join (map assemble-stmt (basic-block-stmts a-basic-block))
"\n"))) "\n")))
@ -637,12 +638,11 @@
(assemble-op-expression (op-name (cadr stmt)) (assemble-op-expression (op-name (cadr stmt))
(cddr stmt)))] (cddr stmt)))]
[(tagged-list? stmt 'branch) [(tagged-list? stmt 'branch)
(format "if(--MACHINE.callsBeforeTrampoline){return ~a()}else{throw ~a}}" ;; the unbalanced } is deliberate: test and branch always follow each other.
(assemble-location (cadr stmt)) (format "return ~a();}"
(assemble-location (cadr stmt)))] (assemble-location (cadr stmt)))]
[(tagged-list? stmt 'goto) [(tagged-list? stmt 'goto)
(format "if(--MACHINE.callsBeforeTrampoline){return ~a()}else{throw ~a}" (format "return ~a();"
(assemble-location (cadr stmt))
(assemble-location (cadr stmt)))] (assemble-location (cadr stmt)))]
[(tagged-list? stmt 'save) [(tagged-list? stmt 'save)
(format "MACHINE.stack.push(MACHINE.~a);" (format "MACHINE.stack.push(MACHINE.~a);"
@ -735,7 +735,7 @@
(second assembled-inputs) (second assembled-inputs)
(fourth assembled-inputs))] (fourth assembled-inputs))]
[(check-bound-global!) [(check-bound-global!)
(format "if (! (~a).globalBindings.hasOwnProperty(~a)) { throw new Error('Not bound: ~a') }" (format "if (! (~a).globalBindings.hasOwnProperty(~a)) { throw new Error(\"Not bound: \" + ~a); }"
(second assembled-inputs) (second assembled-inputs)
(first assembled-inputs) (first assembled-inputs)
(first assembled-inputs))] (first assembled-inputs))]