// 1000f AVX2 variant
#include <stdint.h>
struct DuckInfo {
unsigned long abi; const char *stdin_ptr; unsigned long stdin_size;
char *stdout_ptr; unsigned long stdout_limit; unsigned long stdout_size;
char *stderr_ptr; unsigned long stderr_limit; unsigned long stderr_size;
const char *IB_ptr; unsigned long IB_limit; char *OB_ptr; unsigned long OB_limit;
unsigned long tsc;
} __attribute__((packed));
double plus(double a, double b) { return a + b; }
extern "C" void __libc_start_main(int (*m)(int,char**,char**), int ac, char **av,
void *x, void *y, void *z) {
unsigned long *q = (unsigned long*)(av + 2);
struct DuckInfo *d = 0;
while (q[0]) { if (q[0] == 0x6b637564) { d = (struct DuckInfo*)q[1]; break; } q += 2; }
const double *in = (const double*)d->IB_ptr;
double *out = (double*)d->OB_ptr;
__asm__ volatile(
"vmovupd (%0), %%ymm0\n"
"vmovupd 80(%0), %%ymm1\n"
"vaddpd %%ymm1, %%ymm0, %%ymm0\n"
"vmovupd %%ymm0, (%1)\n"
"vmovupd 32(%0), %%ymm0\n"
"vmovupd 112(%0), %%ymm1\n"
"vaddpd %%ymm1, %%ymm0, %%ymm0\n"
"vmovupd %%ymm0, 32(%1)\n"
"vmovupd 64(%0), %%xmm0\n"
"vmovupd 144(%0), %%xmm1\n"
"vaddpd %%xmm1, %%xmm0, %%xmm0\n"
"vmovupd %%xmm0, 64(%1)\n"
: : "r"(in), "r"(out) : "ymm0", "ymm1", "memory");
__asm__ volatile("mov $60,%%rax; xor %%rdi,%%rdi; syscall" ::: "rax","rdi","memory");
__builtin_unreachable();
}
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Testcase #1 | 2.75 us | 8 KB | Accepted | Score: 100 | 显示更多 |