Example #1
0
 def emit_gc_load_or_indexed(self, op, ptr_box, index_box, itemsize,
                             factor, offset, sign, type='i'):
     factor, offset, index_box = \
             self._emit_mul_if_factor_offset_not_supported(index_box,
                     factor, offset)
     #
     if sign:
         # encode signed into the itemsize value
         itemsize = -itemsize
     #
     optype = type
     if op is not None:
         optype = op.type
     if index_box is None:
         args = [ptr_box, ConstInt(offset), ConstInt(itemsize)]
         newload = ResOperation(OpHelpers.get_gc_load(optype), args)
     else:
         args = [ptr_box, index_box, ConstInt(factor),
                 ConstInt(offset), ConstInt(itemsize)]
         newload = ResOperation(OpHelpers.get_gc_load_indexed(optype), args)
     if op is None:
         self.emit_op(newload)
     else:
         self.replace_op_with(op, newload)
     return newload