summaryrefslogtreecommitdiff
path: root/tools/test_simd.sh
blob: 1268f872d91f7def4b5b1e7b0f2a95ce4621643f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/bin/bash -e

# this scripts has a number of tests for SIMD. It can be invoked
# on the host or on a QEMU machine.

script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
host_cpu=`uname -p`
results=${script_dir}/test_simd.results

# runs unit tests and save the results
test_unit(){
    { ./configure && make clean && make; } || { echo "Compile FAILED" >> ${results}; return 1; }
    make check || { echo "gf_methods $i FAILED" >> ${results}; ((++failed)); }
    cat tools/test-suite.log >> ${results} || true
}

# build with DEBUG_FUNCTIONS and save all methods selected
# to a results file
test_functions() {
    failed=0

    { ./configure && make clean && make CFLAGS="-DDEBUG_FUNCTIONS"; } || { echo "Compile FAILED" >> ${results}; return 1; }
    for i in 128 64 32 16 8 4; do
        { ${script_dir}/gf_methods $i -ACD -X >> ${results}; } || { echo "gf_methods $i FAILED" >> ${results}; ((++failed)); }
    done

    return ${failed}
}

compile_arm() {
    failed=0

    echo -n "Compiling with NO SIMD support..." >> ${results}
    { ./configure --disable-neon && make clean && make && echo "SUCCESS" >> ${results}; } || { echo "FAIL" >> ${results}; ((++failed)); }

    echo -n "Compiling with FULL SIMD support..." >> ${results}
    { ./configure && make clean && make && echo "SUCCESS" >> ${results}; } || { echo "FAIL" >> ${results}; ((++failed)); }

    return ${failed}
}

compile_intel() {
    failed=0

    echo -n "Compiling with NO SIMD support..." >> ${results}
    { ./configure && make clean && make && echo "SUCCESS" >> ${results}; } || { echo "FAIL" >> ${results}; ((++failed)); }

    echo -n "Compiling with SSE2 only..." >> ${results}
    export ax_cv_have_sse_ext=no 
    export ax_cv_have_sse2_ext=yes
    export ax_cv_have_sse3_ext=no
    export ax_cv_have_ssse3_ext=no
    export ax_cv_have_sse41_ext=no
    export ax_cv_have_sse42_ext=no
    export ax_cv_have_pclmuldq_ext=no
    { ./configure && make clean && make && echo "SUCCESS" >> ${results}; } || { echo "FAIL" >> ${results}; ((++failed)); }

    echo -n "Compiling with SSE2,SSE3 only..." >> ${results}
    export ax_cv_have_sse_ext=no 
    export ax_cv_have_sse2_ext=yes
    export ax_cv_have_sse3_ext=yes
    export ax_cv_have_ssse3_ext=no
    export ax_cv_have_sse41_ext=no
    export ax_cv_have_sse42_ext=no
    export ax_cv_have_pclmuldq_ext=no
    { ./configure && make clean && make && echo "SUCCESS" >> ${results}; } || { echo "FAIL" >> ${results}; ((++failed)); }

    echo -n "Compiling with SSE2,SSE3,SSSE3 only..." >> ${results}
    export ax_cv_have_sse_ext=no 
    export ax_cv_have_sse2_ext=yes
    export ax_cv_have_sse3_ext=yes
    export ax_cv_have_ssse3_ext=yes
    export ax_cv_have_sse41_ext=no
    export ax_cv_have_sse42_ext=no
    export ax_cv_have_pclmuldq_ext=no
    { ./configure && make clean && make && echo "SUCCESS" >> ${results}; } || { echo "FAIL" >> ${results}; ((++failed)); }

    echo -n "Compiling with SSE2,SSE3,SSSE3,SSE4_1 only..." >> ${results}
    export ax_cv_have_sse_ext=no 
    export ax_cv_have_sse2_ext=yes
    export ax_cv_have_sse3_ext=yes
    export ax_cv_have_ssse3_ext=yes
    export ax_cv_have_sse41_ext=yes
    export ax_cv_have_sse42_ext=no
    export ax_cv_have_pclmuldq_ext=no
    { ./configure && make clean && make && echo "SUCCESS" >> ${results}; } || { echo "FAIL" >> ${results}; ((++failed)); }

    echo -n "Compiling with SSE2,SSE3,SSSE3,SSE4_2 only..." >> ${results}
    export ax_cv_have_sse_ext=no 
    export ax_cv_have_sse2_ext=yes
    export ax_cv_have_sse3_ext=yes
    export ax_cv_have_ssse3_ext=yes
    export ax_cv_have_sse41_ext=no
    export ax_cv_have_sse42_ext=yes
    export ax_cv_have_pclmuldq_ext=no
    { ./configure && make clean && make && echo "SUCCESS" >> ${results}; } || { echo "FAIL" >> ${results}; ((++failed)); }

    echo -n "Compiling with FULL SIMD support..." >> ${results}
    export ax_cv_have_sse_ext=no 
    export ax_cv_have_sse2_ext=yes
    export ax_cv_have_sse3_ext=yes
    export ax_cv_have_ssse3_ext=yes
    export ax_cv_have_sse41_ext=yes
    export ax_cv_have_sse42_ext=yes
    export ax_cv_have_pclmuldq_ext=yes
    { ./configure && make clean && make && echo "SUCCESS" >> ${results}; } || { echo "FAIL" >> ${results}; ((++failed)); }

    return ${failed}
}

# test that we can compile the source code with different
# SIMD options. We assume that we are running on processor 
# full SIMD support
test_compile() {
    case $host_cpu in
        aarch64*|arm*) compile_arm ;;
        i[[3456]]86*|x86_64*|amd64*) compile_intel ;;
    esac
}

cd ${script_dir}/..
rm -f ${results}

test_$1
exit $?