gft_mul_vi.c
// Implemented by Ming-Shing Chen, Tung Chou and Markus Krausz.
// public domain
#include "run_config.h"
#if !defined(_M4_ASM_)
#include "gft_mul_vi.h"
// x 0x2e597
void gft_mul_v17( sto_t * out , const sto_t * in ) {
const uint32_t * b = in;
uint32_t g0,g1,g2,g3, g4,g5,g6,g7, g8,g9,g10,g11;
uint32_t f0,f1,f2,f3, f4,f5,f6,f7, f8,f9,f10,f11;
uint32_t f12,f13,f14,f15, f16,f17,f18,f19, f20,f21,f22,f23, f24,f25,f26,f27, f28,f29,f30,f31;
//final state: [{0, 1, 3, 4, 7, 8, 12, 15, 24, 25, 27, 28, 29, 31}, {0, 2, 3, 5, 6, 7, 9, 13, 14, 15, 24, 26, 27, 28, 30, 31}, {0, 3, 4, 10, 12, 24, 27, 28, 31}, {1, 2, 3, 5, 11, 13, 25, 26, 27, 29, 30, 31}, {0, 2, 3, 5, 6, 8, 10, 11, 14, 15, 25, 27, 28}, {1, 2, 4, 5, 7, 9, 10, 14, 24, 25, 26, 27, 29}, {1, 2, 3, 4, 5, 6, 9, 10, 11, 13, 15, 24, 26, 27, 30}, {0, 1, 2, 4, 7, 8, 9, 10, 12, 13, 14, 15, 25, 26, 31}, {0, 3, 5, 6, 7, 9, 12, 13, 14, 21, 23, 29, 31}, {1, 2, 3, 4, 5, 6, 8, 9, 12, 15, 20, 21, 22, 23, 28, 29, 30, 31}, {0, 5, 11, 12, 13, 20, 22, 23, 28, 30, 31}, {1, 4, 5, 10, 11, 12, 21, 22, 29, 30}, {1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 15, 18, 22, 26, 30}, {0, 1, 3, 4, 6, 8, 10, 11, 13, 14, 15, 19, 23, 27, 31}, {0, 1, 2, 5, 6, 8, 11, 12, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, {0, 3, 4, 5, 7, 9, 10, 11, 13, 16, 18, 20, 22, 24, 26, 28, 30}, {1, 16, 19, 20, 23, 24, 28, 31}, {0, 1, 17, 18, 19, 21, 22, 23, 25, 29, 30, 31}, {3, 16, 20, 26, 28}, {2, 3, 17, 21, 27, 29}, {5, 16, 18, 19, 22, 24, 26, 27, 30, 31}, {4, 5, 17, 18, 23, 25, 26, 30}, {7, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 29, 31}, {6, 7, 16, 17, 18, 20, 22, 24, 25, 26, 28, 29, 30, 31}, {9, 16, 19, 21, 22, 23, 28, 29, 30}, {8, 9, 17, 18, 19, 20, 21, 22, 28, 31}, {11, 16, 21, 28, 29}, {10, 11, 17, 20, 21, 28}, {13, 17, 18, 20, 21, 22, 23, 24, 25, 27, 28, 29, 31}, {12, 13, 16, 17, 19, 20, 22, 24, 26, 27, 28, 30, 31}, {15, 16, 17, 18, 21, 22, 24, 27, 28, 31}, {14, 15, 16, 19, 20, 21, 23, 25, 26, 27, 29, 30, 31}]
//i = 0
//better circuit found: #XORs = 224
//better circuit found: #XORs = 219
//better circuit found: #XORs = 217
//better circuit found: #XORs = 210
//i = 50
//i = 100
//i = 150
//i = 200
//i = 250
//i = 300
//i = 350
//better circuit found: #XORs = 209
//i = 400
//i = 450
//i = 500
//i = 550
//i = 600
//i = 650
//i = 700
//i = 750
//i = 800
//i = 850
//i = 900
//i = 950
//initial state: [{1, 7, 8, 20, 25}, {1, 11, 12, 19, 21, 24}, {3, 14, 15, 27, 28, 31}, {2, 3, 5, 14}, {0, 4, 10, 12, 14, 15, 24}, {4, 6, 9, 23}, {20, 10, 29, 15}, {1, 4, 16, 19}, {7, 9, 14, 21, 26}, {7, 18, 23, 28, 31}, {0, 9, 17, 18, 19, 31}, {5, 10, 12, 13, 30}, {2, 6, 8, 14, 18, 20}, {3, 6, 8, 15, 23, 24, 26, 27}, {2, 11, 12, 29}, {0, 9, 16, 26, 27, 31}, {20, 23, 24, 25, 31}, {4, 25, 28}, {3, 16, 20, 26, 28}, {2, 3, 17, 21, 27, 29}, {5, 17, 22, 24, 30, 31}, {22, 7, 24, 26}, {13, 19, 22, 28}, {1, 11, 13, 14, 19, 27}, {9, 11, 19, 22, 23, 30}, {0, 8, 10, 11, 17, 22}, {11, 16, 21, 28, 29}, {15, 16, 17}, {10, 13, 16, 23, 25}, {26, 20, 5, 23, 10}, {15, 18, 19, 21, 23}, {7, 9, 13, 19, 27, 30, 31}]
//[0, 2, 3, 4, 5, 7, 8, 10, 11, 13, 15, 16, 18, 19, 22, 24, 25, 26, 27, 28, 30, 31, 1, 6, 9, 12, 14, 17, 20, 21, 23, 29]
//instuctions with recommended mapping to GP and FP registers:
//(cycle count without considering memory stores: 574)
g0 = b[1];
g1 = b[7];
g2 = b[8];
g3 = b[20];
g4 = b[25];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f0 = g0;
g0 = b[1];
g1 = b[11];
g2 = b[12];
g3 = b[19];
g4 = b[21];
g5 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f1 = g0;
g0 = b[3];
g1 = b[14];
g2 = b[15];
g3 = b[27];
g4 = b[28];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f2 = g0;
g0 = b[2];
g1 = b[3];
g2 = b[5];
g3 = b[14];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f3 = g0;
g0 = b[0];
g1 = b[4];
g2 = b[10];
g3 = b[12];
g4 = b[14];
g5 = b[15];
g6 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f4 = g0;
g0 = b[4];
g1 = b[6];
g2 = b[9];
g3 = b[23];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f5 = g0;
g0 = b[20];
g1 = b[10];
g2 = b[29];
g3 = b[15];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f6 = g0;
g0 = b[1];
g1 = b[4];
g2 = b[16];
g3 = b[19];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f7 = g0;
g0 = b[7];
g1 = b[9];
g2 = b[14];
g3 = b[21];
g4 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f8 = g0;
g0 = b[7];
g1 = b[18];
g2 = b[23];
g3 = b[28];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f9 = g0;
g0 = b[0];
g1 = b[9];
g2 = b[17];
g3 = b[18];
g4 = b[19];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f10 = g0;
g0 = b[5];
g1 = b[10];
g2 = b[12];
g3 = b[13];
g4 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f11 = g0;
g0 = b[2];
g1 = b[6];
g2 = b[8];
g3 = b[14];
g4 = b[18];
g5 = b[20];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f12 = g0;
g0 = b[3];
g1 = b[6];
g2 = b[8];
g3 = b[15];
g4 = b[23];
g5 = b[24];
g6 = b[26];
g7 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f13 = g0;
g0 = b[2];
g1 = b[11];
g2 = b[12];
g3 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f14 = g0;
g0 = b[0];
g1 = b[9];
g2 = b[16];
g3 = b[26];
g4 = b[27];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f15 = g0;
g0 = b[20];
g1 = b[23];
g2 = b[24];
g3 = b[25];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f16 = g0;
g0 = b[4];
g1 = b[25];
g2 = b[28];
g0 ^= g1;
g0 ^= g2;
f17 = g0;
g0 = b[3];
g1 = b[16];
g2 = b[20];
g3 = b[26];
g4 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f18 = g0;
g0 = b[2];
g1 = b[3];
g2 = b[17];
g3 = b[21];
g4 = b[27];
g5 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f19 = g0;
g0 = b[5];
g1 = b[17];
g2 = b[22];
g3 = b[24];
g4 = b[30];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f20 = g0;
g0 = b[22];
g1 = b[7];
g2 = b[24];
g3 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f21 = g0;
g0 = b[13];
g1 = b[19];
g2 = b[22];
g3 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f22 = g0;
g0 = b[1];
g1 = b[11];
g2 = b[13];
g3 = b[14];
g4 = b[19];
g5 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f23 = g0;
g0 = b[9];
g1 = b[11];
g2 = b[19];
g3 = b[22];
g4 = b[23];
g5 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f24 = g0;
g0 = b[0];
g1 = b[8];
g2 = b[10];
g3 = b[11];
g4 = b[17];
g5 = b[22];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f25 = g0;
g0 = b[11];
g1 = b[16];
g2 = b[21];
g3 = b[28];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f26 = g0;
g0 = b[15];
g1 = b[16];
g2 = b[17];
g0 ^= g1;
g0 ^= g2;
f27 = g0;
g0 = b[10];
g1 = b[13];
g2 = b[16];
g3 = b[23];
g4 = b[25];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f28 = g0;
g0 = b[26];
g1 = b[20];
g2 = b[5];
g3 = b[23];
g4 = b[10];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f29 = g0;
g0 = b[15];
g1 = b[18];
g2 = b[19];
g3 = b[21];
g4 = b[23];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f30 = g0;
g0 = b[7];
g1 = b[9];
g2 = b[13];
g3 = b[19];
g4 = b[27];
g5 = b[30];
g6 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f31 = g0;
g0 = f1;
g1 = f6;
g2 = f9;
g3 = f12;
g4 = f14;
g5 = f17;
g6 = f20;
g7 = f21;
g8 = f23;
g9 = f29;
// g3 ^= f0
g11 = f0;
g3 ^= g11;
// g0 ^= f30
g11 = f30;
g0 ^= g11;
// g0 ^= f4
g11 = f4;
g0 ^= g11;
// g8 ^= g4
g8 ^= g4;
// g4 ^= g1
g4 ^= g1;
// g4 ^= g9
g4 ^= g9;
// g9 ^= f11
g11 = f11;
g9 ^= g11;
// f11 ^= f22
g10 = f11;
g11 = f22;
g10 ^= g11;
f11 = g10;
// f22 ^= g7
g10 = f22;
g10 ^= g7;
f22 = g10;
// g7 ^= g6
g7 ^= g6;
// g7 ^= g2
g7 ^= g2;
// g9 ^= g7
g9 ^= g7;
// f11 ^= g5
g10 = f11;
g10 ^= g5;
f11 = g10;
// f2 ^= g5
g10 = f2;
g10 ^= g5;
f2 = g10;
// f31 ^= f8
g10 = f31;
g11 = f8;
g10 ^= g11;
f31 = g10;
// f4 ^= g5
g10 = f4;
g10 ^= g5;
f4 = g10;
// f30 ^= g7
g10 = f30;
g10 ^= g7;
f30 = g10;
// g7 ^= g5
g7 ^= g5;
// f27 ^= g1
g10 = f27;
g10 ^= g1;
f27 = g10;
// f27 ^= f26
g10 = f27;
g11 = f26;
g10 ^= g11;
f27 = g10;
// g5 ^= f7
g11 = f7;
g5 ^= g11;
// f7 ^= g8
g10 = f7;
g10 ^= g8;
f7 = g10;
// g8 ^= g3
g8 ^= g3;
// g0 ^= g2
g0 ^= g2;
// g3 ^= f8
g11 = f8;
g3 ^= g11;
// f28 ^= g1
g10 = f28;
g10 ^= g1;
f28 = g10;
// f0 ^= g1
g10 = f0;
g10 ^= g1;
f0 = g10;
// g1 ^= f16
g11 = f16;
g1 ^= g11;
// f16 ^= g5
g10 = f16;
g10 ^= g5;
f16 = g10;
// g5 ^= f26
g11 = f26;
g5 ^= g11;
// g8 ^= g9
g8 ^= g9;
// f8 ^= f5
g10 = f8;
g11 = f5;
g10 ^= g11;
f8 = g10;
// g6 ^= f10
g11 = f10;
g6 ^= g11;
// g6 ^= f15
g11 = f15;
g6 ^= g11;
// g1 ^= f5
g11 = f5;
g1 ^= g11;
// f8 ^= f3
g10 = f8;
g11 = f3;
g10 ^= g11;
f8 = g10;
// f11 ^= g5
g10 = f11;
g10 ^= g5;
f11 = g10;
// f5 ^= f13
g10 = f5;
g11 = f13;
g10 ^= g11;
f5 = g10;
// f5 ^= f3
g10 = f5;
g11 = f3;
g10 ^= g11;
f5 = g10;
// f25 ^= f10
g10 = f25;
g11 = f10;
g10 ^= g11;
f25 = g10;
// f10 ^= f24
g10 = f10;
g11 = f24;
g10 ^= g11;
f10 = g10;
// f25 ^= f27
g10 = f25;
g11 = f27;
g10 ^= g11;
f25 = g10;
// f3 ^= f31
g10 = f3;
g11 = f31;
g10 ^= g11;
f3 = g10;
// f3 ^= g5
g10 = f3;
g10 ^= g5;
f3 = g10;
// f7 ^= f15
g10 = f7;
g11 = f15;
g10 ^= g11;
f7 = g10;
// g4 ^= f13
g11 = f13;
g4 ^= g11;
// f30 ^= g6
g10 = f30;
g10 ^= g6;
f30 = g10;
// f13 ^= f22
g10 = f13;
g11 = f22;
g10 ^= g11;
f13 = g10;
// f2 ^= f4
g10 = f2;
g11 = f4;
g10 ^= g11;
f2 = g10;
// f5 ^= f0
g10 = f5;
g11 = f0;
g10 ^= g11;
f5 = g10;
// f15 ^= g2
g10 = f15;
g10 ^= g2;
f15 = g10;
// g2 ^= f26
g11 = f26;
g2 ^= g11;
// f24 ^= f26
g10 = f24;
g11 = f26;
g10 ^= g11;
f24 = g10;
// g2 ^= f18
g11 = f18;
g2 ^= g11;
// g5 ^= f10
g11 = f10;
g5 ^= g11;
// f10 ^= g9
g10 = f10;
g10 ^= g9;
f10 = g10;
// g3 ^= f0
g11 = f0;
g3 ^= g11;
// f15 ^= f2
g10 = f15;
g11 = f2;
g10 ^= g11;
f15 = g10;
// f4 ^= g4
g10 = f4;
g10 ^= g4;
f4 = g10;
// g4 ^= f18
g11 = f18;
g4 ^= g11;
// f8 ^= f7
g10 = f8;
g11 = f7;
g10 ^= g11;
f8 = g10;
// g3 ^= f11
g11 = f11;
g3 ^= g11;
// g8 ^= g6
g8 ^= g6;
// f15 ^= f10
g10 = f15;
g11 = f10;
g10 ^= g11;
f15 = g10;
// f7 ^= f0
g10 = f7;
g11 = f0;
g10 ^= g11;
f7 = g10;
// f31 ^= f28
g10 = f31;
g11 = f28;
g10 ^= g11;
f31 = g10;
// f13 ^= g0
g10 = f13;
g10 ^= g0;
f13 = g10;
// g1 ^= f3
g11 = f3;
g1 ^= g11;
// g9 ^= g6
g9 ^= g6;
// f28 ^= f30
g10 = f28;
g11 = f30;
g10 ^= g11;
f28 = g10;
// f0 ^= f2
g10 = f0;
g11 = f2;
g10 ^= g11;
f0 = g10;
// g2 ^= g3
g2 ^= g3;
// g0 ^= g1
g0 ^= g1;
// f22 ^= f28
g10 = f22;
g11 = f28;
g10 ^= g11;
f22 = g10;
// g4 ^= g5
g4 ^= g5;
out[0] = f0;
out[1] = g0;
out[2] = f2;
out[3] = f3;
out[4] = f4;
out[5] = f5;
out[6] = g1;
out[7] = f7;
out[8] = f8;
out[9] = g2;
out[10] = f10;
out[11] = f11;
out[12] = g3;
out[13] = f13;
out[14] = g4;
out[15] = f15;
out[16] = f16;
out[17] = g5;
out[18] = f18;
out[19] = f19;
out[20] = g6;
out[21] = g7;
out[22] = f22;
out[23] = g8;
out[24] = f24;
out[25] = f25;
out[26] = f26;
out[27] = f27;
out[28] = f28;
out[29] = g9;
out[30] = f30;
out[31] = f31;
}
#include "gft_mul_vi.h"
// x 0x52257
void gft_mul_v18( sto_t * out , const sto_t * in ) {
const uint32_t * b = in;
uint32_t g0,g1,g2,g3, g4,g5,g6,g7, g8,g9,g10,g11;
uint32_t f0,f1,f2,f3, f4,f5,f6,f7, f8,f9,f10,f11;
uint32_t f12,f13,f14,f15, f16,f17,f18,f19, f20,f21,f22,f23, f24,f25,f26,f27, f28,f29,f30,f31;
//final state: [{0, 1, 3, 4, 5, 9, 11, 24, 25, 26, 27, 28, 29, 30, 31}, {0, 2, 3, 4, 8, 9, 10, 11, 24, 26, 28, 30}, {0, 3, 6, 7, 8, 10, 11, 25, 26, 29, 30}, {1, 2, 3, 6, 9, 10, 24, 25, 27, 28, 29, 31}, {0, 3, 5, 13, 15, 27, 28, 29, 30}, {1, 2, 3, 4, 5, 12, 13, 14, 15, 26, 27, 28, 31}, {0, 7, 12, 14, 15, 24, 26, 28, 29}, {1, 6, 7, 13, 14, 25, 27, 28}, {1, 6, 8, 11, 12, 13, 14, 23, 31}, {0, 1, 7, 9, 10, 11, 12, 15, 22, 23, 30, 31}, {3, 4, 5, 6, 7, 8, 12, 13, 20, 22, 28, 30}, {2, 3, 4, 6, 9, 12, 21, 23, 29, 31}, {1, 8, 9, 11, 13, 16, 17, 20, 21, 24, 25, 28, 29}, {0, 1, 8, 10, 11, 12, 13, 16, 20, 24, 28}, {3, 8, 11, 15, 18, 19, 22, 23, 26, 27, 30, 31}, {2, 3, 9, 10, 11, 14, 15, 18, 22, 26, 30}, {0, 3, 17, 20, 21, 25, 27}, {1, 2, 3, 16, 17, 20, 24, 25, 26, 27}, {0, 19, 22, 23, 24, 26, 27}, {1, 18, 19, 22, 25, 26}, {4, 7, 16, 19, 20, 21, 23, 29, 31}, {5, 6, 7, 17, 18, 19, 20, 22, 23, 28, 29, 30, 31}, {4, 16, 20, 23, 28, 30, 31}, {5, 17, 21, 22, 23, 29, 30}, {8, 11, 17, 22, 28, 29, 30}, {9, 10, 11, 16, 17, 23, 28, 31}, {8, 19, 20, 21, 22, 23, 28, 29}, {9, 18, 19, 20, 22, 28}, {12, 15, 17, 24, 25, 27, 28, 29, 31}, {13, 14, 15, 16, 17, 24, 26, 27, 28, 30, 31}, {12, 19, 24, 27, 28, 31}, {13, 18, 19, 25, 26, 27, 29, 30, 31}]
//i = 0
//better circuit found: #XORs = 232
//better circuit found: #XORs = 224
//better circuit found: #XORs = 221
//i = 50
//i = 100
//i = 150
//i = 200
//i = 250
//i = 300
//i = 350
//better circuit found: #XORs = 217
//i = 400
//i = 450
//i = 500
//i = 550
//i = 600
//i = 650
//i = 700
//i = 750
//better circuit found: #XORs = 214
//i = 800
//i = 850
//i = 900
//i = 950
//initial state: [{1, 8, 10, 13, 27, 29, 30}, {2, 3, 4, 5, 7, 8, 25, 29}, {11, 15, 20, 21, 26}, {3, 5, 6, 8, 9, 24, 28}, {0, 3, 5, 13, 14, 15, 19, 30}, {4, 16, 21, 30}, {14, 19, 27, 28, 29}, {1, 6, 7, 13, 15, 17}, {0, 1, 9, 10, 11, 30, 31}, {7, 12, 15, 22, 23}, {4, 8, 9, 12, 13, 23, 24}, {3, 7, 12, 20, 24, 25}, {3, 9, 10, 12, 20, 27, 29}, {0, 4, 6, 10, 14, 24, 30}, {1, 5, 9, 14, 15, 17, 23}, {2, 5, 13, 25, 30, 31}, {0, 3, 17, 20, 21, 25, 27}, {0, 1, 5, 21}, {0, 19, 22, 23, 24, 26, 27}, {1, 18, 19, 22, 25, 26}, {30, 21, 7, 27, 14}, {6, 18, 20, 29, 30, 31}, {20, 21, 23, 28, 31}, {20, 5, 8, 11, 31}, {8, 11, 17, 22, 28, 29, 30}, {0, 1, 4, 17, 20, 31}, {20, 8, 12, 30, 15}, {9, 18, 19, 20, 22, 28}, {17, 19, 25, 15, 29}, {2, 5, 16, 24, 26}, {12, 24, 29, 14, 31}, {8, 10, 22, 31}]
//[1, 3, 4, 7, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 21, 23, 24, 26, 27, 28, 30, 31, 0, 2, 5, 6, 8, 15, 20, 22, 25, 29]
//instuctions with recommended mapping to GP and FP registers:
//(cycle count without considering memory stores: 568)
g0 = b[1];
g1 = b[8];
g2 = b[10];
g3 = b[13];
g4 = b[27];
g5 = b[29];
g6 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f0 = g0;
g0 = b[2];
g1 = b[3];
g2 = b[4];
g3 = b[5];
g4 = b[7];
g5 = b[8];
g6 = b[25];
g7 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f1 = g0;
g0 = b[11];
g1 = b[15];
g2 = b[20];
g3 = b[21];
g4 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f2 = g0;
g0 = b[3];
g1 = b[5];
g2 = b[6];
g3 = b[8];
g4 = b[9];
g5 = b[24];
g6 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f3 = g0;
g0 = b[0];
g1 = b[3];
g2 = b[5];
g3 = b[13];
g4 = b[14];
g5 = b[15];
g6 = b[19];
g7 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f4 = g0;
g0 = b[4];
g1 = b[16];
g2 = b[21];
g3 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f5 = g0;
g0 = b[14];
g1 = b[19];
g2 = b[27];
g3 = b[28];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f6 = g0;
g0 = b[1];
g1 = b[6];
g2 = b[7];
g3 = b[13];
g4 = b[15];
g5 = b[17];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f7 = g0;
g0 = b[0];
g1 = b[1];
g2 = b[9];
g3 = b[10];
g4 = b[11];
g5 = b[30];
g6 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f8 = g0;
g0 = b[7];
g1 = b[12];
g2 = b[15];
g3 = b[22];
g4 = b[23];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f9 = g0;
g0 = b[4];
g1 = b[8];
g2 = b[9];
g3 = b[12];
g4 = b[13];
g5 = b[23];
g6 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f10 = g0;
g0 = b[3];
g1 = b[7];
g2 = b[12];
g3 = b[20];
g4 = b[24];
g5 = b[25];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f11 = g0;
g0 = b[3];
g1 = b[9];
g2 = b[10];
g3 = b[12];
g4 = b[20];
g5 = b[27];
g6 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f12 = g0;
g0 = b[0];
g1 = b[4];
g2 = b[6];
g3 = b[10];
g4 = b[14];
g5 = b[24];
g6 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f13 = g0;
g0 = b[1];
g1 = b[5];
g2 = b[9];
g3 = b[14];
g4 = b[15];
g5 = b[17];
g6 = b[23];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f14 = g0;
g0 = b[2];
g1 = b[5];
g2 = b[13];
g3 = b[25];
g4 = b[30];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f15 = g0;
g0 = b[0];
g1 = b[3];
g2 = b[17];
g3 = b[20];
g4 = b[21];
g5 = b[25];
g6 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f16 = g0;
g0 = b[0];
g1 = b[1];
g2 = b[5];
g3 = b[21];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f17 = g0;
g0 = b[0];
g1 = b[19];
g2 = b[22];
g3 = b[23];
g4 = b[24];
g5 = b[26];
g6 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f18 = g0;
g0 = b[1];
g1 = b[18];
g2 = b[19];
g3 = b[22];
g4 = b[25];
g5 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f19 = g0;
g0 = b[30];
g1 = b[21];
g2 = b[7];
g3 = b[27];
g4 = b[14];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f20 = g0;
g0 = b[6];
g1 = b[18];
g2 = b[20];
g3 = b[29];
g4 = b[30];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f21 = g0;
g0 = b[20];
g1 = b[21];
g2 = b[23];
g3 = b[28];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f22 = g0;
g0 = b[20];
g1 = b[5];
g2 = b[8];
g3 = b[11];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f23 = g0;
g0 = b[8];
g1 = b[11];
g2 = b[17];
g3 = b[22];
g4 = b[28];
g5 = b[29];
g6 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f24 = g0;
g0 = b[0];
g1 = b[1];
g2 = b[4];
g3 = b[17];
g4 = b[20];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f25 = g0;
g0 = b[20];
g1 = b[8];
g2 = b[12];
g3 = b[30];
g4 = b[15];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f26 = g0;
g0 = b[9];
g1 = b[18];
g2 = b[19];
g3 = b[20];
g4 = b[22];
g5 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f27 = g0;
g0 = b[17];
g1 = b[19];
g2 = b[25];
g3 = b[15];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f28 = g0;
g0 = b[2];
g1 = b[5];
g2 = b[16];
g3 = b[24];
g4 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f29 = g0;
g0 = b[12];
g1 = b[24];
g2 = b[29];
g3 = b[14];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f30 = g0;
g0 = b[8];
g1 = b[10];
g2 = b[22];
g3 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f31 = g0;
g0 = f0;
g1 = f2;
g2 = f5;
g3 = f6;
g4 = f8;
g5 = f15;
g6 = f20;
g7 = f22;
g8 = f25;
g9 = f29;
// f1 ^= f3
g10 = f1;
g11 = f3;
g10 ^= g11;
f1 = g10;
// f23 ^= g7
g10 = f23;
g10 ^= g7;
f23 = g10;
// g1 ^= f16
g11 = f16;
g1 ^= g11;
// g1 ^= f7
g11 = f7;
g1 ^= g11;
// g1 ^= g0
g1 ^= g0;
// f11 ^= g7
g10 = f11;
g10 ^= g7;
f11 = g10;
// g7 ^= g2
g7 ^= g2;
// f17 ^= g9
g10 = f17;
g10 ^= g9;
f17 = g10;
// g9 ^= g5
g9 ^= g5;
// g2 ^= g9
g2 ^= g9;
// g9 ^= f30
g11 = f30;
g9 ^= g11;
// f26 ^= f9
g10 = f26;
g11 = f9;
g10 ^= g11;
f26 = g10;
// g6 ^= g3
g6 ^= g3;
// f7 ^= f28
g10 = f7;
g11 = f28;
g10 ^= g11;
f7 = g10;
// f7 ^= g3
g10 = f7;
g10 ^= g3;
f7 = g10;
// g8 ^= g7
g8 ^= g7;
// f31 ^= g0
g10 = f31;
g10 ^= g0;
f31 = g10;
// g0 ^= g5
g0 ^= g5;
// g5 ^= f4
g11 = f4;
g5 ^= g11;
// f4 ^= g3
g10 = f4;
g10 ^= g3;
f4 = g10;
// g5 ^= f19
g11 = f19;
g5 ^= g11;
// g5 ^= g4
g5 ^= g4;
// f11 ^= f1
g10 = f11;
g11 = f1;
g10 ^= g11;
f11 = g10;
// f30 ^= g3
g10 = f30;
g10 ^= g3;
f30 = g10;
// g2 ^= f17
g11 = f17;
g2 ^= g11;
// g3 ^= f18
g11 = f18;
g3 ^= g11;
// g3 ^= f9
g11 = f9;
g3 ^= g11;
// f14 ^= f28
g10 = f14;
g11 = f28;
g10 ^= g11;
f14 = g10;
// f23 ^= f24
g10 = f23;
g11 = f24;
g10 ^= g11;
f23 = g10;
// f9 ^= g8
g10 = f9;
g10 ^= g8;
f9 = g10;
// g8 ^= g4
g8 ^= g4;
// g2 ^= g9
g2 ^= g9;
// g9 ^= f28
g11 = f28;
g9 ^= g11;
// g4 ^= f13
g11 = f13;
g4 ^= g11;
// g4 ^= f10
g11 = f10;
g4 ^= g11;
// f12 ^= f16
g10 = f12;
g11 = f16;
g10 ^= g11;
f12 = g10;
// f13 ^= g7
g10 = f13;
g10 ^= g7;
f13 = g10;
// f13 ^= g4
g10 = f13;
g10 ^= g4;
f13 = g10;
// f14 ^= g0
g10 = f14;
g10 ^= g0;
f14 = g10;
// f10 ^= f26
g10 = f10;
g11 = f26;
g10 ^= g11;
f10 = g10;
// f26 ^= g6
g10 = f26;
g10 ^= g6;
f26 = g10;
// g9 ^= f30
g11 = f30;
g9 ^= g11;
// f9 ^= g8
g10 = f9;
g10 ^= g8;
f9 = g10;
// f31 ^= f19
g10 = f31;
g11 = f19;
g10 ^= g11;
f31 = g10;
// f21 ^= g6
g10 = f21;
g10 ^= g6;
f21 = g10;
// f14 ^= g5
g10 = f14;
g10 ^= g5;
f14 = g10;
// g2 ^= f4
g11 = f4;
g2 ^= g11;
// f1 ^= g1
g10 = f1;
g10 ^= g1;
f1 = g10;
// g6 ^= g7
g6 ^= g7;
// f10 ^= f3
g10 = f10;
g11 = f3;
g10 ^= g11;
f10 = g10;
// f17 ^= f16
g10 = f17;
g11 = f16;
g10 ^= g11;
f17 = g10;
// f28 ^= f30
g10 = f28;
g11 = f30;
g10 ^= g11;
f28 = g10;
// f12 ^= f13
g10 = f12;
g11 = f13;
g10 ^= g11;
f12 = g10;
// f21 ^= f23
g10 = f21;
g11 = f23;
g10 ^= g11;
f21 = g10;
// f3 ^= g0
g10 = f3;
g10 ^= g0;
f3 = g10;
// g0 ^= f1
g11 = f1;
g0 ^= g11;
out[0] = g0;
out[1] = f1;
out[2] = g1;
out[3] = f3;
out[4] = f4;
out[5] = g2;
out[6] = g3;
out[7] = f7;
out[8] = g4;
out[9] = f9;
out[10] = f10;
out[11] = f11;
out[12] = f12;
out[13] = f13;
out[14] = f14;
out[15] = g5;
out[16] = f16;
out[17] = f17;
out[18] = f18;
out[19] = f19;
out[20] = g6;
out[21] = f21;
out[22] = g7;
out[23] = f23;
out[24] = f24;
out[25] = g8;
out[26] = f26;
out[27] = f27;
out[28] = f28;
out[29] = g9;
out[30] = f30;
out[31] = f31;
}
#include "gft_mul_vi.h"
// x 0x9b170
void gft_mul_v19( sto_t * out , const sto_t * in ) {
const uint32_t * b = in;
uint32_t g0,g1,g2,g3, g4,g5,g6,g7, g8,g9,g10,g11;
uint32_t f0,f1,f2,f3, f4,f5,f6,f7, f8,f9,f10,f11;
uint32_t f12,f13,f14,f15, f16,f17,f18,f19, f20,f21,f22,f23, f24,f25,f26,f27, f28,f29,f30,f31;
//final state: [{4, 5, 6, 8, 11, 14, 15, 27, 31}, {4, 7, 9, 10, 11, 14, 26, 27, 30, 31}, {4, 5, 8, 13, 15, 24, 26, 28, 30}, {4, 9, 12, 13, 14, 15, 25, 27, 29, 31}, {0, 1, 3, 4, 5, 7, 8, 15, 24, 25, 28, 29, 31}, {0, 2, 3, 4, 6, 7, 9, 14, 15, 24, 28, 30, 31}, {0, 3, 4, 7, 10, 12, 14, 26, 27, 28, 31}, {1, 2, 3, 5, 6, 7, 11, 13, 15, 26, 29, 30, 31}, {0, 4, 6, 7, 8, 13, 15, 20, 21, 28, 29}, {1, 5, 6, 9, 12, 13, 14, 15, 20, 28}, {2, 5, 6, 7, 10, 12, 14, 15, 22, 23, 30, 31}, {3, 4, 5, 6, 11, 13, 14, 22, 30}, {0, 1, 2, 3, 5, 6, 7, 10, 12, 14, 16, 19, 20, 23, 24, 27, 28, 31}, {0, 2, 4, 5, 6, 11, 13, 15, 17, 18, 19, 21, 22, 23, 25, 26, 27, 29, 30, 31}, {1, 2, 5, 8, 9, 10, 11, 12, 13, 15, 16, 20, 24, 28}, {0, 1, 3, 4, 5, 8, 10, 12, 14, 15, 17, 21, 25, 29}, {0, 2, 3, 16, 18, 19, 20, 21, 22, 24, 27, 30, 31}, {1, 2, 17, 18, 20, 23, 25, 26, 27, 30}, {1, 2, 3, 17, 18, 19, 20, 21, 24, 29, 31}, {0, 1, 2, 16, 17, 18, 20, 25, 28, 29, 30, 31}, {4, 6, 7, 16, 17, 19, 21, 22, 24, 31}, {5, 6, 16, 18, 19, 20, 21, 23, 25, 30, 31}, {5, 6, 7, 16, 19, 20, 21, 22, 26, 28, 30}, {4, 5, 6, 17, 18, 19, 20, 23, 27, 29, 31}, {8, 10, 11, 16, 20, 22, 23, 26, 27, 29, 31}, {9, 10, 17, 21, 22, 26, 28, 29, 30, 31}, {9, 10, 11, 18, 21, 22, 23, 25, 27, 28, 30, 31}, {8, 9, 10, 19, 20, 21, 22, 24, 25, 26, 27, 29, 30}, {12, 14, 15, 16, 17, 18, 19, 21, 22, 23, 26, 31}, {13, 14, 16, 18, 20, 21, 22, 27, 30, 31}, {13, 14, 15, 17, 18, 21, 24, 25, 26, 27, 28, 30}, {12, 13, 14, 16, 17, 19, 20, 21, 24, 26, 29, 31}]
//i = 0
//better circuit found: #XORs = 255
//better circuit found: #XORs = 241
//better circuit found: #XORs = 240
//better circuit found: #XORs = 235
//better circuit found: #XORs = 234
//i = 50
//i = 100
//i = 150
//better circuit found: #XORs = 231
//i = 200
//i = 250
//i = 300
//i = 350
//i = 400
//i = 450
//i = 500
//i = 550
//i = 600
//better circuit found: #XORs = 230
//i = 650
//i = 700
//i = 750
//i = 800
//i = 850
//i = 900
//i = 950
//initial state: [{21, 30, 27, 29}, {2, 5, 23, 30}, {4, 15, 20, 22, 24, 26, 28, 31}, {0, 13, 14, 16, 21, 31}, {9, 12, 15, 21, 31}, {2, 5, 7, 8, 12, 24, 27}, {3, 7, 9, 12, 22, 30}, {5, 7, 11, 16, 20, 26}, {1, 4, 6, 10, 22, 25, 26, 28}, {0, 1, 5, 6, 16, 20, 28}, {2, 4, 10, 11, 22, 24}, {3, 6, 10, 13, 14, 23, 24}, {1, 2, 11, 14, 15, 25}, {1, 3, 4, 15, 22, 23}, {2, 3, 8, 11, 13, 16, 23}, {26, 7, 9, 10, 31}, {0, 2, 6, 10, 19, 23}, {1, 2, 20, 30, 31}, {0, 15, 17, 18, 19, 24, 28}, {11, 29, 31}, {2, 6, 8, 15, 23, 31}, {4, 16, 17, 25}, {0, 7, 11, 22, 28}, {8, 14, 15, 19, 20, 25, 26, 27}, {20, 7, 8, 10}, {0, 17, 27, 11}, {0, 18, 23, 25, 26, 29}, {16, 17, 23, 26, 28}, {3, 4, 13, 18, 21}, {1, 2, 5, 8, 13, 22}, {5, 8, 14, 16, 18, 29, 30}, {14, 15, 16, 23, 24, 31}]
//[2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 21, 22, 23, 24, 27, 30, 31, 0, 1, 4, 13, 19, 20, 25, 26, 28, 29]
//instuctions with recommended mapping to GP and FP registers:
//(cycle count without considering memory stores: 621)
g0 = b[21];
g1 = b[30];
g2 = b[27];
g3 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f0 = g0;
g0 = b[2];
g1 = b[5];
g2 = b[23];
g3 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f1 = g0;
g0 = b[4];
g1 = b[15];
g2 = b[20];
g3 = b[22];
g4 = b[24];
g5 = b[26];
g6 = b[28];
g7 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f2 = g0;
g0 = b[0];
g1 = b[13];
g2 = b[14];
g3 = b[16];
g4 = b[21];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f3 = g0;
g0 = b[9];
g1 = b[12];
g2 = b[15];
g3 = b[21];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f4 = g0;
g0 = b[2];
g1 = b[5];
g2 = b[7];
g3 = b[8];
g4 = b[12];
g5 = b[24];
g6 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f5 = g0;
g0 = b[3];
g1 = b[7];
g2 = b[9];
g3 = b[12];
g4 = b[22];
g5 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f6 = g0;
g0 = b[5];
g1 = b[7];
g2 = b[11];
g3 = b[16];
g4 = b[20];
g5 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f7 = g0;
g0 = b[1];
g1 = b[4];
g2 = b[6];
g3 = b[10];
g4 = b[22];
g5 = b[25];
g6 = b[26];
g7 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f8 = g0;
g0 = b[0];
g1 = b[1];
g2 = b[5];
g3 = b[6];
g4 = b[16];
g5 = b[20];
g6 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f9 = g0;
g0 = b[2];
g1 = b[4];
g2 = b[10];
g3 = b[11];
g4 = b[22];
g5 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f10 = g0;
g0 = b[3];
g1 = b[6];
g2 = b[10];
g3 = b[13];
g4 = b[14];
g5 = b[23];
g6 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f11 = g0;
g0 = b[1];
g1 = b[2];
g2 = b[11];
g3 = b[14];
g4 = b[15];
g5 = b[25];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f12 = g0;
g0 = b[1];
g1 = b[3];
g2 = b[4];
g3 = b[15];
g4 = b[22];
g5 = b[23];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f13 = g0;
g0 = b[2];
g1 = b[3];
g2 = b[8];
g3 = b[11];
g4 = b[13];
g5 = b[16];
g6 = b[23];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f14 = g0;
g0 = b[26];
g1 = b[7];
g2 = b[9];
g3 = b[10];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f15 = g0;
g0 = b[0];
g1 = b[2];
g2 = b[6];
g3 = b[10];
g4 = b[19];
g5 = b[23];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f16 = g0;
g0 = b[1];
g1 = b[2];
g2 = b[20];
g3 = b[30];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f17 = g0;
g0 = b[0];
g1 = b[15];
g2 = b[17];
g3 = b[18];
g4 = b[19];
g5 = b[24];
g6 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f18 = g0;
g0 = b[11];
g1 = b[29];
g2 = b[31];
g0 ^= g1;
g0 ^= g2;
f19 = g0;
g0 = b[2];
g1 = b[6];
g2 = b[8];
g3 = b[15];
g4 = b[23];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f20 = g0;
g0 = b[4];
g1 = b[16];
g2 = b[17];
g3 = b[25];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f21 = g0;
g0 = b[0];
g1 = b[7];
g2 = b[11];
g3 = b[22];
g4 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f22 = g0;
g0 = b[8];
g1 = b[14];
g2 = b[15];
g3 = b[19];
g4 = b[20];
g5 = b[25];
g6 = b[26];
g7 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f23 = g0;
g0 = b[20];
g1 = b[7];
g2 = b[8];
g3 = b[10];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f24 = g0;
g0 = b[0];
g1 = b[17];
g2 = b[27];
g3 = b[11];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f25 = g0;
g0 = b[0];
g1 = b[18];
g2 = b[23];
g3 = b[25];
g4 = b[26];
g5 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f26 = g0;
g0 = b[16];
g1 = b[17];
g2 = b[23];
g3 = b[26];
g4 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f27 = g0;
g0 = b[3];
g1 = b[4];
g2 = b[13];
g3 = b[18];
g4 = b[21];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f28 = g0;
g0 = b[1];
g1 = b[2];
g2 = b[5];
g3 = b[8];
g4 = b[13];
g5 = b[22];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f29 = g0;
g0 = b[5];
g1 = b[8];
g2 = b[14];
g3 = b[16];
g4 = b[18];
g5 = b[29];
g6 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f30 = g0;
g0 = b[14];
g1 = b[15];
g2 = b[16];
g3 = b[23];
g4 = b[24];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f31 = g0;
g0 = f0;
g1 = f1;
g2 = f4;
g3 = f13;
g4 = f19;
g5 = f20;
g6 = f25;
g7 = f26;
g8 = f28;
g9 = f29;
// g3 ^= g8
g3 ^= g8;
// g3 ^= g7
g3 ^= g7;
// g7 ^= g4
g7 ^= g4;
// g9 ^= f17
g11 = f17;
g9 ^= g11;
// f17 ^= g4
g10 = f17;
g10 ^= g4;
f17 = g10;
// g4 ^= g6
g4 ^= g6;
// g6 ^= f22
g11 = f22;
g6 ^= g11;
// f10 ^= g1
g10 = f10;
g10 ^= g1;
f10 = g10;
// g1 ^= g5
g1 ^= g5;
// g1 ^= g2
g1 ^= g2;
// g6 ^= f15
g11 = f15;
g6 ^= g11;
// f15 ^= g2
g10 = f15;
g10 ^= g2;
f15 = g10;
// f18 ^= f22
g10 = f18;
g11 = f22;
g10 ^= g11;
f18 = g10;
// f8 ^= g3
g10 = f8;
g10 ^= g3;
f8 = g10;
// f16 ^= f11
g10 = f16;
g11 = f11;
g10 ^= g11;
f16 = g10;
// f2 ^= g9
g10 = f2;
g10 ^= g9;
f2 = g10;
// f3 ^= g2
g10 = f3;
g10 ^= g2;
f3 = g10;
// g9 ^= f30
g11 = f30;
g9 ^= g11;
// g5 ^= f14
g11 = f14;
g5 ^= g11;
// g2 ^= f6
g11 = f6;
g2 ^= g11;
// f6 ^= f22
g10 = f6;
g11 = f22;
g10 ^= g11;
f6 = g10;
// f7 ^= g5
g10 = f7;
g10 ^= g5;
f7 = g10;
// g5 ^= g8
g5 ^= g8;
// f8 ^= f24
g10 = f8;
g11 = f24;
g10 ^= g11;
f8 = g10;
// f24 ^= f22
g10 = f24;
g11 = f22;
g10 ^= g11;
f24 = g10;
// f22 ^= g7
g10 = f22;
g10 ^= g7;
f22 = g10;
// g7 ^= g4
g7 ^= g4;
// f9 ^= f3
g10 = f9;
g11 = f3;
g10 ^= g11;
f9 = g10;
// f3 ^= f21
g10 = f3;
g11 = f21;
g10 ^= g11;
f3 = g10;
// f3 ^= g4
g10 = f3;
g10 ^= g4;
f3 = g10;
// g4 ^= f27
g11 = f27;
g4 ^= g11;
// f27 ^= f31
g10 = f27;
g11 = f31;
g10 ^= g11;
f27 = g10;
// g6 ^= g0
g6 ^= g0;
// f12 ^= f31
g10 = f12;
g11 = f31;
g10 ^= g11;
f12 = g10;
// f31 ^= g9
g10 = f31;
g10 ^= g9;
f31 = g10;
// g9 ^= g0
g9 ^= g0;
// f21 ^= g0
g10 = f21;
g10 ^= g0;
f21 = g10;
// g0 ^= f30
g11 = f30;
g0 ^= g11;
// g0 ^= g5
g0 ^= g5;
// g5 ^= f18
g11 = f18;
g5 ^= g11;
// f18 ^= g2
g10 = f18;
g10 ^= g2;
f18 = g10;
// g1 ^= f15
g11 = f15;
g1 ^= g11;
// g1 ^= g0
g1 ^= g0;
// f14 ^= f11
g10 = f14;
g11 = f11;
g10 ^= g11;
f14 = g10;
// g8 ^= f11
g11 = f11;
g8 ^= g11;
// g8 ^= f15
g11 = f15;
g8 ^= g11;
// f15 ^= f27
g10 = f15;
g11 = f27;
g10 ^= g11;
f15 = g10;
// f27 ^= f23
g10 = f27;
g11 = f23;
g10 ^= g11;
f27 = g10;
// f23 ^= g0
g10 = f23;
g10 ^= g0;
f23 = g10;
// f11 ^= f10
g10 = f11;
g11 = f10;
g10 ^= g11;
f11 = g10;
// f12 ^= f23
g10 = f12;
g11 = f23;
g10 ^= g11;
f12 = g10;
// f23 ^= g7
g10 = f23;
g10 ^= g7;
f23 = g10;
// g2 ^= g3
g2 ^= g3;
// g3 ^= f17
g11 = f17;
g3 ^= g11;
// f18 ^= f17
g10 = f18;
g11 = f17;
g10 ^= g11;
f18 = g10;
// f30 ^= f21
g10 = f30;
g11 = f21;
g10 ^= g11;
f30 = g10;
// g8 ^= g5
g8 ^= g5;
// f5 ^= g0
g10 = f5;
g10 ^= g0;
f5 = g10;
// f10 ^= f5
g10 = f10;
g11 = f5;
g10 ^= g11;
f10 = g10;
// f5 ^= f6
g10 = f5;
g11 = f6;
g10 ^= g11;
f5 = g10;
// g2 ^= f2
g11 = f2;
g2 ^= g11;
// f30 ^= f2
g10 = f30;
g11 = f2;
g10 ^= g11;
f30 = g10;
// f21 ^= f23
g10 = f21;
g11 = f23;
g10 ^= g11;
f21 = g10;
// f22 ^= f21
g10 = f22;
g11 = f21;
g10 ^= g11;
f22 = g10;
// f7 ^= f17
g10 = f7;
g11 = f17;
g10 ^= g11;
f7 = g10;
// f17 ^= g7
g10 = f17;
g10 ^= g7;
f17 = g10;
// g7 ^= g6
g7 ^= g6;
// f24 ^= g4
g10 = f24;
g10 ^= g4;
f24 = g10;
// g4 ^= f17
g11 = f17;
g4 ^= g11;
// f27 ^= g6
g10 = f27;
g10 ^= g6;
f27 = g10;
// f6 ^= g1
g10 = f6;
g10 ^= g1;
f6 = g10;
// f31 ^= g8
g10 = f31;
g10 ^= g8;
f31 = g10;
// f15 ^= g2
g10 = f15;
g10 ^= g2;
f15 = g10;
// f14 ^= f9
g10 = f14;
g11 = f9;
g10 ^= g11;
f14 = g10;
// f16 ^= g9
g10 = f16;
g10 ^= g9;
f16 = g10;
// f12 ^= f6
g10 = f12;
g11 = f6;
g10 ^= g11;
f12 = g10;
// g3 ^= f23
g11 = f23;
g3 ^= g11;
out[0] = g0;
out[1] = g1;
out[2] = f2;
out[3] = f3;
out[4] = g2;
out[5] = f5;
out[6] = f6;
out[7] = f7;
out[8] = f8;
out[9] = f9;
out[10] = f10;
out[11] = f11;
out[12] = f12;
out[13] = g3;
out[14] = f14;
out[15] = f15;
out[16] = f16;
out[17] = f17;
out[18] = f18;
out[19] = g4;
out[20] = g5;
out[21] = f21;
out[22] = f22;
out[23] = f23;
out[24] = f24;
out[25] = g6;
out[26] = g7;
out[27] = f27;
out[28] = g8;
out[29] = g9;
out[30] = f30;
out[31] = f31;
}
#include "gft_mul_vi.h"
// x 0x13572f
void gft_mul_v20( sto_t * out , const sto_t * in ) {
const uint32_t * b = in;
uint32_t g0,g1,g2,g3, g4,g5,g6,g7, g8,g9,g10,g11;
uint32_t f0,f1,f2,f3, f4,f5,f6,f7, f8,f9,f10,f11;
uint32_t f12,f13,f14,f15, f16,f17,f18,f19, f20,f21,f22,f23, f24,f25,f26,f27, f28,f29,f30,f31;
//final state: [{0, 1, 2, 6, 11, 13, 15, 24, 25, 27, 28, 30}, {0, 3, 7, 10, 11, 12, 13, 14, 15, 24, 26, 27, 29, 31}, {0, 1, 4, 5, 6, 7, 8, 10, 12, 14, 15, 24, 27, 28, 29, 31}, {0, 4, 6, 9, 11, 13, 14, 25, 26, 27, 28, 30, 31}, {1, 4, 6, 10, 14, 15, 26, 27, 28, 29, 30}, {0, 1, 5, 7, 11, 14, 26, 28, 31}, {3, 4, 5, 7, 8, 9, 10, 11, 13, 15, 25, 27, 28, 29}, {2, 3, 4, 6, 7, 8, 10, 12, 13, 14, 15, 24, 25, 26, 27, 28}, {0, 1, 3, 4, 5, 10, 11, 12, 13, 14, 16, 18, 21, 23, 24, 26, 29, 31}, {0, 2, 3, 4, 10, 12, 15, 17, 19, 20, 21, 22, 23, 25, 27, 28, 29, 30, 31}, {0, 3, 6, 7, 9, 11, 12, 13, 16, 17, 19, 20, 22, 23, 24, 25, 27, 28, 30, 31}, {1, 2, 3, 6, 8, 9, 10, 11, 12, 16, 18, 19, 21, 22, 24, 26, 27, 29, 30}, {0, 3, 5, 8, 9, 11, 12, 13, 14, 18, 20, 26, 28}, {1, 2, 3, 4, 5, 8, 10, 11, 12, 15, 19, 21, 27, 29}, {0, 7, 8, 11, 12, 13, 16, 17, 18, 19, 22, 24, 25, 26, 27, 30}, {1, 6, 7, 9, 10, 11, 12, 16, 18, 23, 24, 26, 31}, {0, 1, 6, 7, 18, 23, 27, 29, 31}, {0, 6, 19, 22, 23, 26, 27, 28, 29, 30, 31}, {2, 3, 5, 7, 16, 17, 18, 19, 20, 22, 24, 26, 28, 30, 31}, {2, 4, 5, 6, 7, 16, 18, 21, 23, 25, 27, 29, 30}, {0, 5, 16, 17, 20, 21, 22, 26, 30, 31}, {1, 4, 5, 16, 20, 23, 27, 30}, {2, 7, 18, 19, 20, 21, 24, 25, 26, 27, 29, 31}, {3, 6, 7, 18, 20, 24, 26, 28, 29, 30, 31}, {8, 9, 14, 15, 16, 17, 19, 20, 21, 24, 25, 26, 27, 28, 29, 31}, {8, 14, 16, 18, 19, 20, 24, 26, 28, 30, 31}, {10, 11, 13, 15, 16, 19, 22, 23, 25, 26, 28, 31}, {10, 12, 13, 14, 15, 17, 18, 19, 22, 24, 25, 27, 29, 30, 31}, {8, 13, 16, 19, 21, 25, 27, 28, 30}, {9, 12, 13, 17, 18, 19, 20, 21, 24, 25, 26, 27, 29, 31}, {10, 15, 16, 23, 24, 26, 27, 28, 29, 31}, {11, 14, 15, 17, 22, 23, 25, 26, 28, 30, 31}]
//i = 0
//better circuit found: #XORs = 264
//better circuit found: #XORs = 260
//better circuit found: #XORs = 250
//better circuit found: #XORs = 246
//better circuit found: #XORs = 239
//i = 50
//i = 100
//i = 150
//i = 200
//i = 250
//i = 300
//i = 350
//i = 400
//i = 450
//i = 500
//i = 550
//i = 600
//i = 650
//i = 700
//i = 750
//i = 800
//i = 850
//i = 900
//i = 950
//initial state: [{4, 8, 11, 18, 24, 29}, {3, 7, 12, 14, 15, 27}, {11, 12, 19, 24, 26, 30, 31}, {2, 6, 7, 8, 23, 26}, {2, 4, 14, 25, 31}, {26, 10, 27, 28, 31}, {1, 17, 19, 21, 25, 28}, {0, 4, 8, 13, 18, 27, 28}, {7, 15, 18, 20, 21, 30}, {6, 7, 17, 20, 21, 28}, {3, 6, 8, 9, 10, 18, 20, 23, 27}, {4, 13, 15, 16, 20, 21}, {0, 6, 10, 13, 30, 31}, {0, 5, 14, 20, 21, 26, 27}, {6, 8, 13, 14, 24, 27}, {9, 12, 13, 16, 27, 31}, {0, 8, 9, 18, 22, 30}, {0, 7, 9, 14, 31}, {2, 5, 6, 16, 17, 19, 22, 29}, {1, 2, 6, 15, 25, 29, 30}, {1, 6, 22, 24, 27, 31}, {1, 4, 5, 16, 20, 23, 27, 30}, {0, 5, 7, 8, 11, 19}, {16, 7, 30, 8, 9, 15}, {7, 9, 17, 20, 25, 27, 29}, {3, 6, 7, 8, 14, 16, 19, 29}, {10, 13, 14, 16, 17, 19, 30}, {5, 10, 11, 12, 14, 23, 30}, {1, 8, 10, 14, 19, 27}, {2, 7, 9, 12, 13, 17}, {15, 16, 23, 24, 29}, {3, 5, 7, 14, 17, 22, 25}]
//[2, 3, 4, 6, 7, 8, 9, 11, 12, 15, 18, 19, 20, 21, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1, 5, 10, 13, 14, 16, 17, 22, 23]
//instuctions with recommended mapping to GP and FP registers:
//(cycle count without considering memory stores: 626)
g0 = b[4];
g1 = b[8];
g2 = b[11];
g3 = b[18];
g4 = b[24];
g5 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f0 = g0;
g0 = b[3];
g1 = b[7];
g2 = b[12];
g3 = b[14];
g4 = b[15];
g5 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f1 = g0;
g0 = b[11];
g1 = b[12];
g2 = b[19];
g3 = b[24];
g4 = b[26];
g5 = b[30];
g6 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f2 = g0;
g0 = b[2];
g1 = b[6];
g2 = b[7];
g3 = b[8];
g4 = b[23];
g5 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f3 = g0;
g0 = b[2];
g1 = b[4];
g2 = b[14];
g3 = b[25];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f4 = g0;
g0 = b[26];
g1 = b[10];
g2 = b[27];
g3 = b[28];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f5 = g0;
g0 = b[1];
g1 = b[17];
g2 = b[19];
g3 = b[21];
g4 = b[25];
g5 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f6 = g0;
g0 = b[0];
g1 = b[4];
g2 = b[8];
g3 = b[13];
g4 = b[18];
g5 = b[27];
g6 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f7 = g0;
g0 = b[7];
g1 = b[15];
g2 = b[18];
g3 = b[20];
g4 = b[21];
g5 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f8 = g0;
g0 = b[6];
g1 = b[7];
g2 = b[17];
g3 = b[20];
g4 = b[21];
g5 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f9 = g0;
g0 = b[3];
g1 = b[6];
g2 = b[8];
g3 = b[9];
g4 = b[10];
g5 = b[18];
g6 = b[20];
g7 = b[23];
g8 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
g0 ^= g8;
f10 = g0;
g0 = b[4];
g1 = b[13];
g2 = b[15];
g3 = b[16];
g4 = b[20];
g5 = b[21];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f11 = g0;
g0 = b[0];
g1 = b[6];
g2 = b[10];
g3 = b[13];
g4 = b[30];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f12 = g0;
g0 = b[0];
g1 = b[5];
g2 = b[14];
g3 = b[20];
g4 = b[21];
g5 = b[26];
g6 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f13 = g0;
g0 = b[6];
g1 = b[8];
g2 = b[13];
g3 = b[14];
g4 = b[24];
g5 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f14 = g0;
g0 = b[9];
g1 = b[12];
g2 = b[13];
g3 = b[16];
g4 = b[27];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f15 = g0;
g0 = b[0];
g1 = b[8];
g2 = b[9];
g3 = b[18];
g4 = b[22];
g5 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f16 = g0;
g0 = b[0];
g1 = b[7];
g2 = b[9];
g3 = b[14];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f17 = g0;
g0 = b[2];
g1 = b[5];
g2 = b[6];
g3 = b[16];
g4 = b[17];
g5 = b[19];
g6 = b[22];
g7 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f18 = g0;
g0 = b[1];
g1 = b[2];
g2 = b[6];
g3 = b[15];
g4 = b[25];
g5 = b[29];
g6 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f19 = g0;
g0 = b[1];
g1 = b[6];
g2 = b[22];
g3 = b[24];
g4 = b[27];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f20 = g0;
g0 = b[1];
g1 = b[4];
g2 = b[5];
g3 = b[16];
g4 = b[20];
g5 = b[23];
g6 = b[27];
g7 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f21 = g0;
g0 = b[0];
g1 = b[5];
g2 = b[7];
g3 = b[8];
g4 = b[11];
g5 = b[19];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f22 = g0;
g0 = b[16];
g1 = b[7];
g2 = b[30];
g3 = b[8];
g4 = b[9];
g5 = b[15];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f23 = g0;
g0 = b[7];
g1 = b[9];
g2 = b[17];
g3 = b[20];
g4 = b[25];
g5 = b[27];
g6 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f24 = g0;
g0 = b[3];
g1 = b[6];
g2 = b[7];
g3 = b[8];
g4 = b[14];
g5 = b[16];
g6 = b[19];
g7 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f25 = g0;
g0 = b[10];
g1 = b[13];
g2 = b[14];
g3 = b[16];
g4 = b[17];
g5 = b[19];
g6 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f26 = g0;
g0 = b[5];
g1 = b[10];
g2 = b[11];
g3 = b[12];
g4 = b[14];
g5 = b[23];
g6 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f27 = g0;
g0 = b[1];
g1 = b[8];
g2 = b[10];
g3 = b[14];
g4 = b[19];
g5 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f28 = g0;
g0 = b[2];
g1 = b[7];
g2 = b[9];
g3 = b[12];
g4 = b[13];
g5 = b[17];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f29 = g0;
g0 = b[15];
g1 = b[16];
g2 = b[23];
g3 = b[24];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f30 = g0;
g0 = b[3];
g1 = b[5];
g2 = b[7];
g3 = b[14];
g4 = b[17];
g5 = b[22];
g6 = b[25];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f31 = g0;
g0 = f0;
g1 = f1;
g2 = f5;
g3 = f10;
g4 = f13;
g5 = f14;
g6 = f16;
g7 = f17;
g8 = f22;
g9 = f23;
// f15 ^= g2
g10 = f15;
g10 ^= g2;
f15 = g10;
// g9 ^= f30
g11 = f30;
g9 ^= g11;
// f25 ^= g9
g10 = f25;
g10 ^= g9;
f25 = g10;
// f3 ^= g5
g10 = f3;
g10 ^= g5;
f3 = g10;
// g4 ^= g5
g4 ^= g5;
// g5 ^= g0
g5 ^= g0;
// g5 ^= f4
g11 = f4;
g5 ^= g11;
// g3 ^= g2
g3 ^= g2;
// g0 ^= f7
g11 = f7;
g0 ^= g11;
// g7 ^= g6
g7 ^= g6;
// f11 ^= g4
g10 = f11;
g10 ^= g4;
f11 = g10;
// f11 ^= g6
g10 = f11;
g10 ^= g6;
f11 = g10;
// g6 ^= g9
g6 ^= g9;
// f4 ^= g2
g10 = f4;
g10 ^= g2;
f4 = g10;
// f9 ^= g1
g10 = f9;
g10 ^= g1;
f9 = g10;
// g1 ^= g2
g1 ^= g2;
// f31 ^= f27
g10 = f31;
g11 = f27;
g10 ^= g11;
f31 = g10;
// f12 ^= f27
g10 = f12;
g11 = f27;
g10 ^= g11;
f12 = g10;
// f27 ^= f30
g10 = f27;
g11 = f30;
g10 ^= g11;
f27 = g10;
// f30 ^= g2
g10 = f30;
g10 ^= g2;
f30 = g10;
// g2 ^= f28
g11 = f28;
g2 ^= g11;
// f28 ^= f26
g10 = f28;
g11 = f26;
g10 ^= g11;
f28 = g10;
// f31 ^= g1
g10 = f31;
g10 ^= g1;
f31 = g10;
// g7 ^= g2
g7 ^= g2;
// f3 ^= g9
g10 = f3;
g10 ^= g9;
f3 = g10;
// g6 ^= f20
g11 = f20;
g6 ^= g11;
// f20 ^= f28
g10 = f20;
g11 = f28;
g10 ^= g11;
f20 = g10;
// f20 ^= g4
g10 = f20;
g10 ^= g4;
f20 = g10;
// g2 ^= g8
g2 ^= g8;
// f2 ^= g8
g10 = f2;
g10 ^= g8;
f2 = g10;
// g8 ^= g4
g8 ^= g4;
// g4 ^= g0
g4 ^= g0;
// f24 ^= f8
g10 = f24;
g11 = f8;
g10 ^= g11;
f24 = g10;
// f25 ^= g3
g10 = f25;
g10 ^= g3;
f25 = g10;
// f9 ^= f4
g10 = f9;
g11 = f4;
g10 ^= g11;
f9 = g10;
// g4 ^= f6
g11 = f6;
g4 ^= g11;
// g4 ^= f9
g11 = f9;
g4 ^= g11;
// f7 ^= g5
g10 = f7;
g10 ^= g5;
f7 = g10;
// g8 ^= g5
g8 ^= g5;
// g5 ^= f18
g11 = f18;
g5 ^= g11;
// f28 ^= f6
g10 = f28;
g11 = f6;
g10 ^= g11;
f28 = g10;
// f15 ^= g0
g10 = f15;
g10 ^= g0;
f15 = g10;
// f15 ^= g6
g10 = f15;
g10 ^= g6;
f15 = g10;
// g7 ^= g6
g7 ^= g6;
// f4 ^= f19
g10 = f4;
g11 = f19;
g10 ^= g11;
f4 = g10;
// g9 ^= g3
g9 ^= g3;
// f3 ^= f7
g10 = f3;
g11 = f7;
g10 ^= g11;
f3 = g10;
// f6 ^= f29
g10 = f6;
g11 = f29;
g10 ^= g11;
f6 = g10;
// f6 ^= g4
g10 = f6;
g10 ^= g4;
f6 = g10;
// f12 ^= g3
g10 = f12;
g10 ^= g3;
f12 = g10;
// f8 ^= f21
g10 = f8;
g11 = f21;
g10 ^= g11;
f8 = g10;
// g1 ^= g0
g1 ^= g0;
// g0 ^= f19
g11 = f19;
g0 ^= g11;
// f27 ^= g5
g10 = f27;
g10 ^= g5;
f27 = g10;
// f26 ^= f31
g10 = f26;
g11 = f31;
g10 ^= g11;
f26 = g10;
// g5 ^= f2
g11 = f2;
g5 ^= g11;
// f7 ^= g1
g10 = f7;
g10 ^= g1;
f7 = g10;
// f19 ^= f8
g10 = f19;
g11 = f8;
g10 ^= g11;
f19 = g10;
// f24 ^= f25
g10 = f24;
g11 = f25;
g10 ^= g11;
f24 = g10;
// f2 ^= f4
g10 = f2;
g11 = f4;
g10 ^= g11;
f2 = g10;
// f18 ^= g9
g10 = f18;
g10 ^= g9;
f18 = g10;
// f9 ^= g7
g10 = f9;
g10 ^= g7;
f9 = g10;
// f8 ^= g1
g10 = f8;
g10 ^= g1;
f8 = g10;
// f11 ^= g4
g10 = f11;
g10 ^= g4;
f11 = g10;
// f29 ^= g8
g10 = f29;
g10 ^= g8;
f29 = g10;
// g3 ^= g5
g3 ^= g5;
out[0] = g0;
out[1] = g1;
out[2] = f2;
out[3] = f3;
out[4] = f4;
out[5] = g2;
out[6] = f6;
out[7] = f7;
out[8] = f8;
out[9] = f9;
out[10] = g3;
out[11] = f11;
out[12] = f12;
out[13] = g4;
out[14] = g5;
out[15] = f15;
out[16] = g6;
out[17] = g7;
out[18] = f18;
out[19] = f19;
out[20] = f20;
out[21] = f21;
out[22] = g8;
out[23] = g9;
out[24] = f24;
out[25] = f25;
out[26] = f26;
out[27] = f27;
out[28] = f28;
out[29] = f29;
out[30] = f30;
out[31] = f31;
}
#include "gft_mul_vi.h"
// x 0x2c7d24
void gft_mul_v21( sto_t * out , const sto_t * in ) {
const uint32_t * b = in;
uint32_t g0,g1,g2,g3, g4,g5,g6,g7, g8,g9,g10,g11;
uint32_t f0,f1,f2,f3, f4,f5,f6,f7, f8,f9,f10,f11;
uint32_t f12,f13,f14,f15, f16,f17,f18,f19, f20,f21,f22,f23, f24,f25,f26,f27, f28,f29,f30,f31;
//final state: [{3, 6, 9, 14, 15, 26, 27, 28, 29, 31}, {2, 3, 7, 8, 9, 14, 26, 28, 30, 31}, {0, 2, 4, 5, 6, 7, 11, 13, 15, 25, 27, 28, 31}, {1, 3, 4, 6, 10, 11, 12, 13, 14, 15, 24, 25, 26, 27, 29, 30, 31}, {1, 5, 7, 8, 12, 13, 25, 27, 29, 30}, {0, 1, 4, 5, 6, 7, 9, 12, 24, 25, 26, 27, 28, 29, 31}, {3, 4, 6, 7, 10, 14, 15, 24, 26, 27, 28, 29, 30}, {2, 3, 5, 6, 11, 14, 25, 26, 28, 31}, {0, 2, 4, 5, 6, 8, 10, 11, 12, 13, 17, 19, 20, 25, 27, 28}, {1, 3, 4, 7, 9, 10, 12, 16, 17, 18, 19, 21, 24, 25, 26, 27, 29}, {0, 1, 3, 4, 5, 9, 10, 11, 14, 15, 16, 18, 19, 22, 24, 26, 27, 30}, {0, 2, 3, 4, 8, 9, 10, 14, 17, 18, 23, 25, 26, 31}, {0, 1, 3, 5, 6, 7, 8, 11, 14, 17, 18, 19, 22, 25, 26, 27, 30}, {0, 2, 3, 4, 5, 6, 9, 10, 11, 15, 16, 17, 18, 23, 24, 25, 26, 31}, {0, 3, 5, 8, 12, 13, 14, 15, 17, 20, 21, 22, 23, 25, 28, 29, 30, 31}, {1, 2, 3, 4, 5, 9, 12, 14, 16, 17, 20, 22, 24, 25, 28, 30}, {2, 6, 18, 19, 25, 30, 31}, {3, 7, 18, 24, 25, 30}, {0, 1, 2, 3, 4, 5, 6, 7, 17, 19, 27, 29, 31}, {0, 2, 4, 6, 16, 17, 18, 19, 26, 27, 28, 29, 30, 31}, {1, 5, 6, 22, 23, 24, 28, 29}, {0, 1, 4, 5, 7, 22, 25, 28}, {3, 4, 5, 6, 21, 23, 26, 30, 31}, {2, 3, 4, 7, 20, 21, 22, 23, 27, 30}, {10, 14, 16, 18, 20, 21, 22, 24, 27, 28, 29, 30}, {11, 15, 17, 19, 20, 23, 25, 26, 27, 28, 31}, {8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 24, 28, 29}, {8, 10, 12, 14, 16, 18, 19, 20, 25, 28}, {9, 13, 14, 16, 17, 19, 21, 22, 23, 24, 25, 27, 29}, {8, 9, 12, 13, 15, 16, 18, 19, 20, 21, 22, 24, 26, 27, 28, 29}, {11, 12, 13, 14, 16, 19, 21, 24, 27, 31}, {10, 11, 12, 15, 17, 18, 19, 20, 21, 25, 26, 27, 30, 31}]
//i = 0
//better circuit found: #XORs = 243
//better circuit found: #XORs = 242
//better circuit found: #XORs = 241
//i = 50
//better circuit found: #XORs = 240
//better circuit found: #XORs = 233
//i = 100
//i = 150
//better circuit found: #XORs = 232
//i = 200
//i = 250
//i = 300
//i = 350
//better circuit found: #XORs = 228
//i = 400
//i = 450
//i = 500
//i = 550
//i = 600
//i = 650
//i = 700
//i = 750
//i = 800
//i = 850
//i = 900
//i = 950
//initial state: [{3, 20, 14, 26, 30}, {7, 15, 20, 25, 30}, {0, 2, 4, 5, 11, 12, 19}, {3, 7, 11, 24, 25, 29}, {1, 6, 11, 13, 22, 23}, {6, 7, 24, 31}, {4, 6, 9, 10, 30}, {7, 23, 26}, {3, 8, 10, 20, 29}, {3, 11, 14, 23, 28}, {6, 8, 20, 27, 28}, {0, 4, 7, 12, 17, 21, 25}, {0, 1, 3, 9, 10, 11, 19}, {5, 11, 9, 27, 28, 15}, {4, 6, 13, 17, 20, 22, 24}, {9, 12, 29, 30, 15}, {2, 6, 18, 28, 31}, {18, 11, 29, 30}, {5, 7, 13, 18}, {7, 16, 17, 27, 28, 31}, {12, 17, 21, 26, 29, 31}, {5, 17, 19, 21, 22}, {2, 3, 4, 21, 25, 30}, {23, 22, 27, 30, 15}, {16, 20, 14, 24, 9}, {7, 12, 14, 22, 29}, {10, 11, 14, 17, 18, 22, 26, 27}, {13, 25, 28}, {3, 5, 9, 17, 18, 31}, {19, 30, 13}, {1, 28, 19, 12}, {10, 12, 18, 21, 23, 28, 30}]
//[0, 2, 3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20, 21, 22, 23, 26, 30, 31, 1, 5, 7, 15, 18, 24, 25, 27, 28, 29]
//instuctions with recommended mapping to GP and FP registers:
//(cycle count without considering memory stores: 624)
g0 = b[3];
g1 = b[20];
g2 = b[14];
g3 = b[26];
g4 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f0 = g0;
g0 = b[7];
g1 = b[15];
g2 = b[20];
g3 = b[25];
g4 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f1 = g0;
g0 = b[0];
g1 = b[2];
g2 = b[4];
g3 = b[5];
g4 = b[11];
g5 = b[12];
g6 = b[19];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f2 = g0;
g0 = b[3];
g1 = b[7];
g2 = b[11];
g3 = b[24];
g4 = b[25];
g5 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f3 = g0;
g0 = b[1];
g1 = b[6];
g2 = b[11];
g3 = b[13];
g4 = b[22];
g5 = b[23];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f4 = g0;
g0 = b[6];
g1 = b[7];
g2 = b[24];
g3 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f5 = g0;
g0 = b[4];
g1 = b[6];
g2 = b[9];
g3 = b[10];
g4 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f6 = g0;
g0 = b[7];
g1 = b[23];
g2 = b[26];
g0 ^= g1;
g0 ^= g2;
f7 = g0;
g0 = b[3];
g1 = b[8];
g2 = b[10];
g3 = b[20];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f8 = g0;
g0 = b[3];
g1 = b[11];
g2 = b[14];
g3 = b[23];
g4 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f9 = g0;
g0 = b[6];
g1 = b[8];
g2 = b[20];
g3 = b[27];
g4 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f10 = g0;
g0 = b[0];
g1 = b[4];
g2 = b[7];
g3 = b[12];
g4 = b[17];
g5 = b[21];
g6 = b[25];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f11 = g0;
g0 = b[0];
g1 = b[1];
g2 = b[3];
g3 = b[9];
g4 = b[10];
g5 = b[11];
g6 = b[19];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f12 = g0;
g0 = b[5];
g1 = b[11];
g2 = b[9];
g3 = b[27];
g4 = b[28];
g5 = b[15];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f13 = g0;
g0 = b[4];
g1 = b[6];
g2 = b[13];
g3 = b[17];
g4 = b[20];
g5 = b[22];
g6 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f14 = g0;
g0 = b[9];
g1 = b[12];
g2 = b[29];
g3 = b[30];
g4 = b[15];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f15 = g0;
g0 = b[2];
g1 = b[6];
g2 = b[18];
g3 = b[28];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f16 = g0;
g0 = b[18];
g1 = b[11];
g2 = b[29];
g3 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f17 = g0;
g0 = b[5];
g1 = b[7];
g2 = b[13];
g3 = b[18];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f18 = g0;
g0 = b[7];
g1 = b[16];
g2 = b[17];
g3 = b[27];
g4 = b[28];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f19 = g0;
g0 = b[12];
g1 = b[17];
g2 = b[21];
g3 = b[26];
g4 = b[29];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f20 = g0;
g0 = b[5];
g1 = b[17];
g2 = b[19];
g3 = b[21];
g4 = b[22];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f21 = g0;
g0 = b[2];
g1 = b[3];
g2 = b[4];
g3 = b[21];
g4 = b[25];
g5 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f22 = g0;
g0 = b[23];
g1 = b[22];
g2 = b[27];
g3 = b[30];
g4 = b[15];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f23 = g0;
g0 = b[16];
g1 = b[20];
g2 = b[14];
g3 = b[24];
g4 = b[9];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f24 = g0;
g0 = b[7];
g1 = b[12];
g2 = b[14];
g3 = b[22];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f25 = g0;
g0 = b[10];
g1 = b[11];
g2 = b[14];
g3 = b[17];
g4 = b[18];
g5 = b[22];
g6 = b[26];
g7 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f26 = g0;
g0 = b[13];
g1 = b[25];
g2 = b[28];
g0 ^= g1;
g0 ^= g2;
f27 = g0;
g0 = b[3];
g1 = b[5];
g2 = b[9];
g3 = b[17];
g4 = b[18];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f28 = g0;
g0 = b[19];
g1 = b[30];
g2 = b[13];
g0 ^= g1;
g0 ^= g2;
f29 = g0;
g0 = b[1];
g1 = b[28];
g2 = b[19];
g3 = b[12];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f30 = g0;
g0 = b[10];
g1 = b[12];
g2 = b[18];
g3 = b[21];
g4 = b[23];
g5 = b[28];
g6 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f31 = g0;
g0 = f1;
g1 = f5;
g2 = f7;
g3 = f15;
g4 = f18;
g5 = f24;
g6 = f25;
g7 = f27;
g8 = f28;
g9 = f29;
// f21 ^= f30
g10 = f21;
g11 = f30;
g10 ^= g11;
f21 = g10;
// f30 ^= g6
g10 = f30;
g10 ^= g6;
f30 = g10;
// g6 ^= g2
g6 ^= g2;
// f6 ^= g1
g10 = f6;
g10 ^= g1;
f6 = g10;
// g1 ^= g2
g1 ^= g2;
// g2 ^= g4
g2 ^= g4;
// g2 ^= g7
g2 ^= g7;
// f2 ^= g9
g10 = f2;
g10 ^= g9;
f2 = g10;
// g7 ^= g9
g7 ^= g9;
// f13 ^= f10
g10 = f13;
g11 = f10;
g10 ^= g11;
f13 = g10;
// g4 ^= g9
g4 ^= g9;
// g9 ^= f0
g11 = f0;
g9 ^= g11;
// g9 ^= f8
g11 = f8;
g9 ^= g11;
// f10 ^= f19
g10 = f10;
g11 = f19;
g10 ^= g11;
f10 = g10;
// f19 ^= f20
g10 = f19;
g11 = f20;
g10 ^= g11;
f19 = g10;
// f20 ^= g1
g10 = f20;
g10 ^= g1;
f20 = g10;
// g1 ^= f4
g11 = f4;
g1 ^= g11;
// f4 ^= f23
g10 = f4;
g11 = f23;
g10 ^= g11;
f4 = g10;
// g4 ^= g8
g4 ^= g8;
// g4 ^= g3
g4 ^= g3;
// f0 ^= g0
g10 = f0;
g10 ^= g0;
f0 = g10;
// f2 ^= f4
g10 = f2;
g11 = f4;
g10 ^= g11;
f2 = g10;
// f4 ^= g3
g10 = f4;
g10 ^= g3;
f4 = g10;
// g9 ^= g3
g9 ^= g3;
// g3 ^= g0
g3 ^= g0;
// f23 ^= g0
g10 = f23;
g10 ^= g0;
f23 = g10;
// f10 ^= g0
g10 = f10;
g10 ^= g0;
f10 = g10;
// g0 ^= f13
g11 = f13;
g0 ^= g11;
// f13 ^= g5
g10 = f13;
g10 ^= g5;
f13 = g10;
// g6 ^= f9
g11 = f9;
g6 ^= g11;
// f17 ^= f3
g10 = f17;
g11 = f3;
g10 ^= g11;
f17 = g10;
// f3 ^= g6
g10 = f3;
g10 ^= g6;
f3 = g10;
// f0 ^= f3
g10 = f0;
g11 = f3;
g10 ^= g11;
f0 = g10;
// f3 ^= g1
g10 = f3;
g10 ^= g1;
f3 = g10;
// f30 ^= f19
g10 = f30;
g11 = f19;
g10 ^= g11;
f30 = g10;
// f30 ^= g1
g10 = f30;
g10 ^= g1;
f30 = g10;
// g8 ^= f16
g11 = f16;
g8 ^= g11;
// f14 ^= f11
g10 = f14;
g11 = f11;
g10 ^= g11;
f14 = g10;
// f14 ^= f0
g10 = f14;
g11 = f0;
g10 ^= g11;
f14 = g10;
// g2 ^= f16
g11 = f16;
g2 ^= g11;
// f20 ^= f21
g10 = f20;
g11 = f21;
g10 ^= g11;
f20 = g10;
// f21 ^= f11
g10 = f21;
g11 = f11;
g10 ^= g11;
f21 = g10;
// g5 ^= g3
g5 ^= g3;
// g3 ^= f11
g11 = f11;
g3 ^= g11;
// f19 ^= f11
g10 = f19;
g11 = f11;
g10 ^= g11;
f19 = g10;
// g8 ^= g2
g8 ^= g2;
// g8 ^= g6
g8 ^= g6;
// f16 ^= g7
g10 = f16;
g10 ^= g7;
f16 = g10;
// g7 ^= f17
g11 = f17;
g7 ^= g11;
// g7 ^= g5
g7 ^= g5;
// g7 ^= f8
g11 = f8;
g7 ^= g11;
// g6 ^= g4
g6 ^= g4;
// g3 ^= f22
g11 = f22;
g3 ^= g11;
// g3 ^= g5
g3 ^= g5;
// g5 ^= f23
g11 = f23;
g5 ^= g11;
// g6 ^= f23
g11 = f23;
g6 ^= g11;
// f23 ^= f22
g10 = f23;
g11 = f22;
g10 ^= g11;
f23 = g10;
// f22 ^= g2
g10 = f22;
g10 ^= g2;
f22 = g10;
// g2 ^= f9
g11 = f9;
g2 ^= g11;
// f9 ^= f31
g10 = f9;
g11 = f31;
g10 ^= g11;
f9 = g10;
// f9 ^= g9
g10 = f9;
g10 ^= g9;
f9 = g10;
// f9 ^= f4
g10 = f9;
g11 = f4;
g10 ^= g11;
f9 = g10;
// g1 ^= f4
g11 = f4;
g1 ^= g11;
// f4 ^= g0
g10 = f4;
g10 ^= g0;
f4 = g10;
// f14 ^= g0
g10 = f14;
g10 ^= g0;
f14 = g10;
// f12 ^= g0
g10 = f12;
g10 ^= g0;
f12 = g10;
// g0 ^= g2
g0 ^= g2;
// f10 ^= f6
g10 = f10;
g11 = f6;
g10 ^= g11;
f10 = g10;
// f0 ^= g1
g10 = f0;
g10 ^= g1;
f0 = g10;
// g5 ^= f31
g11 = f31;
g5 ^= g11;
// f11 ^= f31
g10 = f11;
g11 = f31;
g10 ^= g11;
f11 = g10;
// f8 ^= g4
g10 = f8;
g10 ^= g4;
f8 = g10;
// g4 ^= f2
g11 = f2;
g4 ^= g11;
// f2 ^= f3
g10 = f2;
g11 = f3;
g10 ^= g11;
f2 = g10;
// f11 ^= g0
g10 = f11;
g10 ^= g0;
f11 = g10;
// f14 ^= g8
g10 = f14;
g10 ^= g8;
f14 = g10;
// g8 ^= f30
g11 = f30;
g8 ^= g11;
// g3 ^= f21
g11 = f21;
g3 ^= g11;
// f19 ^= f16
g10 = f19;
g11 = f16;
g10 ^= g11;
f19 = g10;
// f9 ^= f10
g10 = f9;
g11 = f10;
g10 ^= g11;
f9 = g10;
// f12 ^= f26
g10 = f12;
g11 = f26;
g10 ^= g11;
f12 = g10;
// f6 ^= f0
g10 = f6;
g11 = f0;
g10 ^= g11;
f6 = g10;
// g9 ^= g5
g9 ^= g5;
// g1 ^= f21
g11 = f21;
g1 ^= g11;
// f31 ^= g6
g10 = f31;
g10 ^= g6;
f31 = g10;
// f8 ^= f2
g10 = f8;
g11 = f2;
g10 ^= g11;
f8 = g10;
// f10 ^= f12
g10 = f10;
g11 = f12;
g10 ^= g11;
f10 = g10;
// f26 ^= g9
g10 = f26;
g10 ^= g9;
f26 = g10;
// f3 ^= f6
g10 = f3;
g11 = f6;
g10 ^= g11;
f3 = g10;
// f13 ^= f11
g10 = f13;
g11 = f11;
g10 ^= g11;
f13 = g10;
out[0] = f0;
out[1] = g0;
out[2] = f2;
out[3] = f3;
out[4] = f4;
out[5] = g1;
out[6] = f6;
out[7] = g2;
out[8] = f8;
out[9] = f9;
out[10] = f10;
out[11] = f11;
out[12] = f12;
out[13] = f13;
out[14] = f14;
out[15] = g3;
out[16] = f16;
out[17] = f17;
out[18] = g4;
out[19] = f19;
out[20] = f20;
out[21] = f21;
out[22] = f22;
out[23] = f23;
out[24] = g5;
out[25] = g6;
out[26] = f26;
out[27] = g7;
out[28] = g8;
out[29] = g9;
out[30] = f30;
out[31] = f31;
}
#include "gft_mul_vi.h"
// x 0x573762
void gft_mul_v22( sto_t * out , const sto_t * in ) {
const uint32_t * b = in;
uint32_t g0,g1,g2,g3, g4,g5,g6,g7, g8,g9,g10,g11;
uint32_t f0,f1,f2,f3, f4,f5,f6,f7, f8,f9,f10,f11;
uint32_t f12,f13,f14,f15, f16,f17,f18,f19, f20,f21,f22,f23, f24,f25,f26,f27, f28,f29,f30,f31;
//final state: [{1, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 24, 25, 27, 29, 30}, {0, 1, 4, 6, 7, 8, 10, 13, 14, 24, 26, 27, 28, 29, 31}, {3, 4, 7, 9, 10, 13, 14, 15, 24, 27, 28, 29, 30}, {2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 25, 26, 27, 28, 31}, {1, 3, 7, 8, 9, 10, 11, 24, 26, 29, 30, 31}, {0, 1, 2, 3, 6, 7, 8, 10, 25, 27, 28, 29, 30}, {0, 2, 3, 4, 6, 9, 10, 24, 25, 27, 29}, {1, 2, 5, 7, 8, 9, 11, 24, 26, 27, 28, 29}, {0, 1, 3, 7, 8, 11, 12, 13, 19, 21, 23, 27, 29, 31}, {0, 2, 3, 6, 7, 9, 10, 11, 12, 18, 19, 20, 21, 22, 23, 26, 27, 28, 29, 30, 31}, {0, 3, 4, 6, 8, 14, 15, 16, 18, 20, 22, 23, 24, 26, 28, 30, 31}, {1, 2, 3, 5, 7, 9, 14, 17, 19, 21, 22, 25, 27, 29, 30}, {0, 1, 7, 8, 11, 18, 22, 23, 26, 30, 31}, {0, 6, 7, 9, 10, 11, 19, 22, 27, 30}, {2, 3, 4, 6, 8, 16, 17, 18, 19, 21, 23, 24, 25, 26, 27, 29, 31}, {2, 5, 7, 9, 16, 18, 20, 21, 22, 23, 24, 26, 28, 29, 30, 31}, {0, 1, 3, 4, 5, 16, 19, 23, 24, 25, 26, 27, 28, 30, 31}, {0, 2, 3, 4, 17, 18, 19, 22, 23, 24, 26, 29, 30}, {0, 3, 6, 7, 16, 20, 22, 25, 26, 29, 30, 31}, {1, 2, 3, 6, 17, 21, 23, 24, 25, 27, 28, 29, 30}, {0, 3, 5, 16, 17, 21, 23, 24, 25, 26, 27}, {1, 2, 3, 4, 5, 16, 20, 21, 22, 23, 24, 26}, {0, 7, 18, 19, 20, 22, 23, 25, 26}, {1, 6, 7, 18, 21, 22, 24, 25, 27}, {8, 9, 11, 12, 13, 16, 17, 19, 23, 25}, {8, 10, 11, 12, 16, 18, 19, 22, 23, 24, 25}, {8, 11, 14, 15, 16, 19, 20, 22, 27}, {9, 10, 11, 14, 17, 18, 19, 21, 23, 26, 27}, {8, 11, 13, 16, 17, 23, 29}, {9, 10, 11, 12, 13, 16, 22, 23, 28, 29}, {8, 15, 18, 19, 20, 22, 31}, {9, 14, 15, 18, 21, 23, 30, 31}]
//i = 0
//better circuit found: #XORs = 246
//better circuit found: #XORs = 244
//better circuit found: #XORs = 241
//better circuit found: #XORs = 237
//better circuit found: #XORs = 236
//better circuit found: #XORs = 235
//better circuit found: #XORs = 234
//better circuit found: #XORs = 233
//i = 50
//better circuit found: #XORs = 230
//i = 100
//i = 150
//i = 200
//i = 250
//i = 300
//i = 350
//better circuit found: #XORs = 225
//better circuit found: #XORs = 220
//i = 400
//i = 450
//i = 500
//i = 550
//i = 600
//i = 650
//i = 700
//i = 750
//i = 800
//i = 850
//i = 900
//i = 950
//initial state: [{1, 5, 12, 18, 28}, {21, 14, 31}, {4, 5, 13, 15, 24, 29}, {2, 7, 9, 21}, {0, 17, 4, 27, 30}, {1, 5, 22, 24, 30, 31}, {4, 11, 25, 15}, {5, 7, 9, 10, 28, 30, 31}, {0, 1, 13, 23}, {3, 21, 27}, {1, 14, 25, 29}, {6, 8, 22, 24, 15}, {17, 4, 21, 10, 29}, {6, 8, 25, 27, 12, 30}, {1, 6, 26, 27}, {1, 2, 12, 16, 27, 31}, {0, 9, 27, 28, 12}, {11, 17, 19, 20, 22}, {7, 8, 20, 26, 29}, {0, 9, 10, 19, 23, 31}, {3, 5, 7, 24}, {0, 1, 2, 15, 19, 27}, {7, 23, 25, 27}, {17, 7, 27, 11, 29}, {9, 12, 19, 25, 29}, {18, 23, 9, 30, 15}, {3, 11, 16, 18}, {0, 16, 17, 21, 26}, {8, 13, 16, 25}, {4, 8, 10, 22, 30}, {8, 11, 15, 17, 18, 31}, {0, 8, 14, 18, 23}]
//[0, 2, 5, 6, 7, 8, 11, 12, 13, 15, 18, 19, 20, 21, 23, 24, 26, 27, 28, 29, 30, 31, 1, 3, 4, 9, 10, 14, 16, 17, 22, 25]
//instuctions with recommended mapping to GP and FP registers:
//(cycle count without considering memory stores: 617)
g0 = b[1];
g1 = b[5];
g2 = b[12];
g3 = b[18];
g4 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f0 = g0;
g0 = b[21];
g1 = b[14];
g2 = b[31];
g0 ^= g1;
g0 ^= g2;
f1 = g0;
g0 = b[4];
g1 = b[5];
g2 = b[13];
g3 = b[15];
g4 = b[24];
g5 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f2 = g0;
g0 = b[2];
g1 = b[7];
g2 = b[9];
g3 = b[21];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f3 = g0;
g0 = b[0];
g1 = b[17];
g2 = b[4];
g3 = b[27];
g4 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f4 = g0;
g0 = b[1];
g1 = b[5];
g2 = b[22];
g3 = b[24];
g4 = b[30];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f5 = g0;
g0 = b[4];
g1 = b[11];
g2 = b[25];
g3 = b[15];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f6 = g0;
g0 = b[5];
g1 = b[7];
g2 = b[9];
g3 = b[10];
g4 = b[28];
g5 = b[30];
g6 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f7 = g0;
g0 = b[0];
g1 = b[1];
g2 = b[13];
g3 = b[23];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f8 = g0;
g0 = b[3];
g1 = b[21];
g2 = b[27];
g0 ^= g1;
g0 ^= g2;
f9 = g0;
g0 = b[1];
g1 = b[14];
g2 = b[25];
g3 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f10 = g0;
g0 = b[6];
g1 = b[8];
g2 = b[22];
g3 = b[24];
g4 = b[15];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f11 = g0;
g0 = b[17];
g1 = b[4];
g2 = b[21];
g3 = b[10];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f12 = g0;
g0 = b[6];
g1 = b[8];
g2 = b[25];
g3 = b[27];
g4 = b[12];
g5 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f13 = g0;
g0 = b[1];
g1 = b[6];
g2 = b[26];
g3 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f14 = g0;
g0 = b[1];
g1 = b[2];
g2 = b[12];
g3 = b[16];
g4 = b[27];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f15 = g0;
g0 = b[0];
g1 = b[9];
g2 = b[27];
g3 = b[28];
g4 = b[12];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f16 = g0;
g0 = b[11];
g1 = b[17];
g2 = b[19];
g3 = b[20];
g4 = b[22];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f17 = g0;
g0 = b[7];
g1 = b[8];
g2 = b[20];
g3 = b[26];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f18 = g0;
g0 = b[0];
g1 = b[9];
g2 = b[10];
g3 = b[19];
g4 = b[23];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f19 = g0;
g0 = b[3];
g1 = b[5];
g2 = b[7];
g3 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f20 = g0;
g0 = b[0];
g1 = b[1];
g2 = b[2];
g3 = b[15];
g4 = b[19];
g5 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f21 = g0;
g0 = b[7];
g1 = b[23];
g2 = b[25];
g3 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f22 = g0;
g0 = b[17];
g1 = b[7];
g2 = b[27];
g3 = b[11];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f23 = g0;
g0 = b[9];
g1 = b[12];
g2 = b[19];
g3 = b[25];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f24 = g0;
g0 = b[18];
g1 = b[23];
g2 = b[9];
g3 = b[30];
g4 = b[15];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f25 = g0;
g0 = b[3];
g1 = b[11];
g2 = b[16];
g3 = b[18];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f26 = g0;
g0 = b[0];
g1 = b[16];
g2 = b[17];
g3 = b[21];
g4 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f27 = g0;
g0 = b[8];
g1 = b[13];
g2 = b[16];
g3 = b[25];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f28 = g0;
g0 = b[4];
g1 = b[8];
g2 = b[10];
g3 = b[22];
g4 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f29 = g0;
g0 = b[8];
g1 = b[11];
g2 = b[15];
g3 = b[17];
g4 = b[18];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f30 = g0;
g0 = b[0];
g1 = b[8];
g2 = b[14];
g3 = b[18];
g4 = b[23];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f31 = g0;
g0 = f1;
g1 = f3;
g2 = f4;
g3 = f9;
g4 = f10;
g5 = f14;
g6 = f16;
g7 = f17;
g8 = f22;
g9 = f25;
// g4 ^= g0
g4 ^= g0;
// g9 ^= f31
g11 = f31;
g9 ^= g11;
// f31 ^= g0
g10 = f31;
g10 ^= g0;
f31 = g10;
// f18 ^= g1
g10 = f18;
g10 ^= g1;
f18 = g10;
// g1 ^= g3
g1 ^= g3;
// g0 ^= g3
g0 ^= g3;
// f20 ^= g3
g10 = f20;
g10 ^= g3;
f20 = g10;
// f0 ^= f26
g10 = f0;
g11 = f26;
g10 ^= g11;
f0 = g10;
// f0 ^= f28
g10 = f0;
g11 = f28;
g10 ^= g11;
f0 = g10;
// f28 ^= g8
g10 = f28;
g10 ^= g8;
f28 = g10;
// g8 ^= g3
g8 ^= g3;
// g3 ^= g6
g3 ^= g6;
// g6 ^= g2
g6 ^= g2;
// g2 ^= f29
g11 = f29;
g2 ^= g11;
// g2 ^= f23
g11 = f23;
g2 ^= g11;
// f20 ^= g8
g10 = f20;
g10 ^= g8;
f20 = g10;
// g2 ^= f11
g11 = f11;
g2 ^= g11;
// f28 ^= f23
g10 = f28;
g11 = f23;
g10 ^= g11;
f28 = g10;
// f15 ^= f5
g10 = f15;
g11 = f5;
g10 ^= g11;
f15 = g10;
// f5 ^= f29
g10 = f5;
g11 = f29;
g10 ^= g11;
f5 = g10;
// f23 ^= f30
g10 = f23;
g11 = f30;
g10 ^= g11;
f23 = g10;
// f23 ^= f11
g10 = f23;
g11 = f11;
g10 ^= g11;
f23 = g10;
// f21 ^= f6
g10 = f21;
g11 = f6;
g10 ^= g11;
f21 = g10;
// f21 ^= g7
g10 = f21;
g10 ^= g7;
f21 = g10;
// f2 ^= f5
g10 = f2;
g11 = f5;
g10 ^= g11;
f2 = g10;
// f15 ^= g1
g10 = f15;
g10 ^= g1;
f15 = g10;
// f8 ^= g5
g10 = f8;
g10 ^= g5;
f8 = g10;
// f8 ^= f13
g10 = f8;
g11 = f13;
g10 ^= g11;
f8 = g10;
// f13 ^= f11
g10 = f13;
g11 = f11;
g10 ^= g11;
f13 = g10;
// f12 ^= f29
g10 = f12;
g11 = f29;
g10 ^= g11;
f12 = g10;
// f11 ^= g9
g10 = f11;
g10 ^= g9;
f11 = g10;
// f11 ^= f19
g10 = f11;
g11 = f19;
g10 ^= g11;
f11 = g10;
// f11 ^= f7
g10 = f11;
g11 = f7;
g10 ^= g11;
f11 = g10;
// f29 ^= g6
g10 = f29;
g10 ^= g6;
f29 = g10;
// g6 ^= f24
g11 = f24;
g6 ^= g11;
// f2 ^= g0
g10 = f2;
g10 ^= g0;
f2 = g10;
// g8 ^= f26
g11 = f26;
g8 ^= g11;
// f26 ^= g0
g10 = f26;
g10 ^= g0;
f26 = g10;
// g0 ^= g5
g0 ^= g5;
// g5 ^= f27
g11 = f27;
g5 ^= g11;
// g5 ^= f12
g11 = f12;
g5 ^= g11;
// f12 ^= g7
g10 = f12;
g10 ^= g7;
f12 = g10;
// f5 ^= f7
g10 = f5;
g11 = f7;
g10 ^= g11;
f5 = g10;
// g8 ^= f27
g11 = f27;
g8 ^= g11;
// g8 ^= g7
g8 ^= g7;
// f12 ^= g4
g10 = f12;
g10 ^= g4;
f12 = g10;
// g3 ^= g1
g3 ^= g1;
// f7 ^= g1
g10 = f7;
g10 ^= g1;
f7 = g10;
// f18 ^= g1
g10 = f18;
g10 ^= g1;
f18 = g10;
// g3 ^= f31
g11 = f31;
g3 ^= g11;
// f31 ^= g9
g10 = f31;
g10 ^= g9;
f31 = g10;
// f6 ^= g1
g10 = f6;
g10 ^= g1;
f6 = g10;
// g1 ^= g0
g1 ^= g0;
// g0 ^= g9
g0 ^= g9;
// g9 ^= f19
g11 = f19;
g9 ^= g11;
// g9 ^= f26
g11 = f26;
g9 ^= g11;
// g9 ^= f13
g11 = f13;
g9 ^= g11;
// f13 ^= f24
g10 = f13;
g11 = f24;
g10 ^= g11;
f13 = g10;
// f30 ^= g7
g10 = f30;
g10 ^= g7;
f30 = g10;
// g5 ^= g4
g5 ^= g4;
// g6 ^= g4
g6 ^= g4;
// f23 ^= g4
g10 = f23;
g10 ^= g4;
f23 = g10;
// g7 ^= f13
g11 = f13;
g7 ^= g11;
// g7 ^= f6
g11 = f6;
g7 ^= g11;
// f6 ^= g2
g10 = f6;
g10 ^= g2;
f6 = g10;
// g4 ^= f31
g11 = f31;
g4 ^= g11;
// g4 ^= f5
g11 = f5;
g4 ^= g11;
// f13 ^= g2
g10 = f13;
g10 ^= g2;
f13 = g10;
// f8 ^= f12
g10 = f8;
g11 = f12;
g10 ^= g11;
f8 = g10;
// g3 ^= f18
g11 = f18;
g3 ^= g11;
// f20 ^= f27
g10 = f20;
g11 = f27;
g10 ^= g11;
f20 = g10;
// f27 ^= f26
g10 = f27;
g11 = f26;
g10 ^= g11;
f27 = g10;
// f27 ^= f19
g10 = f27;
g11 = f19;
g10 ^= g11;
f27 = g10;
// g7 ^= g8
g7 ^= g8;
// f29 ^= f28
g10 = f29;
g11 = f28;
g10 ^= g11;
f29 = g10;
// f26 ^= f30
g10 = f26;
g11 = f30;
g10 ^= g11;
f26 = g10;
// f19 ^= g6
g10 = f19;
g10 ^= g6;
f19 = g10;
// f19 ^= f6
g10 = f19;
g11 = f6;
g10 ^= g11;
f19 = g10;
// f12 ^= g8
g10 = f12;
g10 ^= g8;
f12 = g10;
// f21 ^= f20
g10 = f21;
g11 = f20;
g10 ^= g11;
f21 = g10;
// f2 ^= f5
g10 = f2;
g11 = f5;
g10 ^= g11;
f2 = g10;
// g2 ^= g0
g2 ^= g0;
// f8 ^= f18
g10 = f8;
g11 = f18;
g10 ^= g11;
f8 = g10;
// f7 ^= g2
g10 = f7;
g10 ^= g2;
f7 = g10;
// f18 ^= g5
g10 = f18;
g10 ^= g5;
f18 = g10;
// g0 ^= f2
g11 = f2;
g0 ^= g11;
// f11 ^= f19
g10 = f11;
g11 = f19;
g10 ^= g11;
f11 = g10;
// f5 ^= f6
g10 = f5;
g11 = f6;
g10 ^= g11;
f5 = g10;
// f24 ^= f28
g10 = f24;
g11 = f28;
g10 ^= g11;
f24 = g10;
// g4 ^= f18
g11 = f18;
g4 ^= g11;
// g1 ^= f0
g11 = f0;
g1 ^= g11;
// f15 ^= g3
g10 = f15;
g10 ^= g3;
f15 = g10;
// g6 ^= f20
g11 = f20;
g6 ^= g11;
// f0 ^= f2
g10 = f0;
g11 = f2;
g10 ^= g11;
f0 = g10;
// g5 ^= g7
g5 ^= g7;
// g3 ^= f13
g11 = f13;
g3 ^= g11;
out[0] = f0;
out[1] = g0;
out[2] = f2;
out[3] = g1;
out[4] = g2;
out[5] = f5;
out[6] = f6;
out[7] = f7;
out[8] = f8;
out[9] = g3;
out[10] = g4;
out[11] = f11;
out[12] = f12;
out[13] = f13;
out[14] = g5;
out[15] = f15;
out[16] = g6;
out[17] = g7;
out[18] = f18;
out[19] = f19;
out[20] = f20;
out[21] = f21;
out[22] = g8;
out[23] = f23;
out[24] = f24;
out[25] = g9;
out[26] = f26;
out[27] = f27;
out[28] = f28;
out[29] = f29;
out[30] = f30;
out[31] = f31;
}
#include "gft_mul_vi.h"
// x 0x92f9fa
void gft_mul_v23( sto_t * out , const sto_t * in ) {
const uint32_t * b = in;
uint32_t g0,g1,g2,g3, g4,g5,g6,g7, g8,g9,g10,g11;
uint32_t f0,f1,f2,f3, f4,f5,f6,f7, f8,f9,f10,f11;
uint32_t f12,f13,f14,f15, f16,f17,f18,f19, f20,f21,f22,f23, f24,f25,f26,f27, f28,f29,f30,f31;
//final state: [{1, 2, 3, 5, 10, 12, 13, 14, 24, 25, 30, 31}, {0, 1, 2, 4, 5, 11, 12, 15, 24, 30}, {1, 7, 8, 9, 10, 11, 12, 13, 26, 27, 29, 31}, {0, 1, 6, 7, 8, 10, 12, 26, 28, 29, 30, 31}, {0, 1, 2, 4, 7, 8, 9, 11, 12, 13, 14, 15, 24, 29}, {0, 3, 5, 6, 7, 8, 10, 11, 12, 14, 25, 28, 29}, {0, 1, 4, 8, 11, 13, 14, 26, 31}, {0, 5, 9, 10, 11, 12, 13, 15, 27, 30, 31}, {0, 2, 3, 5, 8, 9, 16, 17, 20, 23, 24, 25, 28, 31}, {1, 2, 4, 5, 8, 16, 21, 22, 23, 24, 29, 30, 31}, {1, 2, 3, 7, 10, 11, 18, 19, 20, 26, 27, 28}, {0, 1, 2, 6, 7, 10, 18, 21, 26, 29}, {0, 1, 2, 5, 7, 12, 13, 16, 18, 19, 21, 22, 23, 24, 26, 27, 29, 30, 31}, {0, 3, 4, 5, 6, 7, 12, 17, 18, 20, 21, 22, 25, 26, 28, 29, 30}, {0, 1, 4, 6, 7, 14, 15, 17, 18, 19, 21, 25, 26, 27, 29}, {0, 5, 6, 14, 16, 17, 18, 20, 21, 24, 25, 26, 28, 29}, {1, 4, 7, 18, 19, 20, 21, 23, 26, 28, 29, 30}, {0, 1, 5, 6, 7, 18, 20, 22, 23, 27, 28, 31}, {3, 4, 17, 19, 20, 23, 24, 25, 26, 27, 28, 29}, {2, 3, 5, 16, 17, 18, 19, 21, 22, 23, 24, 26, 28}, {0, 2, 3, 4, 5, 6, 7, 17, 19, 21, 22, 24, 25, 27, 28, 29, 30, 31}, {1, 2, 4, 6, 16, 17, 18, 19, 20, 21, 23, 24, 26, 27, 28, 30}, {1, 2, 3, 5, 6, 16, 18, 19, 20, 21, 22, 24, 27, 29, 30}, {0, 1, 2, 4, 5, 7, 17, 18, 20, 23, 25, 26, 27, 28, 29, 31}, {9, 12, 15, 16, 18, 19, 21, 24, 28, 31}, {8, 9, 13, 14, 15, 17, 18, 20, 21, 25, 29, 30, 31}, {11, 12, 17, 18, 19, 23, 26, 28}, {10, 11, 13, 16, 17, 18, 22, 23, 27, 29}, {8, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21, 23, 24, 26, 27, 30, 31}, {9, 10, 12, 14, 16, 19, 20, 21, 22, 23, 25, 26, 30}, {9, 10, 11, 13, 14, 16, 17, 20, 22, 23, 25, 26, 27, 29, 31}, {8, 9, 10, 12, 13, 15, 16, 21, 22, 24, 25, 26, 28, 29, 30, 31}]
//i = 0
//better circuit found: #XORs = 264
//better circuit found: #XORs = 254
//better circuit found: #XORs = 252
//better circuit found: #XORs = 248
//i = 50
//i = 100
//i = 150
//i = 200
//i = 250
//better circuit found: #XORs = 247
//i = 300
//i = 350
//i = 400
//i = 450
//i = 500
//i = 550
//better circuit found: #XORs = 245
//i = 600
//i = 650
//i = 700
//i = 750
//i = 800
//i = 850
//i = 900
//i = 950
//initial state: [{2, 23, 26, 12}, {1, 3, 8, 10, 15, 25, 26}, {1, 6, 8, 9, 16, 17, 31}, {1, 5, 9, 11, 22, 29}, {1, 7, 8, 9, 14, 15, 28}, {2, 4, 15, 24, 25, 27}, {0, 1, 4, 8, 11, 13, 14, 26, 31}, {5, 6, 10, 12, 15, 28, 31}, {5, 6, 8, 20, 23, 25, 27, 29}, {1, 5, 13, 15, 28, 29, 30}, {1, 2, 3, 7, 13, 26, 28, 31}, {1, 10, 16, 18, 21, 27, 29}, {1, 7, 10, 12, 13, 14, 20}, {12, 14, 16, 19, 21, 29, 30}, {10, 14, 17, 19, 24}, {0, 8, 13, 15, 21, 24, 30}, {0, 2, 4, 6, 10, 19, 20, 23, 28, 30}, {5, 7, 15, 19, 22, 25, 29}, {5, 6, 10, 21, 25, 30}, {2, 3, 5, 21, 27}, {11, 12, 18, 20, 22, 27}, {16, 2, 7, 22, 26, 15}, {3, 4, 6, 8, 24}, {0, 6, 15, 22, 27}, {10, 11, 13, 23, 24}, {0, 17, 24, 26, 29}, {2, 11, 17, 18, 19, 28}, {16, 18, 20, 24}, {10, 12, 13, 19, 22, 31}, {10, 14, 18, 22, 23, 29, 31}, {9, 14, 18, 20, 25, 26, 31}, {9, 10, 13, 14, 16, 25, 28}]
//[1, 2, 4, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 21, 22, 24, 26, 29, 30, 31, 0, 3, 5, 9, 15, 20, 23, 25, 27, 28]
//instuctions with recommended mapping to GP and FP registers:
//(cycle count without considering memory stores: 641)
g0 = b[2];
g1 = b[23];
g2 = b[26];
g3 = b[12];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f0 = g0;
g0 = b[1];
g1 = b[3];
g2 = b[8];
g3 = b[10];
g4 = b[15];
g5 = b[25];
g6 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f1 = g0;
g0 = b[1];
g1 = b[6];
g2 = b[8];
g3 = b[9];
g4 = b[16];
g5 = b[17];
g6 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f2 = g0;
g0 = b[1];
g1 = b[5];
g2 = b[9];
g3 = b[11];
g4 = b[22];
g5 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f3 = g0;
g0 = b[1];
g1 = b[7];
g2 = b[8];
g3 = b[9];
g4 = b[14];
g5 = b[15];
g6 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f4 = g0;
g0 = b[2];
g1 = b[4];
g2 = b[15];
g3 = b[24];
g4 = b[25];
g5 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f5 = g0;
g0 = b[0];
g1 = b[1];
g2 = b[4];
g3 = b[8];
g4 = b[11];
g5 = b[13];
g6 = b[14];
g7 = b[26];
g8 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
g0 ^= g8;
f6 = g0;
g0 = b[5];
g1 = b[6];
g2 = b[10];
g3 = b[12];
g4 = b[15];
g5 = b[28];
g6 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f7 = g0;
g0 = b[5];
g1 = b[6];
g2 = b[8];
g3 = b[20];
g4 = b[23];
g5 = b[25];
g6 = b[27];
g7 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f8 = g0;
g0 = b[1];
g1 = b[5];
g2 = b[13];
g3 = b[15];
g4 = b[28];
g5 = b[29];
g6 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f9 = g0;
g0 = b[1];
g1 = b[2];
g2 = b[3];
g3 = b[7];
g4 = b[13];
g5 = b[26];
g6 = b[28];
g7 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f10 = g0;
g0 = b[1];
g1 = b[10];
g2 = b[16];
g3 = b[18];
g4 = b[21];
g5 = b[27];
g6 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f11 = g0;
g0 = b[1];
g1 = b[7];
g2 = b[10];
g3 = b[12];
g4 = b[13];
g5 = b[14];
g6 = b[20];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f12 = g0;
g0 = b[12];
g1 = b[14];
g2 = b[16];
g3 = b[19];
g4 = b[21];
g5 = b[29];
g6 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f13 = g0;
g0 = b[10];
g1 = b[14];
g2 = b[17];
g3 = b[19];
g4 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f14 = g0;
g0 = b[0];
g1 = b[8];
g2 = b[13];
g3 = b[15];
g4 = b[21];
g5 = b[24];
g6 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f15 = g0;
g0 = b[0];
g1 = b[2];
g2 = b[4];
g3 = b[6];
g4 = b[10];
g5 = b[19];
g6 = b[20];
g7 = b[23];
g8 = b[28];
g9 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
g0 ^= g8;
g0 ^= g9;
f16 = g0;
g0 = b[5];
g1 = b[7];
g2 = b[15];
g3 = b[19];
g4 = b[22];
g5 = b[25];
g6 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f17 = g0;
g0 = b[5];
g1 = b[6];
g2 = b[10];
g3 = b[21];
g4 = b[25];
g5 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f18 = g0;
g0 = b[2];
g1 = b[3];
g2 = b[5];
g3 = b[21];
g4 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f19 = g0;
g0 = b[11];
g1 = b[12];
g2 = b[18];
g3 = b[20];
g4 = b[22];
g5 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f20 = g0;
g0 = b[16];
g1 = b[2];
g2 = b[7];
g3 = b[22];
g4 = b[26];
g5 = b[15];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f21 = g0;
g0 = b[3];
g1 = b[4];
g2 = b[6];
g3 = b[8];
g4 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f22 = g0;
g0 = b[0];
g1 = b[6];
g2 = b[15];
g3 = b[22];
g4 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f23 = g0;
g0 = b[10];
g1 = b[11];
g2 = b[13];
g3 = b[23];
g4 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f24 = g0;
g0 = b[0];
g1 = b[17];
g2 = b[24];
g3 = b[26];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f25 = g0;
g0 = b[2];
g1 = b[11];
g2 = b[17];
g3 = b[18];
g4 = b[19];
g5 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f26 = g0;
g0 = b[16];
g1 = b[18];
g2 = b[20];
g3 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f27 = g0;
g0 = b[10];
g1 = b[12];
g2 = b[13];
g3 = b[19];
g4 = b[22];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f28 = g0;
g0 = b[10];
g1 = b[14];
g2 = b[18];
g3 = b[22];
g4 = b[23];
g5 = b[29];
g6 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f29 = g0;
g0 = b[9];
g1 = b[14];
g2 = b[18];
g3 = b[20];
g4 = b[25];
g5 = b[26];
g6 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f30 = g0;
g0 = b[9];
g1 = b[10];
g2 = b[13];
g3 = b[14];
g4 = b[16];
g5 = b[25];
g6 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f31 = g0;
g0 = f0;
g1 = f3;
g2 = f5;
g3 = f9;
g4 = f15;
g5 = f20;
g6 = f23;
g7 = f25;
g8 = f27;
g9 = f28;
// g1 ^= g3
g1 ^= g3;
// f26 ^= g0
g10 = f26;
g10 ^= g0;
f26 = g10;
// f22 ^= f24
g10 = f22;
g11 = f24;
g10 ^= g11;
f22 = g10;
// g0 ^= f24
g11 = f24;
g0 ^= g11;
// f24 ^= g1
g10 = f24;
g10 ^= g1;
f24 = g10;
// g1 ^= g6
g1 ^= g6;
// f21 ^= g6
g10 = f21;
g10 ^= g6;
f21 = g10;
// g6 ^= g2
g6 ^= g2;
// g6 ^= g7
g6 ^= g7;
// g8 ^= g5
g8 ^= g5;
// g5 ^= g9
g5 ^= g9;
// g9 ^= f14
g11 = f14;
g9 ^= g11;
// f14 ^= g2
g10 = f14;
g10 ^= g2;
f14 = g10;
// g2 ^= f19
g11 = f19;
g2 ^= g11;
// f8 ^= f19
g10 = f8;
g11 = f19;
g10 ^= g11;
f8 = g10;
// f18 ^= f19
g10 = f18;
g11 = f19;
g10 ^= g11;
f18 = g10;
// f17 ^= g2
g10 = f17;
g10 ^= g2;
f17 = g10;
// g2 ^= g4
g2 ^= g4;
// f21 ^= g7
g10 = f21;
g10 ^= g7;
f21 = g10;
// f11 ^= f21
g10 = f11;
g11 = f21;
g10 ^= g11;
f11 = g10;
// f18 ^= f11
g10 = f18;
g11 = f11;
g10 ^= g11;
f18 = g10;
// f11 ^= g7
g10 = f11;
g10 ^= g7;
f11 = g10;
// f4 ^= g3
g10 = f4;
g10 ^= g3;
f4 = g10;
// g7 ^= g4
g7 ^= g4;
// g4 ^= g3
g4 ^= g3;
// g3 ^= f7
g11 = f7;
g3 ^= g11;
// f1 ^= g2
g10 = f1;
g10 ^= g2;
f1 = g10;
// f1 ^= g0
g10 = f1;
g10 ^= g0;
f1 = g10;
// f10 ^= g0
g10 = f10;
g10 ^= g0;
f10 = g10;
// g3 ^= f22
g11 = f22;
g3 ^= g11;
// f22 ^= g5
g10 = f22;
g10 ^= g5;
f22 = g10;
// f12 ^= g5
g10 = f12;
g10 ^= g5;
f12 = g10;
// g5 ^= g0
g5 ^= g0;
// g2 ^= f6
g11 = f6;
g2 ^= g11;
// f12 ^= f6
g10 = f12;
g11 = f6;
g10 ^= g11;
f12 = g10;
// f19 ^= g8
g10 = f19;
g10 ^= g8;
f19 = g10;
// g8 ^= g9
g8 ^= g9;
// f16 ^= f11
g10 = f16;
g11 = f11;
g10 ^= g11;
f16 = g10;
// g8 ^= f29
g11 = f29;
g8 ^= g11;
// f29 ^= f13
g10 = f29;
g11 = f13;
g10 ^= g11;
f29 = g10;
// f13 ^= f17
g10 = f13;
g11 = f17;
g10 ^= g11;
f13 = g10;
// f18 ^= f16
g10 = f18;
g11 = f16;
g10 ^= g11;
f18 = g10;
// f17 ^= g4
g10 = f17;
g10 ^= g4;
f17 = g10;
// f17 ^= f22
g10 = f17;
g11 = f22;
g10 ^= g11;
f17 = g10;
// g4 ^= f2
g11 = f2;
g4 ^= g11;
// f2 ^= f21
g10 = f2;
g11 = f21;
g10 ^= g11;
f2 = g10;
// f24 ^= f29
g10 = f24;
g11 = f29;
g10 ^= g11;
f24 = g10;
// f8 ^= g4
g10 = f8;
g10 ^= g4;
f8 = g10;
// g4 ^= f30
g11 = f30;
g4 ^= g11;
// f2 ^= g0
g10 = f2;
g10 ^= g0;
f2 = g10;
// f29 ^= f30
g10 = f29;
g11 = f30;
g10 ^= g11;
f29 = g10;
// g3 ^= f19
g11 = f19;
g3 ^= g11;
// f10 ^= g5
g10 = f10;
g10 ^= g5;
f10 = g10;
// f19 ^= f26
g10 = f19;
g11 = f26;
g10 ^= g11;
f19 = g10;
// f7 ^= g1
g10 = f7;
g10 ^= g1;
f7 = g10;
// g1 ^= f2
g11 = f2;
g1 ^= g11;
// g0 ^= g2
g0 ^= g2;
// g2 ^= g1
g2 ^= g1;
// g9 ^= g7
g9 ^= g7;
// g7 ^= f30
g11 = f30;
g7 ^= g11;
// f22 ^= g3
g10 = f22;
g10 ^= g3;
f22 = g10;
// f14 ^= f11
g10 = f14;
g11 = f11;
g10 ^= g11;
f14 = g10;
// f31 ^= g9
g10 = f31;
g10 ^= g9;
f31 = g10;
// g9 ^= g8
g9 ^= g8;
// f4 ^= f1
g10 = f4;
g11 = f1;
g10 ^= g11;
f4 = g10;
// f13 ^= g4
g10 = f13;
g10 ^= g4;
f13 = g10;
// g6 ^= f17
g11 = f17;
g6 ^= g11;
// f21 ^= f16
g10 = f21;
g11 = f16;
g10 ^= g11;
f21 = g10;
// f30 ^= g8
g10 = f30;
g10 ^= g8;
f30 = g10;
// g5 ^= f13
g11 = f13;
g5 ^= g11;
// f12 ^= g3
g10 = f12;
g10 ^= g3;
f12 = g10;
out[0] = g0;
out[1] = f1;
out[2] = f2;
out[3] = g1;
out[4] = f4;
out[5] = g2;
out[6] = f6;
out[7] = f7;
out[8] = f8;
out[9] = g3;
out[10] = f10;
out[11] = f11;
out[12] = f12;
out[13] = f13;
out[14] = f14;
out[15] = g4;
out[16] = f16;
out[17] = f17;
out[18] = f18;
out[19] = f19;
out[20] = g5;
out[21] = f21;
out[22] = f22;
out[23] = g6;
out[24] = f24;
out[25] = g7;
out[26] = f26;
out[27] = g8;
out[28] = g9;
out[29] = f29;
out[30] = f30;
out[31] = f31;
}
#include "gft_mul_vi.h"
// x 0x12f1b8d
void gft_mul_v24( sto_t * out , const sto_t * in ) {
const uint32_t * b = in;
uint32_t g0,g1,g2,g3, g4,g5,g6,g7, g8,g9,g10,g11;
uint32_t f0,f1,f2,f3, f4,f5,f6,f7, f8,f9,f10,f11;
uint32_t f12,f13,f14,f15, f16,f17,f18,f19, f20,f21,f22,f23, f24,f25,f26,f27, f28,f29,f30,f31;
//final state: [{0, 2, 4, 6, 8, 10, 14, 15, 17, 18, 21, 22, 24, 25, 26}, {1, 3, 5, 7, 9, 11, 14, 16, 17, 19, 20, 21, 23, 24, 27}, {0, 1, 3, 4, 5, 7, 8, 9, 11, 13, 15, 16, 17, 18, 20, 21, 22, 24, 25}, {0, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 19, 20, 23, 24}, {2, 3, 4, 7, 8, 14, 16, 18, 20, 21, 28, 29, 30}, {2, 5, 6, 7, 9, 15, 17, 19, 20, 28, 31}, {1, 3, 4, 10, 12, 13, 14, 15, 16, 17, 19, 22, 23, 28, 29}, {0, 1, 2, 3, 5, 11, 12, 14, 16, 18, 19, 22, 28}, {0, 1, 2, 3, 6, 7, 9, 11, 12, 15, 17, 19, 20, 21, 23, 26, 27, 28, 30, 31}, {0, 2, 6, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 26, 29, 30}, {1, 2, 5, 7, 8, 10, 11, 12, 16, 18, 19, 20, 23, 25, 27, 29, 30, 31}, {0, 1, 3, 4, 5, 6, 7, 9, 10, 13, 17, 18, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30}, {0, 5, 6, 7, 8, 10, 11, 12, 13, 14, 17, 19, 24, 25, 26, 27, 28, 29}, {1, 4, 5, 6, 9, 10, 12, 15, 16, 17, 18, 19, 24, 26, 28}, {2, 5, 9, 10, 11, 12, 13, 16, 18, 19, 25, 26, 30, 31}, {3, 4, 5, 8, 9, 10, 12, 17, 18, 24, 25, 27, 30}, {0, 1, 2, 6, 12, 14, 17, 20, 24, 26, 28, 31}, {0, 3, 7, 13, 15, 16, 17, 21, 25, 27, 29, 30, 31}, {0, 1, 4, 5, 6, 7, 12, 13, 15, 19, 22, 24, 25, 27, 28}, {0, 4, 6, 12, 14, 15, 18, 19, 23, 24, 26, 27, 29}, {1, 4, 6, 10, 11, 14, 15, 17, 18, 19, 22, 23, 24, 26, 27, 31}, {0, 1, 5, 7, 10, 14, 16, 17, 18, 22, 25, 26, 30, 31}, {3, 4, 5, 7, 9, 11, 13, 15, 17, 21, 23, 25, 26, 27, 28, 30}, {2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21, 22, 23, 24, 25, 26, 29, 31}, {0, 9, 10, 14, 17, 18, 19, 22, 23, 26, 27, 28, 30, 31}, {1, 8, 9, 11, 15, 16, 17, 18, 22, 26, 29, 30}, {2, 8, 9, 10, 12, 13, 14, 15, 17, 21, 23, 25, 27, 29, 30, 31}, {3, 8, 11, 12, 14, 16, 17, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30}, {4, 9, 14, 16, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29}, {5, 8, 9, 15, 17, 20, 22, 24, 26, 28}, {6, 11, 12, 13, 14, 15, 18, 21, 22, 25, 26, 30, 31}, {7, 10, 11, 12, 14, 19, 20, 21, 23, 24, 25, 27, 30}]
//i = 0
//better circuit found: #XORs = 279
//better circuit found: #XORs = 270
//better circuit found: #XORs = 269
//better circuit found: #XORs = 267
//better circuit found: #XORs = 260
//i = 50
//better circuit found: #XORs = 254
//i = 100
//i = 150
//i = 200
//i = 250
//better circuit found: #XORs = 250
//i = 300
//i = 350
//i = 400
//i = 450
//i = 500
//i = 550
//i = 600
//i = 650
//i = 700
//i = 750
//i = 800
//i = 850
//i = 900
//i = 950
//initial state: [{10, 21, 22, 25}, {1, 3, 5, 18}, {3, 20, 9, 12, 31}, {1, 9, 19, 22, 31}, {6, 8, 10, 21}, {2, 15}, {8, 9, 17, 20, 24, 25}, {20, 28, 15}, {0, 5, 10, 16, 18, 19, 31}, {1, 2, 10, 11, 14, 28, 31}, {7, 9, 17, 30}, {3, 6, 7, 9, 29}, {3, 6, 8, 15, 18, 25}, {4, 6, 24, 27, 28, 30}, {18, 11, 7}, {10, 11, 12, 16, 25}, {3, 20, 24, 27}, {1, 6, 14, 16, 25, 29}, {5, 12, 16, 18, 24, 27}, {0, 1, 5, 14, 15, 26, 31}, {6, 12, 15, 17, 23, 26, 29}, {7, 9, 12, 15, 22}, {0, 6, 10, 11, 13, 27}, {16, 1, 24, 15}, {10, 15, 19, 23, 27, 31}, {4, 9, 10, 14, 16, 18, 30}, {0, 6, 14, 16, 17, 21, 26}, {1, 4, 5, 8, 12}, {3, 13, 16, 17, 19}, {6, 8, 19, 26, 27}, {3, 13, 15, 22, 26, 30}, {3, 8, 9, 11, 14, 21, 28}]
//[0, 4, 5, 6, 8, 9, 10, 11, 13, 15, 17, 18, 19, 20, 21, 22, 23, 25, 26, 29, 30, 31, 1, 2, 3, 7, 12, 14, 16, 24, 27, 28]
//instuctions with recommended mapping to GP and FP registers:
//(cycle count without considering memory stores: 686)
g0 = b[10];
g1 = b[21];
g2 = b[22];
g3 = b[25];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f0 = g0;
g0 = b[1];
g1 = b[3];
g2 = b[5];
g3 = b[18];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f1 = g0;
g0 = b[3];
g1 = b[20];
g2 = b[9];
g3 = b[12];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f2 = g0;
g0 = b[1];
g1 = b[9];
g2 = b[19];
g3 = b[22];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f3 = g0;
g0 = b[6];
g1 = b[8];
g2 = b[10];
g3 = b[21];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f4 = g0;
g0 = b[2];
g1 = b[15];
g0 ^= g1;
f5 = g0;
g0 = b[8];
g1 = b[9];
g2 = b[17];
g3 = b[20];
g4 = b[24];
g5 = b[25];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f6 = g0;
g0 = b[20];
g1 = b[28];
g2 = b[15];
g0 ^= g1;
g0 ^= g2;
f7 = g0;
g0 = b[0];
g1 = b[5];
g2 = b[10];
g3 = b[16];
g4 = b[18];
g5 = b[19];
g6 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f8 = g0;
g0 = b[1];
g1 = b[2];
g2 = b[10];
g3 = b[11];
g4 = b[14];
g5 = b[28];
g6 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f9 = g0;
g0 = b[7];
g1 = b[9];
g2 = b[17];
g3 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f10 = g0;
g0 = b[3];
g1 = b[6];
g2 = b[7];
g3 = b[9];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f11 = g0;
g0 = b[3];
g1 = b[6];
g2 = b[8];
g3 = b[15];
g4 = b[18];
g5 = b[25];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f12 = g0;
g0 = b[4];
g1 = b[6];
g2 = b[24];
g3 = b[27];
g4 = b[28];
g5 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f13 = g0;
g0 = b[18];
g1 = b[11];
g2 = b[7];
g0 ^= g1;
g0 ^= g2;
f14 = g0;
g0 = b[10];
g1 = b[11];
g2 = b[12];
g3 = b[16];
g4 = b[25];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f15 = g0;
g0 = b[3];
g1 = b[20];
g2 = b[24];
g3 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f16 = g0;
g0 = b[1];
g1 = b[6];
g2 = b[14];
g3 = b[16];
g4 = b[25];
g5 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f17 = g0;
g0 = b[5];
g1 = b[12];
g2 = b[16];
g3 = b[18];
g4 = b[24];
g5 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f18 = g0;
g0 = b[0];
g1 = b[1];
g2 = b[5];
g3 = b[14];
g4 = b[15];
g5 = b[26];
g6 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f19 = g0;
g0 = b[6];
g1 = b[12];
g2 = b[15];
g3 = b[17];
g4 = b[23];
g5 = b[26];
g6 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f20 = g0;
g0 = b[7];
g1 = b[9];
g2 = b[12];
g3 = b[15];
g4 = b[22];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f21 = g0;
g0 = b[0];
g1 = b[6];
g2 = b[10];
g3 = b[11];
g4 = b[13];
g5 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f22 = g0;
g0 = b[16];
g1 = b[1];
g2 = b[24];
g3 = b[15];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f23 = g0;
g0 = b[10];
g1 = b[15];
g2 = b[19];
g3 = b[23];
g4 = b[27];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f24 = g0;
g0 = b[4];
g1 = b[9];
g2 = b[10];
g3 = b[14];
g4 = b[16];
g5 = b[18];
g6 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f25 = g0;
g0 = b[0];
g1 = b[6];
g2 = b[14];
g3 = b[16];
g4 = b[17];
g5 = b[21];
g6 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f26 = g0;
g0 = b[1];
g1 = b[4];
g2 = b[5];
g3 = b[8];
g4 = b[12];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f27 = g0;
g0 = b[3];
g1 = b[13];
g2 = b[16];
g3 = b[17];
g4 = b[19];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f28 = g0;
g0 = b[6];
g1 = b[8];
g2 = b[19];
g3 = b[26];
g4 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f29 = g0;
g0 = b[3];
g1 = b[13];
g2 = b[15];
g3 = b[22];
g4 = b[26];
g5 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f30 = g0;
g0 = b[3];
g1 = b[8];
g2 = b[9];
g3 = b[11];
g4 = b[14];
g5 = b[21];
g6 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f31 = g0;
g0 = f1;
g1 = f2;
g2 = f3;
g3 = f7;
g4 = f12;
g5 = f14;
g6 = f16;
g7 = f24;
g8 = f27;
g9 = f28;
// g6 ^= g1
g6 ^= g1;
// g6 ^= f21
g11 = f21;
g6 ^= g11;
// g7 ^= g3
g7 ^= g3;
// f17 ^= f26
g10 = f17;
g11 = f26;
g10 ^= g11;
f17 = g10;
// f26 ^= f20
g10 = f26;
g11 = f20;
g10 ^= g11;
f26 = g10;
// f9 ^= g7
g10 = f9;
g10 ^= g7;
f9 = g10;
// g7 ^= g1
g7 ^= g1;
// g6 ^= g3
g6 ^= g3;
// f31 ^= f6
g10 = f31;
g11 = f6;
g10 ^= g11;
f31 = g10;
// f6 ^= g1
g10 = f6;
g10 ^= g1;
f6 = g10;
// g0 ^= g5
g0 ^= g5;
// f26 ^= g3
g10 = f26;
g10 ^= g3;
f26 = g10;
// f21 ^= g5
g10 = f21;
g10 ^= g5;
f21 = g10;
// f20 ^= f29
g10 = f20;
g11 = f29;
g10 ^= g11;
f20 = g10;
// g1 ^= g2
g1 ^= g2;
// g1 ^= g9
g1 ^= g9;
// g9 ^= f30
g11 = f30;
g9 ^= g11;
// f30 ^= g3
g10 = f30;
g10 ^= g3;
f30 = g10;
// f4 ^= g5
g10 = f4;
g10 ^= g5;
f4 = g10;
// g5 ^= f5
g11 = f5;
g5 ^= g11;
// g5 ^= g3
g5 ^= g3;
// f9 ^= f22
g10 = f9;
g11 = f22;
g10 ^= g11;
f9 = g10;
// f29 ^= f13
g10 = f29;
g11 = f13;
g10 ^= g11;
f29 = g10;
// f22 ^= f13
g10 = f22;
g11 = f13;
g10 ^= g11;
f22 = g10;
// f13 ^= g3
g10 = f13;
g10 ^= g3;
f13 = g10;
// g3 ^= g8
g3 ^= g8;
// g3 ^= g1
g3 ^= g1;
// f29 ^= f13
g10 = f29;
g11 = f13;
g10 ^= g11;
f29 = g10;
// g7 ^= g2
g7 ^= g2;
// f4 ^= f11
g10 = f4;
g11 = f11;
g10 ^= g11;
f4 = g10;
// f13 ^= g4
g10 = f13;
g10 ^= g4;
f13 = g10;
// g4 ^= f6
g11 = f6;
g4 ^= g11;
// f19 ^= g8
g10 = f19;
g10 ^= g8;
f19 = g10;
// f11 ^= g0
g10 = f11;
g10 ^= g0;
f11 = g10;
// f6 ^= f15
g10 = f6;
g11 = f15;
g10 ^= g11;
f6 = g10;
// g9 ^= f20
g11 = f20;
g9 ^= g11;
// f20 ^= g4
g10 = f20;
g10 ^= g4;
f20 = g10;
// f22 ^= f15
g10 = f22;
g11 = f15;
g10 ^= g11;
f22 = g10;
// g8 ^= g0
g8 ^= g0;
// g0 ^= f23
g11 = f23;
g0 ^= g11;
// g0 ^= f15
g11 = f15;
g0 ^= g11;
// f8 ^= g2
g10 = f8;
g10 ^= g2;
f8 = g10;
// f15 ^= f18
g10 = f15;
g11 = f18;
g10 ^= g11;
f15 = g10;
// f18 ^= g4
g10 = f18;
g10 ^= g4;
f18 = g10;
// f17 ^= f23
g10 = f17;
g11 = f23;
g10 ^= g11;
f17 = g10;
// f21 ^= g8
g10 = f21;
g10 ^= g8;
f21 = g10;
// f11 ^= f23
g10 = f11;
g11 = f23;
g10 ^= g11;
f11 = g10;
// g8 ^= f10
g11 = f10;
g8 ^= g11;
// f23 ^= g2
g10 = f23;
g10 ^= g2;
f23 = g10;
// g2 ^= f10
g11 = f10;
g2 ^= g11;
// f10 ^= g1
g10 = f10;
g10 ^= g1;
f10 = g10;
// f10 ^= g9
g10 = f10;
g10 ^= g9;
f10 = g10;
// f11 ^= f8
g10 = f11;
g11 = f8;
g10 ^= g11;
f11 = g10;
// g1 ^= f8
g11 = f8;
g1 ^= g11;
// f8 ^= f4
g10 = f8;
g11 = f4;
g10 ^= g11;
f8 = g10;
// f4 ^= g5
g10 = f4;
g10 ^= g5;
f4 = g10;
// g5 ^= f30
g11 = f30;
g5 ^= g11;
// g5 ^= g2
g5 ^= g2;
// g7 ^= g2
g7 ^= g2;
// f8 ^= g9
g10 = f8;
g10 ^= g9;
f8 = g10;
// f18 ^= f23
g10 = f18;
g11 = f23;
g10 ^= g11;
f18 = g10;
// g1 ^= f0
g11 = f0;
g1 ^= g11;
// f0 ^= f5
g10 = f0;
g11 = f5;
g10 ^= g11;
f0 = g10;
// f5 ^= g6
g10 = f5;
g10 ^= g6;
f5 = g10;
// g6 ^= f30
g11 = f30;
g6 ^= g11;
// g2 ^= f23
g11 = f23;
g2 ^= g11;
// g3 ^= f19
g11 = f19;
g3 ^= g11;
// f21 ^= f19
g10 = f21;
g11 = f19;
g10 ^= g11;
f21 = g10;
// f30 ^= f31
g10 = f30;
g11 = f31;
g10 ^= g11;
f30 = g10;
// f30 ^= g4
g10 = f30;
g10 ^= g4;
f30 = g10;
// g4 ^= f19
g11 = f19;
g4 ^= g11;
// g0 ^= g2
g0 ^= g2;
// f22 ^= g2
g10 = f22;
g10 ^= g2;
f22 = g10;
// f5 ^= f18
g10 = f5;
g11 = f18;
g10 ^= g11;
f5 = g10;
// f13 ^= f29
g10 = f13;
g11 = f29;
g10 ^= g11;
f13 = g10;
// g4 ^= f11
g11 = f11;
g4 ^= g11;
// g3 ^= g5
g3 ^= g5;
// f23 ^= f17
g10 = f23;
g11 = f17;
g10 ^= g11;
f23 = g10;
// f17 ^= g6
g10 = f17;
g10 ^= g6;
f17 = g10;
// g6 ^= g7
g6 ^= g7;
// f6 ^= g6
g10 = f6;
g10 ^= g6;
f6 = g10;
// f26 ^= f4
g10 = f26;
g11 = f4;
g10 ^= g11;
f26 = g10;
// g2 ^= g8
g2 ^= g8;
// g9 ^= g8
g9 ^= g8;
// f29 ^= f18
g10 = f29;
g11 = f18;
g10 ^= g11;
f29 = g10;
// g6 ^= f9
g11 = f9;
g6 ^= g11;
// f4 ^= f25
g10 = f4;
g11 = f25;
g10 ^= g11;
f4 = g10;
// g9 ^= f31
g11 = f31;
g9 ^= g11;
// f13 ^= g0
g10 = f13;
g10 ^= g0;
f13 = g10;
// f31 ^= g7
g10 = f31;
g10 ^= g7;
f31 = g10;
// g7 ^= f21
g11 = f21;
g7 ^= g11;
// f0 ^= f11
g10 = f0;
g11 = f11;
g10 ^= g11;
f0 = g10;
// g5 ^= g0
g5 ^= g0;
// f21 ^= g0
g10 = f21;
g10 ^= g0;
f21 = g10;
// f25 ^= g4
g10 = f25;
g10 ^= g4;
f25 = g10;
// f0 ^= g4
g10 = f0;
g10 ^= g4;
f0 = g10;
// f18 ^= f22
g10 = f18;
g11 = f22;
g10 ^= g11;
f18 = g10;
// f22 ^= f8
g10 = f22;
g11 = f8;
g10 ^= g11;
f22 = g10;
// g0 ^= f31
g11 = f31;
g0 ^= g11;
// f6 ^= g4
g10 = f6;
g10 ^= g4;
f6 = g10;
// f26 ^= f17
g10 = f26;
g11 = f17;
g10 ^= g11;
f26 = g10;
// f19 ^= f20
g10 = f19;
g11 = f20;
g10 ^= g11;
f19 = g10;
// f15 ^= g8
g10 = f15;
g10 ^= g8;
f15 = g10;
// f20 ^= g4
g10 = f20;
g10 ^= g4;
f20 = g10;
// g4 ^= f18
g11 = f18;
g4 ^= g11;
// f10 ^= g5
g10 = f10;
g10 ^= g5;
f10 = g10;
// g1 ^= g2
g1 ^= g2;
// g2 ^= f9
g11 = f9;
g2 ^= g11;
// f8 ^= f5
g10 = f8;
g11 = f5;
g10 ^= g11;
f8 = g10;
// f9 ^= f25
g10 = f9;
g11 = f25;
g10 ^= g11;
f9 = g10;
// g8 ^= g9
g8 ^= g9;
// f11 ^= f22
g10 = f11;
g11 = f22;
g10 ^= g11;
f11 = g10;
// f23 ^= g2
g10 = f23;
g10 ^= g2;
f23 = g10;
out[0] = f0;
out[1] = g0;
out[2] = g1;
out[3] = g2;
out[4] = f4;
out[5] = f5;
out[6] = f6;
out[7] = g3;
out[8] = f8;
out[9] = f9;
out[10] = f10;
out[11] = f11;
out[12] = g4;
out[13] = f13;
out[14] = g5;
out[15] = f15;
out[16] = g6;
out[17] = f17;
out[18] = f18;
out[19] = f19;
out[20] = f20;
out[21] = f21;
out[22] = f22;
out[23] = f23;
out[24] = g7;
out[25] = f25;
out[26] = f26;
out[27] = g8;
out[28] = g9;
out[29] = f29;
out[30] = f30;
out[31] = f31;
}
#include "gft_mul_vi.h"
// x 0x2e55791
void gft_mul_v25( sto_t * out , const sto_t * in ) {
const uint32_t * b = in;
uint32_t g0,g1,g2,g3, g4,g5,g6,g7, g8,g9,g10,g11;
uint32_t f0,f1,f2,f3, f4,f5,f6,f7, f8,f9,f10,f11;
uint32_t f12,f13,f14,f15, f16,f17,f18,f19, f20,f21,f22,f23, f24,f25,f26,f27, f28,f29,f30,f31;
//final state: [{0, 4, 7, 11, 13, 15, 16, 17, 19, 20, 21, 23, 27, 28, 30, 31}, {1, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22, 23, 26, 27, 29, 30}, {2, 4, 8, 10, 12, 14, 15, 16, 19, 20, 23, 24, 26, 29, 30, 31}, {3, 5, 9, 11, 13, 14, 17, 18, 19, 21, 22, 23, 25, 27, 28, 29, 30}, {0, 2, 3, 6, 7, 10, 14, 15, 17, 19, 20, 24, 25, 26, 27, 28, 29, 30}, {1, 2, 6, 11, 14, 16, 17, 18, 19, 21, 24, 26, 28, 31}, {1, 2, 3, 5, 7, 8, 9, 10, 11, 13, 15, 16, 18, 19, 22, 25, 26, 28, 29}, {0, 1, 2, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 17, 18, 23, 24, 25, 27, 28}, {0, 1, 3, 4, 5, 9, 11, 13, 15, 16, 20, 21, 25, 27, 31}, {0, 2, 3, 4, 8, 9, 10, 11, 12, 13, 14, 15, 17, 20, 24, 25, 26, 27, 30, 31}, {0, 3, 6, 7, 8, 10, 11, 12, 14, 15, 18, 22, 23, 24, 26, 27, 28, 30}, {1, 2, 3, 6, 9, 10, 13, 14, 19, 22, 25, 26, 29, 31}, {0, 3, 5, 10, 13, 14, 15, 16, 19, 23, 24, 25, 28, 31}, {1, 2, 3, 4, 5, 11, 12, 13, 14, 17, 18, 19, 22, 23, 24, 29, 30, 31}, {0, 7, 8, 9, 10, 11, 13, 16, 20, 22, 26, 27, 28}, {1, 6, 7, 8, 10, 12, 13, 17, 21, 23, 26, 29}, {0, 3, 5, 6, 7, 13, 15, 19, 20, 21, 22, 27}, {1, 2, 3, 4, 5, 6, 12, 13, 14, 15, 18, 19, 20, 23, 26, 27}, {0, 5, 12, 14, 15, 16, 18, 20, 21, 24, 26}, {1, 4, 5, 13, 14, 17, 19, 20, 25, 27}, {1, 2, 4, 5, 6, 7, 10, 14, 16, 17, 19, 20, 21, 31}, {0, 1, 3, 4, 6, 11, 15, 16, 18, 19, 20, 30, 31}, {0, 1, 2, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 22, 23, 28, 30}, {0, 3, 4, 5, 7, 8, 10, 12, 14, 17, 18, 19, 22, 29, 31}, {1, 8, 9, 11, 13, 14, 15, 16, 19, 20, 21, 24, 30}, {0, 1, 8, 10, 11, 12, 13, 14, 17, 18, 19, 20, 25, 31}, {3, 8, 11, 13, 16, 22, 23, 26, 28, 29, 30, 31}, {2, 3, 9, 10, 11, 12, 13, 17, 22, 27, 28, 30}, {5, 9, 10, 12, 14, 15, 16, 19, 25, 28, 29}, {4, 5, 8, 9, 11, 13, 14, 17, 18, 19, 24, 25, 28}, {7, 8, 9, 10, 13, 14, 15, 16, 27, 30, 31}, {6, 7, 8, 11, 12, 13, 14, 17, 26, 27, 30}]
//i = 0
//better circuit found: #XORs = 277
//better circuit found: #XORs = 276
//better circuit found: #XORs = 265
//better circuit found: #XORs = 264
//better circuit found: #XORs = 257
//i = 50
//i = 100
//better circuit found: #XORs = 252
//i = 150
//i = 200
//better circuit found: #XORs = 250
//i = 250
//i = 300
//i = 350
//better circuit found: #XORs = 246
//i = 400
//i = 450
//i = 500
//i = 550
//i = 600
//i = 650
//i = 700
//i = 750
//i = 800
//i = 850
//i = 900
//i = 950
//initial state: [{1, 13, 17, 20, 25, 27, 28}, {3, 8, 15, 17, 29}, {2, 10, 23, 30}, {5, 6, 14, 16, 18}, {0, 1, 16, 20}, {0, 1, 4, 6, 8}, {7, 8, 11, 15, 28, 31}, {1, 10, 16, 18, 31}, {9, 15, 23, 28}, {0, 15, 16, 17, 19, 24, 25, 27}, {1, 3, 10, 12, 13, 19}, {1, 6, 13, 22, 26, 29, 30, 31}, {4, 16, 17, 22, 23, 28, 31}, {5, 12, 20, 24}, {24, 9, 10, 13}, {13, 5, 6, 12, 9}, {3, 6, 7, 20, 21}, {18, 23, 25}, {19, 4, 5, 26, 28}, {18, 19, 3, 9, 26}, {29, 5, 8, 25, 13}, {26, 14}, {0, 5, 6, 15, 21, 26}, {2, 4, 7, 17, 19, 24}, {4, 15, 19, 22, 30}, {0, 4, 5, 13, 27, 30}, {19, 20, 5, 29, 31}, {2, 22, 25, 27, 29, 31}, {2, 10, 12, 17, 27}, {8, 10, 11, 17, 23}, {19, 10, 6, 25, 27, 28}, {20, 5, 7, 25, 30}]
//[0, 1, 3, 5, 6, 7, 9, 10, 11, 12, 15, 16, 18, 22, 23, 24, 25, 26, 27, 28, 29, 30, 2, 4, 8, 13, 14, 17, 19, 20, 21, 31]
//instuctions with recommended mapping to GP and FP registers:
//(cycle count without considering memory stores: 680)
g0 = b[1];
g1 = b[13];
g2 = b[17];
g3 = b[20];
g4 = b[25];
g5 = b[27];
g6 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f0 = g0;
g0 = b[3];
g1 = b[8];
g2 = b[15];
g3 = b[17];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f1 = g0;
g0 = b[2];
g1 = b[10];
g2 = b[23];
g3 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f2 = g0;
g0 = b[5];
g1 = b[6];
g2 = b[14];
g3 = b[16];
g4 = b[18];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f3 = g0;
g0 = b[0];
g1 = b[1];
g2 = b[16];
g3 = b[20];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f4 = g0;
g0 = b[0];
g1 = b[1];
g2 = b[4];
g3 = b[6];
g4 = b[8];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f5 = g0;
g0 = b[7];
g1 = b[8];
g2 = b[11];
g3 = b[15];
g4 = b[28];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f6 = g0;
g0 = b[1];
g1 = b[10];
g2 = b[16];
g3 = b[18];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f7 = g0;
g0 = b[9];
g1 = b[15];
g2 = b[23];
g3 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f8 = g0;
g0 = b[0];
g1 = b[15];
g2 = b[16];
g3 = b[17];
g4 = b[19];
g5 = b[24];
g6 = b[25];
g7 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f9 = g0;
g0 = b[1];
g1 = b[3];
g2 = b[10];
g3 = b[12];
g4 = b[13];
g5 = b[19];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f10 = g0;
g0 = b[1];
g1 = b[6];
g2 = b[13];
g3 = b[22];
g4 = b[26];
g5 = b[29];
g6 = b[30];
g7 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f11 = g0;
g0 = b[4];
g1 = b[16];
g2 = b[17];
g3 = b[22];
g4 = b[23];
g5 = b[28];
g6 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f12 = g0;
g0 = b[5];
g1 = b[12];
g2 = b[20];
g3 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f13 = g0;
g0 = b[24];
g1 = b[9];
g2 = b[10];
g3 = b[13];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f14 = g0;
g0 = b[13];
g1 = b[5];
g2 = b[6];
g3 = b[12];
g4 = b[9];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f15 = g0;
g0 = b[3];
g1 = b[6];
g2 = b[7];
g3 = b[20];
g4 = b[21];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f16 = g0;
g0 = b[18];
g1 = b[23];
g2 = b[25];
g0 ^= g1;
g0 ^= g2;
f17 = g0;
g0 = b[19];
g1 = b[4];
g2 = b[5];
g3 = b[26];
g4 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f18 = g0;
g0 = b[18];
g1 = b[19];
g2 = b[3];
g3 = b[9];
g4 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f19 = g0;
g0 = b[29];
g1 = b[5];
g2 = b[8];
g3 = b[25];
g4 = b[13];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f20 = g0;
g0 = b[26];
g1 = b[14];
g0 ^= g1;
f21 = g0;
g0 = b[0];
g1 = b[5];
g2 = b[6];
g3 = b[15];
g4 = b[21];
g5 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f22 = g0;
g0 = b[2];
g1 = b[4];
g2 = b[7];
g3 = b[17];
g4 = b[19];
g5 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f23 = g0;
g0 = b[4];
g1 = b[15];
g2 = b[19];
g3 = b[22];
g4 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f24 = g0;
g0 = b[0];
g1 = b[4];
g2 = b[5];
g3 = b[13];
g4 = b[27];
g5 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f25 = g0;
g0 = b[19];
g1 = b[20];
g2 = b[5];
g3 = b[29];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f26 = g0;
g0 = b[2];
g1 = b[22];
g2 = b[25];
g3 = b[27];
g4 = b[29];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f27 = g0;
g0 = b[2];
g1 = b[10];
g2 = b[12];
g3 = b[17];
g4 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f28 = g0;
g0 = b[8];
g1 = b[10];
g2 = b[11];
g3 = b[17];
g4 = b[23];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f29 = g0;
g0 = b[19];
g1 = b[10];
g2 = b[6];
g3 = b[25];
g4 = b[27];
g5 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f30 = g0;
g0 = b[20];
g1 = b[5];
g2 = b[7];
g3 = b[25];
g4 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f31 = g0;
g0 = f2;
g1 = f4;
g2 = f8;
g3 = f13;
g4 = f14;
g5 = f17;
g6 = f19;
g7 = f20;
g8 = f21;
g9 = f31;
// f15 ^= g7
g10 = f15;
g10 ^= g7;
f15 = g10;
// g8 ^= g6
g8 ^= g6;
// g8 ^= g5
g8 ^= g5;
// g6 ^= f18
g11 = f18;
g6 ^= g11;
// g7 ^= g9
g7 ^= g9;
// g2 ^= g5
g2 ^= g5;
// f5 ^= f23
g10 = f5;
g11 = f23;
g10 ^= g11;
f5 = g10;
// f23 ^= f28
g10 = f23;
g11 = f28;
g10 ^= g11;
f23 = g10;
// f9 ^= f1
g10 = f9;
g11 = f1;
g10 ^= g11;
f9 = g10;
// f29 ^= g4
g10 = f29;
g10 ^= g4;
f29 = g10;
// g4 ^= g3
g4 ^= g3;
// g4 ^= g9
g4 ^= g9;
// f30 ^= f18
g10 = f30;
g11 = f18;
g10 ^= g11;
f30 = g10;
// f0 ^= g5
g10 = f0;
g10 ^= g5;
f0 = g10;
// f15 ^= g5
g10 = f15;
g10 ^= g5;
f15 = g10;
// g5 ^= g6
g5 ^= g6;
// g5 ^= f30
g11 = f30;
g5 ^= g11;
// g9 ^= g1
g9 ^= g1;
// g9 ^= f3
g11 = f3;
g9 ^= g11;
// f1 ^= f6
g10 = f1;
g11 = f6;
g10 ^= g11;
f1 = g10;
// f6 ^= g2
g10 = f6;
g10 ^= g2;
f6 = g10;
// f15 ^= g5
g10 = f15;
g10 ^= g5;
f15 = g10;
// g5 ^= f28
g11 = f28;
g5 ^= g11;
// f28 ^= f27
g10 = f28;
g11 = f27;
g10 ^= g11;
f28 = g10;
// f7 ^= f28
g10 = f7;
g11 = f28;
g10 ^= g11;
f7 = g10;
// f28 ^= f12
g10 = f28;
g11 = f12;
g10 ^= g11;
f28 = g10;
// f26 ^= f18
g10 = f26;
g11 = f18;
g10 ^= g11;
f26 = g10;
// f18 ^= f24
g10 = f18;
g11 = f24;
g10 ^= g11;
f18 = g10;
// g5 ^= g2
g5 ^= g2;
// g9 ^= f6
g11 = f6;
g9 ^= g11;
// f28 ^= g2
g10 = f28;
g10 ^= g2;
f28 = g10;
// g1 ^= g3
g1 ^= g3;
// f3 ^= g2
g10 = f3;
g10 ^= g2;
f3 = g10;
// g2 ^= f18
g11 = f18;
g2 ^= g11;
// f18 ^= g3
g10 = f18;
g10 ^= g3;
f18 = g10;
// f10 ^= g3
g10 = f10;
g10 ^= g3;
f10 = g10;
// g3 ^= f26
g11 = f26;
g3 ^= g11;
// f26 ^= g7
g10 = f26;
g10 ^= g7;
f26 = g10;
// f24 ^= f25
g10 = f24;
g11 = f25;
g10 ^= g11;
f24 = g10;
// f25 ^= g7
g10 = f25;
g10 ^= g7;
f25 = g10;
// g7 ^= g4
g7 ^= g4;
// f27 ^= g0
g10 = f27;
g10 ^= g0;
f27 = g10;
// f27 ^= g4
g10 = f27;
g10 ^= g4;
f27 = g10;
// f1 ^= f12
g10 = f1;
g11 = f12;
g10 ^= g11;
f1 = g10;
// g4 ^= g2
g4 ^= g2;
// f30 ^= f3
g10 = f30;
g11 = f3;
g10 ^= g11;
f30 = g10;
// f5 ^= f22
g10 = f5;
g11 = f22;
g10 ^= g11;
f5 = g10;
// f1 ^= g0
g10 = f1;
g10 ^= g0;
f1 = g10;
// g6 ^= g8
g6 ^= g8;
// g8 ^= g0
g8 ^= g0;
// g2 ^= f22
g11 = f22;
g2 ^= g11;
// f30 ^= f26
g10 = f30;
g11 = f26;
g10 ^= g11;
f30 = g10;
// f26 ^= g0
g10 = f26;
g10 ^= g0;
f26 = g10;
// f22 ^= g0
g10 = f22;
g10 ^= g0;
f22 = g10;
// g0 ^= g7
g0 ^= g7;
// g7 ^= f6
g11 = f6;
g7 ^= g11;
// f6 ^= f3
g10 = f6;
g11 = f3;
g10 ^= g11;
f6 = g10;
// f3 ^= g2
g10 = f3;
g10 ^= g2;
f3 = g10;
// f27 ^= f12
g10 = f27;
g11 = f12;
g10 ^= g11;
f27 = g10;
// g2 ^= f24
g11 = f24;
g2 ^= g11;
// f10 ^= f24
g10 = f10;
g11 = f24;
g10 ^= g11;
f10 = g10;
// g0 ^= f28
g11 = f28;
g0 ^= g11;
// f25 ^= g7
g10 = f25;
g10 ^= g7;
f25 = g10;
// f28 ^= g6
g10 = f28;
g10 ^= g6;
f28 = g10;
// f7 ^= g4
g10 = f7;
g10 ^= g4;
f7 = g10;
// g4 ^= g1
g4 ^= g1;
// f7 ^= f1
g10 = f7;
g11 = f1;
g10 ^= g11;
f7 = g10;
// g1 ^= g3
g1 ^= g3;
// f22 ^= f18
g10 = f22;
g11 = f18;
g10 ^= g11;
f22 = g10;
// g7 ^= g3
g7 ^= g3;
// f11 ^= g8
g10 = f11;
g10 ^= g8;
f11 = g10;
// g8 ^= g0
g8 ^= g0;
// f10 ^= f0
g10 = f10;
g11 = f0;
g10 ^= g11;
f10 = g10;
// g1 ^= f27
g11 = f27;
g1 ^= g11;
// f27 ^= f1
g10 = f27;
g11 = f1;
g10 ^= g11;
f27 = g10;
// f12 ^= g6
g10 = f12;
g10 ^= g6;
f12 = g10;
// g3 ^= g6
g3 ^= g6;
// g6 ^= f0
g11 = f0;
g6 ^= g11;
// f26 ^= f1
g10 = f26;
g11 = f1;
g10 ^= g11;
f26 = g10;
// f23 ^= f9
g10 = f23;
g11 = f9;
g10 ^= g11;
f23 = g10;
// f9 ^= f29
g10 = f9;
g11 = f29;
g10 ^= g11;
f9 = g10;
// f29 ^= f0
g10 = f29;
g11 = f0;
g10 ^= g11;
f29 = g10;
// g8 ^= g9
g8 ^= g9;
// g9 ^= g1
g9 ^= g1;
// g4 ^= f29
g11 = f29;
g4 ^= g11;
// f0 ^= f16
g10 = f0;
g11 = f16;
g10 ^= g11;
f0 = g10;
// f16 ^= f24
g10 = f16;
g11 = f24;
g10 ^= g11;
f16 = g10;
// f24 ^= f3
g10 = f24;
g11 = f3;
g10 ^= g11;
f24 = g10;
// g1 ^= f18
g11 = f18;
g1 ^= g11;
// f18 ^= f3
g10 = f18;
g11 = f3;
g10 ^= g11;
f18 = g10;
// f15 ^= f0
g10 = f15;
g11 = f0;
g10 ^= g11;
f15 = g10;
// f5 ^= f6
g10 = f5;
g11 = f6;
g10 ^= g11;
f5 = g10;
// f24 ^= f29
g10 = f24;
g11 = f29;
g10 ^= g11;
f24 = g10;
// f29 ^= g6
g10 = f29;
g10 ^= g6;
f29 = g10;
// f25 ^= g6
g10 = f25;
g10 ^= g6;
f25 = g10;
// g1 ^= f11
g11 = f11;
g1 ^= g11;
// g7 ^= f5
g11 = f5;
g7 ^= g11;
// f23 ^= f12
g10 = f23;
g11 = f12;
g10 ^= g11;
f23 = g10;
// f12 ^= f10
g10 = f12;
g11 = f10;
g10 ^= g11;
f12 = g10;
// f0 ^= g8
g10 = f0;
g10 ^= g8;
f0 = g10;
// g2 ^= g8
g2 ^= g8;
// g5 ^= g6
g5 ^= g6;
// g0 ^= g3
g0 ^= g3;
// f22 ^= f24
g10 = f22;
g11 = f24;
g10 ^= g11;
f22 = g10;
// f10 ^= g9
g10 = f10;
g10 ^= g9;
f10 = g10;
// f6 ^= f11
g10 = f6;
g11 = f11;
g10 ^= g11;
f6 = g10;
// g3 ^= f7
g11 = f7;
g3 ^= g11;
// f3 ^= f9
g10 = f3;
g11 = f9;
g10 ^= g11;
f3 = g10;
// f9 ^= g0
g10 = f9;
g10 ^= g0;
f9 = g10;
// f7 ^= f10
g10 = f7;
g11 = f10;
g10 ^= g11;
f7 = g10;
// f1 ^= g5
g10 = f1;
g10 ^= g5;
f1 = g10;
out[0] = f0;
out[1] = f1;
out[2] = g0;
out[3] = f3;
out[4] = g1;
out[5] = f5;
out[6] = f6;
out[7] = f7;
out[8] = g2;
out[9] = f9;
out[10] = f10;
out[11] = f11;
out[12] = f12;
out[13] = g3;
out[14] = g4;
out[15] = f15;
out[16] = f16;
out[17] = g5;
out[18] = f18;
out[19] = g6;
out[20] = g7;
out[21] = g8;
out[22] = f22;
out[23] = f23;
out[24] = f24;
out[25] = f25;
out[26] = f26;
out[27] = f27;
out[28] = f28;
out[29] = f29;
out[30] = f30;
out[31] = g9;
}
#include "gft_mul_vi.h"
// x 0x52267c0
void gft_mul_v26( sto_t * out , const sto_t * in ) {
const uint32_t * b = in;
uint32_t g0,g1,g2,g3, g4,g5,g6,g7, g8,g9,g10,g11;
uint32_t f0,f1,f2,f3, f4,f5,f6,f7, f8,f9,f10,f11;
uint32_t f12,f13,f14,f15, f16,f17,f18,f19, f20,f21,f22,f23, f24,f25,f26,f27, f28,f29,f30,f31;
//final state: [{5, 7, 8, 9, 10, 12, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 31}, {4, 5, 6, 7, 8, 11, 13, 15, 16, 18, 20, 22, 24, 26, 30, 31}, {4, 6, 7, 8, 9, 12, 13, 15, 17, 18, 21, 22, 25, 26, 28, 30}, {5, 6, 8, 12, 14, 15, 16, 17, 19, 20, 21, 23, 24, 25, 27, 29, 31}, {2, 6, 10, 11, 12, 13, 15, 19, 20, 21, 22, 24, 25, 30, 31}, {3, 7, 10, 12, 14, 15, 18, 19, 20, 23, 24, 30}, {0, 1, 2, 3, 4, 5, 6, 7, 9, 11, 12, 15, 16, 18, 20, 21, 26, 27, 29, 31}, {0, 2, 4, 6, 8, 9, 10, 11, 13, 14, 15, 17, 19, 20, 26, 28, 29, 30, 31}, {0, 1, 3, 4, 5, 7, 8, 9, 11, 12, 17, 19, 23, 24, 26, 28, 29, 30}, {0, 2, 3, 4, 6, 7, 8, 10, 11, 13, 16, 17, 18, 19, 22, 23, 25, 27, 28, 31}, {0, 3, 4, 7, 8, 11, 14, 16, 18, 19, 20, 22, 24, 25, 27, 28, 29}, {1, 2, 3, 5, 6, 7, 9, 10, 11, 15, 17, 18, 21, 23, 24, 26, 27, 28}, {1, 3, 4, 9, 10, 11, 12, 14, 16, 17, 20, 23, 24, 25, 27, 29, 30, 31}, {0, 1, 2, 3, 5, 8, 9, 10, 13, 15, 16, 21, 22, 23, 24, 26, 27, 28, 29, 30}, {0, 2, 3, 6, 9, 12, 13, 15, 18, 19, 20, 24, 27, 29}, {1, 2, 7, 8, 9, 12, 14, 15, 18, 21, 25, 26, 27, 28, 29}, {1, 6, 15, 17, 21, 22, 23, 24, 25, 26, 28, 30, 31}, {0, 1, 7, 14, 15, 16, 17, 20, 21, 22, 24, 27, 29, 30}, {3, 4, 5, 6, 7, 12, 14, 19, 21, 24, 25, 29, 30, 31}, {2, 3, 4, 6, 13, 15, 18, 19, 20, 21, 24, 28, 29, 30}, {1, 8, 9, 12, 13, 17, 18, 22, 24, 25, 26, 27, 31}, {0, 1, 8, 12, 16, 17, 19, 23, 24, 26, 30, 31}, {3, 10, 11, 14, 15, 16, 17, 18, 20, 21, 22, 23, 25, 26, 28, 30}, {2, 3, 10, 14, 16, 19, 20, 22, 24, 25, 27, 29, 31}, {0, 3, 8, 9, 11, 14, 17, 20, 21, 23, 28, 30}, {1, 2, 3, 8, 10, 11, 15, 16, 17, 20, 22, 23, 29, 31}, {0, 8, 11, 12, 13, 14, 15, 19, 20, 23, 28, 29, 31}, {1, 9, 10, 11, 12, 14, 18, 19, 21, 22, 23, 28, 30, 31}, {4, 7, 9, 12, 15, 17, 19, 23, 26, 27, 30, 31}, {5, 6, 7, 8, 9, 13, 14, 15, 16, 17, 18, 19, 22, 23, 26, 30}, {4, 11, 12, 16, 18, 19, 20, 22, 25, 27, 29, 31}, {5, 10, 11, 13, 17, 18, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31}]
//i = 0
//better circuit found: #XORs = 262
//better circuit found: #XORs = 260
//better circuit found: #XORs = 246
//i = 50
//i = 100
//better circuit found: #XORs = 245
//i = 150
//i = 200
//i = 250
//i = 300
//i = 350
//i = 400
//better circuit found: #XORs = 244
//better circuit found: #XORs = 241
//i = 450
//i = 500
//i = 550
//i = 600
//i = 650
//i = 700
//i = 750
//i = 800
//i = 850
//i = 900
//i = 950
//initial state: [{0, 1, 7, 15, 18}, {5, 6, 10, 15, 17, 20, 26}, {5, 11, 12, 13, 17, 27}, {9, 16, 17, 21, 24, 27}, {7, 12, 14, 18}, {0, 2, 10, 11, 13}, {3, 6, 17, 18, 28}, {0, 1, 22, 26, 27}, {0, 9, 11, 19, 29}, {7, 10, 13, 20, 23, 30}, {1, 25, 13}, {4, 12, 13, 28, 31}, {6, 9, 10, 27, 29}, {0, 17, 22, 29}, {11, 12, 21, 25, 26}, {9, 14, 16, 20}, {0, 2, 29, 30, 31}, {3, 4, 7, 13, 14}, {3, 5, 15, 16, 28}, {4, 21, 24, 13, 30}, {1, 4, 5, 9, 18, 23, 30}, {8, 14}, {6, 7, 16, 24, 25, 29}, {0, 4, 15, 19}, {19, 21, 23, 27, 28, 29, 31}, {2, 19, 18, 22, 27, 13}, {2, 3, 29, 21}, {4, 9, 27, 14, 31}, {1, 18, 2, 11, 31}, {4, 11, 16, 17, 19, 23, 24, 31}, {7, 21, 22, 23, 25, 29}, {0, 24, 14}]
//[0, 1, 2, 4, 5, 7, 9, 14, 15, 16, 17, 18, 19, 20, 22, 24, 25, 26, 27, 28, 29, 30, 3, 6, 8, 10, 11, 12, 13, 21, 23, 31]
//instuctions with recommended mapping to GP and FP registers:
//(cycle count without considering memory stores: 674)
g0 = b[0];
g1 = b[1];
g2 = b[7];
g3 = b[15];
g4 = b[18];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f0 = g0;
g0 = b[5];
g1 = b[6];
g2 = b[10];
g3 = b[15];
g4 = b[17];
g5 = b[20];
g6 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f1 = g0;
g0 = b[5];
g1 = b[11];
g2 = b[12];
g3 = b[13];
g4 = b[17];
g5 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f2 = g0;
g0 = b[9];
g1 = b[16];
g2 = b[17];
g3 = b[21];
g4 = b[24];
g5 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f3 = g0;
g0 = b[7];
g1 = b[12];
g2 = b[14];
g3 = b[18];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f4 = g0;
g0 = b[0];
g1 = b[2];
g2 = b[10];
g3 = b[11];
g4 = b[13];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f5 = g0;
g0 = b[3];
g1 = b[6];
g2 = b[17];
g3 = b[18];
g4 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f6 = g0;
g0 = b[0];
g1 = b[1];
g2 = b[22];
g3 = b[26];
g4 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f7 = g0;
g0 = b[0];
g1 = b[9];
g2 = b[11];
g3 = b[19];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f8 = g0;
g0 = b[7];
g1 = b[10];
g2 = b[13];
g3 = b[20];
g4 = b[23];
g5 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f9 = g0;
g0 = b[1];
g1 = b[25];
g2 = b[13];
g0 ^= g1;
g0 ^= g2;
f10 = g0;
g0 = b[4];
g1 = b[12];
g2 = b[13];
g3 = b[28];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f11 = g0;
g0 = b[6];
g1 = b[9];
g2 = b[10];
g3 = b[27];
g4 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f12 = g0;
g0 = b[0];
g1 = b[17];
g2 = b[22];
g3 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f13 = g0;
g0 = b[11];
g1 = b[12];
g2 = b[21];
g3 = b[25];
g4 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f14 = g0;
g0 = b[9];
g1 = b[14];
g2 = b[16];
g3 = b[20];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f15 = g0;
g0 = b[0];
g1 = b[2];
g2 = b[29];
g3 = b[30];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f16 = g0;
g0 = b[3];
g1 = b[4];
g2 = b[7];
g3 = b[13];
g4 = b[14];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f17 = g0;
g0 = b[3];
g1 = b[5];
g2 = b[15];
g3 = b[16];
g4 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f18 = g0;
g0 = b[4];
g1 = b[21];
g2 = b[24];
g3 = b[13];
g4 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f19 = g0;
g0 = b[1];
g1 = b[4];
g2 = b[5];
g3 = b[9];
g4 = b[18];
g5 = b[23];
g6 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f20 = g0;
g0 = b[8];
g1 = b[14];
g0 ^= g1;
f21 = g0;
g0 = b[6];
g1 = b[7];
g2 = b[16];
g3 = b[24];
g4 = b[25];
g5 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f22 = g0;
g0 = b[0];
g1 = b[4];
g2 = b[15];
g3 = b[19];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f23 = g0;
g0 = b[19];
g1 = b[21];
g2 = b[23];
g3 = b[27];
g4 = b[28];
g5 = b[29];
g6 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f24 = g0;
g0 = b[2];
g1 = b[19];
g2 = b[18];
g3 = b[22];
g4 = b[27];
g5 = b[13];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f25 = g0;
g0 = b[2];
g1 = b[3];
g2 = b[29];
g3 = b[21];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f26 = g0;
g0 = b[4];
g1 = b[9];
g2 = b[27];
g3 = b[14];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f27 = g0;
g0 = b[1];
g1 = b[18];
g2 = b[2];
g3 = b[11];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f28 = g0;
g0 = b[4];
g1 = b[11];
g2 = b[16];
g3 = b[17];
g4 = b[19];
g5 = b[23];
g6 = b[24];
g7 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f29 = g0;
g0 = b[7];
g1 = b[21];
g2 = b[22];
g3 = b[23];
g4 = b[25];
g5 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f30 = g0;
g0 = b[0];
g1 = b[24];
g2 = b[14];
g0 ^= g1;
g0 ^= g2;
f31 = g0;
g0 = f3;
g1 = f6;
g2 = f8;
g3 = f10;
g4 = f11;
g5 = f12;
g6 = f13;
g7 = f21;
g8 = f23;
g9 = f31;
// g6 ^= f16
g11 = f16;
g6 ^= g11;
// g6 ^= f28
g11 = f28;
g6 ^= g11;
// f28 ^= f0
g10 = f28;
g11 = f0;
g10 ^= g11;
f28 = g10;
// f5 ^= g8
g10 = f5;
g10 ^= g8;
f5 = g10;
// g8 ^= g9
g8 ^= g9;
// f14 ^= g3
g10 = f14;
g10 ^= g3;
f14 = g10;
// g8 ^= f17
g11 = f17;
g8 ^= g11;
// g7 ^= g9
g7 ^= g9;
// f17 ^= g3
g10 = f17;
g10 ^= g3;
f17 = g10;
// f1 ^= g5
g10 = f1;
g10 ^= g5;
f1 = g10;
// g9 ^= f27
g11 = f27;
g9 ^= g11;
// f27 ^= g5
g10 = f27;
g10 ^= g5;
f27 = g10;
// g5 ^= g2
g5 ^= g2;
// f27 ^= f26
g10 = f27;
g11 = f26;
g10 ^= g11;
f27 = g10;
// f27 ^= g1
g10 = f27;
g10 ^= g1;
f27 = g10;
// f28 ^= g5
g10 = f28;
g10 ^= g5;
f28 = g10;
// f2 ^= g5
g10 = f2;
g10 ^= g5;
f2 = g10;
// g5 ^= f7
g11 = f7;
g5 ^= g11;
// f18 ^= g8
g10 = f18;
g10 ^= g8;
f18 = g10;
// f18 ^= f19
g10 = f18;
g11 = f19;
g10 ^= g11;
f18 = g10;
// f7 ^= f25
g10 = f7;
g11 = f25;
g10 ^= g11;
f7 = g10;
// f25 ^= f5
g10 = f25;
g11 = f5;
g10 ^= g11;
f25 = g10;
// f25 ^= f0
g10 = f25;
g11 = f0;
g10 ^= g11;
f25 = g10;
// g1 ^= f4
g11 = f4;
g1 ^= g11;
// g8 ^= f4
g11 = f4;
g8 ^= g11;
// f4 ^= f15
g10 = f4;
g11 = f15;
g10 ^= g11;
f4 = g10;
// f4 ^= g0
g10 = f4;
g10 ^= g0;
f4 = g10;
// g0 ^= g7
g0 ^= g7;
// f22 ^= g7
g10 = f22;
g10 ^= g7;
f22 = g10;
// f0 ^= g2
g10 = f0;
g10 ^= g2;
f0 = g10;
// g2 ^= f26
g11 = f26;
g2 ^= g11;
// f26 ^= f19
g10 = f26;
g11 = f19;
g10 ^= g11;
f26 = g10;
// f17 ^= g7
g10 = f17;
g10 ^= g7;
f17 = g10;
// g7 ^= f19
g11 = f19;
g7 ^= g11;
// f19 ^= g4
g10 = f19;
g10 ^= g4;
f19 = g10;
// g0 ^= g2
g0 ^= g2;
// g6 ^= g3
g6 ^= g3;
// g3 ^= g4
g3 ^= g4;
// g4 ^= g1
g4 ^= g1;
// g1 ^= g8
g1 ^= g8;
// g1 ^= f7
g11 = f7;
g1 ^= g11;
// g2 ^= f16
g11 = f16;
g2 ^= g11;
// f7 ^= f2
g10 = f7;
g11 = f2;
g10 ^= g11;
f7 = g10;
// f7 ^= f20
g10 = f7;
g11 = f20;
g10 ^= g11;
f7 = g10;
// g8 ^= f5
g11 = f5;
g8 ^= g11;
// f24 ^= f16
g10 = f24;
g11 = f16;
g10 ^= g11;
f24 = g10;
// f0 ^= g5
g10 = f0;
g10 ^= g5;
f0 = g10;
// g7 ^= f14
g11 = f14;
g7 ^= g11;
// f14 ^= f19
g10 = f14;
g11 = f19;
g10 ^= g11;
f14 = g10;
// f24 ^= g0
g10 = f24;
g10 ^= g0;
f24 = g10;
// f19 ^= g9
g10 = f19;
g10 ^= g9;
f19 = g10;
// f1 ^= g9
g10 = f1;
g10 ^= g9;
f1 = g10;
// f14 ^= g2
g10 = f14;
g10 ^= g2;
f14 = g10;
// g3 ^= f17
g11 = f17;
g3 ^= g11;
// f17 ^= f30
g10 = f17;
g11 = f30;
g10 ^= g11;
f17 = g10;
// f5 ^= f9
g10 = f5;
g11 = f9;
g10 ^= g11;
f5 = g10;
// g2 ^= f18
g11 = f18;
g2 ^= g11;
// f9 ^= f26
g10 = f9;
g11 = f26;
g10 ^= g11;
f9 = g10;
// f9 ^= g4
g10 = f9;
g10 ^= g4;
f9 = g10;
// g9 ^= f20
g11 = f20;
g9 ^= g11;
// g9 ^= g7
g9 ^= g7;
// f24 ^= f15
g10 = f24;
g11 = f15;
g10 ^= g11;
f24 = g10;
// f25 ^= f16
g10 = f25;
g11 = f16;
g10 ^= g11;
f25 = g10;
// f16 ^= f30
g10 = f16;
g11 = f30;
g10 ^= g11;
f16 = g10;
// f30 ^= f4
g10 = f30;
g11 = f4;
g10 ^= g11;
f30 = g10;
// f30 ^= f29
g10 = f30;
g11 = f29;
g10 ^= g11;
f30 = g10;
// g7 ^= f29
g11 = f29;
g7 ^= g11;
// f29 ^= f15
g10 = f29;
g11 = f15;
g10 ^= g11;
f29 = g10;
// g4 ^= f29
g11 = f29;
g4 ^= g11;
// f16 ^= g1
g10 = f16;
g10 ^= g1;
f16 = g10;
// g1 ^= f4
g11 = f4;
g1 ^= g11;
// g4 ^= f2
g11 = f2;
g4 ^= g11;
// f20 ^= g6
g10 = f20;
g10 ^= g6;
f20 = g10;
// g0 ^= f5
g11 = f5;
g0 ^= g11;
// f18 ^= f22
g10 = f18;
g11 = f22;
g10 ^= g11;
f18 = g10;
// f26 ^= f5
g10 = f26;
g11 = f5;
g10 ^= g11;
f26 = g10;
// f26 ^= g3
g10 = f26;
g10 ^= g3;
f26 = g10;
// f4 ^= g6
g10 = f4;
g10 ^= g6;
f4 = g10;
// f5 ^= g8
g10 = f5;
g10 ^= g8;
f5 = g10;
// f2 ^= f18
g10 = f2;
g11 = f18;
g10 ^= g11;
f2 = g10;
// g6 ^= f22
g11 = f22;
g6 ^= g11;
// f15 ^= f22
g10 = f15;
g11 = f22;
g10 ^= g11;
f15 = g10;
// f22 ^= f0
g10 = f22;
g11 = f0;
g10 ^= g11;
f22 = g10;
// f20 ^= g9
g10 = f20;
g10 ^= g9;
f20 = g10;
// f17 ^= g0
g10 = f17;
g10 ^= g0;
f17 = g10;
// f18 ^= g3
g10 = f18;
g10 ^= g3;
f18 = g10;
// f25 ^= g0
g10 = f25;
g10 ^= g0;
f25 = g10;
// g5 ^= f7
g11 = f7;
g5 ^= g11;
// f4 ^= f28
g10 = f4;
g11 = f28;
g10 ^= g11;
f4 = g10;
// f28 ^= f7
g10 = f28;
g11 = f7;
g10 ^= g11;
f28 = g10;
// g8 ^= f30
g11 = f30;
g8 ^= g11;
// f14 ^= g1
g10 = f14;
g10 ^= g1;
f14 = g10;
// g9 ^= f2
g11 = f2;
g9 ^= g11;
// f27 ^= g5
g10 = f27;
g10 ^= g5;
f27 = g10;
// f2 ^= f0
g10 = f2;
g11 = f0;
g10 ^= g11;
f2 = g10;
// f15 ^= g1
g10 = f15;
g10 ^= g1;
f15 = g10;
// f22 ^= f24
g10 = f22;
g11 = f24;
g10 ^= g11;
f22 = g10;
// f1 ^= g6
g10 = f1;
g10 ^= g6;
f1 = g10;
// f19 ^= f14
g10 = f19;
g11 = f14;
g10 ^= g11;
f19 = g10;
// g4 ^= g1
g4 ^= g1;
// g0 ^= f18
g11 = f18;
g0 ^= g11;
// f29 ^= f1
g10 = f29;
g11 = f1;
g10 ^= g11;
f29 = g10;
// g5 ^= g8
g5 ^= g8;
// g6 ^= g4
g6 ^= g4;
// g1 ^= g2
g1 ^= g2;
// g3 ^= f30
g11 = f30;
g3 ^= g11;
// g2 ^= g7
g2 ^= g7;
// f7 ^= f26
g10 = f7;
g11 = f26;
g10 ^= g11;
f7 = g10;
// f9 ^= g3
g10 = f9;
g10 ^= g3;
f9 = g10;
// f0 ^= g0
g10 = f0;
g10 ^= g0;
f0 = g10;
out[0] = f0;
out[1] = f1;
out[2] = f2;
out[3] = g0;
out[4] = f4;
out[5] = f5;
out[6] = g1;
out[7] = f7;
out[8] = g2;
out[9] = f9;
out[10] = g3;
out[11] = g4;
out[12] = g5;
out[13] = g6;
out[14] = f14;
out[15] = f15;
out[16] = f16;
out[17] = f17;
out[18] = f18;
out[19] = f19;
out[20] = f20;
out[21] = g7;
out[22] = f22;
out[23] = g8;
out[24] = f24;
out[25] = f25;
out[26] = f26;
out[27] = f27;
out[28] = f28;
out[29] = f29;
out[30] = f30;
out[31] = g9;
}
#include "gft_mul_vi.h"
// x 0x9b120be
void gft_mul_v27( sto_t * out , const sto_t * in ) {
const uint32_t * b = in;
uint32_t g0,g1,g2,g3, g4,g5,g6,g7, g8,g9,g10,g11;
uint32_t f0,f1,f2,f3, f4,f5,f6,f7, f8,f9,f10,f11;
uint32_t f12,f13,f14,f15, f16,f17,f18,f19, f20,f21,f22,f23, f24,f25,f26,f27, f28,f29,f30,f31;
//final state: [{1, 2, 4, 6, 7, 9, 11, 13, 15, 19, 23, 24, 26, 27, 28, 30}, {0, 1, 3, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 18, 19, 22, 23, 25, 26, 29, 31}, {0, 1, 2, 5, 6, 7, 8, 10, 11, 12, 14, 15, 16, 18, 20, 22, 25, 26, 27, 28, 29, 31}, {0, 3, 4, 5, 6, 9, 10, 13, 14, 17, 19, 21, 23, 24, 25, 26, 28, 30, 31}, {0, 1, 2, 3, 4, 7, 10, 13, 14, 15, 16, 17, 20, 21, 23, 26, 27, 28}, {0, 2, 5, 6, 7, 11, 12, 13, 14, 16, 20, 22, 23, 26, 29}, {1, 2, 4, 8, 9, 10, 11, 13, 18, 19, 20, 23, 25, 27, 30}, {0, 1, 3, 5, 8, 10, 12, 13, 18, 21, 22, 23, 24, 25, 26, 27, 31}, {6, 9, 10, 12, 15, 16, 19, 20, 21, 22, 23, 24, 28, 29, 30}, {7, 8, 9, 11, 13, 14, 15, 17, 18, 19, 20, 22, 25, 28, 31}, {4, 5, 6, 7, 8, 9, 10, 12, 16, 21, 22, 26, 28, 29}, {4, 6, 8, 11, 13, 17, 20, 21, 23, 27, 28}, {1, 5, 8, 10, 11, 12, 13, 15, 19, 20, 24, 25, 27, 29, 31}, {0, 1, 4, 5, 9, 10, 12, 14, 15, 18, 19, 21, 24, 26, 27, 28, 29, 30, 31}, {3, 7, 9, 10, 11, 12, 15, 16, 18, 22, 24, 27, 28, 30, 31}, {2, 3, 6, 7, 8, 9, 10, 13, 14, 15, 17, 19, 23, 25, 26, 27, 29, 30}, {0, 4, 6, 7, 12, 13, 16, 17, 18, 25, 27, 28, 31}, {1, 5, 6, 12, 16, 19, 24, 25, 26, 27, 29, 30, 31}, {2, 5, 6, 7, 14, 15, 16, 17, 24, 26, 27, 28}, {3, 4, 5, 6, 14, 16, 25, 26, 29}, {0, 1, 2, 3, 5, 6, 7, 8, 11, 12, 15, 20, 21, 22, 24, 26, 27, 28, 29, 30}, {0, 2, 4, 5, 6, 9, 10, 11, 13, 14, 15, 20, 23, 25, 26, 28, 31}, {1, 2, 5, 8, 12, 20, 21, 25, 26, 27, 28, 29}, {0, 1, 3, 4, 5, 9, 13, 20, 24, 25, 26, 28}, {0, 2, 3, 10, 11, 12, 14, 15, 16, 18, 19, 22, 25, 27, 30}, {1, 2, 10, 13, 14, 17, 18, 23, 24, 25, 26, 27, 31}, {1, 2, 3, 9, 11, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31}, {0, 1, 2, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 20, 22, 25, 26, 28, 30}, {4, 6, 7, 8, 9, 10, 11, 12, 13, 17, 20, 21, 22, 23, 25, 31}, {5, 6, 8, 10, 12, 16, 17, 20, 22, 24, 25, 30, 31}, {5, 6, 7, 9, 10, 14, 15, 19, 21, 22, 27, 28, 30}, {4, 5, 6, 8, 9, 11, 14, 18, 19, 20, 21, 23, 26, 27, 29, 31}]
//i = 0
//better circuit found: #XORs = 279
//better circuit found: #XORs = 265
//better circuit found: #XORs = 263
//better circuit found: #XORs = 257
//better circuit found: #XORs = 255
//i = 50
//better circuit found: #XORs = 242
//i = 100
//i = 150
//i = 200
//i = 250
//i = 300
//i = 350
//i = 400
//i = 450
//i = 500
//i = 550
//i = 600
//i = 650
//i = 700
//i = 750
//i = 800
//i = 850
//i = 900
//i = 950
//initial state: [{2, 8, 11, 20, 26}, {25, 26, 27, 29}, {10, 11, 14, 15, 21, 31}, {3, 8, 15, 17, 19, 21, 24, 26, 30}, {0, 4, 5, 14, 26}, {12, 14, 16, 21, 29, 31}, {2, 3, 7, 15, 23, 27}, {0, 21, 22, 11}, {2, 7, 20, 23, 25, 31}, {17, 26, 6, 7, 10}, {2, 5, 21, 24, 25, 27}, {17, 4, 23, 14, 29, 30}, {6, 14, 15, 16, 22, 26, 28, 30}, {5, 23, 13, 15}, {3, 10, 11, 16, 25, 30}, {0, 6, 7, 13, 22}, {4, 6, 9, 26, 13}, {6, 12, 27, 30, 31}, {7, 17, 21, 22, 25, 30}, {0, 3, 6, 16, 26, 27}, {16, 18, 13}, {7, 8, 20, 24, 27}, {1, 2, 11, 12, 24, 28, 29}, {23, 21, 24, 10, 27, 9}, {0, 2, 14, 17, 28}, {1, 3, 4, 6, 14, 19, 24}, {0, 3, 4, 12, 17, 20}, {10, 15, 18, 24}, {7, 9, 17, 19, 24, 25, 31}, {1, 19, 22, 28}, {2, 6, 7, 11, 25, 28}, {4, 10, 20, 21, 26}]
//[2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 22, 23, 24, 25, 26, 28, 31, 0, 1, 4, 9, 15, 20, 21, 27, 29, 30]
//instuctions with recommended mapping to GP and FP registers:
//(cycle count without considering memory stores: 657)
g0 = b[2];
g1 = b[8];
g2 = b[11];
g3 = b[20];
g4 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f0 = g0;
g0 = b[25];
g1 = b[26];
g2 = b[27];
g3 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f1 = g0;
g0 = b[10];
g1 = b[11];
g2 = b[14];
g3 = b[15];
g4 = b[21];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f2 = g0;
g0 = b[3];
g1 = b[8];
g2 = b[15];
g3 = b[17];
g4 = b[19];
g5 = b[21];
g6 = b[24];
g7 = b[26];
g8 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
g0 ^= g8;
f3 = g0;
g0 = b[0];
g1 = b[4];
g2 = b[5];
g3 = b[14];
g4 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f4 = g0;
g0 = b[12];
g1 = b[14];
g2 = b[16];
g3 = b[21];
g4 = b[29];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f5 = g0;
g0 = b[2];
g1 = b[3];
g2 = b[7];
g3 = b[15];
g4 = b[23];
g5 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f6 = g0;
g0 = b[0];
g1 = b[21];
g2 = b[22];
g3 = b[11];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f7 = g0;
g0 = b[2];
g1 = b[7];
g2 = b[20];
g3 = b[23];
g4 = b[25];
g5 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f8 = g0;
g0 = b[17];
g1 = b[26];
g2 = b[6];
g3 = b[7];
g4 = b[10];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f9 = g0;
g0 = b[2];
g1 = b[5];
g2 = b[21];
g3 = b[24];
g4 = b[25];
g5 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f10 = g0;
g0 = b[17];
g1 = b[4];
g2 = b[23];
g3 = b[14];
g4 = b[29];
g5 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f11 = g0;
g0 = b[6];
g1 = b[14];
g2 = b[15];
g3 = b[16];
g4 = b[22];
g5 = b[26];
g6 = b[28];
g7 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
g0 ^= g7;
f12 = g0;
g0 = b[5];
g1 = b[23];
g2 = b[13];
g3 = b[15];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f13 = g0;
g0 = b[3];
g1 = b[10];
g2 = b[11];
g3 = b[16];
g4 = b[25];
g5 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f14 = g0;
g0 = b[0];
g1 = b[6];
g2 = b[7];
g3 = b[13];
g4 = b[22];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f15 = g0;
g0 = b[4];
g1 = b[6];
g2 = b[9];
g3 = b[26];
g4 = b[13];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f16 = g0;
g0 = b[6];
g1 = b[12];
g2 = b[27];
g3 = b[30];
g4 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f17 = g0;
g0 = b[7];
g1 = b[17];
g2 = b[21];
g3 = b[22];
g4 = b[25];
g5 = b[30];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f18 = g0;
g0 = b[0];
g1 = b[3];
g2 = b[6];
g3 = b[16];
g4 = b[26];
g5 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f19 = g0;
g0 = b[16];
g1 = b[18];
g2 = b[13];
g0 ^= g1;
g0 ^= g2;
f20 = g0;
g0 = b[7];
g1 = b[8];
g2 = b[20];
g3 = b[24];
g4 = b[27];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f21 = g0;
g0 = b[1];
g1 = b[2];
g2 = b[11];
g3 = b[12];
g4 = b[24];
g5 = b[28];
g6 = b[29];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f22 = g0;
g0 = b[23];
g1 = b[21];
g2 = b[24];
g3 = b[10];
g4 = b[27];
g5 = b[9];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f23 = g0;
g0 = b[0];
g1 = b[2];
g2 = b[14];
g3 = b[17];
g4 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f24 = g0;
g0 = b[1];
g1 = b[3];
g2 = b[4];
g3 = b[6];
g4 = b[14];
g5 = b[19];
g6 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f25 = g0;
g0 = b[0];
g1 = b[3];
g2 = b[4];
g3 = b[12];
g4 = b[17];
g5 = b[20];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f26 = g0;
g0 = b[10];
g1 = b[15];
g2 = b[18];
g3 = b[24];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f27 = g0;
g0 = b[7];
g1 = b[9];
g2 = b[17];
g3 = b[19];
g4 = b[24];
g5 = b[25];
g6 = b[31];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
g0 ^= g6;
f28 = g0;
g0 = b[1];
g1 = b[19];
g2 = b[22];
g3 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
f29 = g0;
g0 = b[2];
g1 = b[6];
g2 = b[7];
g3 = b[11];
g4 = b[25];
g5 = b[28];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
g0 ^= g5;
f30 = g0;
g0 = b[4];
g1 = b[10];
g2 = b[20];
g3 = b[21];
g4 = b[26];
g0 ^= g1;
g0 ^= g2;
g0 ^= g3;
g0 ^= g4;
f31 = g0;
g0 = f0;
g1 = f1;
g2 = f4;
g3 = f9;
g4 = f15;
g5 = f20;
g6 = f21;
g7 = f27;
g8 = f29;
g9 = f30;
// f23 ^= g6
g10 = f23;
g10 ^= g6;
f23 = g10;
// f25 ^= f16
g10 = f25;
g11 = f16;
g10 ^= g11;
f25 = g10;
// f17 ^= f16
g10 = f17;
g11 = f16;
g10 ^= g11;
f17 = g10;
// f16 ^= g3
g10 = f16;
g10 ^= g3;
f16 = g10;
// f31 ^= g7
g10 = f31;
g10 ^= g7;
f31 = g10;
// f31 ^= g6
g10 = f31;
g10 ^= g6;
f31 = g10;
// f13 ^= g2
g10 = f13;
g10 ^= g2;
f13 = g10;
// f7 ^= g2
g10 = f7;
g10 ^= g2;
f7 = g10;
// g2 ^= g1
g2 ^= g1;
// g1 ^= g3
g1 ^= g3;
// g3 ^= g4
g3 ^= g4;
// f13 ^= g5
g10 = f13;
g10 ^= g5;
f13 = g10;
// g6 ^= g5
g6 ^= g5;
// g5 ^= g4
g5 ^= g4;
// g4 ^= g9
g4 ^= g9;
// g4 ^= f22
g11 = f22;
g4 ^= g11;
// f11 ^= f18
g10 = f11;
g11 = f18;
g10 ^= g11;
f11 = g10;
// f11 ^= g1
g10 = f11;
g10 ^= g1;
f11 = g10;
// g8 ^= f22
g11 = f22;
g8 ^= g11;
// f22 ^= g0
g10 = f22;
g10 ^= g0;
f22 = g10;
// g3 ^= f24
g11 = f24;
g3 ^= g11;
// g3 ^= g0
g3 ^= g0;
// f19 ^= g2
g10 = f19;
g10 ^= g2;
f19 = g10;
// g2 ^= g4
g2 ^= g4;
// g2 ^= f11
g11 = f11;
g2 ^= g11;
// g6 ^= g0
g6 ^= g0;
// f7 ^= g0
g10 = f7;
g10 ^= g0;
f7 = g10;
// f3 ^= g0
g10 = f3;
g10 ^= g0;
f3 = g10;
// g0 ^= g9
g0 ^= g9;
// g9 ^= g1
g9 ^= g1;
// g1 ^= f28
g11 = f28;
g1 ^= g11;
// g8 ^= g9
g8 ^= g9;
// f17 ^= f25
g10 = f17;
g11 = f25;
g10 ^= g11;
f17 = g10;
// f25 ^= f28
g10 = f25;
g11 = f28;
g10 ^= g11;
f25 = g10;
// f23 ^= g0
g10 = f23;
g10 ^= g0;
f23 = g10;
// f28 ^= g8
g10 = f28;
g10 ^= g8;
f28 = g10;
// f14 ^= g7
g10 = f14;
g10 ^= g7;
f14 = g10;
// g4 ^= f26
g11 = f26;
g4 ^= g11;
// f18 ^= f10
g10 = f18;
g11 = f10;
g10 ^= g11;
f18 = g10;
// f6 ^= g7
g10 = f6;
g10 ^= g7;
f6 = g10;
// g0 ^= g7
g0 ^= g7;
// f24 ^= g8
g10 = f24;
g10 ^= g8;
f24 = g10;
// g7 ^= g8
g7 ^= g8;
// g8 ^= f22
g11 = f22;
g8 ^= g11;
// g9 ^= f18
g11 = f18;
g9 ^= g11;
// f8 ^= f10
g10 = f8;
g11 = f10;
g10 ^= g11;
f8 = g10;
// g4 ^= g3
g4 ^= g3;
// g6 ^= f8
g11 = f8;
g6 ^= g11;
// f18 ^= f12
g10 = f18;
g11 = f12;
g10 ^= g11;
f18 = g10;
// f12 ^= g3
g10 = f12;
g10 ^= g3;
f12 = g10;
// f31 ^= f8
g10 = f31;
g11 = f8;
g10 ^= g11;
f31 = g10;
// f11 ^= g3
g10 = f11;
g10 ^= g3;
f11 = g10;
// g1 ^= f2
g11 = f2;
g1 ^= g11;
// f8 ^= f5
g10 = f8;
g11 = f5;
g10 ^= g11;
f8 = g10;
// f22 ^= f10
g10 = f22;
g11 = f10;
g10 ^= g11;
f22 = g10;
// f10 ^= f7
g10 = f10;
g11 = f7;
g10 ^= g11;
f10 = g10;
// f10 ^= f8
g10 = f10;
g11 = f8;
g10 ^= g11;
f10 = g10;
// f7 ^= f26
g10 = f7;
g11 = f26;
g10 ^= g11;
f7 = g10;
// g2 ^= f26
g11 = f26;
g2 ^= g11;
// f25 ^= f6
g10 = f25;
g11 = f6;
g10 ^= g11;
f25 = g10;
// f6 ^= f17
g10 = f6;
g11 = f17;
g10 ^= g11;
f6 = g10;
// f17 ^= f19
g10 = f17;
g11 = f19;
g10 ^= g11;
f17 = g10;
// g3 ^= f28
g11 = f28;
g3 ^= g11;
// f6 ^= g3
g10 = f6;
g10 ^= g3;
f6 = g10;
// f16 ^= f28
g10 = f16;
g11 = f28;
g10 ^= g11;
f16 = g10;
// g8 ^= f17
g11 = f17;
g8 ^= g11;
// g3 ^= g7
g3 ^= g7;
// g7 ^= f13
g11 = f13;
g7 ^= g11;
// f10 ^= f23
g10 = f10;
g11 = f23;
g10 ^= g11;
f10 = g10;
// g9 ^= g1
g9 ^= g1;
// f16 ^= g5
g10 = f16;
g10 ^= g5;
f16 = g10;
// f5 ^= g5
g10 = f5;
g10 ^= g5;
f5 = g10;
// f2 ^= f14
g10 = f2;
g11 = f14;
g10 ^= g11;
f2 = g10;
// f13 ^= f23
g10 = f13;
g11 = f23;
g10 ^= g11;
f13 = g10;
// f23 ^= g2
g10 = f23;
g10 ^= g2;
f23 = g10;
// g5 ^= f14
g11 = f14;
g5 ^= g11;
// f8 ^= g9
g10 = f8;
g10 ^= g9;
f8 = g10;
// g0 ^= f6
g11 = f6;
g0 ^= g11;
// f26 ^= f5
g10 = f26;
g11 = f5;
g10 ^= g11;
f26 = g10;
// f5 ^= g6
g10 = f5;
g10 ^= g6;
f5 = g10;
// f12 ^= f17
g10 = f12;
g11 = f17;
g10 ^= g11;
f12 = g10;
// g2 ^= f18
g11 = f18;
g2 ^= g11;
// f31 ^= g1
g10 = f31;
g10 ^= g1;
f31 = g10;
// f24 ^= f14
g10 = f24;
g11 = f14;
g10 ^= g11;
f24 = g10;
// g6 ^= f13
g11 = f13;
g6 ^= g11;
// g4 ^= g0
g4 ^= g0;
// f14 ^= f28
g10 = f14;
g11 = f28;
g10 ^= g11;
f14 = g10;
// f28 ^= f11
g10 = f28;
g11 = f11;
g10 ^= g11;
f28 = g10;
// f7 ^= f25
g10 = f7;
g11 = f25;
g10 ^= g11;
f7 = g10;
// g7 ^= f6
g11 = f6;
g7 ^= g11;
// f13 ^= f17
g10 = f13;
g11 = f17;
g10 ^= g11;
f13 = g10;
// f3 ^= g6
g10 = f3;
g10 ^= g6;
f3 = g10;
// f26 ^= g0
g10 = f26;
g10 ^= g0;
f26 = g10;
// g5 ^= f22
g11 = f22;
g5 ^= g11;
// g1 ^= f7
g11 = f7;
g1 ^= g11;
// f2 ^= g5
g10 = f2;
g10 ^= g5;
f2 = g10;
out[0] = g0;
out[1] = g1;
out[2] = f2;
out[3] = f3;
out[4] = g2;
out[5] = f5;
out[6] = f6;
out[7] = f7;
out[8] = f8;
out[9] = g3;
out[10] = f10;
out[11] = f11;
out[12] = f12;
out[13] = f13;
out[14] = f14;
out[15] = g4;
out[16] = f16;
out[17] = f17;
out[18] = f18;
out[19] = f19;
out[20] = g5;
out[21] = g6;
out[22] = f22;
out[23] = f23;
out[24] = f24;
out[25] = f25;
out[26] = f26;
out[27] = g7;
out[28] = f28;
out[29] = g8;
out[30] = g9;
out[31] = f31;
}
#endif //!defined(_M4_ASM_)