コード例 #1
0
ファイル: asmgcroot.py プロジェクト: Darriall/pypy
 def pop_roots(self, hop, livevars):
     if not livevars:
         return
     # mark the values as gc roots
     for var in livevars:
         v_adr = gen_cast(hop.llops, llmemory.Address, var)
         v_newaddr = hop.genop("direct_call", [c_asm_gcroot, v_adr],
                               resulttype=llmemory.Address)
         hop.genop("gc_reload_possibly_moved", [v_newaddr, var])
コード例 #2
0
ファイル: asmgcroot.py プロジェクト: sota/pypy-old
 def pop_roots(self, hop, livevars):
     if not livevars:
         return
     # mark the values as gc roots
     for var in livevars:
         v_adr = gen_cast(hop.llops, llmemory.Address, var)
         v_newaddr = hop.genop("direct_call", [c_asm_gcroot, v_adr],
                               resulttype=llmemory.Address)
         hop.genop("gc_reload_possibly_moved", [v_newaddr, var])
コード例 #3
0
ファイル: transform.py プロジェクト: yuyichao/pypy
 def cast_result(self, var):
     v_result = self.spaceop.result
     resulttype = v_result.concretetype
     curtype = var.concretetype
     if curtype == resulttype:
         self.genop('same_as', [var], resultvar=v_result)
     else:
         v_new = gen_cast(self.llops, resulttype, var)
         assert v_new != var
         self.llops[-1].result = v_result
コード例 #4
0
ファイル: transform.py プロジェクト: soIu/rpython
 def cast_result(self, var):
     v_result = self.spaceop.result
     resulttype = v_result.concretetype
     curtype = var.concretetype
     if curtype == resulttype:
         self.genop('same_as', [var], resultvar=v_result)
     else:
         v_new = gen_cast(self.llops, resulttype, var)
         assert v_new != var
         self.llops[-1].result = v_result
コード例 #5
0
ファイル: refcounting.py プロジェクト: GaussDing/pypy
    def pop_alive(self, var, llops):
        PTRTYPE = var.concretetype
        v_adr = gen_cast(llops, llmemory.Address, var)

        dealloc_fptr = self.dynamic_deallocation_funcptr_for_type(PTRTYPE.TO)
        if dealloc_fptr is self.no_pointer_dealloc_ptr.value:
            # simple case
            llops.genop("direct_call", [self.decref_simple_ptr, v_adr])
        else:
            cdealloc_fptr = rmodel.inputconst(lltype.typeOf(dealloc_fptr), dealloc_fptr)
            llops.genop("direct_call", [self.decref_ptr, v_adr, cdealloc_fptr])
コード例 #6
0
ファイル: refcounting.py プロジェクト: soIu/rpython
    def pop_alive(self, var, llops):
        PTRTYPE = var.concretetype
        v_adr = gen_cast(llops, llmemory.Address, var)

        dealloc_fptr = self.dynamic_deallocation_funcptr_for_type(PTRTYPE.TO)
        if dealloc_fptr is self.no_pointer_dealloc_ptr.value:
            # simple case
            llops.genop("direct_call", [self.decref_simple_ptr, v_adr])
        else:
            cdealloc_fptr = rmodel.inputconst(lltype.typeOf(dealloc_fptr),
                                              dealloc_fptr)
            llops.genop("direct_call", [self.decref_ptr, v_adr, cdealloc_fptr])
コード例 #7
0
ファイル: shadowstack.py プロジェクト: yuyichao/pypy
 def push_roots(self, hop, keep_current_args=False):
     livevars = self.get_livevars_for_roots(hop, keep_current_args)
     self.num_pushs += len(livevars)
     if not livevars:
         return []
     c_len = rmodel.inputconst(lltype.Signed, len(livevars) )
     base_addr = hop.genop("direct_call", [self.incr_stack_ptr, c_len ],
                           resulttype=llmemory.Address)
     for k,var in enumerate(livevars):
         c_k = rmodel.inputconst(lltype.Signed, k * sizeofaddr)
         v_adr = gen_cast(hop.llops, llmemory.Address, var)
         hop.genop("raw_store", [base_addr, c_k, v_adr])
     return livevars
コード例 #8
0
ファイル: shadowstack.py プロジェクト: sota/pypy-old
 def push_roots(self, hop, keep_current_args=False):
     livevars = self.get_livevars_for_roots(hop, keep_current_args)
     self.num_pushs += len(livevars)
     if not livevars:
         return []
     c_len = rmodel.inputconst(lltype.Signed, len(livevars))
     base_addr = hop.genop("direct_call", [self.incr_stack_ptr, c_len],
                           resulttype=llmemory.Address)
     for k, var in enumerate(livevars):
         c_k = rmodel.inputconst(lltype.Signed, k * sizeofaddr)
         v_adr = gen_cast(hop.llops, llmemory.Address, var)
         hop.genop("raw_store", [base_addr, c_k, v_adr])
     return livevars
コード例 #9
0
ファイル: refcounting.py プロジェクト: soIu/rpython
 def push_alive(self, var, llops):
     v_adr = gen_cast(llops, llmemory.Address, var)
     llops.genop("direct_call", [self.increfptr, v_adr])
コード例 #10
0
ファイル: refcounting.py プロジェクト: abhinavthomas/pypy
 def push_alive(self, var, llops):
     v_adr = gen_cast(llops, llmemory.Address, var)
     llops.genop("direct_call", [self.increfptr, v_adr])