Changeset 3577 for trunk/lib/idisa_cpp/idisa_sse2.cpp
 Timestamp:
 Nov 29, 2013, 5:06:24 PM (6 years ago)
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

trunk/lib/idisa_cpp/idisa_sse2.cpp
r3576 r3577 619 619 } 620 620 621 //The total number of operations is 1 7.5621 //The total number of operations is 18.0 622 622 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::max(bitblock128_t arg1, bitblock128_t arg2) 623 623 { … … 625 625 } 626 626 627 //The total number of operations is 54.75627 //The total number of operations is 60.6666666667 628 628 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::max(bitblock128_t arg1, bitblock128_t arg2) 629 629 { … … 744 744 } 745 745 746 //The total number of operations is 1 4.5746 //The total number of operations is 15.0 747 747 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::gt(bitblock128_t arg1, bitblock128_t arg2) 748 748 { … … 754 754 } 755 755 756 //The total number of operations is 5 1.75756 //The total number of operations is 57.6666666667 757 757 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::gt(bitblock128_t arg1, bitblock128_t arg2) 758 758 { … … 874 874 } 875 875 876 //The total number of operations is 1 7.5876 //The total number of operations is 18.0 877 877 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ult(bitblock128_t arg1, bitblock128_t arg2) 878 878 { … … 883 883 } 884 884 885 //The total number of operations is 4 0.0833333333885 //The total number of operations is 45.0 886 886 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ult(bitblock128_t arg1, bitblock128_t arg2) 887 887 { … … 1123 1123 } 1124 1124 1125 //The total number of operations is 1 3.51125 //The total number of operations is 14.0 1126 1126 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::ugt(bitblock128_t arg1, bitblock128_t arg2) 1127 1127 { … … 1132 1132 } 1133 1133 1134 //The total number of operations is 37.251134 //The total number of operations is 42.6666666667 1135 1135 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::ugt(bitblock128_t arg1, bitblock128_t arg2) 1136 1136 { … … 1264 1264 } 1265 1265 1266 //The total number of operations is 1 3.51266 //The total number of operations is 14.0 1267 1267 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::any(bitblock128_t arg1) 1268 1268 { … … 1571 1571 } 1572 1572 1573 //The total number of operations is 1 7.51573 //The total number of operations is 18.0 1574 1574 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::min(bitblock128_t arg1, bitblock128_t arg2) 1575 1575 { … … 1577 1577 } 1578 1578 1579 //The total number of operations is 54.751579 //The total number of operations is 60.6666666667 1580 1580 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::min(bitblock128_t arg1, bitblock128_t arg2) 1581 1581 { … … 1818 1818 } 1819 1819 1820 //The total number of operations is 4.51820 //The total number of operations is 5.0 1821 1821 template <> template <uint16_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::srai(bitblock128_t arg1) 1822 1822 { 1823 return simd_or(simd_and(simd128<64>::himask(), simd128<(32)>::srai<((sh < (32)) ? sh : (32))>(arg1)), ((sh <= (32)) ? simd128<64>::srli<sh>(arg1) : simd128<(32)>::srai<(sh(32))>(simd128<64>::srli<(32)>(arg1)))); 1824 } 1825 1826 //The total number of operations is 11.0833333333 1823 bitblock128_t tmp = simd128<64>::srli<((sh >= 64) ? (63) : ((sh < 0) ? 0 : sh))>(arg1); 1824 return simd_or(tmp, simd128<64>::sub(simd128<64>::constant<0>(), simd_and(simd128<64>::slli<((64((sh >= 64) ? (63) : ((sh < 0) ? 0 : sh)))1)>(simd128<64>::constant<1>()), tmp))); 1825 } 1826 1827 //The total number of operations is 16.0 1827 1828 template <> template <uint16_t sh> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::srai(bitblock128_t arg1) 1828 1829 { 1829 return simd_or(simd_and(simd128<128>::himask(), simd128<(64)>::srai<((sh < (64)) ? sh : (64))>(arg1)), ((sh <= (64)) ? simd128<128>::srli<sh>(arg1) : simd128<(64)>::srai<(sh(64))>(simd128<128>::srli<(64)>(arg1)))); 1830 bitblock128_t tmp = simd128<128>::srli<((sh >= 128) ? (127) : ((sh < 0) ? 0 : sh))>(arg1); 1831 return simd_or(tmp, simd128<128>::sub(simd128<128>::constant<0>(), simd_and(simd128<128>::slli<((128((sh >= 128) ? (127) : ((sh < 0) ? 0 : sh)))1)>(simd128<128>::constant<1>()), tmp))); 1830 1832 } 1831 1833 … … 1868 1870 } 1869 1871 1870 //The total number of operations is 19.51872 //The total number of operations is 20.0 1871 1873 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<64>::lt(bitblock128_t arg1, bitblock128_t arg2) 1872 1874 { … … 1875 1877 } 1876 1878 1877 //The total number of operations is 6 0.751879 //The total number of operations is 66.6666666667 1878 1880 template <> IDISA_ALWAYS_INLINE bitblock128_t simd128<128>::lt(bitblock128_t arg1, bitblock128_t arg2) 1879 1881 { … … 2155 2157 } 2156 2158 2157 //The total number of operations is 7 7.02159 //The total number of operations is 79.0 2158 2160 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<64>::packss(bitblock128_t arg1, bitblock128_t arg2) 2159 2161 { … … 2163 2165 } 2164 2166 2165 //The total number of operations is 2 27.6666666672167 //The total number of operations is 251.333333333 2166 2168 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packss(bitblock128_t arg1, bitblock128_t arg2) 2167 2169 { … … 2329 2331 } 2330 2332 2331 //The total number of operations is 28. 16666666672333 //The total number of operations is 28.6666666667 2332 2334 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::min_hl(bitblock128_t arg1, bitblock128_t arg2) 2333 2335 { … … 2385 2387 } 2386 2388 2387 //The total number of operations is 34. 16666666672389 //The total number of operations is 34.6666666667 2388 2390 template <> IDISA_ALWAYS_INLINE bitblock128_t hsimd128<128>::packus(bitblock128_t arg1, bitblock128_t arg2) 2389 2391 { … … 2590 2592 } 2591 2593 2592 //The total number of operations is 1 1.02594 //The total number of operations is 12.0 2593 2595 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::signextendh(bitblock128_t arg1) 2594 2596 { … … 2596 2598 } 2597 2599 2598 //The total number of operations is 1 1.08333333332600 //The total number of operations is 16.0 2599 2601 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::signextendh(bitblock128_t arg1) 2600 2602 { … … 2632 2634 } 2633 2635 2634 //The total number of operations is 1 1.02636 //The total number of operations is 12.0 2635 2637 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<32>::signextendl(bitblock128_t arg1) 2636 2638 { … … 2638 2640 } 2639 2641 2640 //The total number of operations is 1 3.41666666672642 //The total number of operations is 18.3333333333 2641 2643 template <> IDISA_ALWAYS_INLINE bitblock128_t esimd128<64>::signextendl(bitblock128_t arg1) 2642 2644 {
Note: See TracChangeset
for help on using the changeset viewer.