Posted to tcl by aspect at Wed Sep 30 01:39:29 GMT 2015view pretty

with -Os, the unoptimised version compiles as:

CompareVarKeys:
.LFB82:
	pushq	%r13	#
	pushq	%r12	#
	pushq	%rbp	#
	pushq	%rbx	#
	pushq	%rcx	#
	movq	32(%rsi), %rbp	# hPtr_10(D)->key.objPtr, objPtr2
	cmpq	%rbp, %rdi	# objPtr2, keyPtr
	jne	.L107	#,
.L111:
	movl	$1, %r13d	#, D.20762
	jmp	.L108	#
.L107:
	movq	8(%rdi), %r12	# MEM[(struct Tcl_Obj *)keyPtr_8(D)].bytes, p1
	movq	%rdi, %rbx	# keyPtr, keyPtr
	testq	%r12, %r12	# p1
	jne	.L109	#,
	call	Tcl_GetString@PLT	#
	movq	%rax, %r12	#, p1
.L109:
	movq	8(%rbp), %rsi	# objPtr2_11->bytes, p2
	movl	16(%rbx), %ebx	# MEM[(struct Tcl_Obj *)keyPtr_8(D)].length, l1
	testq	%rsi, %rsi	# p2
	jne	.L110	#,
	movq	%rbp, %rdi	# objPtr2,
	call	Tcl_GetString@PLT	#
	movq	%rax, %rsi	#, p2
.L110:
	xorl	%r13d, %r13d	# D.20762
	cmpl	16(%rbp), %ebx	# objPtr2_11->length, l1
	jne	.L108	#,
	movslq	%ebx, %rdx	# l1, D.20763
	movq	%r12, %rdi	# p1,
	call	memcmp@PLT	#
	testl	%eax, %eax	# tmp95
	je	.L111	#,
.L108:
	popq	%rdx	#
	movl	%r13d, %eax	# D.20762,
	popq	%rbx	#
	popq	%rbp	#
	popq	%r12	#
	popq	%r13	#
	ret



Optimised version:

CompareVarKeys:
	movq	32(%rsi), %rsi	# hPtr_5(D)->key.objPtr, objPtr2
	cmpq	%rsi, %rdi	# objPtr2, keyPtr
	je	.L113	#,
	jmp	CompareDistinctVarKeys	#
.L113:
	movl	$1, %eax	#,
	ret



CompareDistinctVarKeys:
	pushq	%r12	#
	pushq	%rbp	#
	movq	%rsi, %r12	# objPtr2, objPtr2
	pushq	%rbx	#
	movq	8(%rdi), %rbp	# objPtr1_7(D)->bytes, p1
	movq	%rdi, %rbx	# objPtr1, objPtr1
	testq	%rbp, %rbp	# p1
	jne	.L107	#,
	call	Tcl_GetString@PLT	#
	movq	%rax, %rbp	#, p1
.L107:
	movq	8(%r12), %rsi	# objPtr2_12(D)->bytes, p2
	movl	16(%rbx), %ebx	# objPtr1_7(D)->length, l1
	testq	%rsi, %rsi	# p2
	jne	.L108	#,
	movq	%r12, %rdi	# objPtr2,
	call	Tcl_GetString@PLT	#
	movq	%rax, %rsi	#, p2
.L108:
	xorl	%eax, %eax	# D.20770
	cmpl	16(%r12), %ebx	# objPtr2_12(D)->length, l1
	jne	.L109	#,
	movslq	%ebx, %rdx	# l1, D.20771
	movq	%rbp, %rdi	# p1,
	call	memcmp@PLT	#
	testl	%eax, %eax	# tmp95
	sete	%al	#, D.20770
	movzbl	%al, %eax	# D.20770, D.20770
.L109:
	popq	%rbx	#
	popq	%rbp	#
	popq	%r12	#
	ret