Esempio n. 1
0
 def generate_GUARD_CLASS(self, op):
     loc = self._generate_field_gep(op.args[0], self.cpu.fielddescr_vtable)
     cls = llvm_rffi.LLVMBuildLoad(self.builder, loc, "")
     equal = llvm_rffi.LLVMBuildICmp(self.builder,
                                     llvm_rffi.Predicate.EQ,
                                     cls,
                                     self.getintarg(op.args[1]), "")
     self._generate_guard(op, equal, False)
Esempio n. 2
0
 def generate_GUARD_NO_EXCEPTION(self, op):
     # etype: ty_char_ptr
     etype = llvm_rffi.LLVMBuildLoad(self.builder, self.cpu.const_exc_type,
                                     "")
     eisnull = llvm_rffi.LLVMBuildICmp(self.builder, llvm_rffi.Predicate.EQ,
                                       etype, self.cpu.const_null_charptr,
                                       "")
     self._generate_guard(op, eisnull, False, exc=True)
Esempio n. 3
0
 def generate_GUARD_VALUE(self, op):
     if op.args[0].type == INT:
         arg0 = self.getintarg(op.args[0])
         arg1 = self.getintarg(op.args[1])
     else:
         arg0 = self.getptrarg(op.args[0])
         arg1 = self.getptrarg(op.args[1])
     equal = llvm_rffi.LLVMBuildICmp(self.builder, llvm_rffi.Predicate.EQ,
                                     arg0, arg1, "")
     self._generate_guard(op, equal, False)
Esempio n. 4
0
 def generate_GUARD_EXCEPTION(self, op):
     v = op.args[0]
     assert isinstance(v, Const)
     # etype, expectedtype: ty_char_ptr
     expectedtype = self.cpu._make_const(v.getint(), self.cpu.ty_char_ptr)
     etype = llvm_rffi.LLVMBuildLoad(self.builder, self.cpu.const_exc_type,
                                     "")
     eisequal = llvm_rffi.LLVMBuildICmp(self.builder,
                                        llvm_rffi.Predicate.EQ, etype,
                                        expectedtype, "")
     self._generate_guard(op, eisequal, False, exc=True)
     self.vars[op.result] = llvm_rffi.LLVMBuildLoad(
         self.builder, self.cpu.const_exc_value, "")
Esempio n. 5
0
 def generate_INT_IS_TRUE(self, op):
     v = op.args[0]
     try:
         value_ref = self.vars[v]
         if llvm_rffi.LLVMTypeOf(value_ref) != self.cpu.ty_bit:
             raise KeyError
     except KeyError:
         res = llvm_rffi.LLVMBuildICmp(self.builder, llvm_rffi.Predicate.NE,
                                       self.getintarg(op.args[0]),
                                       self.cpu.const_zero, "")
     else:
         res = value_ref  # value_ref: ty_bit.  this is a no-op
     self.vars[op.result] = res
Esempio n. 6
0
 def generate_BOOL_NOT(self, op):
     v = op.args[0]
     try:
         value_ref = self.vars[v]
         if llvm_rffi.LLVMTypeOf(value_ref) != self.cpu.ty_bit:
             raise KeyError
     except KeyError:
         res = llvm_rffi.LLVMBuildICmp(self.builder, llvm_rffi.Predicate.EQ,
                                       self.getintarg(op.args[0]),
                                       self.cpu.const_zero, "")
     else:
         # value_ref: ty_bit
         res = llvm_rffi.LLVMBuildNot(self.builder, value_ref, "")
     self.vars[op.result] = res
Esempio n. 7
0
 def generate_OONONNULL(self, op):
     self.vars[op.result] = llvm_rffi.LLVMBuildICmp(
         self.builder, llvm_rffi.Predicate.NE,
         self.getptrarg(op.args[0]),
         self.cpu.const_null_charptr, "")
Esempio n. 8
0
 def generate_OOISNOT(self, op):
     self.vars[op.result] = llvm_rffi.LLVMBuildICmp(
         self.builder, llvm_rffi.Predicate.NE,
         self.getptrarg(op.args[0]),
         self.getptrarg(op.args[1]), "")