ytljit 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,138 @@
1
+ #
2
+ #
3
+ #
4
+ require 'singleton'
5
+
6
+ module YTLJit
7
+
8
+ class Operand
9
+ end
10
+
11
+ class OpImmidiate<Operand
12
+ def initialize(value)
13
+ @value = value
14
+ end
15
+
16
+ def to_as
17
+ "$0x#{value.to_s(16)}"
18
+ end
19
+
20
+ attr :value
21
+ end
22
+
23
+ class OpImmidiate8<OpImmidiate
24
+ end
25
+
26
+ class OpImmidiate16<OpImmidiate
27
+ end
28
+
29
+ class OpImmidiate32<OpImmidiate
30
+ end
31
+
32
+ class OpImmidiate64<OpImmidiate
33
+ end
34
+
35
+ module OpVarValueMixin
36
+ def initialize(var)
37
+ @var = var
38
+ @refer = []
39
+ end
40
+
41
+ def refer
42
+ @refer
43
+ end
44
+
45
+ def value
46
+ @var.call
47
+ end
48
+
49
+ def add_refer(stfunc)
50
+ @refer.push stfunc
51
+ end
52
+
53
+ def to_immidiate(klass = OpVarImmidiateAddress)
54
+ klass.new(@var)
55
+ end
56
+ end
57
+
58
+ class OpVarImmidiate32<OpImmidiate32
59
+ include OpVarValueMixin
60
+ end
61
+
62
+ class OpVarImmidiate64<OpImmidiate64
63
+ include OpVarValueMixin
64
+ end
65
+
66
+ class OpMemory<Operand
67
+ def initialize(address)
68
+ @value = address
69
+ end
70
+
71
+ def address
72
+ @value
73
+ end
74
+
75
+ attr :value
76
+
77
+ def to_as
78
+ "#{value.to_s(16)}"
79
+ end
80
+ end
81
+
82
+ class OpMem8<OpMemory
83
+ end
84
+
85
+ class OpMem16<OpMemory
86
+ end
87
+
88
+ class OpMem32<OpMemory
89
+ end
90
+
91
+ class OpVarMem32<OpMem32
92
+ include OpVarValueMixin
93
+ end
94
+
95
+ class OpMem64<OpMemory
96
+ end
97
+
98
+ class OpVarMem64<OpMem64
99
+ include OpVarValueMixin
100
+ end
101
+
102
+ class OpRegistor<Operand
103
+ include Singleton
104
+ def value
105
+ reg_no
106
+ end
107
+ end
108
+
109
+ class OpIndirect<Operand
110
+ def initialize(reg, disp = 0)
111
+ @reg = reg
112
+ @disp = disp
113
+ end
114
+
115
+ attr :reg
116
+ attr :disp
117
+
118
+
119
+ def to_as
120
+ "#{@disp}(#{@reg.to_as})"
121
+ end
122
+ end
123
+
124
+ case $ruby_platform
125
+ when /x86_64/
126
+ class OpVarImmidiateAddress<OpVarImmidiate64; end
127
+ class OpImmidiateAddress<OpImmidiate64; end
128
+ class OpImmidiateMachineWord<OpImmidiate64; end
129
+ class OpVarMemAddress<OpVarMem64; end
130
+ class OpMemAddress<OpMem64; end
131
+ when /i.86/
132
+ class OpVarImmidiateAddress<OpVarImmidiate32; end
133
+ class OpImmidiateAddress<OpImmidiate32; end
134
+ class OpImmidiateMachineWord<OpImmidiate32; end
135
+ class OpVarMemAddress<OpVarMem32; end
136
+ class OpMemAddress<OpMem32; end
137
+ end
138
+ end