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
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
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
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
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