1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-26 23:52:26 +00:00

Eliminate branches from ABCD.

This commit is contained in:
Thomas Harte 2022-05-12 15:25:01 -04:00
parent 79c5af755f
commit b7d1bff0c7

View File

@ -42,9 +42,11 @@ template <
// Perform the BCD add by evaluating the two nibbles separately. // Perform the BCD add by evaluating the two nibbles separately.
const int unadjusted_result = destination + source + extend; const int unadjusted_result = destination + source + extend;
int result = (destination & 0xf) + (source & 0xf) + extend; int result = (destination & 0xf) + (source & 0xf) + extend;
if(result > 0x09) result += 0x06; result +=
result += (destination & 0xf0) + (source & 0xf0); (destination & 0xf0) +
if(result > 0x9f) result += 0x60; (source & 0xf0) +
(((9 - result) >> 4) & 0x06); // i.e. ((result > 0x09) ? 0x06 : 0x00);
result += ((0x9f - result) >> 4) & 0x60; // i.e. ((result > 0x9f) ? 0x60 : 0x00)
// Set all flags essentially as if this were normal addition. // Set all flags essentially as if this were normal addition.
status.zero_result |= result & 0xff; status.zero_result |= result & 0xff;