Пример #1
0
 def load_value_int32(code, reg, value, clear = False):
   # obviously, value should be 32 bit integer
   code.add(spu.ilhu(reg, value / pow(2, 16)))      # immediate load halfword upper
   code.add(spu.iohl(reg, value % pow(2, 16))) # immediate or halfword lower
   if clear:
     code.add(spu.shlqbyi(reg, reg, 12)) # shift left qw by bytes, clears right bytes
   return
Пример #2
0
 def load_value_int32(code, reg, value, clear = False):
   # obviously, value should be 32 bit integer
   code.add(spu.ilhu(reg, value / pow(2, 16)))      # immediate load halfword upper
   code.add(spu.iohl(reg, value % pow(2, 16))) # immediate or halfword lower
   if clear:
     code.add(spu.shlqbyi(reg, reg, 12)) # shift left qw by bytes, clears right bytes
   return
Пример #3
0
  def _synthesize_prologue(self):
    """
    Add raw_data_size/offest support code.
    """

    InstructionStream._synthesize_prologue(self)

    # Parallel parameters are passed in the prefered slot and the next
    # slot of the user arugment.
    self._prologue.add(spu.shlqbyi(self.r_rank, SPURegister(3, None), 4)) 
    self._prologue.add(spu.shlqbyi(self.r_size, SPURegister(3, None), 8)) 

    if self.raw_data_size is not None:
      self.acquire_block_registers()

      self._prologue.add(spu.shlqbyi(self.r_block_size, SPURegister(4, None), 4)) 
      self._prologue.add(spu.shlqbyi(self.r_offset, SPURegister(4, None), 8)) 
    else:
      print 'no raw data'
    return
Пример #4
0
  def _synthesize_prologue(self):
    """
    Add raw_data_size/offest support code.
    """

    Program._synthesize_prologue(self)

    # Parallel parameters are passed in the prefered slot and the next
    # slot of the user arugment.
    #p3 = self.acquire_register(reg_name = 3)
    p3 = SPURegister("r3")
    self._prologue.append(spu.shlqbyi(self.r_rank, p3, 4)) 
    self._prologue.append(spu.shlqbyi(self.r_size, p3, 8)) 

    if self.raw_data_size is not None:
      self.acquire_block_registers()

      #p4 = self.acquire_register(reg_name = 4)
      p4 = SPURegister("r4")
      self._prologue.append(spu.shlqbyi(self.r_block_size, p4, 4)) 
      self._prologue.append(spu.shlqbyi(self.r_offset, p4, 8)) 
    #else:
    #  print 'no raw data'
    return
Пример #5
0
    def _synthesize_prologue(self):
        """
    Add raw_data_size/offest support code.
    """

        Program._synthesize_prologue(self)

        # Parallel parameters are passed in the prefered slot and the next
        # slot of the user arugment.
        #p3 = self.acquire_register(reg_name = 3)
        p3 = SPURegister("r3")
        self._prologue.append(spu.shlqbyi(self.r_rank, p3, 4))
        self._prologue.append(spu.shlqbyi(self.r_size, p3, 8))

        if self.raw_data_size is not None:
            self.acquire_block_registers()

            #p4 = self.acquire_register(reg_name = 4)
            p4 = SPURegister("r4")
            self._prologue.append(spu.shlqbyi(self.r_block_size, p4, 4))
            self._prologue.append(spu.shlqbyi(self.r_offset, p4, 8))
        #else:
        #  print 'no raw data'
        return
Пример #6
0
def load_word(code, r_target, word, clear=False, zero=True):
    """If r0 is not set to 0, the zero parameter should be set to False"""

    if zero and (-512 < word < 511):
        code.add(spu.ai(r_target, code.r_zero, word))
    elif (word & 0x7FFF) == word:
        code.add(spu.il(r_target, word))
    elif (word & 0x3FFFF) == word:
        code.add(spu.ila(r_target, word))
    else:
        code.add(spu.ilhu(r_target, (word & 0xFFFF0000) >> 16))
        code.add(spu.iohl(r_target, (word & 0xFFFF)))

    if clear:
        code.add(spu.shlqbyi(r_target, r_target, 12))
    return
Пример #7
0
def load_word(code, r_target, word, clear = False, zero = True):
  """If r0 is not set to 0, the zero parameter should be set to False"""

  #if zero and (-512 < word < 511):
  #  code.add(spu.ai(r_target, code.r_zero, word))
  #elif (word & 0x7FFF) == word:
  #  code.add(spu.il(r_target, word))
  if (word & 0x3FFFF) == word:
    code.add(spu.ila(r_target, word))
  else:
    code.add(spu.ilhu(r_target, (word & 0xFFFF0000) >> 16))
    if word & 0xFFFF != 0:
      code.add(spu.iohl(r_target, (word & 0xFFFF)))

  if clear:
    code.add(spu.shlqbyi(r_target, r_target, 12))
  return