I have also come up with an efficient algorithm in x86 that computes the factorial of 10000 in 1.6 seconds.
is there a way to "embed" this assembly code into my C++ program?
This post has been edited by carnivroar: 13 November 2012 - 09:05 PM
Posted 13 November 2012 - 09:05 PM
This post has been edited by carnivroar: 13 November 2012 - 09:05 PM
Posted 13 November 2012 - 10:18 PM
Posted 13 November 2012 - 10:58 PM
long factorial(long f) {
long fact;
__asm__("push %%rax" : "=a" (f)); rax = f ??
__asm__("FACT:"
"cmp $1, (%esp)"
"je MULTIPLY"
"mov (%esp), %%rax"
"dec %%rax"
"push %%rax"
"jmp FACT"
"MULTIPLY:"
"add $4, %esp"
"mov (%esp), %%rax"
"mul (%esp), %%rax"
"cmp (%esp), %%rbx" : "=b" (f)); //error here.... rbx = f?
__asm__("jle MULTIPLY"
"mov %%rax, %%rbx" : "=b" (fact)); rbx = fact?
return fact;
}
This post has been edited by carnivroar: 13 November 2012 - 11:01 PM
Posted 13 November 2012 - 11:15 PM
This post has been edited by blackcompe: 13 November 2012 - 11:16 PM
Posted 13 November 2012 - 11:18 PM
Posted 14 November 2012 - 12:35 AM
long factorial(long f) {
long fact;
__asm__("mov $1, %%rbx\n"
"mov %1, %%rdi\n"
"FACT:\n"
"cmp $1, %%rdi\n"
"je DONE\n"
"mov %%rdi, %%rax\n"
"mul %%rbx\n"
"mov %%rax, %%rbx\n"
"dec %%rdi\n"
"jmp FACT\n"
"DONE:\n"
"mov %%rbx, %0\n"
: "=r" (fact)
: "r" (f)
: "%rbx"
);
return fact;
}
This post has been edited by carnivroar: 14 November 2012 - 12:36 AM
|
|
Query failed: connection to localhost:3312 failed (errno=111, msg=Connection refused).
|
