setHead(tmp.isZero() ? headSentinel(arity) : tmp);
head = (tmp.isZero() ? headSentinel(arity) : tmp);
  private final boolean consumerStarved(int arity) {    if (bufferOffset(tail) >= (arity<<LOG_WORD_SIZE)) {      // entries in tail, so consume tail      if (head.EQ(headSentinel(arity)))	setHead(queue.alloc()); // no head, so alloc a new one      VM_Address tmp = head;      setHead(normalizeTail(arity).add(WORD_SIZE));// account for pre-decrement      if (VM.VerifyAssertions) VM._assert(tmp.EQ(bufferStart(tmp)));      tail = tmp.add(bufferLastOffset(arity) + WORD_SIZE);    } else {      VM_Address tmp = queue.dequeueAndWait(arity);      setHead(tmp.isZero() ? headSentinel(arity) : tmp);    }    return head.NE(headSentinel(arity));  }