ytljit 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. data/README +29 -0
  2. data/Rakefile +22 -0
  3. data/ext/code_alloc.c +266 -0
  4. data/ext/extconf.rb +3 -0
  5. data/ext/ytljit.c +527 -0
  6. data/ext/ytljit.h +285 -0
  7. data/lib/ytljit/asm.rb +205 -0
  8. data/lib/ytljit/asmext.rb +199 -0
  9. data/lib/ytljit/asmext_x64.rb +212 -0
  10. data/lib/ytljit/asmext_x86.rb +128 -0
  11. data/lib/ytljit/asmutil.rb +182 -0
  12. data/lib/ytljit/codespace.rb +92 -0
  13. data/lib/ytljit/error.rb +7 -0
  14. data/lib/ytljit/instruction.rb +138 -0
  15. data/lib/ytljit/instruction_ia.rb +1298 -0
  16. data/lib/ytljit/instruction_x64.rb +41 -0
  17. data/lib/ytljit/instruction_x86.rb +11 -0
  18. data/lib/ytljit/marshal.rb +133 -0
  19. data/lib/ytljit/matcher.rb +235 -0
  20. data/lib/ytljit/rubyvm.rb +63 -0
  21. data/lib/ytljit/struct.rb +125 -0
  22. data/lib/ytljit/type.rb +112 -0
  23. data/lib/ytljit/util.rb +63 -0
  24. data/lib/ytljit/vm.rb +1649 -0
  25. data/lib/ytljit/vm_codegen.rb +491 -0
  26. data/lib/ytljit/vm_inline_method.rb +85 -0
  27. data/lib/ytljit/vm_inspect.rb +74 -0
  28. data/lib/ytljit/vm_sendnode.rb +561 -0
  29. data/lib/ytljit/vm_trans.rb +508 -0
  30. data/lib/ytljit/vm_type.rb +299 -0
  31. data/lib/ytljit/vm_type_gen.rb +158 -0
  32. data/lib/ytljit/vm_typeinf.rb +98 -0
  33. data/lib/ytljit.rb +46 -0
  34. data/test/asmsample.rb +117 -0
  35. data/test/cstest.rb +61 -0
  36. data/test/marshaltest.rb +27 -0
  37. data/test/test_assemble.rb +148 -0
  38. data/test/test_assemble2.rb +286 -0
  39. data/test/test_codespace.rb +102 -0
  40. data/test/test_typeinf.rb +21 -0
  41. data/test/tivmtest.rb +54 -0
  42. data/test/vmtest.rb +59 -0
  43. data/test/vmtest2.rb +41 -0
  44. data/test/vmtest3.rb +22 -0
  45. data/test/vmtest_compile_only.rb +41 -0
  46. data/test/vmtest_execute_only.rb +22 -0
  47. metadata +121 -0
@@ -0,0 +1,63 @@
1
+ class Object
2
+ def address
3
+ case self
4
+ when Symbol
5
+ case $ruby_platform
6
+ when /x86_64/
7
+ ((((__id__ >> 1) - 4) / 10) << 8) | 0xe
8
+ when /i.86/
9
+ ((((__id__ >> 1) - 4) / 5) << 8) | 0xe
10
+ end
11
+
12
+ when TrueClass, FalseClass
13
+ __id__
14
+
15
+ when NilClass
16
+ 4
17
+
18
+ else
19
+ __id__ << 1
20
+
21
+ end
22
+ end
23
+ end
24
+
25
+ module YTLJit
26
+ def variable_argument?(para)
27
+ para.any? {|item|
28
+ item[0] != :req
29
+ }
30
+ end
31
+ module_function :variable_argument?
32
+
33
+ def unboxing(value)
34
+ if value & 1 then
35
+ # fixnum
36
+ value >> 1
37
+ elsif value == 4
38
+ nil
39
+ elsif value == 2
40
+ true
41
+ elsif value == 0
42
+ false
43
+ else
44
+ value
45
+ end
46
+ end
47
+
48
+ def boxing
49
+ self
50
+ end
51
+ end
52
+
53
+ class Fixnum
54
+ def boxing
55
+ (self << 1) + 1
56
+ end
57
+ end
58
+
59
+ class Float
60
+ def unboxing
61
+ [self].pack('d').unpack('q')[0]
62
+ end
63
+ end