ytljit 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -82,7 +82,7 @@ LO | | | |
82
82
  end
83
83
 
84
84
  attr :top_node
85
- attr :modified_local_var
85
+ attr_accessor :modified_local_var
86
86
  attr_accessor :modified_instance_var
87
87
  attr_accessor :yield_node
88
88
 
@@ -101,7 +101,7 @@ LO | | | |
101
101
  end
102
102
  end
103
103
 
104
- @modified_local_var = res
104
+ @modified_local_var[-1] = res
105
105
  end
106
106
 
107
107
  def merge_instance_var(lvlist)
@@ -128,11 +128,11 @@ LO | | | |
128
128
  @visited_top_node = {}
129
129
  end
130
130
 
131
- def to_key(offset = -1)
131
+ def to_signature(offset = -1)
132
132
  cursig = @current_method_signature_node[offset]
133
133
  res = cursig.map { |enode|
134
134
  if enode.is_a?(Node::BaseNode) then
135
- enode.decide_type_once(to_key(offset - 1))
135
+ enode.decide_type_once(to_signature(offset - 1))
136
136
  enode.type
137
137
  else
138
138
  enode
@@ -186,7 +186,7 @@ LO | | | |
186
186
 
187
187
  attr_accessor :slf
188
188
 
189
- attr :options
189
+ attr_accessor :options
190
190
 
191
191
  def set_reg_content(dst, val)
192
192
  if dst.is_a?(FunctionArgument) then
@@ -299,7 +299,7 @@ LO | | | |
299
299
  else
300
300
  raise "Not saved reg #{reg}"
301
301
  end
302
- if @depth_reg[reg] != 0 then
302
+ if @depth_reg[reg] != -1 then
303
303
  assembler.with_retry do
304
304
  assembler.pop(reg)
305
305
  cpustack_pop(reg)
@@ -313,7 +313,7 @@ LO | | | |
313
313
  def end_using_reg(reg)
314
314
  case reg
315
315
  when OpRegistor
316
- if reg != TMPR then
316
+ if reg != TMPR and reg != XMM0 then
317
317
  end_using_reg_aux(reg)
318
318
  end
319
319
 
@@ -333,7 +333,7 @@ LO | | | |
333
333
  end
334
334
  end
335
335
 
336
- def to_key(offset = -1)
336
+ def to_signature(offset = -1)
337
337
  @current_method_signature[offset]
338
338
  end
339
339
  end
@@ -416,7 +416,7 @@ LO | | | |
416
416
  print "---- Stack map ----\n"
417
417
  @frame_info.frame_layout.each_with_index do |vinf, i|
418
418
  ro = @frame_info.real_offset(i)
419
- if mlv = @modified_local_var[0][ro] then
419
+ if mlv = @modified_local_var.last[0][ro] then
420
420
  print " #{mlv.class} \n"
421
421
  else
422
422
  print " #{vinf.class} \n"
@@ -441,15 +441,14 @@ LO | | | |
441
441
 
442
442
  rarg.each_with_index do |arg, i|
443
443
  context = arg.compile(context)
444
- context.ret_node.decide_type_once(context.to_key)
444
+ context.ret_node.decide_type_once(context.to_signature)
445
445
  rtype = context.ret_node.type
446
446
  context = rtype.gen_boxing(context)
447
447
  casm = context.assembler
448
448
  dst = OpIndirect.new(SPR, i * AsmType::MACHINE_WORD.size)
449
- if context.ret_reg.is_a?(OpRegistor) or
449
+ if context.ret_reg.is_a?(OpRegistor) or
450
450
  context.ret_reg.is_a?(OpImmidiate32) or
451
451
  context.ret_reg.is_a?(OpImmidiate8) then
452
-
453
452
  casm.with_retry do
454
453
  casm.mov(dst, context.ret_reg)
455
454
  end
@@ -460,7 +459,7 @@ LO | | | |
460
459
  casm.mov(dst, TMPR)
461
460
  end
462
461
  end
463
- context.cpustack_setn(i * AsmType::MACHINE_WORD.size, context.ret_node)
462
+ context.cpustack_setn(i, context.ret_node)
464
463
  end
465
464
 
466
465
  # Copy Stack Pointer
@@ -18,17 +18,21 @@ module YTLJit
18
18
  end
19
19
  context.set_reg_content(tempreg, context.ret_node)
20
20
 
21
- # @argunemnts[1] is block
22
- # @argunemnts[2] is self
23
- # eval 2nd, 3thr, ... arguments and added
24
- @arguments[3..-1].each do |aele|
25
- context = aele.compile(context)
26
- context.ret_node.decide_type_once(context.to_key)
27
- rtype = context.ret_node.type
28
- context = rtype.gen_unboxing(context)
21
+ # @argunents[1] is block
22
+ # @argunents[2] is self
23
+ # @arguments[3] is other
24
+ aele = @arguments[3]
25
+ context = aele.compile(context)
26
+ context.ret_node.decide_type_once(context.to_signature)
27
+ rtype = context.ret_node.type
28
+ context = rtype.gen_unboxing(context)
29
29
 
30
- asm = context.assembler
30
+ asm = context.assembler
31
+ if block_given? then
32
+ yield(context)
33
+ else
31
34
  asm.with_retry do
35
+ # default code
32
36
  if context.ret_reg.using(tempreg) then
33
37
  asm.mov(TMPR, context.ret_reg)
34
38
  context.end_using_reg(context.ret_reg)
@@ -37,20 +41,19 @@ module YTLJit
37
41
  asm.send(inst, tempreg, context.ret_reg)
38
42
  context.end_using_reg(context.ret_reg)
39
43
  end
44
+ asm.mov(resreg, tempreg)
40
45
  end
41
46
  end
42
47
 
43
- asm.with_retry do
44
- asm.mov(resreg, tempreg)
45
- end
46
48
  context.end_using_reg(tempreg)
47
-
49
+
48
50
  context.ret_node = self
49
51
  context.ret_reg = resreg
50
52
 
51
- decide_type_once(context.to_key)
52
- if type.boxed then
53
- context = type.gen_boxing(context)
53
+ decide_type_once(context.to_signature)
54
+
55
+ if @type.boxed then
56
+ context = @type.gen_boxing(context)
54
57
  end
55
58
 
56
59
  context
@@ -66,12 +69,12 @@ module YTLJit
66
69
  end
67
70
  context.set_reg_content(tempreg, context.ret_node)
68
71
 
69
- # @argunemnts[1] is block
70
- # @argunemnts[2] is self
71
- # eval 2nd arguments and compare
72
+ # @arguments[1] is block
73
+ # @arguments[2] is self
74
+ # @arguments[3] is other arg
72
75
  aele = @arguments[3]
73
76
  context = aele.compile(context)
74
- context.ret_node.decide_type_once(context.to_key)
77
+ context.ret_node.decide_type_once(context.to_signature)
75
78
  rtype = context.ret_node.type
76
79
  context = rtype.gen_unboxing(context)
77
80
 
@@ -89,7 +92,7 @@ module YTLJit
89
92
  context.ret_node = self
90
93
  context.ret_reg = resreg
91
94
 
92
- decide_type_once(context.to_key)
95
+ decide_type_once(context.to_signature)
93
96
  if type.boxed then
94
97
  context = type.gen_boxing(context)
95
98
  end