コード例 #1
0
    def genop_malloc_varsize(self, varsizealloctoken, gv_size):
        log('%s Builder.genop_malloc_varsize %s,%s' % (
            self.block.label, varsizealloctoken, gv_size.operand()))

        length_offset, items_offset, item_size, item_type = varsizealloctoken

        gv_gc_malloc_fnaddr = Var('%s (%s)*' % (pi8, i32))
        #or use addGlobalFunctionMapping in libllvmjit.restart()
        self.asm.append(' %s=%s %s %d to %s ;gc_malloc_fnaddr (varsize)' % (
            gv_gc_malloc_fnaddr.operand2(), inttoptr, i32,
            gc_malloc_fnaddr(), gv_gc_malloc_fnaddr.type))

        op_size = self._itemaddr(varsizealloctoken, gv_size)

        gv_result = Var(pi8)
        self.asm.append(' %s=call %s(%s)' % (
            gv_result.operand2(), gv_gc_malloc_fnaddr.operand(), op_size.operand()))

        gv_p = Var(gv_result.type)
        self.asm.append(' %s=getelementptr %s,%s %s' % (
            gv_p.operand2(), gv_result.operand(), i32, length_offset))

        gv_p2 = self._cast_to(gv_p, pi32) #warning: length field hardcoded as int here
        self.asm.append(' store %s, %s' % (gv_size.operand(), gv_p2.operand()))

        return gv_result
コード例 #2
0
ファイル: rgenop.py プロジェクト: TheDunn/flex-pypy
 def genop_malloc_varsize(self, varsizealloctoken, gv_size):
     gv_itemoffset = self.itemoffset(varsizealloctoken, gv_size)
     gv_result = self.genop_call(1, # COUGH
                                 IntConst(gc_malloc_fnaddr()),
                                 [gv_itemoffset])
     lengthoffset, _, _ = varsizealloctoken
     self.insns.append(
         insn.Insn_None__GPR_GPR_IMM(_PPC.stw,
                                     [gv_size, gv_result, IntConst(lengthoffset)]))
     return gv_result
コード例 #3
0
 def genop_malloc_fixedsize(self, size):
     log('%s Builder.genop_malloc_fixedsize %s' % (
         self.block.label, str(size)))
     gv_gc_malloc_fnaddr = Var('%s (%s)*' % (pi8, i32))
     gv_result = Var(pi8)
     #or use addGlobalFunctionMapping in libllvmjit.restart()
     self.asm.append(' %s=%s %s %d to %s ;gc_malloc_fnaddr' % (
         gv_gc_malloc_fnaddr.operand2(), inttoptr, i32,
         gc_malloc_fnaddr(), gv_gc_malloc_fnaddr.type))
     self.asm.append(' %s=call %s(%s %d)' % (
         gv_result.operand2(), gv_gc_malloc_fnaddr.operand(), i32, size))
     return gv_result
コード例 #4
0
 def genop_malloc_varsize(self, varsizealloctoken, gv_size):
     gv_itemoffset = self.itemoffset(varsizealloctoken, gv_size)
     gv_result = self.genop_call(
         1,  # COUGH
         IntConst(gc_malloc_fnaddr()),
         [gv_itemoffset])
     lengthoffset, _, _ = varsizealloctoken
     self.insns.append(
         insn.Insn_None__GPR_GPR_IMM(
             _PPC.stw, [gv_size, gv_result,
                        IntConst(lengthoffset)]))
     return gv_result
コード例 #5
0
 def genop_malloc_fixedsize(self, alloctoken):
     return self.genop_call(
         1,  # COUGH
         IntConst(gc_malloc_fnaddr()),
         [IntConst(alloctoken)])
コード例 #6
0
ファイル: rgenop.py プロジェクト: TheDunn/flex-pypy
 def genop_malloc_fixedsize(self, alloctoken):
     return self.genop_call(1, # COUGH
                            IntConst(gc_malloc_fnaddr()),
                            [IntConst(alloctoken)])