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,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