Implementation notes: amd64, h5nano, crypto_core/aes256decrypt

Computer: h5nano
Architecture: amd64
CPU ID: CentaurHauls-000006f8-afc9fbff
SUPERCOP version: 20141014
Operation: crypto_core
Primitive: aes256decrypt
TimeImplementationCompilerBenchmark dateSUPERCOP version
2515opensslgcc -funroll-loops -O2 -fomit-frame-pointer2014042720140425
2515opensslgcc -funroll-loops -O3 -fomit-frame-pointer2014042720140425
2515opensslgcc -funroll-loops -m64 -O3 -fomit-frame-pointer2014042720140425
2515opensslgcc -funroll-loops -m64 -march=k8 -O3 -fomit-frame-pointer2014042720140425
2515opensslgcc -funroll-loops -march=k8 -O2 -fomit-frame-pointer2014042720140425
2515opensslgcc -m64 -march=k8 -O3 -fomit-frame-pointer2014042720140425
2520opensslgcc -funroll-loops -O -fomit-frame-pointer2014042720140425
2520opensslgcc -funroll-loops -m64 -O -fomit-frame-pointer2014042720140425
2520opensslgcc -m64 -march=core2 -msse4 -O3 -fomit-frame-pointer2014042720140425
2525opensslclang -O3 -fomit-frame-pointer2014062820140622
2525opensslclang -O3 -fwrapv -march=x86-64 -mcpu=core-avx2 -mavx2 -maes -mpclmul -fpolly -funroll-loops -fvectorize -fslp-vectorize -fslp-vectorize-aggressive -fomit-frame-pointer2014101420141014
2525opensslclang -O3 -fwrapv -mavx2 -fomit-frame-pointer2014062820140622
2525opensslclang -O3 -fwrapv -mavx2 -fpolly -funroll-loops -fvectorize -fslp-vectorize -fslp-vectorize-aggressive -fomit-frame-pointer2014062820140622
2525opensslgcc -O3 -fomit-frame-pointer2014042720140425
2525opensslgcc -fno-schedule-insns -O3 -fomit-frame-pointer2014042720140425
2525opensslgcc -funroll-loops -m64 -march=barcelona -O2 -fomit-frame-pointer2014042720140425
2525opensslgcc -funroll-loops -m64 -march=barcelona -O3 -fomit-frame-pointer2014042720140425
2525opensslgcc -funroll-loops -m64 -march=nocona -O2 -fomit-frame-pointer2014042720140425
2525opensslgcc -funroll-loops -m64 -march=nocona -O3 -fomit-frame-pointer2014042720140425
2525opensslgcc -funroll-loops -m64 -march=nocona -O -fomit-frame-pointer2014042720140425
2525opensslgcc -funroll-loops -march=barcelona -O2 -fomit-frame-pointer2014042720140425
2525opensslgcc -funroll-loops -march=barcelona -O -fomit-frame-pointer2014042720140425
2525opensslgcc -funroll-loops -march=nocona -O3 -fomit-frame-pointer2014042720140425
2525opensslgcc -funroll-loops -march=nocona -O -fomit-frame-pointer2014042720140425
2525opensslgcc -m64 -O3 -fomit-frame-pointer2014042720140425
2525opensslgcc -m64 -march=barcelona -O2 -fomit-frame-pointer2014042720140425
2525opensslgcc -m64 -march=barcelona -O3 -fomit-frame-pointer2014042720140425
2525opensslgcc -m64 -march=core2 -O3 -fomit-frame-pointer2014042720140425
2525opensslgcc -m64 -march=core2 -msse4.1 -O3 -fomit-frame-pointer2014042720140425
2525opensslgcc -m64 -march=corei7 -O3 -fomit-frame-pointer2014042720140425
2525opensslgcc -m64 -march=k8 -O2 -fomit-frame-pointer2014042720140425
2525opensslgcc -m64 -march=native -mtune=native -O3 -fomit-frame-pointer2014042720140425
2525opensslgcc -m64 -march=nocona -O2 -fomit-frame-pointer2014042720140425
2525opensslgcc -m64 -march=nocona -O3 -fomit-frame-pointer2014042720140425
2525opensslgcc -march=barcelona -O2 -fomit-frame-pointer2014042720140425
2525opensslgcc -march=barcelona -O3 -fomit-frame-pointer2014042720140425
2525opensslgcc -march=nocona -O2 -fomit-frame-pointer2014042720140425
2525opensslgcc -march=nocona -O3 -fomit-frame-pointer2014042720140425
2530opensslgcc -funroll-loops -fno-schedule-insns -O2 -fomit-frame-pointer2014042720140425
2530opensslgcc -funroll-loops -fno-schedule-insns -O3 -fomit-frame-pointer2014042720140425
2530opensslgcc -funroll-loops -fno-schedule-insns -O -fomit-frame-pointer2014042720140425
2530opensslgcc -funroll-loops -m64 -O2 -fomit-frame-pointer2014042720140425
2530opensslgcc -funroll-loops -m64 -march=k8 -O -fomit-frame-pointer2014042720140425
2530opensslgcc -funroll-loops -march=k8 -O3 -fomit-frame-pointer2014042720140425
2530opensslgcc -funroll-loops -march=k8 -O -fomit-frame-pointer2014042720140425
2530opensslgcc -m64 -O -fomit-frame-pointer2014042720140425
2530opensslgcc -m64 -march=core2 -O2 -fomit-frame-pointer2014042720140425
2530opensslgcc -m64 -march=core2 -msse4.1 -O2 -fomit-frame-pointer2014042720140425
2530opensslgcc -m64 -march=core2 -msse4.1 -O -fomit-frame-pointer2014042720140425
2530opensslgcc -m64 -march=core2 -msse4 -O2 -fomit-frame-pointer2014042720140425
2530opensslgcc -m64 -march=corei7 -O2 -fomit-frame-pointer2014042720140425
2530opensslgcc -m64 -march=corei7 -O -fomit-frame-pointer2014042720140425
2530opensslgcc -m64 -march=native -mtune=native -O2 -fomit-frame-pointer2014042720140425
2530opensslgcc -march=k8 -O2 -fomit-frame-pointer2014042720140425
2535opensslgcc -O -fomit-frame-pointer2014042720140425
2535opensslgcc -fno-schedule-insns -O -fomit-frame-pointer2014042720140425
2535opensslgcc -m64 -march=barcelona -O -fomit-frame-pointer2014042720140425
2535opensslgcc -m64 -march=core2 -O -fomit-frame-pointer2014042720140425
2535opensslgcc -m64 -march=core2 -msse4 -O -fomit-frame-pointer2014042720140425
2535opensslgcc -m64 -march=native -mtune=native -O -fomit-frame-pointer2014042720140425
2535opensslgcc -m64 -march=nocona -O -fomit-frame-pointer2014042720140425
2535opensslgcc -march=barcelona -O -fomit-frame-pointer2014042720140425
2535opensslgcc -march=nocona -O -fomit-frame-pointer2014042720140425
2540opensslgcc -funroll-loops -march=barcelona -O3 -fomit-frame-pointer2014042720140425
2540opensslgcc -m64 -march=k8 -O -fomit-frame-pointer2014042720140425
2540opensslgcc -march=k8 -O -fomit-frame-pointer2014042720140425
2545opensslclang -O3 -fwrapv -march=x86-64 -mcpu=core-avx2 -mavx2 -maes -mpclmul -fomit-frame-pointer2014101420141014
2545opensslgcc -funroll-loops -m64 -march=k8 -O2 -fomit-frame-pointer2014042720140425
2545opensslgcc -funroll-loops -march=nocona -O2 -fomit-frame-pointer2014042720140425
2550opensslcc2014042720140425
2550opensslgcc -funroll-loops2014042720140425
2550opensslgcc -funroll-loops -m64 -march=barcelona -O -fomit-frame-pointer2014042720140425
2550opensslgcc -march=k8 -O3 -fomit-frame-pointer2014042720140425
2560opensslgcc -O2 -fomit-frame-pointer2014042720140425
2560opensslgcc -fno-schedule-insns -O2 -fomit-frame-pointer2014042720140425
2560opensslgcc -m64 -O2 -fomit-frame-pointer2014042720140425
2565opensslgcc2014042720140425
2675opensslgcc -Os -fomit-frame-pointer2014042720140425
2675opensslgcc -funroll-loops -fno-schedule-insns -Os -fomit-frame-pointer2014042720140425
2675opensslgcc -funroll-loops -m64 -march=nocona -Os -fomit-frame-pointer2014042720140425
2675opensslgcc -m64 -march=core2 -msse4.1 -Os -fomit-frame-pointer2014042720140425
2675opensslgcc -m64 -march=core2 -msse4 -Os -fomit-frame-pointer2014042720140425
2675opensslgcc -m64 -march=native -mtune=native -Os -fomit-frame-pointer2014042720140425
2675opensslgcc -march=barcelona -Os -fomit-frame-pointer2014042720140425
2695opensslgcc -m64 -Os -fomit-frame-pointer2014042720140425
2765opensslgcc -funroll-loops -m64 -march=k8 -Os -fomit-frame-pointer2014042720140425
2765opensslgcc -funroll-loops -march=barcelona -Os -fomit-frame-pointer2014042720140425
2765opensslgcc -funroll-loops -march=nocona -Os -fomit-frame-pointer2014042720140425
2765opensslgcc -m64 -march=core2 -Os -fomit-frame-pointer2014042720140425
2765opensslgcc -m64 -march=corei7 -Os -fomit-frame-pointer2014042720140425
2765opensslgcc -m64 -march=nocona -Os -fomit-frame-pointer2014042720140425
2765opensslgcc -march=k8 -Os -fomit-frame-pointer2014042720140425
2790opensslgcc -m64 -march=k8 -Os -fomit-frame-pointer2014042720140425
2790opensslgcc -march=nocona -Os -fomit-frame-pointer2014042720140425
2815opensslgcc -fno-schedule-insns -Os -fomit-frame-pointer2014042720140425
2845opensslgcc -funroll-loops -Os -fomit-frame-pointer2014042720140425
2845opensslgcc -funroll-loops -m64 -Os -fomit-frame-pointer2014042720140425
2845opensslgcc -funroll-loops -m64 -march=barcelona -Os -fomit-frame-pointer2014042720140425
2845opensslgcc -funroll-loops -march=k8 -Os -fomit-frame-pointer2014042720140425
2845opensslgcc -m64 -march=barcelona -Os -fomit-frame-pointer2014042720140425
752295refgcc -m64 -O3 -fomit-frame-pointer2014042720140425
752300refgcc -O3 -fomit-frame-pointer2014042720140425
752550refgcc -fno-schedule-insns -O3 -fomit-frame-pointer2014042720140425
758000refgcc -funroll-loops -march=nocona -O3 -fomit-frame-pointer2014042720140425
758010refgcc -funroll-loops -m64 -march=nocona -O3 -fomit-frame-pointer2014042720140425
758945refgcc -m64 -march=core2 -O3 -fomit-frame-pointer2014042720140425
759250refgcc -m64 -march=corei7 -O3 -fomit-frame-pointer2014042720140425
759625refgcc -m64 -march=core2 -msse4 -O3 -fomit-frame-pointer2014042720140425
759665refgcc -m64 -march=native -mtune=native -O3 -fomit-frame-pointer2014042720140425
759765refgcc -m64 -march=core2 -msse4.1 -O3 -fomit-frame-pointer2014042720140425
766385refgcc -m64 -march=nocona -O3 -fomit-frame-pointer2014042720140425
766385refgcc -march=nocona -O3 -fomit-frame-pointer2014042720140425
768675refgcc -funroll-loops -march=barcelona -O3 -fomit-frame-pointer2014042720140425
768685refgcc -funroll-loops -m64 -march=barcelona -O3 -fomit-frame-pointer2014042720140425
774010refgcc -funroll-loops -m64 -march=k8 -O3 -fomit-frame-pointer2014042720140425
774045refgcc -funroll-loops -march=k8 -O3 -fomit-frame-pointer2014042720140425
786920refgcc -funroll-loops -O3 -fomit-frame-pointer2014042720140425
786970refgcc -funroll-loops -m64 -O3 -fomit-frame-pointer2014042720140425
787025refgcc -funroll-loops -fno-schedule-insns -O3 -fomit-frame-pointer2014042720140425
787715refgcc -m64 -march=k8 -O3 -fomit-frame-pointer2014042720140425
787715refgcc -march=k8 -O3 -fomit-frame-pointer2014042720140425
788780refgcc -m64 -march=barcelona -O3 -fomit-frame-pointer2014042720140425
789030refgcc -march=barcelona -O3 -fomit-frame-pointer2014042720140425
1023680refgcc -funroll-loops -fno-schedule-insns -O -fomit-frame-pointer2014042720140425
1023680refgcc -funroll-loops -m64 -O -fomit-frame-pointer2014042720140425
1023730refgcc -funroll-loops -O -fomit-frame-pointer2014042720140425
1025455refgcc -funroll-loops -march=barcelona -O -fomit-frame-pointer2014042720140425
1025480refgcc -funroll-loops -m64 -march=barcelona -O -fomit-frame-pointer2014042720140425
1025485refgcc -funroll-loops -march=k8 -O -fomit-frame-pointer2014042720140425
1025630refgcc -funroll-loops -m64 -march=k8 -O -fomit-frame-pointer2014042720140425
1097265refgcc -funroll-loops -m64 -march=barcelona -O2 -fomit-frame-pointer2014042720140425
1097270refgcc -funroll-loops -march=barcelona -O2 -fomit-frame-pointer2014042720140425
1100430refgcc -funroll-loops -O2 -fomit-frame-pointer2014042720140425
1100480refgcc -funroll-loops -m64 -O2 -fomit-frame-pointer2014042720140425
1100520refgcc -funroll-loops -fno-schedule-insns -O2 -fomit-frame-pointer2014042720140425
1101380refgcc -funroll-loops -m64 -march=k8 -O2 -fomit-frame-pointer2014042720140425
1101395refgcc -funroll-loops -march=k8 -O2 -fomit-frame-pointer2014042720140425
1139275refgcc -funroll-loops -m64 -march=nocona -O2 -fomit-frame-pointer2014042720140425
1139515refgcc -funroll-loops -march=nocona -O2 -fomit-frame-pointer2014042720140425
1154140refgcc -funroll-loops -march=nocona -O -fomit-frame-pointer2014042720140425
1154335refgcc -funroll-loops -m64 -march=nocona -O -fomit-frame-pointer2014042720140425
1209615refclang -O3 -fwrapv -march=x86-64 -mcpu=core-avx2 -mavx2 -maes -mpclmul -fomit-frame-pointer2014101420141014
1209615refclang -O3 -fwrapv -march=x86-64 -mcpu=core-avx2 -mavx2 -maes -mpclmul -fpolly -funroll-loops -fvectorize -fslp-vectorize -fslp-vectorize-aggressive -fomit-frame-pointer2014101420141014
1209615refclang -O3 -fwrapv -mavx2 -fomit-frame-pointer2014062820140622
1209615refclang -O3 -fwrapv -mavx2 -fpolly -funroll-loops -fvectorize -fslp-vectorize -fslp-vectorize-aggressive -fomit-frame-pointer2014062820140622
1226705refclang -O3 -fomit-frame-pointer2014062820140622
2128330refgcc -march=k8 -O2 -fomit-frame-pointer2014042720140425
2129785refgcc -m64 -march=k8 -O2 -fomit-frame-pointer2014042720140425
2135455refgcc -m64 -O2 -fomit-frame-pointer2014042720140425
2135480refgcc -O2 -fomit-frame-pointer2014042720140425
2135510refgcc -fno-schedule-insns -O2 -fomit-frame-pointer2014042720140425
2138600refgcc -m64 -march=barcelona -O2 -fomit-frame-pointer2014042720140425
2138650refgcc -march=barcelona -O2 -fomit-frame-pointer2014042720140425
2153240refgcc -m64 -march=core2 -msse4.1 -O2 -fomit-frame-pointer2014042720140425
2153245refgcc -m64 -march=core2 -msse4 -O2 -fomit-frame-pointer2014042720140425
2153315refgcc -m64 -march=core2 -O2 -fomit-frame-pointer2014042720140425
2153350refgcc -m64 -march=corei7 -O2 -fomit-frame-pointer2014042720140425
2153365refgcc -m64 -march=native -mtune=native -O2 -fomit-frame-pointer2014042720140425
2206980refgcc -march=nocona -O2 -fomit-frame-pointer2014042720140425
2206985refgcc -m64 -march=nocona -O2 -fomit-frame-pointer2014042720140425
2216905refgcc -O -fomit-frame-pointer2014042720140425
2216980refgcc -m64 -march=native -mtune=native -O -fomit-frame-pointer2014042720140425
2217675refgcc -m64 -march=core2 -msse4.1 -O -fomit-frame-pointer2014042720140425
2217685refgcc -m64 -O -fomit-frame-pointer2014042720140425
2217690refgcc -fno-schedule-insns -O -fomit-frame-pointer2014042720140425
2217710refgcc -m64 -march=core2 -O -fomit-frame-pointer2014042720140425
2217725refgcc -m64 -march=core2 -msse4 -O -fomit-frame-pointer2014042720140425
2217815refgcc -m64 -march=corei7 -O -fomit-frame-pointer2014042720140425
2223915refgcc -m64 -march=k8 -Os -fomit-frame-pointer2014042720140425
2223975refgcc -Os -fomit-frame-pointer2014042720140425
2224010refgcc -m64 -Os -fomit-frame-pointer2014042720140425
2224135refgcc -march=k8 -Os -fomit-frame-pointer2014042720140425
2224325refgcc -fno-schedule-insns -Os -fomit-frame-pointer2014042720140425
2224940refgcc -funroll-loops -m64 -march=k8 -Os -fomit-frame-pointer2014042720140425
2224970refgcc -funroll-loops -Os -fomit-frame-pointer2014042720140425
2224970refgcc -funroll-loops -m64 -Os -fomit-frame-pointer2014042720140425
2225000refgcc -funroll-loops -march=k8 -Os -fomit-frame-pointer2014042720140425
2225030refgcc -funroll-loops -fno-schedule-insns -Os -fomit-frame-pointer2014042720140425
2246515refgcc -m64 -march=barcelona -Os -fomit-frame-pointer2014042720140425
2246535refgcc -march=barcelona -Os -fomit-frame-pointer2014042720140425
2247270refgcc -m64 -march=corei7 -Os -fomit-frame-pointer2014042720140425
2247300refgcc -m64 -march=native -mtune=native -Os -fomit-frame-pointer2014042720140425
2247460refgcc -m64 -march=core2 -Os -fomit-frame-pointer2014042720140425
2247470refgcc -m64 -march=core2 -msse4 -Os -fomit-frame-pointer2014042720140425
2247530refgcc -m64 -march=core2 -msse4.1 -Os -fomit-frame-pointer2014042720140425
2250205refgcc -funroll-loops -m64 -march=barcelona -Os -fomit-frame-pointer2014042720140425
2250315refgcc -funroll-loops -march=barcelona -Os -fomit-frame-pointer2014042720140425
2255575refgcc -m64 -march=nocona -Os -fomit-frame-pointer2014042720140425
2255585refgcc -march=nocona -Os -fomit-frame-pointer2014042720140425
2264680refgcc -funroll-loops -m64 -march=nocona -Os -fomit-frame-pointer2014042720140425
2264795refgcc -funroll-loops -march=nocona -Os -fomit-frame-pointer2014042720140425
2284120refgcc -march=nocona -O -fomit-frame-pointer2014042720140425
2284160refgcc -m64 -march=nocona -O -fomit-frame-pointer2014042720140425
2296300refgcc -m64 -march=k8 -O -fomit-frame-pointer2014042720140425
2296360refgcc -march=k8 -O -fomit-frame-pointer2014042720140425
2297030refgcc -march=barcelona -O -fomit-frame-pointer2014042720140425
2297300refgcc -m64 -march=barcelona -O -fomit-frame-pointer2014042720140425
6615915refgcc -funroll-loops2014042720140425
6616030refgcc2014042720140425
6619070refcc2014042720140425

Compiler output

Implementation: crypto_core/aes256decrypt/openssl
Compiler: clang -O3 -fomit-frame-pointer
try.c: try-anything.c:110:19: warning: if statement has empty body [-Wempty-body]
try.c: ;
try.c: ^
try.c: 1 warning generated.
try.c: try-anything.c:110:19: warning: if statement has empty body [-Wempty-body]
try.c: ;
try.c: ^
try.c: 1 warning generated.

Number of similar (compiler,implementation) pairs: 2, namely:
CompilerImplementations
clang -O3 -fomit-frame-pointer openssl ref

Compiler output

Implementation: crypto_core/aes256decrypt/openssl
Compiler: clang -O3 -fwrapv -march=x86-64 -mcpu=core-avx2 -mavx2 -maes -mpclmul -fomit-frame-pointer
core.c: clang: warning: argument unused during compilation: '-mcpu=core-avx2'
core.c: clang: warning: argument unused during compilation: '-mavx2'
core.c: clang: warning: argument unused during compilation: '-mpclmul'
try.c: try-anything.c:110:19: warning: if statement has empty body [-Wempty-body]
try.c: ;
try.c: ^
try.c: 1 warning generated.
try.c: try-anything.c:110:19: warning: if statement has empty body [-Wempty-body]
try.c: ;
try.c: ^
try.c: 1 warning generated.

Number of similar (compiler,implementation) pairs: 2, namely:
CompilerImplementations
clang -O3 -fwrapv -march=x86-64 -mcpu=core-avx2 -mavx2 -maes -mpclmul -fomit-frame-pointer openssl ref

Compiler output

Implementation: crypto_core/aes256decrypt/openssl
Compiler: clang -O3 -fwrapv -march=x86-64 -mcpu=core-avx2 -mavx2 -maes -mpclmul -fpolly -funroll-loops -fvectorize -fslp-vectorize -fslp-vectorize-aggressive -fomit-frame-pointer
core.c: clang: warning: argument unused during compilation: '-mcpu=core-avx2'
core.c: clang: warning: argument unused during compilation: '-mavx2'
core.c: clang: warning: argument unused during compilation: '-mpclmul'
core.c: clang: warning: argument unused during compilation: '-fpolly'
core.c: clang: warning: argument unused during compilation: '-fvectorize'
core.c: clang: warning: argument unused during compilation: '-fslp-vectorize'
core.c: clang: warning: argument unused during compilation: '-fslp-vectorize-aggressive'
try.c: try-anything.c:110:19: warning: if statement has empty body [-Wempty-body]
try.c: ;
try.c: ^
try.c: 1 warning generated.
try.c: try-anything.c:110:19: warning: if statement has empty body [-Wempty-body]
try.c: ;
try.c: ^
try.c: 1 warning generated.

Number of similar (compiler,implementation) pairs: 2, namely:
CompilerImplementations
clang -O3 -fwrapv -march=x86-64 -mcpu=core-avx2 -mavx2 -maes -mpclmul -fpolly -funroll-loops -fvectorize -fslp-vectorize -fslp-vectorize-aggressive -fomit-frame-pointer openssl ref

Compiler output

Implementation: crypto_core/aes256decrypt/openssl
Compiler: clang -O3 -fwrapv -mavx2 -fomit-frame-pointer
core.c: clang: warning: argument unused during compilation: '-mavx2'
try.c: try-anything.c:110:19: warning: if statement has empty body [-Wempty-body]
try.c: ;
try.c: ^
try.c: 1 warning generated.
try.c: try-anything.c:110:19: warning: if statement has empty body [-Wempty-body]
try.c: ;
try.c: ^
try.c: 1 warning generated.

Number of similar (compiler,implementation) pairs: 2, namely:
CompilerImplementations
clang -O3 -fwrapv -mavx2 -fomit-frame-pointer openssl ref

Compiler output

Implementation: crypto_core/aes256decrypt/openssl
Compiler: clang -O3 -fwrapv -mavx2 -fpolly -funroll-loops -fvectorize -fslp-vectorize -fslp-vectorize-aggressive -fomit-frame-pointer
core.c: clang: warning: argument unused during compilation: '-mavx2'
core.c: clang: warning: argument unused during compilation: '-fpolly'
core.c: clang: warning: argument unused during compilation: '-fvectorize'
core.c: clang: warning: argument unused during compilation: '-fslp-vectorize'
core.c: clang: warning: argument unused during compilation: '-fslp-vectorize-aggressive'
try.c: try-anything.c:110:19: warning: if statement has empty body [-Wempty-body]
try.c: ;
try.c: ^
try.c: 1 warning generated.
try.c: try-anything.c:110:19: warning: if statement has empty body [-Wempty-body]
try.c: ;
try.c: ^
try.c: 1 warning generated.

Number of similar (compiler,implementation) pairs: 2, namely:
CompilerImplementations
clang -O3 -fwrapv -mavx2 -fpolly -funroll-loops -fvectorize -fslp-vectorize -fslp-vectorize-aggressive -fomit-frame-pointer openssl ref