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
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
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
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
def genop_malloc_fixedsize(self, alloctoken): return self.genop_call( 1, # COUGH IntConst(gc_malloc_fnaddr()), [IntConst(alloctoken)])
def genop_malloc_fixedsize(self, alloctoken): return self.genop_call(1, # COUGH IntConst(gc_malloc_fnaddr()), [IntConst(alloctoken)])