Skip to content

Instantly share code, notes, and snippets.

@gwenn
Last active December 17, 2017 08:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gwenn/243835b5ac3163b4cc80c83779d7b2b0 to your computer and use it in GitHub Desktop.
Save gwenn/243835b5ac3163b4cc80c83779d7b2b0 to your computer and use it in GitHub Desktop.
Find inconsistencies between the intel intrinsics XML file and the Rust code
name;cpuid;Intel;Rust;Clang
_mm_stream_pi;SSE;movntq;;@llvm.x86.mmx.movnt.dq
# Extract instrinsics from XML file
xsltproc data.xsl intel-intrinsics-3.3.15.xml > intel-intrinsics-3.3.15.csv
# Load intel intrinsics into an SQLite db
rm -f intrinsics.db
sqlite3 -batch intrinsics.db <<EOF
CREATE TABLE intrinsics(name TEXT NOT NULL, cpuid TEXT, instruction TEXT, UNIQUE (name, cpuid));
.separator ';'
.import intel-intrinsics-3.3.15.csv intrinsics
EOF
rm -f intel-intrinsics-3.3.15.csv
# Extract checks from Clang tests
# FIXME
CLANG_SRC=~/cfe-5.0.0.src
grep -h '//\s*CHECK:\s\+call\s\+.*\s\+@llvm\|return\s\+_\|^\s*_m[m_]' $CLANG_SRC/test/CodeGen/{avx,avx2,bmi,bmi2,lzcnt,mmx,popcnt,sse,sse2,sse3,sse41,sse42}-builtins.c \
| sed -e 's/^.*CHECK:.*call.*\(@llvm[^(]*\).*$/\1/' \
| sed -e 's/^.*return[^_]*\(_[^(]*\).*$/\1/' \
| sed -e 's/^[^_]*\(_[^(]*\).*$/\1/' \
| awk '/^_/{print $0";"p; p=""}!/^_/{p=$0}' > clang_checks.csv
# Load them in the SQLite db
sqlite3 -batch intrinsics.db 2> /dev/null <<EOF
CREATE TABLE clang_checks (name TEXT NOT NULL UNIQUE, checks TEXT);
.separator ';'
.import clang_checks.csv clang_checks
EOF
rm -f clang_checks.csv
# Extract implemented intrinsics from Rust files
for _cpuid in abm avx avx2 bmi bmi2 fxsr mmx sse sse2 sse3 sse41 sse42 ssse3 xsave; do
find coresimd/ -type f -name $_cpuid.rs -print0 \
| xargs -0 grep -h '^#\[cfg_attr(.*assert_instr(\|pub unsafe fn' \
| sed -e 's/^#\[cfg_attr(.*assert_instr(\([^),]*\)[,)].*$/\1/' \
| sed -e 's/^pub unsafe fn \([^(]*\)(.*$/\1/' \
| awk '/^_/{print $0";"p; p=""}!/^_/{p=$0}' > $_cpuid.csv
if [ "$_cpuid" = "sse41" ]; then
cpuid="sse4.1"
elif [ "$_cpuid" = "sse42" ]; then
cpuid="sse4.2"
else
cpuid="$_cpuid"
fi
# Load them in the SQLite db
sqlite3 -batch intrinsics.db <<EOF
CREATE TEMPORARY TABLE $_cpuid(name TEXT NOT NULL UNIQUE, instruction TEXT);
.separator ';'
.import $_cpuid.csv $_cpuid
CREATE TABLE IF NOT EXISTS coresimd(name TEXT NOT NULL, cpuid TEXT, instruction TEXT, UNIQUE (name, cpuid));
INSERT INTO coresimd SELECT name, '$cpuid', instruction FROM $_cpuid;
DROP TABLE $_cpuid;
CREATE TABLE IF NOT EXISTS supported_cpuid(name TEXT NOT NULL, UNIQUE (name));
INSERT INTO supported_cpuid VALUES ('$cpuid');
EOF
rm -f $_cpuid.csv
done
sqlite3 -batch intrinsics.db <<EOF
.headers on
.separator ';'
.once result.txt
-- find inconsistencies (or missing implementation)
SELECT i.name, i.cpuid, i.instruction as 'Intel',
CASE WHEN r.instruction IS NULL THEN 'MISSING' ELSE r.instruction END as 'Rust',
c.checks as 'Clang'
FROM intrinsics i
INNER JOIN supported_cpuid sc ON sc.name LIKE i.cpuid
LEFT OUTER JOIN coresimd r ON r.name = i.name AND r.cpuid LIKE i.cpuid
LEFT OUTER JOIN clang_checks c ON c.name = i.name
WHERE i.instruction <> r.instruction
OR r.instruction IS NULL
ORDER BY 2, 1;
EOF
# LLVM builtins
grep -rw link_name coresimd/ \
| sed -e 's/[^"]*"\([^"]*\).*/@\1/' \
| sort -u > builtins_used.csv
sqlite3 -batch intrinsics.db <<EOF
CREATE TABLE builtins_used(name TEXT NOT NULL UNIQUE);
.import builtins_used.csv builtins_used
.headers on
.separator ';'
.once builtins.txt
-- find unused builtins
SELECT i.name, i.cpuid, i.instruction as 'Intel',
CASE WHEN r.instruction IS NULL THEN 'MISSING' ELSE r.instruction END as 'Rust',
c.checks as 'Clang'
FROM intrinsics i
INNER JOIN coresimd r ON r.name = i.name AND r.cpuid LIKE i.cpuid
INNER JOIN clang_checks c ON c.name = i.name
WHERE c.checks <> ''
AND NOT EXISTS (SELECT 1 FROM builtins_used b WHERE b.name = c.checks)
ORDER BY 2, 1;
EOF
rm -f builtins_used.csv
rm -f intrinsics.db
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes"/>
<xsl:variable name="line">
<xsl:text>&#10;</xsl:text>
</xsl:variable>
<xsl:variable name="sep">
<xsl:text>;</xsl:text>
</xsl:variable>
<xsl:template match="/">
<xsl:for-each select="intrinsics_list/intrinsic[@tech != 'SVML']">
<xsl:variable name="name" select="@name"/>
<xsl:variable name="cpuid" select="CPUID"/>
<xsl:variable name="instruction" select="instruction/@name"/>
<xsl:value-of select="concat($name, $sep, $cpuid, $sep, $instruction, $line)"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
name;cpuid;Intel;Rust;Clang
_mm256_and_pd;AVX;vandpd;vandps;
_mm256_andnot_pd;AVX;vandnpd;vandnps;
_mm256_cmp_pd;AVX;vcmppd;vcmpeqpd;@llvm.x86.avx.cmp.pd.256
_mm256_cmp_ps;AVX;vcmpps;vcmpeqps;@llvm.x86.avx.cmp.ps.256
_mm256_load_pd;AVX;vmovapd;vmovaps;
_mm256_load_si256;AVX;vmovdqa;vmovaps;
_mm256_loadu_pd;AVX;vmovupd;vmovups;
_mm256_loadu_si256;AVX;vmovdqu;vmovups;
_mm256_or_pd;AVX;vorpd;vorps;
_mm256_set1_epi16;AVX;;vinsertf128;
_mm256_set1_epi64x;AVX;;vinsertf128;
_mm256_set1_epi8;AVX;;vinsertf128;
_mm256_set_epi64x;AVX;;vinsertf128;
_mm256_set_pd;AVX;;vinsertf128;
_mm256_setr_epi64x;AVX;;vinsertf128;
_mm256_setzero_pd;AVX;vxorpd;vxorps;
_mm256_setzero_si256;AVX;vpxor;vxor;
_mm256_store_pd;AVX;vmovapd;vmovaps;
_mm256_store_si256;AVX;vmovdqa;vmovaps;
_mm256_storeu_pd;AVX;vmovupd;vmovups;
_mm256_storeu_si256;AVX;vmovdqu;vmovups;
_mm256_stream_pd;AVX;vmovntpd;vmovntps;
_mm256_stream_si256;AVX;vmovntdq;vmovntps;
_mm256_xor_pd;AVX;vxorpd;vxorps;
_mm_cmp_pd;AVX;vcmppd;vcmpeqpd;@llvm.x86.sse2.cmp.pd
_mm_cmp_ps;AVX;vcmpps;vcmpeqps;@llvm.x86.sse.cmp.ps
_mm_cmp_sd;AVX;vcmpsd;vcmpeqsd;@llvm.x86.sse2.cmp.sd
_mm_cmp_ss;AVX;vcmpss;vcmpeqss;@llvm.x86.sse.cmp.ss
_mm256_and_si256;AVX2;vpand;vandps;
_mm256_andnot_si256;AVX2;vpandn;vandnps;
_mm256_broadcastd_epi32;AVX2;vpbroadcastd;vbroadcastss;
_mm256_broadcastq_epi64;AVX2;vpbroadcastq;vbroadcastsd;
_mm256_broadcastsi128_si256;AVX2;vbroadcasti128;;
_mm256_bslli_epi128;AVX2;vpslldq;MISSING;
_mm256_bsrli_epi128;AVX2;vpsrldq;MISSING;
_mm256_extracti128_si256;AVX2;vextracti128;vextractf128;
_mm256_inserti128_si256;AVX2;vinserti128;vinsertf128;
_mm256_or_si256;AVX2;vpor;vorps;
_mm256_permute2x128_si256;AVX2;vperm2i128;vperm2f128;@llvm.x86.avx2.vperm2i128
_mm256_slli_si256;AVX2;vpslldq;MISSING;
_mm256_srli_si256;AVX2;vpsrldq;MISSING;
_mm256_stream_load_si256;AVX2;vmovntdqa;MISSING;
_mm256_xor_si256;AVX2;vpxor;vxorps;
_mm_broadcastd_epi32;AVX2;vpbroadcastd;vbroadcastss;
_mm_broadcastsd_pd;AVX2;movddup;vmovddup;
_m_empty;MMX;emms;MISSING;
_m_from_int;MMX;movd;MISSING;
_m_from_int64;MMX;movq;MISSING;
_m_packssdw;MMX;packssdw;MISSING;
_m_packsswb;MMX;packsswb;MISSING;
_m_packuswb;MMX;packuswb;MISSING;
_m_paddb;MMX;paddb;MISSING;
_m_paddd;MMX;paddd;MISSING;
_m_paddsb;MMX;paddsb;MISSING;
_m_paddsw;MMX;paddsw;MISSING;
_m_paddusb;MMX;paddusb;MISSING;
_m_paddusw;MMX;paddusw;MISSING;
_m_paddw;MMX;paddw;MISSING;
_m_pand;MMX;pand;MISSING;
_m_pandn;MMX;pandn;MISSING;
_m_pcmpeqb;MMX;pcmpeqb;MISSING;
_m_pcmpeqd;MMX;pcmpeqd;MISSING;
_m_pcmpeqw;MMX;pcmpeqw;MISSING;
_m_pcmpgtb;MMX;pcmpgtb;MISSING;
_m_pcmpgtd;MMX;pcmpgtd;MISSING;
_m_pcmpgtw;MMX;pcmpgtw;MISSING;
_m_pmaddwd;MMX;pmaddwd;MISSING;
_m_pmulhw;MMX;pmulhw;MISSING;
_m_pmullw;MMX;pmullw;MISSING;
_m_por;MMX;por;MISSING;
_m_pslld;MMX;pslld;MISSING;
_m_pslldi;MMX;pslld;MISSING;
_m_psllq;MMX;psllq;MISSING;
_m_psllqi;MMX;psllq;MISSING;
_m_psllw;MMX;psllw;MISSING;
_m_psllwi;MMX;psllw;MISSING;
_m_psrad;MMX;psrad;MISSING;
_m_psradi;MMX;psrad;MISSING;
_m_psraw;MMX;psraw;MISSING;
_m_psrawi;MMX;psraw;MISSING;
_m_psrld;MMX;psrld;MISSING;
_m_psrldi;MMX;psrld;MISSING;
_m_psrlq;MMX;psrlq;MISSING;
_m_psrlqi;MMX;psrlq;MISSING;
_m_psrlw;MMX;psrlw;MISSING;
_m_psrlwi;MMX;psrlw;MISSING;
_m_psubb;MMX;psubb;MISSING;
_m_psubd;MMX;psubd;MISSING;
_m_psubsb;MMX;psubsb;MISSING;
_m_psubsw;MMX;psubsw;MISSING;
_m_psubusb;MMX;psubusb;MISSING;
_m_psubusw;MMX;psubusw;MISSING;
_m_psubw;MMX;psubw;MISSING;
_m_punpckhbw;MMX;punpckhbw;MISSING;
_m_punpckhdq;MMX;punpckhdq;MISSING;
_m_punpckhwd;MMX;punpcklbw;MISSING;
_m_punpcklbw;MMX;punpcklbw;MISSING;
_m_punpckldq;MMX;punpckldq;MISSING;
_m_punpcklwd;MMX;punpcklwd;MISSING;
_m_pxor;MMX;pxor;MISSING;
_m_to_int;MMX;movd;MISSING;
_m_to_int64;MMX;movq;MISSING;
_mm_add_pi16;MMX;paddw;MISSING;@llvm.x86.mmx.padd.w
_mm_add_pi32;MMX;paddd;MISSING;@llvm.x86.mmx.padd.d
_mm_add_pi8;MMX;paddb;MISSING;@llvm.x86.mmx.padd.b
_mm_adds_pi16;MMX;paddsw;MISSING;@llvm.x86.mmx.padds.w
_mm_adds_pi8;MMX;paddsb;MISSING;@llvm.x86.mmx.padds.b
_mm_adds_pu16;MMX;paddusw;MISSING;@llvm.x86.mmx.paddus.w
_mm_adds_pu8;MMX;paddusb;MISSING;@llvm.x86.mmx.paddus.b
_mm_and_si64;MMX;pand;MISSING;@llvm.x86.mmx.pand
_mm_andnot_si64;MMX;pandn;MISSING;@llvm.x86.mmx.pandn
_mm_cmpeq_pi16;MMX;pcmpeqw;MISSING;@llvm.x86.mmx.pcmpeq.w
_mm_cmpeq_pi32;MMX;pcmpeqd;MISSING;@llvm.x86.mmx.pcmpeq.d
_mm_cmpeq_pi8;MMX;pcmpeqb;MISSING;@llvm.x86.mmx.pcmpeq.b
_mm_cmpgt_pi16;MMX;pcmpgtw;MISSING;@llvm.x86.mmx.pcmpgt.w
_mm_cmpgt_pi32;MMX;pcmpgtd;MISSING;@llvm.x86.mmx.pcmpgt.d
_mm_cmpgt_pi8;MMX;pcmpgtb;MISSING;@llvm.x86.mmx.pcmpgt.b
_mm_cvtm64_si64;MMX;movq;MISSING;
_mm_cvtsi32_si64;MMX;movd;MISSING;
_mm_cvtsi64_m64;MMX;movq;MISSING;
_mm_cvtsi64_si32;MMX;movd;MISSING;
_mm_empty;MMX;emms;MISSING;
_mm_madd_pi16;MMX;pmaddwd;MISSING;@llvm.x86.mmx.pmadd.wd
_mm_mulhi_pi16;MMX;pmulhw;MISSING;@llvm.x86.mmx.pmulh.w
_mm_mullo_pi16;MMX;pmullw;MISSING;@llvm.x86.mmx.pmull.w
_mm_or_si64;MMX;por;MISSING;@llvm.x86.mmx.por
_mm_packs_pu16;MMX;packuswb;MISSING;@llvm.x86.mmx.packuswb
_mm_set1_pi16;MMX;;MISSING;
_mm_set1_pi32;MMX;;MISSING;
_mm_set1_pi8;MMX;;MISSING;
_mm_set_pi16;MMX;;MISSING;
_mm_set_pi32;MMX;;MISSING;
_mm_set_pi8;MMX;;MISSING;
_mm_setr_pi16;MMX;;MISSING;
_mm_setr_pi32;MMX;;MISSING;
_mm_setr_pi8;MMX;;MISSING;
_mm_setzero_si64;MMX;pxor;xor;
_mm_sll_pi16;MMX;psllw;MISSING;@llvm.x86.mmx.psll.w
_mm_sll_pi32;MMX;pslld;MISSING;@llvm.x86.mmx.psll.d
_mm_sll_si64;MMX;psllq;MISSING;@llvm.x86.mmx.psll.q
_mm_slli_pi16;MMX;psllw;MISSING;@llvm.x86.mmx.pslli.w
_mm_slli_pi32;MMX;pslld;MISSING;@llvm.x86.mmx.pslli.d
_mm_slli_si64;MMX;psllq;MISSING;@llvm.x86.mmx.pslli.q
_mm_sra_pi16;MMX;psraw;MISSING;@llvm.x86.mmx.psra.w
_mm_sra_pi32;MMX;psrad;MISSING;@llvm.x86.mmx.psra.d
_mm_srai_pi16;MMX;psraw;MISSING;@llvm.x86.mmx.psrai.w
_mm_srai_pi32;MMX;psrad;MISSING;@llvm.x86.mmx.psrai.d
_mm_srl_pi16;MMX;psrlw;MISSING;@llvm.x86.mmx.psrl.w
_mm_srl_pi32;MMX;psrld;MISSING;@llvm.x86.mmx.psrl.d
_mm_srl_si64;MMX;psrlq;MISSING;@llvm.x86.mmx.psrl.q
_mm_srli_pi16;MMX;psrlw;MISSING;@llvm.x86.mmx.psrli.w
_mm_srli_pi32;MMX;psrld;MISSING;@llvm.x86.mmx.psrli.d
_mm_srli_si64;MMX;psrlq;MISSING;@llvm.x86.mmx.psrli.q
_mm_sub_pi16;MMX;psubw;MISSING;@llvm.x86.mmx.psub.w
_mm_sub_pi32;MMX;psubd;MISSING;@llvm.x86.mmx.psub.d
_mm_sub_pi8;MMX;psubb;MISSING;@llvm.x86.mmx.psub.b
_mm_subs_pi16;MMX;psubsw;MISSING;@llvm.x86.mmx.psubs.w
_mm_subs_pi8;MMX;psubsb;MISSING;@llvm.x86.mmx.psubs.b
_mm_subs_pu16;MMX;psubusw;MISSING;@llvm.x86.mmx.psubus.w
_mm_subs_pu8;MMX;psubusb;MISSING;@llvm.x86.mmx.psubus.b
_mm_unpackhi_pi16;MMX;punpcklbw;MISSING;@llvm.x86.mmx.punpckhwd
_mm_unpackhi_pi32;MMX;punpckhdq;MISSING;@llvm.x86.mmx.punpckhdq
_mm_unpackhi_pi8;MMX;punpckhbw;MISSING;@llvm.x86.mmx.punpckhbw
_mm_unpacklo_pi16;MMX;punpcklwd;MISSING;@llvm.x86.mmx.punpcklwd
_mm_unpacklo_pi32;MMX;punpckldq;MISSING;@llvm.x86.mmx.punpckldq
_mm_unpacklo_pi8;MMX;punpcklbw;MISSING;@llvm.x86.mmx.punpcklbw
_mm_xor_si64;MMX;pxor;MISSING;@llvm.x86.mmx.pxor
_mm_and_ps;SSE;andps;;
_mm_andnot_ps;SSE;andnps;;
_mm_cmpeq_ps;SSE;cmpps;cmpeqps;
_mm_cmpeq_ss;SSE;cmpss;cmpeqss;
_mm_cmpge_ps;SSE;cmpps;cmpleps;
_mm_cmpge_ss;SSE;cmpss;cmpless;
_mm_cmpgt_ps;SSE;cmpps;cmpltps;
_mm_cmpgt_ss;SSE;cmpss;cmpltss;
_mm_cmple_ps;SSE;cmpps;cmpleps;
_mm_cmple_ss;SSE;cmpss;cmpless;
_mm_cmplt_ps;SSE;cmpps;cmpltps;
_mm_cmplt_ss;SSE;cmpss;cmpltss;
_mm_cmpneq_ps;SSE;cmpps;cmpneqps;
_mm_cmpneq_ss;SSE;cmpss;cmpneqss;
_mm_cmpnge_ps;SSE;cmpps;cmpnleps;
_mm_cmpnge_ss;SSE;cmpss;cmpnless;
_mm_cmpngt_ps;SSE;cmpps;cmpnltps;
_mm_cmpngt_ss;SSE;cmpss;cmpnltss;
_mm_cmpnle_ps;SSE;cmpps;cmpnleps;
_mm_cmpnle_ss;SSE;cmpss;cmpnless;
_mm_cmpnlt_ps;SSE;cmpps;cmpnltps;
_mm_cmpnlt_ss;SSE;cmpss;cmpnltss;
_mm_cmpord_ps;SSE;cmpps;cmpordps;
_mm_cmpord_ss;SSE;cmpss;cmpordss;
_mm_cmpunord_ps;SSE;cmpps;cmpunordps;
_mm_cmpunord_ss;SSE;cmpss;cmpunordss;
_mm_cvtpi16_ps;SSE;;MISSING;@llvm.x86.sse.cvtpi2ps
_mm_cvtpi32x2_ps;SSE;;cvtpi2ps;@llvm.x86.sse.cvtpi2ps
_mm_cvtpi8_ps;SSE;;MISSING;
_mm_cvtps_pi16;SSE;;cvtps2pi;@llvm.x86.sse.cvtps2pi
_mm_cvtps_pi8;SSE;;cvtps2pi;
_mm_cvtpu16_ps;SSE;;MISSING;
_mm_cvtpu8_ps;SSE;;MISSING;
_mm_cvtss_f32;SSE;movss;;
_mm_free;SSE;;MISSING;
_mm_load1_ps;SSE;;movss;
_mm_load_ps1;SSE;;movss;
_mm_loadh_pi;SSE;movhps;movhpd;
_mm_loadl_pi;SSE;movlps;movlpd;
_mm_loadr_ps;SSE;;movaps;
_mm_loadu_si16;SSE;;MISSING;
_mm_loadu_si32;SSE;movd;MISSING;
_mm_loadu_si64;SSE;movq;MISSING;
_mm_malloc;SSE;;MISSING;
_mm_movehl_ps;SSE;movhlps;unpckhpd;
_mm_or_ps;SSE;orps;;
_mm_set1_ps;SSE;;shufps;
_mm_set_ps;SSE;;unpcklps;@llvm.x86.sse.ldmxcsr
_mm_set_ps1;SSE;;shufps;
_mm_set_ss;SSE;;movss;@llvm.x86.sse.ldmxcsr
_mm_setr_ps;SSE;;movaps;
_mm_store1_ps;SSE;;movaps;
_mm_store_ps1;SSE;;movaps;
_mm_storeh_pi;SSE;movhps;;
_mm_storel_pi;SSE;movlps;;
_mm_storer_ps;SSE;movups;movaps;
_mm_storeu_si16;SSE;;MISSING;
_mm_storeu_si32;SSE;movd;MISSING;
_mm_storeu_si64;SSE;movq;MISSING;
_mm_stream_pi;SSE;movntq;;@llvm.x86.mmx.movnt.dq
_mm_xor_ps;SSE;xorps;;
_mm_add_si64;SSE2;paddq;MISSING;@llvm.x86.mmx.padd.q
_mm_and_pd;SSE2;andpd;andps;
_mm_and_si128;SSE2;pand;andps;
_mm_andnot_pd;SSE2;andnpd;andnps;
_mm_andnot_si128;SSE2;pandn;andnps;
_mm_castpd_ps;SSE2;;MISSING;
_mm_castpd_si128;SSE2;;MISSING;
_mm_castps_pd;SSE2;;MISSING;
_mm_castps_si128;SSE2;;MISSING;
_mm_castsi128_pd;SSE2;;MISSING;
_mm_castsi128_ps;SSE2;;MISSING;
_mm_cmpeq_pd;SSE2;cmppd;cmpeqpd;
_mm_cmpeq_sd;SSE2;cmpsd;cmpeqsd;@llvm.x86.sse2.cmp.sd
_mm_cmpge_pd;SSE2;cmppd;cmplepd;
_mm_cmpge_sd;SSE2;cmpsd;cmplesd;@llvm.x86.sse2.cmp.sd
_mm_cmpgt_pd;SSE2;cmppd;cmpltpd;
_mm_cmpgt_sd;SSE2;cmpsd;cmpltsd;@llvm.x86.sse2.cmp.sd
_mm_cmple_pd;SSE2;cmppd;cmplepd;
_mm_cmple_sd;SSE2;cmpsd;cmplesd;@llvm.x86.sse2.cmp.sd
_mm_cmplt_pd;SSE2;cmppd;cmpltpd;
_mm_cmplt_sd;SSE2;cmpsd;cmpltsd;@llvm.x86.sse2.cmp.sd
_mm_cmpneq_pd;SSE2;cmppd;cmpneqpd;
_mm_cmpneq_sd;SSE2;cmpsd;cmpneqsd;@llvm.x86.sse2.cmp.sd
_mm_cmpnge_pd;SSE2;cmppd;cmpnlepd;
_mm_cmpnge_sd;SSE2;cmpsd;cmpnlesd;@llvm.x86.sse2.cmp.sd
_mm_cmpngt_pd;SSE2;cmppd;cmpnltpd;
_mm_cmpngt_sd;SSE2;cmpsd;cmpnltsd;@llvm.x86.sse2.cmp.sd
_mm_cmpnle_pd;SSE2;cmppd;cmpnlepd;
_mm_cmpnle_sd;SSE2;cmpsd;cmpnlesd;@llvm.x86.sse2.cmp.sd
_mm_cmpnlt_pd;SSE2;cmppd;cmpnltpd;
_mm_cmpnlt_sd;SSE2;cmpsd;cmpnltsd;@llvm.x86.sse2.cmp.sd
_mm_cmpord_pd;SSE2;cmppd;cmpordpd;
_mm_cmpord_sd;SSE2;cmpsd;cmpordsd;@llvm.x86.sse2.cmp.sd
_mm_cmpunord_pd;SSE2;cmppd;cmpunordpd;
_mm_cmpunord_sd;SSE2;cmpsd;cmpunordsd;@llvm.x86.sse2.cmp.sd
_mm_cvtpi32_pd;SSE2;cvtpi2pd;MISSING;@llvm.x86.sse.cvtpi2pd
_mm_cvtsd_f64;SSE2;movsd;;
_mm_cvtsi128_si32;SSE2;movd;;
_mm_cvtsi128_si64;SSE2;movq;;
_mm_cvtsi128_si64x;SSE2;movq;;
_mm_cvtsi32_si128;SSE2;movd;;
_mm_cvtsi64_si128;SSE2;movq;;
_mm_cvtsi64x_si128;SSE2;movq;;
_mm_load1_pd;SSE2;movapd;;
_mm_load_pd;SSE2;movapd;movaps;
_mm_load_pd1;SSE2;movapd;;
_mm_load_sd;SSE2;movsd;MISSING;
_mm_load_si128;SSE2;movdqa;movaps;
_mm_loadh_pd;SSE2;movhpd;MISSING;
_mm_loadl_epi64;SSE2;movq;;
_mm_loadl_pd;SSE2;movlpd;MISSING;
_mm_loadu_pd;SSE2;movupd;movups;
_mm_loadu_si128;SSE2;movdqu;movups;
_mm_move_epi64;SSE2;movq;;
_mm_move_sd;SSE2;movsd;MISSING;
_mm_movepi64_pi64;SSE2;movdq2q;;
_mm_movpi64_epi64;SSE2;movq2dq;;
_mm_mul_su32;SSE2;pmuludq;MISSING;@llvm.x86.mmx.pmulu.dq
_mm_or_pd;SSE2;orpd;orps;
_mm_or_si128;SSE2;por;orps;
_mm_set1_epi64;SSE2;;MISSING;
_mm_set_epi64;SSE2;;MISSING;
_mm_setr_epi64;SSE2;;MISSING;
_mm_setzero_pd;SSE2;xorpd;;
_mm_setzero_si128;SSE2;pxor;xorps;
_mm_shuffle_pd;SSE2;shufpd;MISSING;
_mm_store_pd;SSE2;movapd;movaps;
_mm_store_sd;SSE2;movsd;MISSING;
_mm_store_si128;SSE2;movdqa;movaps;
_mm_storeh_pd;SSE2;movhpd;MISSING;
_mm_storel_epi64;SSE2;movq;;
_mm_storel_pd;SSE2;movlpd;MISSING;
_mm_storeu_pd;SSE2;movupd;movups;
_mm_storeu_si128;SSE2;movdqu;movups;
_mm_stream_pd;SSE2;movntpd;movntps;
_mm_stream_si128;SSE2;movntdq;movntps;
_mm_stream_si64;SSE2;movnti;;
_mm_sub_si64;SSE2;psubq;MISSING;@llvm.x86.mmx.psub.q
_mm_xor_pd;SSE2;xorpd;xorps;
_mm_xor_si128;SSE2;pxor;xorps;
_mm_loaddup_pd;SSE3;movddup;;
_mm_extract_epi64;SSE4.1;pextrq;;
_mm_insert_epi64;SSE4.1;pinsrq;pinsrd;
_mm_stream_load_si128;SSE4.1;movntdqa;MISSING;
_mm_test_all_ones;SSE4.1;pcmpeqd;ptest;@llvm.x86.sse41.ptestc
_mm_hadd_pi32;SSSE3;phaddw;phaddd;@llvm.x86.ssse3.phadd.d
_mm_hsub_pi16;SSSE3;phsubw;phsubsw;@llvm.x86.ssse3.phsub.w
_xsaves64;XSAVE;xsavec64;xsaves64;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment