Last active
December 17, 2017 08:18
-
-
Save gwenn/243835b5ac3163b4cc80c83779d7b2b0 to your computer and use it in GitHub Desktop.
Find inconsistencies between the intel intrinsics XML file and the Rust code
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name;cpuid;Intel;Rust;Clang | |
_mm_stream_pi;SSE;movntq;;@llvm.x86.mmx.movnt.dq |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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> </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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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