/*----------------------------------------------------------------------------- * finish_dt_in_back_ex_head *---------------------------------------------------------------------------*/ void finish_dt_in_back_ex_head(BUFFER_CB *buf, bool_t tail_overlaps) { uint32_t num_bytes = buf->in_back_buffered_bytes; uint32_t tail_offset = buf->tail & QWORD_MASK; if (tail_offset != 0) { uint8_t *buf_data = (uint8_t *)buf->data; if (tail_overlaps && (QWORD_SIZE - tail_offset > num_bytes)) { uint32_t new_tail = buf->tail + num_bytes; vec_stvlx(vec_perm(vec_lvrx(new_tail & QWORD_MASK, &buf->back_in_dtcb.ua_data), vec_lvlx(new_tail, buf_data), vec_lvsr(num_bytes, (uint8_t *)NULL)), buf->tail, buf_data); } else { vec_stvlx(vec_lvlx(tail_offset, &buf->back_in_dtcb.ua_data), buf->tail, buf_data); } } buf->tail = (buf->tail + num_bytes) & buf->mask; assert(buf->otail == buf->tail); #if CHECK if (!tail_overlaps) { buf->back_action = BUFFER_ACTION_NONE; } #endif }
/*----------------------------------------------------------------------------- * ppu_finish_dt_in_back *---------------------------------------------------------------------------*/ static INLINE void ppu_finish_dt_in_back(PPU_DT_PARAMS *cmd) { BUFFER_CB *buf = cmd->buf; #if DT_ALLOW_UNALIGNED uint32_t tail_offset = buf->tail & QWORD_MASK; // Write unaligned data to buffer. if (tail_offset != 0) { vec_stvlx(vec_lvlx(tail_offset, &buf->back_in_dtcb.ua_data), buf->tail, (uint8_t *)buf->data); } #endif buf->tail = (buf->tail + cmd->num_bytes) & buf->mask; IF_CHECK(buf->back_action = BUFFER_ACTION_NONE); }
vector float f(void) { vector float * a = (void*)16; return vec_lvlx (0, a); }