// File: /workspace/github_cpp_makefile_star2_O2/travisdowns[P]avx-turbo/avx-turbo.cpp
// Function: make_from_spec(ISA, std::vector<int, std::allocator<int>>)
std::vector<test_spec> make_from_spec(ISA, std::vector<int> cpus) {
    std::string str = arg_spec.Get();
    if (verbose) printf("Making tests from spec string: %s\n", str.c_str());

    test_spec spec{str, "<multiple descriptions>"};
    for (auto& elem : split(str,",")) {
        if (verbose) printf("Elem: %s\n", elem.c_str());
        std::vector<std::string> halves = split(elem,"/");
        assert(halves.size() > 0);
        if (halves.size() > 2) {
            throw std::runtime_error(std::string("bad spec syntax in element: '" + elem + "'"));
        }
        int count = (halves.size() == 1 ? 1 : std::atoi(halves[1].c_str()));
        const test_func* test = find_one_test(halves[0]);
        if (!test) {
            throw std::runtime_error("couldn't find test: '" + halves[0] + "'");
        }

        spec.thread_funcs.insert(spec.thread_funcs.end(), count, *test);
    }

    if (spec.count() > cpus.size()) {
        printf("ERROR: this spec requires %d CPUs but only %d are available.\n", (int)spec.count(), (int)cpus.size());
        exit(EXIT_FAILURE);
    }

    return {spec};
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x178, %rsp            # imm = 0x178
movq %rdx, %r14
movq %rdi, %rbx
leaq 0x2029f(%rip), %rsi     # 0x27df0
leaq 0x68(%rsp), %rdi
callq 0x64a0
cmpb $0x1, 0x206d6(%rip)     # 0x28238
jne 0x7b77
movq 0x68(%rsp), %rsi
leaq 0x13ad9(%rip), %rdi     # 0x1b649
xorl %eax, %eax
callq 0x6050
leaq 0x100(%rsp), %rdi
leaq 0x68(%rsp), %rsi
callq 0x64a0
leaq 0x13adc(%rip), %rsi     # 0x1b66c
leaq 0xe0(%rsp), %rdi
leaq 0x88(%rsp), %rdx
callq 0x6100
leaq 0x120(%rsp), %rdi
leaq 0x100(%rsp), %rsi
leaq 0xe0(%rsp), %rdx
callq 0x9a1c
leaq 0xe0(%rsp), %rdi
callq 0x6140
leaq 0x100(%rsp), %rdi
callq 0x6140
leaq 0x13a3c(%rip), %rsi     # 0x1b61f
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x6100
movq %r14, 0x30(%rsp)
movq %rbx, 0x28(%rsp)
leaq 0x50(%rsp), %rdi
leaq 0x68(%rsp), %rsi
leaq 0x88(%rsp), %rdx
callq 0x7a61
leaq 0x88(%rsp), %r12
movq %r12, %rdi
callq 0x6140
movq 0x50(%rsp), %r15
movq 0x58(%rsp), %r14
leaq 0x38(%rsp), %rbp
cmpq %r14, %r15
je 0x7cf1
cmpb $0x1, 0x205f3(%rip)     # 0x28238
jne 0x7c58
movq (%r15), %rsi
leaq 0x13a33(%rip), %rdi     # 0x1b684
xorl %eax, %eax
callq 0x6050
movq %r12, %rdi
leaq 0x13a2c(%rip), %rsi     # 0x1b68e
leaq 0x8(%rsp), %rdx
callq 0x6100
movq %rbp, %rdi
movq %r15, %rsi
movq %r12, %rdx
callq 0x7a61
movq %r12, %rdi
callq 0x6140
movq 0x38(%rsp), %r13
movq 0x40(%rsp), %rax
subq %r13, %rax
je 0x7d93
cmpq $0x41, %rax
jae 0x7db2
pushq $0x1
popq %rbx
cmpq $0x20, %rax
je 0x7cb4
movq 0x20(%r13), %rdi
callq 0x6530
movslq %eax, %rbx
movq %r13, %rdi
callq 0x7783
testq %rax, %rax
je 0x7e17
movq 0x168(%rsp), %rsi
leaq 0x160(%rsp), %rdi
movq %rbx, %rdx
movq %rax, %rcx
callq 0x9af4
movq %rbp, %rdi
callq 0x99b8
addq $0x20, %r15
jmp 0x7c35
leaq 0x50(%rsp), %rdi
callq 0x99b8
movq 0x168(%rsp), %rsi
subq 0x160(%rsp), %rsi
sarq $0x5, %rsi
movq 0x30(%rsp), %rax
movq 0x8(%rax), %rdx
subq (%rax), %rdx
sarq $0x2, %rdx
cmpq %rdx, %rsi
ja 0x7e7c
leaq 0x88(%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0x9b14
movq 0x28(%rsp), %rbx
leaq 0x88(%rsp), %rsi
pushq $0x1
popq %rdx
leaq 0x8(%rsp), %rcx
movq %rbx, %rdi
callq 0x9b8a
leaq 0x88(%rsp), %rdi
callq 0x9b6a
leaq 0x120(%rsp), %rdi
callq 0x9b6a
leaq 0x68(%rsp), %rdi
callq 0x6140
movq %rbx, %rax
addq $0x178, %rsp            # imm = 0x178
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x138f6(%rip), %rdi     # 0x1b690
leaq 0x13901(%rip), %rsi     # 0x1b6a2
leaq 0x13908(%rip), %rcx     # 0x1b6b0
movl $0x216, %edx            # imm = 0x216
callq 0x6220
pushq $0x10
popq %rdi
callq 0x6170
movq %rax, %r14
leaq 0x13929(%rip), %rsi     # 0x1b6ed
leaq 0x8(%rsp), %rdi
movq %r15, %rdx
callq 0x9a7d
leaq 0x14918(%rip), %rdx     # 0x1c6f0
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x9a5e
movb $0x1, %bpl
leaq 0x88(%rsp), %rsi
movq %r14, %rdi
callq 0x6580
xorl %ebp, %ebp
movq 0x1f1f2(%rip), %rsi     # 0x26ff8
movq 0x1f1ab(%rip), %rdx     # 0x26fb8
movq %r14, %rdi
callq 0x65e0
jmp 0x7e7c
pushq $0x10
popq %rdi
callq 0x6170
movq %rax, %r14
movq 0x38(%rsp), %rdx
leaq 0x138dd(%rip), %rsi     # 0x1b70b
leaq 0x8(%rsp), %rdi
callq 0x9a7d
leaq 0x148b1(%rip), %rdx     # 0x1c6f0
leaq 0x88(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x9a5e
movb $0x1, %bpl
leaq 0x88(%rsp), %rsi
movq %r14, %rdi
callq 0x6580
xorl %ebp, %ebp
movq 0x1f18b(%rip), %rsi     # 0x26ff8
movq 0x1f144(%rip), %rdx     # 0x26fb8
movq %r14, %rdi
callq 0x65e0
leaq 0x1389e(%rip), %rdi     # 0x1b721
xorl %eax, %eax
callq 0x6050
pushq $0x1
popq %rdi
callq 0x63f0
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x9b6a
jmp 0x7f59
jmp 0x7ebe
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x6140
jmp 0x7f59
movq %rax, %rbx
jmp 0x7f59
movq %rax, %rbx
leaq 0xe0(%rsp), %rdi
callq 0x6140
jmp 0x7edb
movq %rax, %rbx
leaq 0x100(%rsp), %rdi
callq 0x6140
jmp 0x7f66
movq %rax, %rbx
jmp 0x7f66
jmp 0x7ef3
jmp 0x7f05
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x6140
jmp 0x7f0b
movq %rax, %rbx
movb $0x1, %bpl
leaq 0x8(%rsp), %rdi
callq 0x6140
testb %bpl, %bpl
jne 0x7f21
jmp 0x7f2e
jmp 0x7f1e
movq %rax, %rbx
movq %r14, %rdi
callq 0x6270
jmp 0x7f2e
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
callq 0x99b8
jmp 0x7f4f
movq %rax, %rbx
jmp 0x7f4f
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x6140
leaq 0x50(%rsp), %rdi
callq 0x99b8
leaq 0x120(%rsp), %rdi
callq 0x9b6a
leaq 0x68(%rsp), %rdi
callq 0x6140
movq %rbx, %rdi
callq 0x65f0