Если я верно понял, то:
x, res: INTEGER;
even_bits: SET;
even_bits := BITS(x) * {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30};
res := ORD(even_bits + BITS(ASH(ORD(-even_bits), 1)));

Реальных операций только три: *, + и - (побитовый and, or и not соответственно).
Остальное - преобразования этапа трансляции.