Compare commits

...

3 Commits

Author SHA1 Message Date
Enrico Lumetti 70295d0dcf Rename scm to rkt 2021-05-05 00:46:51 +02:00
Enrico Lumetti 69f969bb71 Add aarch64 execution infrastructure 2021-05-05 00:36:32 +02:00
Enrico Lumetti ad82c64d4d Improve test-util 2021-05-05 00:36:03 +02:00
16 changed files with 67 additions and 43 deletions

5
aarch64-hello.s Normal file
View File

@ -0,0 +1,5 @@
.global _main
_main:
mov x0, 42 // exit code
ret

View File

View File

View File

@ -1,6 +1,6 @@
#lang racket
(require "uniquify.scm")
(require "uniquify.rkt")
(provide remove-complex-opera*)

5
runtime.s Normal file
View File

@ -0,0 +1,5 @@
.global main
main:
bl _main
mov x8, 93 // sys_exit() is at index 93 in kernel functions table
svc #0 // generate kernel call sys_exit(123);

11
test-aarch64-run.rkt Normal file
View File

@ -0,0 +1,11 @@
#lang racket
(require "test-util.rkt")
(test-eq
(compile-arm-asm "aarch64-hello.s" "a.out")
#t)
(test-eq
(run-arm-executable "a.out")
42)

View File

@ -1,7 +1,7 @@
#lang racket
(require "test-util.scm")
(require "c2.scm")
(require "test-util.rkt")
(require "c2.rkt")
(test-eq (env-head-value `((a 1))) 1)
(test-eq (env-head-symbol `((a 1))) `a)

View File

@ -1,9 +1,9 @@
#lang racket
(require "test-util.scm")
(require "remove-complex-oper.scm")
(require "explicate-control.scm")
(require "c2.scm")
(require "test-util.rkt")
(require "remove-complex-oper.rkt")
(require "explicate-control.rkt")
(require "c2.rkt")
(define programs
(list

View File

@ -1,10 +1,10 @@
#lang racket
(require "test-util.scm")
(require "remove-complex-oper.scm")
(require "c2.scm")
(require "test-util.rkt")
(require "remove-complex-oper.rkt")
(require "c2.rkt")
(define programs
(define programs
(list
`(program ()
(- 20))
@ -28,9 +28,9 @@
(let ([y (let ([x 20])
(+ x (let ([x 22]) x)))]) y))))
(for/list ([program programs] [env (build-list (length programs) (lambda (_) '()))])
(test-eq ((interp-R1 env) program)
((interp-R1 env) (remove-complex-opera* program))))
(for ([program programs] [env (build-list (length programs) (lambda (_) '()))])
(test-eq ((interp-R1 env) program)
((interp-R1 env) (remove-complex-opera* program))))
(test-eq
(remove-complex-opera* (list-ref programs 0))
@ -59,7 +59,7 @@
(test-eq
(remove-complex-opera* (list-ref programs 6))
`(program ()
`(program ()
(let ((x.1
(let ((tmp.1 (- 2)))
(+ tmp.1 3))))
@ -69,9 +69,9 @@
(test-eq
(remove-complex-opera* (list-ref programs 7))
`(program ()
(let ((x.1
(let ((tmp.1 (- 1)))
(+ tmp.1 2))))
(let ((x.1
(let ((tmp.1 (- 1)))
(+ tmp.1 2))))
(let ((tmp.2 (+ x.1 2)))
(let ((tmp.3 (+ 4 5)))
(+ tmp.2 tmp.3))))))
@ -79,7 +79,7 @@
(test-eq
(remove-complex-opera* (list-ref programs 8))
`(program () (let([a.1 42]) (let ([b.1 a.1]) b.1))))
(test-eq
(remove-complex-opera* (list-ref programs 9))
`(program () (let ([tmp.1 (- 1)]) tmp.1)))
@ -95,5 +95,3 @@
(test-eq
(remove-complex-opera* (list-ref programs 12))
`(program () (let ((y.1 (let ((x.1 20)) (let ((x.2 22)) (+ x.1 x.2))))) y.1)))

View File

@ -1,7 +1,7 @@
#lang racket
(require "uncover-locals.scm")
(require "test-util.scm")
(require "uncover-locals.rkt")
(require "test-util.rkt")
(define programs
(list

View File

@ -1,10 +1,10 @@
#lang racket
(require "test-util.scm")
(require "uniquify.scm")
(require "c2.scm")
(require "test-util.rkt")
(require "uniquify.rkt")
(require "c2.rkt")
(test-eq ((uniquify-exp (make-immutable-hash) (make-immutable-hash)) `(read))
(test-eq ((uniquify-exp (make-immutable-hash) (make-immutable-hash)) `(read))
`(#hash() (read)))
(let ([tbl (hash-set (make-immutable-hash) `x 1)])
(test-eq ((uniquify-exp tbl tbl) `x)
@ -14,7 +14,7 @@
`(#hash((x . 2)) (let ([x.2 2]) 3))))
(test-eq ((uniquify-exp (make-immutable-hash) (make-immutable-hash)) `(let ([x 2]) (+ x 3)))
`(#hash((x . 1)) (let ([x.1 2]) (+ x.1 3))))
(test-eq (uniquify
`(program ()
@ -39,7 +39,7 @@
`(program ()
(let ([x 32])
(+ (let ([x 10]) x) (let ([x 3]) x) x))))
`(#hash((x . 3))
`(#hash((x . 3))
(program ()
(let ([x.1 32])
(+ (let ([x.2 10]) x.2) (let ([x.3 3]) x.3) x.1)))))
@ -59,15 +59,14 @@
(let ([x 32])
(+ (+ (let ([x 10]) x) (let ([x 3]) x)) x))))
(define env1 '())
(define p2
`(program ()
(let ([x (let ([y 9])
y)])
(+ x y))))
(define env2 '((y 5)))
(for/list ([program (list p1 p2)] [env (list env1 env2)])
(test-eq ((interp-R1 env) program)
((interp-R1 env) (cadr (uniquify program)))))
(for ([program (list p1 p2)] [env (list env1 env2)])
(test-eq ((interp-R1 env) program)
((interp-R1 env) (cadr (uniquify program)))))

14
test-util.rkt Normal file
View File

@ -0,0 +1,14 @@
#lang racket
(require racket/system)
(provide test-eq compile-arm-asm run-arm-executable)
(define (test-eq a b)
(if (equal? a b) (displayln "PASS") (error (format "FAIL: ~a != ~a" a b))))
(define (compile-arm-asm filename outfilename)
(system (format "aarch64-linux-gnu-gcc -static ~a runtime.s -o ~a" filename outfilename)))
(define (run-arm-executable filename)
(system/exit-code (format "qemu-aarch64 ./~a" filename)))

View File

@ -1,8 +0,0 @@
#lang racket
(provide test-eq ppexp)
(define (test-eq a b)
(if (equal? a b) #t (error "assert failed: " a " != " b)))
(define (ppexp exp) (begin (print exp) (newline)))