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.
@@ -406,8 +406,23 @@ module YTLJit
406
406
  context.current_node = node
407
407
  end
408
408
 
409
- # getglobal
410
- # setglobal
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
- # newhash
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)
@@ -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
- # return context
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)
@@ -27,7 +27,11 @@ module YTLJit
27
27
 
28
28
  def compile_main(context)
29
29
  slf = context.slf
30
- ivval = lambda { slf.instance_var_address_of(@name) }
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 { slf.instance_var_address_of(@name) }
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.7"
58
+ VERSION = "0.0.8"
59
59
  end
60
60
 
@@ -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
- - 7
9
- version: 0.0.7
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-05-06 00:00:00 +09:00
17
+ date: 2011-08-14 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency