示例#1
0
    def _emit_call(self, op, arglocs, is_call_release_gil=False):
        resloc = arglocs[0]
        func_index = 1 + is_call_release_gil
        adr = arglocs[func_index]
        arglist = arglocs[func_index + 1:]

        cb = callbuilder.CallBuilder(self, adr, arglist, resloc, op.getdescr())

        descr = op.getdescr()
        assert isinstance(descr, CallDescr)
        cb.argtypes = descr.get_arg_types()
        cb.restype = descr.get_result_type()

        if is_call_release_gil:
            saveerrloc = arglocs[1]
            assert saveerrloc.is_imm()
            cb.emit_call_release_gil(saveerrloc.value)
        else:
            cb.emit()
示例#2
0
 def _call_assembler_emit_helper_call(self, addr, arglocs, result_loc):
     cb = callbuilder.CallBuilder(self, addr, arglocs, result_loc, None)
     cb.emit()
示例#3
0
    def _call_assembler_emit_call(self, addr, argloc, _):
        self.regalloc_mov(argloc, r.r2)
        self.mc.LG(r.r3, l.addr(THREADLOCAL_ADDR_OFFSET, r.SP))

        cb = callbuilder.CallBuilder(self, addr, [r.r2, r.r3], r.r2, None)
        cb.emit()