...

Text file src/pkg/math/log_s390x.s

     1	// Copyright 2017 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	#include "textflag.h"
     6	
     7	// Minimax polynomial approximations
     8	DATA ·logrodataL21<> + 0(SB)/8, $-.499999999999999778E+00
     9	DATA ·logrodataL21<> + 8(SB)/8, $0.333333333333343751E+00
    10	DATA ·logrodataL21<> + 16(SB)/8, $-.250000000001606881E+00
    11	DATA ·logrodataL21<> + 24(SB)/8, $0.199999999971603032E+00
    12	DATA ·logrodataL21<> + 32(SB)/8, $-.166666663114122038E+00
    13	DATA ·logrodataL21<> + 40(SB)/8, $-.125002923782692399E+00
    14	DATA ·logrodataL21<> + 48(SB)/8, $0.111142014580396256E+00
    15	DATA ·logrodataL21<> + 56(SB)/8, $0.759438932618934220E-01
    16	DATA ·logrodataL21<> + 64(SB)/8, $0.142857144267212549E+00
    17	DATA ·logrodataL21<> + 72(SB)/8, $-.993038938793590759E-01
    18	DATA ·logrodataL21<> + 80(SB)/8, $-1.0
    19	GLOBL ·logrodataL21<> + 0(SB), RODATA, $88
    20	
    21	// Constants
    22	DATA ·logxminf<> + 0(SB)/8, $0xfff0000000000000
    23	GLOBL ·logxminf<> + 0(SB), RODATA, $8
    24	DATA ·logxnan<> + 0(SB)/8, $0x7ff8000000000000
    25	GLOBL ·logxnan<> + 0(SB), RODATA, $8
    26	DATA ·logx43f<> + 0(SB)/8, $0x43f0000000000000
    27	GLOBL ·logx43f<> + 0(SB), RODATA, $8
    28	DATA ·logxl2<> + 0(SB)/8, $0x3fda7aecbeba4e46
    29	GLOBL ·logxl2<> + 0(SB), RODATA, $8
    30	DATA ·logxl1<> + 0(SB)/8, $0x3ffacde700000000
    31	GLOBL ·logxl1<> + 0(SB), RODATA, $8
    32	
    33	/* Input transform scale and add constants */
    34	DATA ·logxm<> + 0(SB)/8, $0x3fc77604e63c84b1
    35	DATA ·logxm<> + 8(SB)/8, $0x40fb39456ab53250
    36	DATA ·logxm<> + 16(SB)/8, $0x3fc9ee358b945f3f
    37	DATA ·logxm<> + 24(SB)/8, $0x40fb39418bf3b137
    38	DATA ·logxm<> + 32(SB)/8, $0x3fccfb2e1304f4b6
    39	DATA ·logxm<> + 40(SB)/8, $0x40fb393d3eda3022
    40	DATA ·logxm<> + 48(SB)/8, $0x3fd0000000000000
    41	DATA ·logxm<> + 56(SB)/8, $0x40fb393969e70000
    42	DATA ·logxm<> + 64(SB)/8, $0x3fd11117aafbfe04
    43	DATA ·logxm<> + 72(SB)/8, $0x40fb3936eaefafcf
    44	DATA ·logxm<> + 80(SB)/8, $0x3fd2492af5e658b2
    45	DATA ·logxm<> + 88(SB)/8, $0x40fb39343ff01715
    46	DATA ·logxm<> + 96(SB)/8, $0x3fd3b50c622a43dd
    47	DATA ·logxm<> + 104(SB)/8, $0x40fb39315adae2f3
    48	DATA ·logxm<> + 112(SB)/8, $0x3fd56bbeea918777
    49	DATA ·logxm<> + 120(SB)/8, $0x40fb392e21698552
    50	GLOBL ·logxm<> + 0(SB), RODATA, $128
    51	
    52	// Log returns the natural logarithm of the argument.
    53	//
    54	// Special cases are:
    55	//      Log(+Inf) = +Inf
    56	//      Log(0) = -Inf
    57	//      Log(x < 0) = NaN
    58	//      Log(NaN) = NaN
    59	// The algorithm used is minimax polynomial approximation using a table of
    60	// polynomial coefficients determined with a Remez exchange algorithm.
    61	
    62	TEXT	·logAsm(SB), NOSPLIT, $0-16
    63		FMOVD	x+0(FP), F0
    64		MOVD	$·logrodataL21<>+0(SB), R9
    65		MOVH	$0x8006, R4
    66		LGDR	F0, R1
    67		MOVD	$0x3FF0000000000000, R6
    68		SRAD	$48, R1, R1
    69		MOVD	$0x40F03E8000000000, R8
    70		SUBW	R1, R4
    71		RISBGZ	$32, $59, $0, R4, R2
    72		RISBGN	$0, $15, $48, R2, R6
    73		RISBGN	$16, $31, $32, R2, R8
    74		MOVW	R1, R7
    75		CMPBGT	R7, $22, L17
    76		LTDBR	F0, F0
    77		MOVD	$·logx43f<>+0(SB), R1
    78		FMOVD	0(R1), F2
    79		BLEU	L3
    80		MOVH	$0x8005, R12
    81		MOVH	$0x8405, R0
    82		BR	L15
    83	L7:
    84		LTDBR	F0, F0
    85		BLEU	L3
    86	L15:
    87		FMUL	F2, F0
    88		LGDR	F0, R1
    89		SRAD	$48, R1, R1
    90		SUBW	R1, R0, R2
    91		SUBW	R1, R12, R3
    92		BYTE	$0x18	//lr	%r4,%r2
    93		BYTE	$0x42
    94		ANDW	$0xFFFFFFF0, R3
    95		ANDW	$0xFFFFFFF0, R2
    96		BYTE	$0x18	//lr	%r5,%r1
    97		BYTE	$0x51
    98		MOVW	R1, R7
    99		CMPBLE	R7, $22, L7
   100		RISBGN	$0, $15, $48, R3, R6
   101		RISBGN	$16, $31, $32, R2, R8
   102	L2:
   103		MOVH	R5, R5
   104		MOVH	$0x7FEF, R1
   105		CMPW	R5, R1
   106		BGT	L1
   107		LDGR	R6, F2
   108		FMUL	F2, F0
   109		RISBGZ	$57, $59, $3, R4, R4
   110		FMOVD	80(R9), F2
   111		MOVD	$·logxm<>+0(SB), R7
   112		ADD	R7, R4
   113		FMOVD	72(R9), F4
   114		WORD	$0xED004000	//madb	%f2,%f0,0(%r4)
   115		BYTE	$0x20
   116		BYTE	$0x1E
   117		FMOVD	64(R9), F1
   118		FMOVD	F2, F0
   119		FMOVD	56(R9), F2
   120		WFMADB	V0, V2, V4, V2
   121		WFMDB	V0, V0, V6
   122		FMOVD	48(R9), F4
   123		WFMADB	V0, V2, V4, V2
   124		FMOVD	40(R9), F4
   125		WFMADB	V2, V6, V1, V2
   126		FMOVD	32(R9), F1
   127		WFMADB	V6, V4, V1, V4
   128		FMOVD	24(R9), F1
   129		WFMADB	V6, V2, V1, V2
   130		FMOVD	16(R9), F1
   131		WFMADB	V6, V4, V1, V4
   132		MOVD	$·logxl1<>+0(SB), R1
   133		FMOVD	8(R9), F1
   134		WFMADB	V6, V2, V1, V2
   135		FMOVD	0(R9), F1
   136		WFMADB	V6, V4, V1, V4
   137		FMOVD	8(R4), F1
   138		WFMADB	V0, V2, V4, V2
   139		LDGR	R8, F4
   140		WFMADB	V6, V2, V0, V2
   141		WORD	$0xED401000	//msdb	%f1,%f4,0(%r1)
   142		BYTE	$0x10
   143		BYTE	$0x1F
   144		MOVD	·logxl2<>+0(SB), R1
   145		WORD	$0xB3130001	//lcdbr	%f0,%f1
   146		LDGR	R1, F4
   147		WFMADB	V0, V4, V2, V0
   148	L1:
   149		FMOVD	F0, ret+8(FP)
   150		RET
   151	L3:
   152		LTDBR	F0, F0
   153		BEQ	L20
   154		BGE	L1
   155		BVS	L1
   156	
   157		MOVD	$·logxnan<>+0(SB), R1
   158		FMOVD	0(R1), F0
   159		BR	L1
   160	L20:
   161		MOVD	$·logxminf<>+0(SB), R1
   162		FMOVD	0(R1), F0
   163		FMOVD	F0, ret+8(FP)
   164		RET
   165	L17:
   166		BYTE	$0x18	//lr	%r5,%r1
   167		BYTE	$0x51
   168		BR	L2

View as plain text