Replace integer arithmetic with more complex expressions. For example, the following identities can be used to encode integer addition:
x + y = x - ¬ y - 1 = (x ⊕ y) + 2·(x ∧ y) = (x ∨ y) + (x ∧ y) = 2·(x ∨ y) - (x ⊕ y)
For example, Tigress might replace
z = x + y + w
z = (((x ^ y) + ((x & y) << 1)) | w) + (((x ^ y) + ((x & y) << 1)) & w);
|--Transform||EncodeArithmetic||Replace integer arithmetic with more complex expressions.|
|--EncodeArithmeticKinds||integer|| Specify the types to encode. Currently, only integer is available. Default=integer.
For each operator, there are many possible encodings, and at transformation time, these are selected from randomly.
Currently, the identities are taken from the book Hacker's Delight.