ytljit 0.0.7 → 0.0.8
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.
- data/ext/memory.c +11 -5
- data/ext/ytljit.c +37 -0
- data/lib/ytljit/codespace.rb +6 -1
- data/lib/ytljit/instruction_ia.rb +33 -0
- data/lib/ytljit/util.rb +1 -0
- data/lib/ytljit/vm.rb +272 -80
- data/lib/ytljit/vm_codegen.rb +26 -10
- data/lib/ytljit/vm_cruby_obj.rb +49 -7
- data/lib/ytljit/vm_inline_method.rb +50 -18
- data/lib/ytljit/vm_sendnode.rb +317 -86
- data/lib/ytljit/vm_trans.rb +40 -3
- data/lib/ytljit/vm_type_gen.rb +16 -6
- data/lib/ytljit/vm_typeinf.rb +10 -2
- data/lib/ytljit.rb +3 -3
- data/test/test_assemble2.rb +28 -0
- metadata +3 -3
data/lib/ytljit/vm_trans.rb
CHANGED
@@ -406,8 +406,23 @@ module YTLJit
|
|
406
406
|
context.current_node = node
|
407
407
|
end
|
408
408
|
|
409
|
-
|
410
|
-
|
409
|
+
def visit_getglobal(code, ins, context)
|
410
|
+
name = ins[1]
|
411
|
+
curnode = context.current_node
|
412
|
+
node = GlobalVarRefNode.new(curnode, name)
|
413
|
+
curnode.body = node
|
414
|
+
context.expstack.push node
|
415
|
+
end
|
416
|
+
|
417
|
+
def visit_setglobal(code, ins, context)
|
418
|
+
value = context.expstack.pop
|
419
|
+
name = ins[1]
|
420
|
+
curnode = context.current_node
|
421
|
+
node = GlobalVarAssignNode.new(curnode, name, value)
|
422
|
+
node.debug_info = context.debug_info
|
423
|
+
curnode.body = node
|
424
|
+
context.current_node = node
|
425
|
+
end
|
411
426
|
|
412
427
|
def visit_putnil(code, ins, context)
|
413
428
|
nnode = LiteralNode.new(nil, nil)
|
@@ -538,7 +553,29 @@ module YTLJit
|
|
538
553
|
# concatarray
|
539
554
|
# splatarray
|
540
555
|
# checkincludearray
|
541
|
-
|
556
|
+
|
557
|
+
def visit_newhash(code, ins, context)
|
558
|
+
curnode= context.current_node
|
559
|
+
argnum = ins[1]
|
560
|
+
args = []
|
561
|
+
while argnum > 0
|
562
|
+
argnum = argnum - 2
|
563
|
+
args.push context.expstack.pop
|
564
|
+
args.push context.expstack.pop
|
565
|
+
end
|
566
|
+
topnode = ClassTopNode.get_class_top_node(Object)
|
567
|
+
hcnode = ConstantRefNode.new(curnode, topnode, :Hash)
|
568
|
+
context.expstack.push hcnode
|
569
|
+
visit_send(code, [:send, :new, 0, nil, 0, nil], context)
|
570
|
+
|
571
|
+
args.reverse.each_slice(2) do |key, value|
|
572
|
+
visit_dup(code, [:dup] , context)
|
573
|
+
context.expstack.push key
|
574
|
+
context.expstack.push value
|
575
|
+
visit_send(code, [:send, :[]=, 2, nil, 0, nil], context)
|
576
|
+
visit_pop(code, [:pop] , context)
|
577
|
+
end
|
578
|
+
end
|
542
579
|
|
543
580
|
def visit_newrange(code, ins, context)
|
544
581
|
exclflag = LiteralNode.new(nil, ins[1] != 0)
|
data/lib/ytljit/vm_type_gen.rb
CHANGED
@@ -127,7 +127,9 @@ module YTLJit
|
|
127
127
|
context.start_arg_reg(FUNC_FLOAT_ARG)
|
128
128
|
context.start_arg_reg
|
129
129
|
addr = lambda {
|
130
|
-
address_of("rb_float_new")
|
130
|
+
a = address_of("rb_float_new")
|
131
|
+
$symbol_table[a] = "rb_float_new"
|
132
|
+
a
|
131
133
|
}
|
132
134
|
rbfloatnew = OpVarMemAddress.new(addr)
|
133
135
|
=begin
|
@@ -223,7 +225,9 @@ module YTLJit
|
|
223
225
|
vnode = context.ret_node
|
224
226
|
context.start_arg_reg
|
225
227
|
addr = lambda {
|
226
|
-
address_of("rb_ary_dup")
|
228
|
+
a = address_of("rb_ary_dup")
|
229
|
+
$symbol_table[a] = "rb_ary_dup"
|
230
|
+
a
|
227
231
|
}
|
228
232
|
rbarydup = OpVarMemAddress.new(addr)
|
229
233
|
asm.with_retry do
|
@@ -259,7 +263,7 @@ module YTLJit
|
|
259
263
|
|
260
264
|
def gen_boxing(context)
|
261
265
|
# raise "foo"
|
262
|
-
|
266
|
+
return context
|
263
267
|
cursig = context.to_signature
|
264
268
|
asm = context.assembler
|
265
269
|
val = context.ret_reg
|
@@ -295,7 +299,9 @@ module YTLJit
|
|
295
299
|
context.cpustack_pushn(2 * AsmType::MACHINE_WORD.size)
|
296
300
|
|
297
301
|
addr = lambda {
|
298
|
-
address_of("rb_ary_new4")
|
302
|
+
a = address_of("rb_ary_new4")
|
303
|
+
$symbol_table[a] = "rb_ary_new4"
|
304
|
+
a
|
299
305
|
}
|
300
306
|
rbarynew = OpVarMemAddress.new(addr)
|
301
307
|
asm.with_retry do
|
@@ -336,7 +342,9 @@ module YTLJit
|
|
336
342
|
vnode = context.ret_node
|
337
343
|
context.start_arg_reg
|
338
344
|
addr = lambda {
|
339
|
-
address_of("rb_str_dup")
|
345
|
+
a = address_of("rb_str_dup")
|
346
|
+
$symbol_table[a] = "rb_str_dup"
|
347
|
+
a
|
340
348
|
}
|
341
349
|
rbstrdup = OpVarMemAddress.new(addr)
|
342
350
|
asm.with_retry do
|
@@ -413,7 +421,9 @@ module YTLJit
|
|
413
421
|
vnode = context.ret_node
|
414
422
|
base = context.ret_reg
|
415
423
|
addr = lambda {
|
416
|
-
address_of("rb_range_new")
|
424
|
+
a = address_of("rb_range_new")
|
425
|
+
$symbol_table[a] = "rb_range_new"
|
426
|
+
a
|
417
427
|
}
|
418
428
|
rbrangenew = OpVarMemAddress.new(addr)
|
419
429
|
begoff = OpIndirect.new(TMPR2, 0)
|
data/lib/ytljit/vm_typeinf.rb
CHANGED
@@ -27,7 +27,11 @@ module YTLJit
|
|
27
27
|
|
28
28
|
def compile_main(context)
|
29
29
|
slf = context.slf
|
30
|
-
ivval = lambda {
|
30
|
+
ivval = lambda {
|
31
|
+
a = slf.instance_var_address_of(@name)
|
32
|
+
$symbol_table[a] = @name
|
33
|
+
a
|
34
|
+
}
|
31
35
|
ivadd = OpVarImmidiateAddress.new(ivval)
|
32
36
|
asm = context.assembler
|
33
37
|
asm.with_retry do
|
@@ -49,7 +53,11 @@ module YTLJit
|
|
49
53
|
context = @val.compile(context)
|
50
54
|
valr = context.ret_reg
|
51
55
|
slf = context.slf
|
52
|
-
ivval = lambda {
|
56
|
+
ivval = lambda {
|
57
|
+
a = slf.instance_var_address_of(@name)
|
58
|
+
$symbol_table[a] = @name
|
59
|
+
a
|
60
|
+
}
|
53
61
|
ivadd = OpVarImmdiateAddress.new(ivval)
|
54
62
|
asm = context.assembler
|
55
63
|
asm.with_retry do
|
data/lib/ytljit.rb
CHANGED
@@ -34,9 +34,9 @@ require 'ytljit/rubyvm'
|
|
34
34
|
|
35
35
|
require 'ytljit/vm_codegen'
|
36
36
|
require 'ytljit/vm_inspect'
|
37
|
-
require 'ytljit/vm'
|
38
|
-
|
39
37
|
require 'ytljit/vm_inline_method'
|
38
|
+
|
39
|
+
require 'ytljit/vm'
|
40
40
|
require 'ytljit/vm_sendnode'
|
41
41
|
|
42
42
|
require 'ytljit/vm_trans'
|
@@ -55,6 +55,6 @@ require 'runtime/object.rb'
|
|
55
55
|
require 'runtime/gc.rb'
|
56
56
|
|
57
57
|
module YTLJit
|
58
|
-
VERSION = "0.0.
|
58
|
+
VERSION = "0.0.8"
|
59
59
|
end
|
60
60
|
|
data/test/test_assemble2.rb
CHANGED
@@ -307,6 +307,34 @@ class InstructionTests < Test::Unit::TestCase
|
|
307
307
|
@cs.reset
|
308
308
|
@asout = ""
|
309
309
|
end
|
310
|
+
|
311
|
+
[:cvtsd2si, :cvtss2si, :cvttsd2si, :cvttss2si].each do |mnm|
|
312
|
+
|
313
|
+
# Pattern reg, xmmrmm
|
314
|
+
@regs.each do |reg|
|
315
|
+
@xmmregs.each do |src|
|
316
|
+
asm_ytljit(mnm, reg, src)
|
317
|
+
asm_gas(mnm, reg, src)
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
# Pattern reg, xmmrmm
|
322
|
+
@regs.each do |dst|
|
323
|
+
@indirects.each do |src|
|
324
|
+
asm_ytljit(mnm, dst, src)
|
325
|
+
asm_gas(mnm, dst, src)
|
326
|
+
end
|
327
|
+
end
|
328
|
+
|
329
|
+
ytlres = disasm_ytljit(@cs)
|
330
|
+
gasres = disasm_gas(@cs)
|
331
|
+
# print @asout
|
332
|
+
ytlres.each_with_index do |lin, i|
|
333
|
+
assert_equal(gasres[i], lin)
|
334
|
+
end
|
335
|
+
@cs.reset
|
336
|
+
@asout = ""
|
337
|
+
end
|
310
338
|
end
|
311
339
|
|
312
340
|
def test_xmm_arith
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 8
|
9
|
+
version: 0.0.8
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Hideki Miura
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-
|
17
|
+
date: 2011-08-14 00:00:00 +09:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|