Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement