while (cur_seg->trbs > trb ||
                        &cur_seg->trbs[TRBS_PER_SEGMENT - 1] < trb) {
                generic_trb = &cur_seg->trbs[TRBS_PER_SEGMENT - 1].generic;
-               if ((generic_trb->field[3] & TRB_TYPE_BITMASK) ==
-                               TRB_TYPE(TRB_LINK) &&
-                               (generic_trb->field[3] & LINK_TOGGLE))
-                       *cycle_state = ~(*cycle_state) & 0x1;
+               if (generic_trb->field[3] & LINK_TOGGLE)
+                       *cycle_state ^= 0x1;
                cur_seg = cur_seg->next;
                if (cur_seg == start_seg)
                        /* Looped over the entire list.  Oops! */
        trb = &state->new_deq_ptr->generic;
        if ((trb->field[3] & TRB_TYPE_BITMASK) == TRB_TYPE(TRB_LINK) &&
                                (trb->field[3] & LINK_TOGGLE))
-               state->new_cycle_state = ~(state->new_cycle_state) & 0x1;
+               state->new_cycle_state ^= 0x1;
        next_trb(xhci, ep_ring, &state->new_deq_seg, &state->new_deq_ptr);
 
        /*