Skip to content

Instantly share code, notes, and snippets.

@cmonkey
Created September 26, 2019 06:26
Show Gist options
  • Save cmonkey/d559f76fb6e25139bfc031ffb7d21655 to your computer and use it in GitHub Desktop.
Save cmonkey/d559f76fb6e25139bfc031ffb7d21655 to your computer and use it in GitHub Desktop.
#lang typed/racket
(require x64asm)
(define-cast ->int
#:type (-> Integer)
#:ctype (_fun -> _int))
(define-λ! get-1000 ->int
(mov rax (imm32 1000))
(ret))
(get-1000)
(define-cast int->int
#:type (Integer -> Integer)
#:ctype (_fun _int64 -> _int64))
(define-λ! fib int->int #:labels (start l1 l2 l3)
(define arg0 (if (eq? (system-type )'windows) rcx rdi))
(:! start)
(push rbp)
(mov rbp rsp)
(sub rsp (imm8 16))
(cmp arg0 (imm8 2))
(jg (rel8 l1))
(mov rax (imm32 1))
(leave)
(ret)
(:! l1)
(sub arg0 (imm8 1))
(mov (mref 64 rbp - 8 ) arg0)
(call (rel32 start))
(mov (mref 64 rbp - 16) rax)
(mov arg0 (mref 64 rbp - 8))
(sub arg0 (imm8 1))
(call (rel32 start))
(add rax (mref 64 rbp - 16))
(leave)
(ret)
)
(fib 40)
(define-cast dd->d
#:type (Flonum Flonum -> Flonum)
#:ctype (_fun _double _double -> _double))
(define my-fl*
(parameterize ([current-context (make-context)])
(define entry (label))
(:! entry)
(addsd xmm0 xmm1)
(ret)
(emit-code!)
(dd->d (label-addr entry))
))
(my-fl* 100.0 200.0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment