Итак, я делаю эмулятор Hack CPU, и мне было интересно, как лучше рассчитать результат. Будет ли объединение вычислений в одну нечитаемую строку более эффективным, чем вычисление результата по одному шагу за раз? Оптимизирует ли это компилятор так, что оба варианта хороши? В основном, какой из них более эффективен -
это:
word HackALU(word x, word y, bool zx, bool nx, bool zy, bool ny, bool f, bool no)
{
x = zx ? 0 : x;
y = zy ? 0 : y;
x = nx ? ~x : x;
y = ny ? ~y : y;
word result = f ? x + y : x & y;
return no ? ~result : result;
}
или это:
word HackALU(word x, word y, bool zx, bool nx, bool zy, bool ny, bool f, bool no)
{
return no ? ~(f ? ((nx ? ~(zx ? 0 : x) : (zx ? 0 : x)) + (ny ? ~(zy ? 0 : y) : (zy ? 0 : y))) : ((nx ? ~(zx ? 0 : x) : (zx ? 0 : x)) & (ny ? ~(zy ? 0 : y) : (zy ? 0 : y)))) : (f ? ((nx ? ~(zx ? 0 : x) : (zx ? 0 : x)) + (ny ? ~(zy ? 0 : y) : (zy ? 0 : y))) : ((nx ? ~(zx ? 0 : x) : (zx ? 0 : x)) & (ny ? ~(zy ? 0 : y) : (zy ? 0 : y))));
}