-module(sparx). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/sparx.gleam"). -export([rotl/2, a/2, a_inv/2, l_2/1, l_2_inv/1, l_4/1, l_4_inv/1]). -file("src/sparx.gleam", 3). -spec 'xor'(sparx@uint16:uint16(), sparx@uint16:uint16()) -> sparx@uint16:uint16(). 'xor'(A, B) -> sparx@uint16:bitwise_exclusive_or(A, B). -file("src/sparx.gleam", 7). -spec rotl(sparx@uint16:uint16(), integer()) -> sparx@uint16:uint16(). rotl(X, N) -> sparx@uint16:bitwise_or( sparx@uint16:bitwise_shift_left(X, N), sparx@uint16:bitwise_shift_right(X, 16 - N) ). -file("src/sparx.gleam", 14). -spec a(sparx@uint16:uint16(), sparx@uint16:uint16()) -> {sparx@uint16:uint16(), sparx@uint16:uint16()}. a(L, R) -> L@1 = sparx@uint16:unsafe_from_int( sparx@uint16:to_int(rotl(L, 9)) + sparx@uint16:to_int(R) ), R@1 = 'xor'(rotl(R, 2), L@1), {L@1, R@1}. -file("src/sparx.gleam", 20). -spec a_inv(sparx@uint16:uint16(), sparx@uint16:uint16()) -> {sparx@uint16:uint16(), sparx@uint16:uint16()}. a_inv(L, R) -> R@1 = 'xor'(R, L), R@2 = rotl(R@1, 14), L@1 = sparx@uint16:unsafe_from_int( sparx@uint16:to_int(L) - sparx@uint16:to_int(R@2) ), L@2 = rotl(L@1, 7), {L@2, R@2}. -file("src/sparx.gleam", 31). -spec l_2_mix( {sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16()} ) -> {sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16()}. l_2_mix(X) -> {X0, X1, X2, X3} = X, Tmp = rotl('xor'(X0, X1), 8), {X0, X1, 'xor'('xor'(X0, Tmp), X2), 'xor'('xor'(X1, Tmp), X3)}. -file("src/sparx.gleam", 39). -spec l_2_swap( {sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16()} ) -> {sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16()}. l_2_swap(X) -> {X0, X1, X2, X3} = X, {X2, X3, X0, X1}. -file("src/sparx.gleam", 46). -spec l_2( {sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16()} ) -> {sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16()}. l_2(X) -> l_2_swap(l_2_mix(X)). -file("src/sparx.gleam", 52). -spec l_2_inv( {sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16()} ) -> {sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16()}. l_2_inv(X) -> l_2_mix(l_2_swap(X)). -file("src/sparx.gleam", 70). -spec l_4( {sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16()} ) -> {sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16()}. l_4(X) -> {X0, X1, X2, X3, X4, X5, X6, X7} = X, Tmp = rotl('xor'('xor'(X0, X1), 'xor'(X2, X3)), 8), X4@1 = 'xor'('xor'(X4, X2), Tmp), X5@1 = 'xor'('xor'(X5, X1), Tmp), X6@1 = 'xor'('xor'(X6, X0), Tmp), X7@1 = 'xor'('xor'(X7, X3), Tmp), {X4@1, X5@1, X6@1, X7@1, X0, X1, X2, X3}. -file("src/sparx.gleam", 81). -spec l_4_inv( {sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16()} ) -> {sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16(), sparx@uint16:uint16()}. l_4_inv(X) -> {X0, X1, X2, X3, X4, X5, X6, X7} = X, {X0@1, X1@1, X2@1, X3@1, X4@1, X5@1, X6@1, X7@1} = {X4, X5, X6, X7, X0, X1, X2, X3}, Tmp = rotl('xor'('xor'(X0@1, X1@1), 'xor'(X2@1, X3@1)), 8), X4@2 = 'xor'('xor'(X4@1, X2@1), Tmp), X5@2 = 'xor'('xor'(X5@1, X1@1), Tmp), X6@2 = 'xor'('xor'(X6@1, X0@1), Tmp), X7@2 = 'xor'('xor'(X7@1, X3@1), Tmp), {X0@1, X1@1, X2@1, X3@1, X4@2, X5@2, X6@2, X7@2}.