关于乘法指令与加法指令哪个快的问题解答
http://sj256.com/content/?62.html
[解决办法]
#include <cstdio>#include <stdint.h>using namespace std;uint64_t rdtsc(){ uint32_t eax, edx; asm volatile ("rdtsc" : "=a"(eax), "=d"(edx)); return ((uint64_t)edx << 32) | eax;}int main(){ uint64_t start, end; start = rdtsc(); for(int i = 0; i < 100000000; ++i) { asm volatile ("imul %0, %%eax" : : "r"(0) : "eax"); asm volatile ("imul %0, %%ebx" : : "r"(0) : "ebx"); asm volatile ("imul %0, %%ecx" : : "r"(0) : "ecx"); asm volatile ("imul %0, %%edx" : : "r"(0) : "edx"); asm volatile ("imul %0, %%eax" : : "r"(0) : "eax"); asm volatile ("imul %0, %%ebx" : : "r"(0) : "ebx"); asm volatile ("imul %0, %%ecx" : : "r"(0) : "ecx"); asm volatile ("imul %0, %%edx" : : "r"(0) : "edx"); asm volatile ("imul %0, %%eax" : : "r"(0) : "eax"); asm volatile ("imul %0, %%ebx" : : "r"(0) : "ebx"); asm volatile ("imul %0, %%ecx" : : "r"(0) : "ecx"); asm volatile ("imul %0, %%edx" : : "r"(0) : "edx"); } end = rdtsc(); printf("ticks: %lu\n", (unsigned long)(end - start)); start = rdtsc(); for(int i = 0; i < 100000000; ++i) { asm volatile ("imul %0, %%eax" : : "r"(0x55555555) : "eax"); asm volatile ("imul %0, %%ebx" : : "r"(0x55555555) : "ebx"); asm volatile ("imul %0, %%ecx" : : "r"(0x55555555) : "ecx"); asm volatile ("imul %0, %%edx" : : "r"(0x55555555) : "edx"); asm volatile ("imul %0, %%eax" : : "r"(0x55555555) : "eax"); asm volatile ("imul %0, %%ebx" : : "r"(0x55555555) : "ebx"); asm volatile ("imul %0, %%ecx" : : "r"(0x55555555) : "ecx"); asm volatile ("imul %0, %%edx" : : "r"(0x55555555) : "edx"); asm volatile ("imul %0, %%eax" : : "r"(0x55555555) : "eax"); asm volatile ("imul %0, %%ebx" : : "r"(0x55555555) : "ebx"); asm volatile ("imul %0, %%ecx" : : "r"(0x55555555) : "ecx"); asm volatile ("imul %0, %%edx" : : "r"(0x55555555) : "edx"); } end = rdtsc(); printf("ticks: %lu\n", (unsigned long)(end - start)); return 0;}