// Copyright 2010 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

#include "../../cmd/ld/textflag.h"

// func Log1p(x float64) float64
TEXT ·Log1p(SB),NOSPLIT,$0
	FMOVD   $(2.928932188134524e-01), F0
	FMOVD   x+0(FP), F0  // F0=x, F1=1-sqrt(2)/2 = 0.29289321881345247559915564
	FABS                 // F0=|x|, F1=1-sqrt(2)/2
	FUCOMPP F0, F1       // compare F0 to F1
	FSTSW   AX
	FLDLN2               // F0=log(2)
	ANDW    $0x0100, AX
	JEQ     use_fyl2x    // jump if F0 >= F1
	FMOVD   x+0(FP), F0  // F0=x, F1=log(2)
	FYL2XP1              // F0=log(1+x)=log2(1+x)*log(2)
	FMOVDP  F0, ret+8(FP)
	RET
use_fyl2x:
	FLD1                 // F0=1, F2=log(2)
	FADDD   x+0(FP), F0  // F0=1+x, F1=log(2)
	FYL2X                // F0=log(1+x)=log2(1+x)*log(2)
	FMOVDP  F0, ret+8(FP)
	RET

