package main
import (
"fmt"
"os"
)
func main(){
var f int64 = 0
for i := 0; i < 1000000000; i++{
f+=f ^ 0x82fc012dd
}
fmt.Fprintln(os.Stdout, f)
}
#include <stdio.h>
int main(){
long long c = 0;
for(long long i = 0; i < 10000000000; i++){
c+=c xor 0x82fc012dd;
}
printf("result: %llu",c);
return 1;
}
echo g++
g++ a.cpp -O3 -o a.exe && time ./a.exe
echo clang
clang a.cpp -O3 -o a.exe && time ./a.exe
echo golang
go tool compile -S main.go > main.s && time ./main
g++
result: 35160855261
real 0m4,386s
user 0m4,386s
sys 0m0,000s
clang
result: 35160855261
real 0m4,436s
user 0m4,435s
sys 0m0,000s
golang
35160855261
real 0m0,046s
user 0m0,046s
sys 0m0,000s
0x0014 00020 (main.go:8) XORL AX, AX
0x0016 00022 (main.go:8) XORL CX, CX
0x0018 00024 (main.go:11) JMP 45
0x001a 00026 (main.go:11) INCQ AX
0x001d 00029 (main.go:12) MOVQ $35160855261, DX
0x0027 00039 (main.go:12) XORQ CX, DX
0x002a 00042 (main.go:12) ADDQ DX, CX
0x002d 00045 (main.go:11) CMPQ AX, $1000000000
0x0033 00051 (main.go:11) JLT 26
# %bb.0:
movabsq $-10000000000, %rax # imm = 0xFFFFFFFDABF41C00
movabsq $35160855261, %rcx # imm = 0x82FC012DD
xorl %esi, %esi
.p2align 4, 0x90
.LBB0_1: # =>This Inner Loop Header: Depth=1
movq %rsi, %rdx
xorq %rcx, %rdx
addq %rsi, %rdx
movq %rdx, %rsi
xorq %rcx, %rsi
addq %rdx, %rsi
movq %rsi, %rdx
xorq %rcx, %rdx
addq %rsi, %rdx
movq %rdx, %rsi
xorq %rcx, %rsi
addq %rdx, %rsi
movq %rsi, %rdx
xorq %rcx, %rdx
addq %rsi, %rdx
movq %rdx, %rsi
xorq %rcx, %rsi
addq %rdx, %rsi
movq %rsi, %rdx
xorq %rcx, %rdx
addq %rsi, %rdx
movq %rdx, %rsi
xorq %rcx, %rsi
addq %rdx, %rsi
addq $8, %rax
jne .LBB0_1