Цитата Сообщение от gid Посмотреть сообщение
А тут во второй строке вместо c[0] нужно подставлять значение c[0], вычисленное в первой строке, или предыдущее значение c[0], которое было до вычисления первой строки?
Это я привел сразу запись нужного алгоритма на Си, вычисление переменной с за один проход, соответственно надо подставлять вычисленное в предыдущей строке значение. По существу - этот код отображает распространение переноса в многоразрядном полном сумматоре.

Цитата Сообщение от gid Посмотреть сообщение
т.е. если сперва вычислить с побитно, то потом cpred будет гарантированно таким {c[14:0], cl}?
Он всегда будет таким, в любой момент. Ведь функция никакая не вычисляется, это просто алиас на ту же самую переменную. На Си можно рассматривать как (опуская синтаксический вопрос скобок):

Код:
#define cpred[0] cl
#define cpred[1] c[0]
...
#define cpred[15] c[14]
cpred - перенос с предыдущего разряда, используется в составе полного многоразрядного сумматора.

Цитата Сообщение от gid Посмотреть сообщение
Просто далее cpred используется для вычисления f, а вычислять по отдельному биту - занятие трудоёмкое, лучше использовать логические операции над словами сразу.
Имхо, сначала надо корректно перенести реализацию на Си, в любом громоздком и некрасивом виде, заставить это работать, а потом уже можно заниматься оптимизациями. На этом этапе логические операции можно применять только если они эквивалентны операции над массивом бит и все изменения результирующих битов будут обработаны. То есть, как в рассматриваемом случае с c/cpred - изменение каждого бита требует перерасчета следующего, поэтому одной простой операцией над словом этот алгоритм не реализовать.