// Copyright 2016 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 "textflag.h"

TEXT ·Asin(SB),NOSPLIT,$0
	BR ·asin(SB)

TEXT ·Acos(SB),NOSPLIT,$0
	BR ·acos(SB)

TEXT ·Atan2(SB),NOSPLIT,$0
	BR ·atan2(SB)

TEXT ·Atan(SB),NOSPLIT,$0
	BR ·atan(SB)

TEXT ·Exp2(SB),NOSPLIT,$0
	BR ·exp2(SB)

TEXT ·Expm1(SB),NOSPLIT,$0
	BR ·expm1(SB)

TEXT ·Exp(SB),NOSPLIT,$0
	BR ·exp(SB)

TEXT ·Frexp(SB),NOSPLIT,$0
	BR ·frexp(SB)

TEXT ·Hypot(SB),NOSPLIT,$0
	BR ·hypot(SB)

TEXT ·Ldexp(SB),NOSPLIT,$0
	BR ·ldexp(SB)

TEXT ·Log2(SB),NOSPLIT,$0
	BR ·log2(SB)

TEXT ·Log1p(SB),NOSPLIT,$0
	BR ·log1p(SB)

TEXT ·Log(SB),NOSPLIT,$0
	BR ·log(SB)

TEXT ·Modf(SB),NOSPLIT,$0
	BR ·modf(SB)

TEXT ·Mod(SB),NOSPLIT,$0
	BR ·mod(SB)

TEXT ·Remainder(SB),NOSPLIT,$0
	BR ·remainder(SB)

TEXT ·Tan(SB),NOSPLIT,$0
	BR ·tan(SB)

//if go assembly use vector instruction
TEXT ·hasVectorFacility(SB),NOSPLIT,$24-1
	MOVD    $x-24(SP), R1
	XC      $24, 0(R1), 0(R1) // clear the storage
	MOVD    $2, R0            // R0 is the number of double words stored -1
	WORD    $0xB2B01000       // STFLE 0(R1)
	XOR     R0, R0            // reset the value of R0
	MOVBZ   z-8(SP), R1
	AND     $0x40, R1
	BEQ     novector
vectorinstalled:
	// check if the vector instruction has been enabled
	VLEIB   $0, $0xF, V16
	VLGVB   $0, V16, R1
	CMPBNE  R1, $0xF, novector
	MOVB    $1, ret+0(FP) // have vx
	RET
novector:
	MOVB    $0, ret+0(FP) // no vx
	RET

TEXT ·Log10(SB),NOSPLIT,$0
	MOVD    log10vectorfacility+0x00(SB),R1
	BR      (R1)

TEXT ·log10TrampolineSetup(SB),NOSPLIT, $0
	MOVB    ·hasVX(SB), R1
	CMPBEQ  R1, $1, vectorimpl      // vectorfacility = 1, vector supported
	MOVD    $log10vectorfacility+0x00(SB), R1
	MOVD    $·log10(SB), R2
	MOVD    R2, 0(R1)
	BR      ·log10(SB)
vectorimpl:
	MOVD    $log10vectorfacility+0x00(SB), R1
	MOVD    $·log10Asm(SB), R2
	MOVD    R2, 0(R1)
	BR      ·log10Asm(SB)

GLOBL log10vectorfacility+0x00(SB), NOPTR, $8
DATA log10vectorfacility+0x00(SB)/8, $·log10TrampolineSetup(SB)


TEXT ·Cos(SB),NOSPLIT,$0
	MOVD    cosvectorfacility+0x00(SB),R1
	BR      (R1)

TEXT ·cosTrampolineSetup(SB),NOSPLIT, $0
	MOVB    ·hasVX(SB), R1
	CMPBEQ  R1, $1, vectorimpl      // vectorfacility = 1, vector supported
	MOVD    $cosvectorfacility+0x00(SB), R1
	MOVD    $·cos(SB), R2
	MOVD    R2, 0(R1)
	BR      ·cos(SB)
vectorimpl:
	MOVD    $cosvectorfacility+0x00(SB), R1
	MOVD    $·cosAsm(SB), R2
	MOVD    R2, 0(R1)
	BR      ·cosAsm(SB)

GLOBL cosvectorfacility+0x00(SB), NOPTR, $8
DATA cosvectorfacility+0x00(SB)/8, $·cosTrampolineSetup(SB)


TEXT ·Cosh(SB),NOSPLIT,$0
	MOVD    coshvectorfacility+0x00(SB),R1
	BR      (R1)

TEXT ·coshTrampolineSetup(SB),NOSPLIT, $0
	MOVB    ·hasVX(SB), R1
	CMPBEQ  R1, $1, vectorimpl      // vectorfacility = 1, vector supported
	MOVD    $coshvectorfacility+0x00(SB), R1
	MOVD    $·cosh(SB), R2
	MOVD    R2, 0(R1)
	BR      ·cosh(SB)
vectorimpl:
	MOVD    $coshvectorfacility+0x00(SB), R1
	MOVD    $·coshAsm(SB), R2
	MOVD    R2, 0(R1)
	BR      ·coshAsm(SB)

GLOBL coshvectorfacility+0x00(SB), NOPTR, $8
DATA coshvectorfacility+0x00(SB)/8, $·coshTrampolineSetup(SB)


TEXT ·Sin(SB),NOSPLIT,$0
	MOVD    sinvectorfacility+0x00(SB),R1
	BR      (R1)

TEXT ·sinTrampolineSetup(SB),NOSPLIT, $0
	MOVB    ·hasVX(SB), R1
	CMPBEQ  R1, $1, vectorimpl      // vectorfacility = 1, vector supported
	MOVD    $sinvectorfacility+0x00(SB), R1
	MOVD    $·sin(SB), R2
	MOVD    R2, 0(R1)
	BR      ·sin(SB)
vectorimpl:
	MOVD    $sinvectorfacility+0x00(SB), R1
	MOVD    $·sinAsm(SB), R2
	MOVD    R2, 0(R1)
	BR      ·sinAsm(SB)

GLOBL sinvectorfacility+0x00(SB), NOPTR, $8
DATA sinvectorfacility+0x00(SB)/8, $·sinTrampolineSetup(SB)


TEXT ·Sinh(SB),NOSPLIT,$0
	MOVD    sinhvectorfacility+0x00(SB),R1
	BR      (R1)

TEXT ·sinhTrampolineSetup(SB),NOSPLIT, $0
	MOVB    ·hasVX(SB), R1
	CMPBEQ  R1, $1, vectorimpl      // vectorfacility = 1, vector supported
	MOVD    $sinhvectorfacility+0x00(SB), R1
	MOVD    $·sinh(SB), R2
	MOVD    R2, 0(R1)
	BR      ·sinh(SB)
vectorimpl:
	MOVD    $sinhvectorfacility+0x00(SB), R1
	MOVD    $·sinhAsm(SB), R2
	MOVD    R2, 0(R1)
	BR      ·sinhAsm(SB)

GLOBL sinhvectorfacility+0x00(SB), NOPTR, $8
DATA sinhvectorfacility+0x00(SB)/8, $·sinhTrampolineSetup(SB)



TEXT ·Tanh(SB),NOSPLIT,$0
	MOVD    tanhvectorfacility+0x00(SB),R1
	BR      (R1)

TEXT ·tanhTrampolineSetup(SB),NOSPLIT, $0
	MOVB    ·hasVX(SB), R1
	CMPBEQ  R1, $1, vectorimpl      // vectorfacility = 1, vector supported
	MOVD    $tanhvectorfacility+0x00(SB), R1
	MOVD    $·tanh(SB), R2
	MOVD    R2, 0(R1)
	BR      ·tanh(SB)
vectorimpl:
	MOVD    $tanhvectorfacility+0x00(SB), R1
	MOVD    $·tanhAsm(SB), R2
	MOVD    R2, 0(R1)
	BR      ·tanhAsm(SB)

GLOBL tanhvectorfacility+0x00(SB), NOPTR, $8
DATA tanhvectorfacility+0x00(SB)/8, $·tanhTrampolineSetup(SB)


