Exemplo n.º 1
0
 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])
Exemplo n.º 2
0
 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])
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
 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
Exemplo n.º 5
0
    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])
Exemplo n.º 6
0
    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])
Exemplo n.º 7
0
 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
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
 def push_alive(self, var, llops):
     v_adr = gen_cast(llops, llmemory.Address, var)
     llops.genop("direct_call", [self.increfptr, v_adr])
Exemplo n.º 10
0
 def push_alive(self, var, llops):
     v_adr = gen_cast(llops, llmemory.Address, var)
     llops.genop("direct_call", [self.increfptr, v_adr])