• Russ Cox's avatar
    math/big: write t*10 to multiply t by 10 · ab441477
    Russ Cox authored
    The compiler has caught up.
    In fact the compiler is ahead; it knows about a magic multiply-by-5 instruction:
    
    	// compute '0' + byte(r - t*10) in AX
    	MOVQ	t, AX
    	LEAQ	(AX)(AX*4), AX
    	SHLQ	$1, AX
    	MOVQ	r, CX
    	SUBQ	AX, CX
    	LEAL	48(CX), AX
    
    For comparison, the shifty version compiles to:
    
    	// compute '0' + byte(r - t*10) in AX
    	MOVQ	t, AX
    	MOVQ	AX, CX
    	SHLQ	$3, AX
    	MOVQ	r, DX
    	SUBQ	AX, DX
    	SUBQ	CX, DX
    	SUBQ	CX, DX
    	LEAL	48(DX), AX
    
    Fixes #2671.
    
    Change-Id: Ifbf23dbfeb19c0bb020fa44eb2f025943969fb6b
    Reviewed-on: https://go-review.googlesource.com/23372
    Run-TryBot: Russ Cox <rsc@golang.org>
    Reviewed-by: 's avatarAndrew Gerrand <adg@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    ab441477
natconv.go 13.3 KB