Skip to content

Instantly share code, notes, and snippets.

@JosiahWitt
Created February 2, 2019 20:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JosiahWitt/f2d1ca375ba7856926696f208fcf5fcc to your computer and use it in GitHub Desktop.
Save JosiahWitt/f2d1ca375ba7856926696f208fcf5fcc to your computer and use it in GitHub Desktop.
CS295: interp-x86
;;; ......
(define (interp-x86 e)
(define (interp* ss env)
(match ss
['((retq)) (lookup '(reg rax) env)]
[`(,instr . ,instr*) (interp* instr* (cons (interp-instr instr env) env))]))
(define (interp-instr instr env)
(match instr
['(callq read_int) `((reg rax) . ,(read))]
[`(negq ,e) `(,e . ,(- (interp-arg e env)))]
[`(movq ,e₁ ,e₂) `(,e₂ . ,(interp-arg e₁ env))]
[`(addq ,e₁ ,e₂) `(,e₂ . ,(+ (interp-arg e₁ env) (interp-arg e₂ env)))]))
(define (interp-arg arg env)
(match arg
[`(int ,n) n]
[`(var ,x) (lookup `(var ,x) env)]
[`(reg ,r) (lookup `(reg ,r) env)]))
(match e
(`(program ,_ ((start ,ss ...))) (interp* ss '()))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment