Exemplo n.º 1
0
 def is_primitive_array_access(self):
     """ Indicates that this operations loads/stores a
     primitive type (int,float) """
     if self.is_primitive_load() or self.is_primitive_store():
         descr = self.getdescr()
         if not we_are_translated():
             from rpython.jit.backend.llgraph.runner import _getdescr
             descr = _getdescr(self)
         if descr and descr.is_array_of_primitives():
             return True
     return False
Exemplo n.º 2
0
 def inittype(self):
     if self.is_primitive_array_access():
         from rpython.jit.backend.llsupport.descr import ArrayDescr
         descr = self.getdescr()
         if not we_are_translated():
             from rpython.jit.backend.llgraph.runner import _getdescr
             descr = _getdescr(self)
         type = self.type
         self.bytesize = descr.get_item_size_in_bytes()
         self.signed = descr.is_item_signed()
         self.datatype = type
     elif self.opnum == rop.INT_SIGNEXT:
         from rpython.jit.metainterp import history
         arg0 = self.getarg(0)
         arg1 = self.getarg(1)
         assert isinstance(arg1, history.ConstInt)
         signed = True
         if not arg0.is_constant():
             signed = arg0.signed
         self.setdatatype('i', arg1.value, True)
     elif self.is_typecast():
         ft,tt = self.cast_types()
         self.setdatatype(tt, self.cast_to_bytesize(), tt == 'i')
     else:
         # pass through the type of the first input argument
         type = self.type
         signed = type == 'i'
         bytesize = -1
         if self.numargs() > 0:
             i = 0
             arg = self.getarg(i)
             while arg.is_constant() and i+1 < self.numargs():
                 i += 1
                 arg = self.getarg(i)
             if arg.datatype != '\x00' and \
                arg.bytesize != -1:
                 type = arg.datatype
                 signed = arg.signed
                 bytesize = arg.bytesize
         if self.returns_bool_result():
             type = 'i'
         self.setdatatype(type, bytesize, signed)
     assert self.datatype != '\x00'