Changeset 95071 in vbox for trunk/src/VBox/Runtime
- Timestamp:
- May 24, 2022 11:06:24 AM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/testcase/tstRTInlineAsm.cpp
r93838 r95071 2743 2743 } 2744 2744 } 2745 2746 2747 void tstASMBit(void) 2748 { 2749 RTTestSub(g_hTest, "ASMBitFirstSetU16"); 2750 RTTESTI_CHECK(ASMBitFirstSetU16(0x0000) == 0); 2751 RTTESTI_CHECK(ASMBitFirstSetU16(0x0001) == 1); 2752 RTTESTI_CHECK(ASMBitFirstSetU16(0x8000) == 16); 2753 RTTESTI_CHECK(ASMBitFirstSetU16(0x0ef0) == 5); 2754 for (unsigned iBit = 0; iBit < 16; iBit++) 2755 { 2756 RTTESTI_CHECK(ASMBitFirstSetU16((uint16_t)1 << iBit) == iBit + 1); 2757 RTTESTI_CHECK(ASMBitFirstSetU16(UINT16_MAX << iBit) == iBit + 1); 2758 } 2759 2760 RTTestSub(g_hTest, "ASMBitFirstSetU32"); 2761 RTTESTI_CHECK(ASMBitFirstSetU32(UINT32_C(0x00000000)) == 0); 2762 RTTESTI_CHECK(ASMBitFirstSetU32(UINT32_C(0x00000001)) == 1); 2763 RTTESTI_CHECK(ASMBitFirstSetU32(UINT32_C(0x80000000)) == 32); 2764 RTTESTI_CHECK(ASMBitFirstSetU32(UINT32_C(0x0efff0f0)) == 5); 2765 for (unsigned iBit = 0; iBit < 32; iBit++) 2766 { 2767 RTTESTI_CHECK(ASMBitFirstSetU32((uint32_t)1 << iBit) == iBit + 1); 2768 RTTESTI_CHECK(ASMBitFirstSetU32(UINT32_MAX << iBit) == iBit + 1); 2769 } 2770 2771 RTTestSub(g_hTest, "ASMBitFirstSetU64"); 2772 RTTESTI_CHECK(ASMBitFirstSetU64(UINT64_C(0x0000000000000000)) == 0); 2773 RTTESTI_CHECK(ASMBitFirstSetU64(UINT64_C(0x0000000000000001)) == 1); 2774 RTTESTI_CHECK(ASMBitFirstSetU64(UINT64_C(0x8000000000000000)) == 64); 2775 RTTESTI_CHECK(ASMBitFirstSetU64(UINT64_C(0x0effffff0ffff0f0)) == 5); 2776 for (unsigned iBit = 0; iBit < 64; iBit++) 2777 { 2778 RTTESTI_CHECK(ASMBitFirstSetU64((uint64_t)1 << iBit) == iBit + 1); 2779 RTTESTI_CHECK(ASMBitFirstSetU64(UINT64_MAX << iBit) == iBit + 1); 2780 } 2781 2782 RTTestSub(g_hTest, "ASMBitLastSetU16"); 2783 RTTESTI_CHECK(ASMBitLastSetU16(0x0000) == 0); 2784 RTTESTI_CHECK(ASMBitLastSetU16(0x0001) == 1); 2785 RTTESTI_CHECK(ASMBitLastSetU16(0x8000) == 16); 2786 RTTESTI_CHECK(ASMBitLastSetU16(0x0fe0) == 12); 2787 for (unsigned iBit = 0; iBit < 16; iBit++) 2788 { 2789 RTTESTI_CHECK(ASMBitLastSetU16(UINT16_C(0x8000) >> (15 - iBit)) == iBit + 1); 2790 RTTESTI_CHECK(ASMBitLastSetU16(UINT16_MAX >> (15 - iBit)) == iBit + 1); 2791 } 2792 2793 RTTestSub(g_hTest, "ASMBitLastSetU32"); 2794 RTTESTI_CHECK(ASMBitLastSetU32(UINT32_C(0x00000000)) == 0); 2795 RTTESTI_CHECK(ASMBitLastSetU32(UINT32_C(0x00000001)) == 1); 2796 RTTESTI_CHECK(ASMBitLastSetU32(UINT32_C(0x80000000)) == 32); 2797 RTTESTI_CHECK(ASMBitLastSetU32(UINT32_C(0x0fffffe0)) == 28); 2798 for (unsigned iBit = 0; iBit < 32; iBit++) 2799 { 2800 RTTESTI_CHECK(ASMBitLastSetU32(UINT32_C(0x80000000) >> (31 - iBit)) == iBit + 1); 2801 RTTESTI_CHECK(ASMBitLastSetU32(UINT32_MAX >> (31 - iBit)) == iBit + 1); 2802 } 2803 2804 RTTestSub(g_hTest, "ASMBitLastSetU64"); 2805 RTTESTI_CHECK(ASMBitLastSetU64(UINT64_C(0x0000000000000000)) == 0); 2806 RTTESTI_CHECK(ASMBitLastSetU64(UINT64_C(0x0000000000000001)) == 1); 2807 RTTESTI_CHECK(ASMBitLastSetU64(UINT64_C(0x8000000000000000)) == 64); 2808 RTTESTI_CHECK(ASMBitLastSetU64(UINT64_C(0x0ffffefff0ffffe0)) == 60); 2809 for (unsigned iBit = 0; iBit < 64; iBit++) 2810 { 2811 RTTESTI_CHECK(ASMBitLastSetU64(UINT64_C(0x8000000000000000) >> (63 - iBit)) == iBit + 1); 2812 RTTESTI_CHECK(ASMBitLastSetU64(UINT64_MAX >> (63 - iBit)) == iBit + 1); 2813 } 2814 2815 RTTestSub(g_hTest, "ASMCountLeadingZerosU16"); 2816 RTTESTI_CHECK(ASMCountLeadingZerosU16(0x0000) == 16); 2817 RTTESTI_CHECK(ASMCountLeadingZerosU16(0x0001) == 15); 2818 RTTESTI_CHECK(ASMCountLeadingZerosU16(0x8000) == 0); 2819 RTTESTI_CHECK(ASMCountLeadingZerosU16(0x0fe0) == 4); 2820 for (unsigned iBit = 0; iBit < 16; iBit++) 2821 { 2822 RTTESTI_CHECK(ASMCountLeadingZerosU16(UINT16_C(0x8000) >> iBit) == iBit); 2823 RTTESTI_CHECK(ASMCountLeadingZerosU16(UINT16_MAX >> iBit) == iBit); 2824 } 2825 2826 RTTestSub(g_hTest, "ASMCountLeadingZerosU32"); 2827 RTTESTI_CHECK(ASMCountLeadingZerosU32(UINT32_C(0x00000000)) == 32); 2828 RTTESTI_CHECK(ASMCountLeadingZerosU32(UINT32_C(0x00000001)) == 31); 2829 RTTESTI_CHECK(ASMCountLeadingZerosU32(UINT32_C(0x80000000)) == 0); 2830 RTTESTI_CHECK(ASMCountLeadingZerosU32(UINT32_C(0x0fffffe0)) == 4); 2831 for (unsigned iBit = 0; iBit < 32; iBit++) 2832 { 2833 RTTESTI_CHECK(ASMCountLeadingZerosU32(UINT32_C(0x80000000) >> iBit) == iBit); 2834 RTTESTI_CHECK(ASMCountLeadingZerosU32(UINT32_MAX >> iBit) == iBit); 2835 } 2836 2837 RTTestSub(g_hTest, "ASMCountLeadingZerosU64"); 2838 RTTESTI_CHECK(ASMCountLeadingZerosU64(UINT64_C(0x0000000000000000)) == 64); 2839 RTTESTI_CHECK(ASMCountLeadingZerosU64(UINT64_C(0x0000000000000001)) == 63); 2840 RTTESTI_CHECK(ASMCountLeadingZerosU64(UINT64_C(0x8000000000000000)) == 0); 2841 RTTESTI_CHECK(ASMCountLeadingZerosU64(UINT64_C(0x0fffffff0f0fffe0)) == 4); 2842 for (unsigned iBit = 0; iBit < 64; iBit++) 2843 { 2844 RTTESTI_CHECK(ASMCountLeadingZerosU64(UINT64_C(0x8000000000000000) >> iBit) == iBit); 2845 RTTESTI_CHECK(ASMCountLeadingZerosU64(UINT64_MAX >> iBit) == iBit); 2846 } 2847 2848 RTTestSub(g_hTest, "ASMCountTrailingZerosU16"); 2849 RTTESTI_CHECK(ASMCountTrailingZerosU16(0x0000) == 16); 2850 RTTESTI_CHECK(ASMCountTrailingZerosU16(0x0001) == 0); 2851 RTTESTI_CHECK(ASMCountTrailingZerosU16(0x8000) == 15); 2852 RTTESTI_CHECK(ASMCountTrailingZerosU16(0x0ef0) == 4); 2853 for (unsigned iBit = 0; iBit < 16; iBit++) 2854 { 2855 RTTESTI_CHECK(ASMCountTrailingZerosU16((uint16_t)1 << iBit) == iBit); 2856 RTTESTI_CHECK(ASMCountTrailingZerosU16(UINT16_MAX << iBit) == iBit); 2857 } 2858 2859 RTTestSub(g_hTest, "ASMCountTrailingZerosU32"); 2860 RTTESTI_CHECK(ASMCountTrailingZerosU32(UINT32_C(0x00000000)) == 32); 2861 RTTESTI_CHECK(ASMCountTrailingZerosU32(UINT32_C(0x00000001)) == 0); 2862 RTTESTI_CHECK(ASMCountTrailingZerosU32(UINT32_C(0x80000000)) == 31); 2863 RTTESTI_CHECK(ASMCountTrailingZerosU32(UINT32_C(0x0efffff0)) == 4); 2864 for (unsigned iBit = 0; iBit < 32; iBit++) 2865 { 2866 RTTESTI_CHECK(ASMCountTrailingZerosU32((uint32_t)1 << iBit) == iBit); 2867 RTTESTI_CHECK(ASMCountTrailingZerosU32(UINT32_MAX << iBit) == iBit); 2868 } 2869 2870 RTTestSub(g_hTest, "ASMCountTrailingZerosU64"); 2871 RTTESTI_CHECK(ASMCountTrailingZerosU64(UINT64_C(0x0000000000000000)) == 64); 2872 RTTESTI_CHECK(ASMCountTrailingZerosU64(UINT64_C(0x0000000000000001)) == 0); 2873 RTTESTI_CHECK(ASMCountTrailingZerosU64(UINT64_C(0x8000000000000000)) == 63); 2874 RTTESTI_CHECK(ASMCountTrailingZerosU64(UINT64_C(0x0effff0fefef0ff0)) == 4); 2875 for (unsigned iBit = 0; iBit < 64; iBit++) 2876 { 2877 RTTESTI_CHECK(ASMCountTrailingZerosU64((uint64_t)1 << iBit) == iBit); 2878 RTTESTI_CHECK(ASMCountTrailingZerosU64(UINT64_MAX << iBit) == iBit); 2879 } 2880 } 2881 2745 2882 2746 2883 void tstASMMath(void) … … 3104 3241 BENCH(ASMNopPause(), "ASMNopPause"); 3105 3242 3243 BENCH(ASMBitFirstSetU16(s_u16), "ASMBitFirstSetU16"); 3244 BENCH(ASMBitFirstSetU32(s_u32), "ASMBitFirstSetU32"); 3245 BENCH(ASMBitFirstSetU64(s_u32), "ASMBitFirstSetU64"); 3246 BENCH(ASMBitLastSetU16(s_u16), "ASMBitLastSetU16"); 3247 BENCH(ASMBitLastSetU32(s_u32), "ASMBitLastSetU32"); 3248 BENCH(ASMBitLastSetU64(s_u32), "ASMBitLastSetU64"); 3249 BENCH(ASMCountLeadingZerosU16(s_u16), "ASMCountLeadingZerosU16"); 3250 BENCH(ASMCountLeadingZerosU32(s_u32), "ASMCountLeadingZerosU32"); 3251 BENCH(ASMCountLeadingZerosU64(s_u64), "ASMCountLeadingZerosU64"); 3252 BENCH(ASMCountTrailingZerosU16(s_u16), "ASMCountTrailingZerosU16"); 3253 BENCH(ASMCountTrailingZerosU32(s_u32), "ASMCountTrailingZerosU32"); 3254 BENCH(ASMCountTrailingZerosU64(s_u64), "ASMCountTrailingZerosU64"); 3255 3256 s_u32 = 0; if (s_u32) { /// remove me 3106 3257 /* The Darwin gcc does not like this ... */ 3107 3258 #if !defined(RT_OS_DARWIN) && !defined(GCC44_32BIT_PIC) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) … … 3178 3329 tstASMMisc(); 3179 3330 3331 tstASMBit(); 3332 3180 3333 tstASMMath(); 3181 3334
Note:
See TracChangeset
for help on using the changeset viewer.