Example #1
0
/*-----------------------------------------------------------------------------
 * 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
}
Example #2
0
/*-----------------------------------------------------------------------------
 * 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);
}