public boolean offer(E e) {
  if (null == e) throw new NullPointerException();
  
  E[] buffer = this.buffer;
  long mask = this.mask;
  long producerIndex = this.lpProducerIndex(); // -> Unsafe.getLong

  if (producerIndex >= this.producerLimit && !offerSlowPath(buffer, mask, producerIndex))
    return false;
  
  long offset = calcElementOffset(producerIndex, mask); // ConcurrentCircularArrayQueue.calcElementOffset -> calcElementOffset
  soElement(buffer, offset, e); // -> Unsafe.putOrderedObject
  soProducerIndex(producerIndex + 1); // -> Unsafe.putOrderedLong
  return true;
}
/*
C1 compilation:
232  434       3       org.jctools.queues.SpscArrayQueue::offer (77 bytes)
      @ 9   java.lang.NullPointerException::<init> (5 bytes)   don't inline Throwable constructors
      @ 24   org.jctools.queues.SpscArrayQueueProducerIndexFields::lpProducerIndex (11 bytes)
        @ 7   sun.misc.Unsafe::getLong (0 bytes)   intrinsic
      @ 44   org.jctools.queues.SpscArrayQueue::offerSlowPath (59 bytes)   callee is too large
      @ 55   org.jctools.queues.ConcurrentCircularArrayQueue::calcElementOffset (6 bytes)
        @ 2   org.jctools.queues.CircularArrayOffsetCalculator::calcElementOffset (12 bytes)
      @ 64   org.jctools.util.UnsafeRefArrayAccess::soElement (10 bytes)
        @ 6   sun.misc.Unsafe::putOrderedObject (0 bytes)   intrinsic
      @ 72   org.jctools.queues.SpscArrayQueueProducerIndexFields::soProducerIndex (12 bytes)
        @ 8   sun.misc.Unsafe::putOrderedLong (0 bytes)   intrinsic
*/
private boolean offerSlowPath(E[] buffer, long mask, long producerIndex) {
  int lookAheadStep = this.lookAheadStep;
  // ConcurrentCircularArrayQueue.calcElementOffset -> calcElementOffset
  // lvElement -> Unsafe.getObjectVolatile
  if (null == lvElement(buffer, calcElementOffset(producerIndex + lookAheadStep, mask)))
    producerLimit = producerIndex + lookAheadStep;
  else {
    long offset = calcElementOffset(producerIndex, mask); // ConcurrentCircularArrayQueue.calcElementOffset -> calcElementOffset
    if (null != lvElement(buffer, offset)) // lvElement -> Unsafe.getObjectVolatile
      return false;
  }
  return true;
}
/*
C2 compilation:
234  448       4       org.jctools.queues.SpscArrayQueue::offer (77 bytes)
     @ 15   org.jctools.queues.ConcurrentCircularArrayQueue::calcElementOffset (6 bytes)
       @ 2   org.jctools.queues.CircularArrayOffsetCalculator::calcElementOffset (12 bytes)
     @ 18   org.jctools.util.UnsafeRefArrayAccess::lvElement (9 bytes)
       @ 5   sun.misc.Unsafe::getObjectVolatile (0 bytes)   intrinsic
     @ 40   org.jctools.queues.ConcurrentCircularArrayQueue::calcElementOffset (6 bytes)
       @ 2   org.jctools.queues.CircularArrayOffsetCalculator::calcElementOffset (12 bytes)
     @ 49   org.jctools.util.UnsafeRefArrayAccess::lvElement (9 bytes)
       @ 5   sun.misc.Unsafe::getObjectVolatile (0 bytes)   intrinsic
     @ 24   org.jctools.queues.SpscArrayQueueProducerIndexFields::lpProducerIndex (11 bytes)   inline (hot)
       @ 7   sun.misc.Unsafe::getLong (0 bytes)   (intrinsic)
     @ 44   org.jctools.queues.SpscArrayQueue::offerSlowPath (59 bytes)   inline (hot)
       @ 15   org.jctools.queues.ConcurrentCircularArrayQueue::calcElementOffset (6 bytes)   inline (hot)
         @ 2   org.jctools.queues.CircularArrayOffsetCalculator::calcElementOffset (12 bytes)   inline (hot)
       @ 18   org.jctools.util.UnsafeRefArrayAccess::lvElement (9 bytes)   inline (hot)
         @ 5   sun.misc.Unsafe::getObjectVolatile (0 bytes)   (intrinsic)
       @ 40   org.jctools.queues.ConcurrentCircularArrayQueue::calcElementOffset (6 bytes)   inline (hot)
         @ 2   org.jctools.queues.CircularArrayOffsetCalculator::calcElementOffset (12 bytes)   inline (hot)
       @ 49   org.jctools.util.UnsafeRefArrayAccess::lvElement (9 bytes)   inline (hot)
         @ 5   sun.misc.Unsafe::getObjectVolatile (0 bytes)   (intrinsic)
     @ 55   org.jctools.queues.ConcurrentCircularArrayQueue::calcElementOffset (6 bytes)   inline (hot)
       @ 2   org.jctools.queues.CircularArrayOffsetCalculator::calcElementOffset (12 bytes)   inline (hot)
     @ 64   org.jctools.util.UnsafeRefArrayAccess::soElement (10 bytes)   inline (hot)
       @ 6   sun.misc.Unsafe::putOrderedObject (0 bytes)   (intrinsic)
     @ 72   org.jctools.queues.SpscArrayQueueProducerIndexFields::soProducerIndex (12 bytes)   inline (hot)
       @ 8   sun.misc.Unsafe::putOrderedLong (0 bytes)   (intrinsic)

C1 Compilation discarded:
235  434       3       org.jctools.queues.SpscArrayQueue::offer (77 bytes)   made not entrant
*/