circuitous
circuitous copied to clipboard
Optimization 8bit flag calculation
For 8-bit instructions that touch flags like add al, al
/ 00 c0
we currently have 4 separate OR checks to check if the 3rd bit of a value is 1. This on both x86 and amd64.
We can optimize this in two ways, we can:
extract the 3rd bit of advice
and check if that bit set is set through and 1
Or we can optimize the entire select
away:
Currently the select
represents
if( advice_3rd_bit_is_set) return 0b1000 else return 0
Notice that this is equivalent to:
advice_third_bit = extract(advice, 3,2)
XOR(advice_third_bit, 1) << 1
Leaving us with only XOR
<<
and extract
which all should be free on a circuit level I believe.