I need to remove as many if conditions as possible from the two functions below:
inline int inc_with_1bit_saturation(int counter)
{
    if (counter == 1)
        return --counter;
    return ++counter;
}
void branch_prediction_1bit_saturation(int* input, int* output, int size)
{
    int counter = 0;
    for (int i = 0; i < size; ++i)
    {
        if (input[i] != counter)
        {
            counter = inc_with_1bit_saturation(counter);
            output[i] = 0;
        }
        else output[i] = 1;
    }
}
How can I do that and what if branch is absolutely necessary and cannot be removed and which one can be replaced by simple bitwise operations or something like that?
Update 1
According to User JSF's great tip, the code is now looking like this:
void branch_prediction_1bit_saturation(int* input, int* output, int size)
{
    int counter = 0;
    for (int i = 0; i < size; ++i)
    {
        if (input[i] != counter)
        {
            counter = 1 - counter;
            output[i] = 0;
        }
        else output[i] = 1;
    }
}
Update 2
Thanks to Cantfindname, the code became like this:
void branch_prediction_1bit_saturation(int* input, int* output, int size)
{
    int counter = 0;
    for (int i = 0; i < size; ++i)
    {
        output[i] = counter == input[i];
        counter = output[i] * counter + (1 - output[i])*(1 - counter);
    }
}
And this completely solves the question.
 
     
     
     
    