Class: YTLJit::VM::Node::CRubyInstanceVarRefNode
- Inherits:
-
InstanceVarRefNode
- Object
- BaseNode
- VariableRefCommonNode
- InstanceVarRefCommonNode
- InstanceVarRefNode
- YTLJit::VM::Node::CRubyInstanceVarRefNode
- Includes:
- CommonCodeGen, TypeListWithoutSignature, UnboxedArrayUtil
- Defined in:
- lib/ytljit/vm_cruby_obj.rb
Constant Summary
Constants included from AbsArch
AbsArch::AL, AbsArch::BL, AbsArch::CL, AbsArch::DL, AbsArch::FUNC_ARG, AbsArch::FUNC_ARG_YTL, AbsArch::FUNC_FLOAT_ARG, AbsArch::FUNC_FLOAT_ARG_YTL, AbsArch::INDIRECT_BPR, AbsArch::INDIRECT_RETR, AbsArch::INDIRECT_SPR, AbsArch::INDIRECT_TMPR, AbsArch::INDIRECT_TMPR2, AbsArch::INDIRECT_TMPR3
Constants included from SSE
SSE::XMM0, SSE::XMM1, SSE::XMM2, SSE::XMM3, SSE::XMM4, SSE::XMM5, SSE::XMM6, SSE::XMM7
Constants inherited from BaseNode
Instance Attribute Summary
Attributes inherited from BaseNode
#code_space, #debug_info, #element_node_list, #id, #is_escape, #parent, #ti_observee, #ti_observer, #type
Instance Method Summary collapse
- #compile_main(context) ⇒ Object
- #compile_main_aux(context, slfcont, slftype) ⇒ Object
-
#initialize(parent, name, mnode) ⇒ CRubyInstanceVarRefNode
constructor
A new instance of CRubyInstanceVarRefNode.
Methods included from UnboxedArrayUtil
#compile_array_unboxed, #gen_ref_element, #gen_set_element
Methods included from UnboxedObjectUtil
Methods included from CommonCodeGen
#dump_context, #gen_alloca, #gen_call, #gen_save_thepr
Methods included from TypeListWithoutSignature
#add_type, #set_type_list, #type_list, #type_list_initvar
Methods inherited from InstanceVarRefNode
#collect_candidate_type, #collect_info, #compile
Methods included from NodeUtil
#search_class_top, #search_end, #search_frame_info, #search_top
Methods inherited from BaseNode
#add_element_node, #add_element_node_backward, #add_element_node_backward_aux, #collect_candidate_type, #collect_info, #compile, #decide_type, #decide_type_core, #decide_type_once, #gen_type_inference_proc, #get_constant_value, #inference_type, #marge_element_node, #marge_type, #same_type, #search_valid_signature, #set_escape_node, #set_escape_node_backward, #ti_add_observer, #ti_changed, #ti_del_link, #ti_reset, #ti_update
Methods included from TypeListWithSignature
#add_type, #set_type_list, #type_list, #type_list_initvar
Methods included from Inspect
Constructor Details
#initialize(parent, name, mnode) ⇒ CRubyInstanceVarRefNode
Returns a new instance of CRubyInstanceVarRefNode.
9 10 11 12 |
# File 'lib/ytljit/vm_cruby_obj.rb', line 9 def initialize(parent, name, mnode) super @current_frame_info = search_frame_info end |
Instance Method Details
#compile_main(context) ⇒ Object
14 15 16 17 18 |
# File 'lib/ytljit/vm_cruby_obj.rb', line 14 def compile_main(context) slfoff = @current_frame_info.offset_arg(2, BPR) cursig = context.to_signature compile_main_aux(context, slfoff, cursig[2]) end |
#compile_main_aux(context, slfcont, slftype) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/ytljit/vm_cruby_obj.rb', line 20 def compile_main_aux(context, slfcont, slftype) mivl = @class_top.end_nodes[0].modified_instance_var.keys off = mivl.index(@name) cursig = context.to_signature asm = context.assembler if !slftype.boxed then context.start_using_reg(TMPR2) asm.with_retry do asm.mov(TMPR2, slfcont) end context = gen_ref_element(context, nil, off) context.end_using_reg(TMPR2) rtype = decide_type_once(cursig) if rtype.ruby_type == Float and !rtype.boxed then asm.with_retry do asm.mov(XMM0, context.ret_reg) end context.ret_reg = XMM0 else asm.with_retry do asm.mov(RETR, context.ret_reg) end context.ret_reg = RETR end return context end addr = lambda { a = address_of("ytl_ivar_get_boxing") $symbol_table[a] = "ytl_ivar_get_boxing" a } ivarget = OpVarMemAddress.new(addr) context.start_arg_reg asm.with_retry do asm.mov(FUNC_ARG[0], slfcont) asm.mov(FUNC_ARG[1], off) end context = gen_save_thepr(context) context = gen_call(context, ivarget, 2) context.end_arg_reg context.ret_reg = RETR context.ret_node = self decide_type_once(cursig) if !@type.boxed then context = @type.to_box.gen_unboxing(context) end context end |