Guest User

Untitled

a guest
Nov 18th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. #lang racket
  2.  
  3. (require sham/private/jit)
  4.  
  5. (require sham/private/llvm/ffi/all
  6. sham/private/llvm/adjunct
  7. sham/private/llvm/pass-table)
  8.  
  9. (require sham/private/env
  10. sham/private/init
  11. sham/private/types
  12. sham/private/ast
  13. sham/private/mod-env-info
  14. sham/private/rator
  15. sham/private/dump
  16. sham/private/utils)
  17.  
  18. (require racket/unsafe/ops)
  19. (require rackunit)
  20. (require disassemble)
  21. (require sham/private/optimize)
  22. (require (submod sham/ast utils))
  23.  
  24. (define i32 (sham:type:ref 'i32))
  25. (define icmp-eq (sham:rator:symbol 'icmp-eq))
  26. (define (build-app rator . rands)
  27. (sham:expr:app rator rands))
  28. (define (ui32 v)
  29. (sham:expr:ui-value v i32))
  30. (define ret sham:stmt:return)
  31. (define v sham:expr:var)
  32. (define rs sham:rator:symbol)
  33. (define (defn n args types ret-type stmt) (sham:def:function (make-hash) n args types ret-type stmt))
  34. (define module-env
  35. (compile-module
  36. (sham:module
  37. (empty-module-info)
  38. (list
  39. (defn 'fact '(x) (list i32) i32
  40. (sham:stmt:if (build-app icmp-eq (v 'x) (ui32 0))
  41. (ret (ui32 1))
  42. (ret (build-app (rs 'mul)
  43. (v 'x)
  44. (build-app (rs 'fact)
  45. (build-app (rs 'sub)
  46. (v 'x) (ui32 1)))))))))))
  47.  
  48.  
  49. (optimize-module module-env #:opt-level 3)
  50. (initialize-jit! module-env #:opt-level 3)
  51. (jit-dump-module module-env)
  52. (printf "verifying module: ~a\n" (jit-verify-module module-env))
  53. (disassemble-ffi-function (jit-get-function-ptr 'fact module-env)
  54. #:size 50)
  55. (printf "running tests\n")
  56. (define fact (jit-get-function 'fact module-env))
  57.  
  58. (check-eq? (fact 5) 120)
Add Comment
Please, Sign In to add comment