The MMIX architecture is a fairly simple big-endian RISC design. It has a couple of interesting features, one of them is the MXOR
instruction, which is what you should implement.
The MXOR
instruction interprets its arguments (two 64-bit registers) as two 8×8 matrices of bits and performs a matrix multiplication where exclusive-or is used for addition and logical and is used for multiplication.
An argument in binary representation where the leftmost digit is most significant
a0 a1 a2 … a63
is interpreted as a matrix like this:
a0 a1 … a7
a8 a9 … a15
…
a56 a57 … a63
Your task is to write a function, subroutine or similar in a language of choice which can be evoked from a single-letter name (i.e. f(x,y)
) that implements this function. The two arguments of the function shall be of equal implementation-defined unsigned 64 bit integer type, the function shall return a value of the same type.
he winner of this competition is the shortest submission (measured in bytes or characters if the language you use uses a meaningful character encoding). You are encouraged to post a readable commented version of your code in addition to the golfed solution so other's can understand how it works.