short foo(char a_8,char b_8) {

short a_16=a_8,b_16=b_8;

short a=0,b=0,result;

for(short i=0,mask=1;i<8;i++){

a+=(a_16&mask)<

b+=(b_16&mask)<

printf("%d,%d\n",a_16&mask,a_16);

mask<<=1;

}

result=a<<1+b;

return result;

}

gcc

foo(char, char):

push rbp

mov rbp, rsp

mov eax, edi

mov edx, esi

mov BYTE PTR [rbp-20], al

mov eax, edx

mov BYTE PTR [rbp-24], al

movsx ax, BYTE PTR [rbp-20]

mov WORD PTR [rbp-10], ax

movsx ax, BYTE PTR [rbp-24]

mov WORD PTR [rbp-12], ax

mov WORD PTR [rbp-2], 0

mov WORD PTR [rbp-4], 0

mov WORD PTR [rbp-6], 0

mov WORD PTR [rbp-8], 1

.L3:

cmp WORD PTR [rbp-6], 7

jg .L2

movzx eax, WORD PTR [rbp-10]

and ax, WORD PTR [rbp-8]

movsx edx, ax

movsx eax, WORD PTR [rbp-6]

mov ecx, eax

sal edx, cl

mov eax, edx

mov edx, eax

movzx eax, WORD PTR [rbp-2]

add eax, edx

mov WORD PTR [rbp-2], ax

movzx eax, WORD PTR [rbp-12]

and ax, WORD PTR [rbp-8]

movsx edx, ax

movsx eax, WORD PTR [rbp-6]

mov ecx, eax

sal edx, cl

mov eax, edx

mov edx, eax

movzx eax, WORD PTR [rbp-4]

add eax, edx

mov WORD PTR [rbp-4], ax

movsx eax, WORD PTR [rbp-8]

add eax, eax

mov WORD PTR [rbp-8], ax

movzx eax, WORD PTR [rbp-6]

add eax, 1

mov WORD PTR [rbp-6], ax

jmp .L3

.L2:

movsx edx, WORD PTR [rbp-2]

movsx eax, WORD PTR [rbp-4]

add eax, 1

mov ecx, eax

sal edx, cl

mov eax, edx

mov WORD PTR [rbp-14], ax

movzx eax, WORD PTR [rbp-14]

pop rbp

ret

clang

foo(char, char): # @foo(char, char)

push rbp

mov rbp, rsp

mov al, sil

mov cl, dil

mov byte ptr [rbp - 1], cl

mov byte ptr [rbp - 2], al

movsx esi, byte ptr [rbp - 1]

mov dx, si

mov word ptr [rbp - 4], dx

movsx esi, byte ptr [rbp - 2]

mov dx, si

mov word ptr [rbp - 6], dx

mov word ptr [rbp - 8], 0

mov word ptr [rbp - 10], 0

mov word ptr [rbp - 14], 0

mov word ptr [rbp - 16], 1

.LBB0_1: # =>This Inner Loop Header: Depth=1

movsx eax, word ptr [rbp - 14]

cmp eax, 8

jge .LBB0_4

movsx eax, word ptr [rbp - 4]

movsx ecx, word ptr [rbp - 16]

and eax, ecx

movsx ecx, word ptr [rbp - 14]

shl eax, cl

movsx edx, word ptr [rbp - 8]

add edx, eax

mov si, dx

mov word ptr [rbp - 8], si

movsx eax, word ptr [rbp - 6]

movsx edx, word ptr [rbp - 16]

and eax, edx

movsx ecx, word ptr [rbp - 14]

shl eax, cl

movsx edx, word ptr [rbp - 10]

add edx, eax

mov si, dx

mov word ptr [rbp - 10], si

movsx eax, word ptr [rbp - 16]

shl eax, 1

mov si, ax

mov word ptr [rbp - 16], si

mov ax, word ptr [rbp - 14]

add ax, 1

mov word ptr [rbp - 14], ax

jmp .LBB0_1

.LBB0_4:

movsx eax, word ptr [rbp - 8]

movsx ecx, word ptr [rbp - 10]

add ecx, 1

shl eax, cl

mov dx, ax

mov word ptr [rbp - 12], dx

movsx eax, word ptr [rbp - 12]

pop rbp

ret

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐