...
Run Format

Text file src/math/log_s390x.s

Documentation: math

     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		WORD	$0xB3CD0010	//lgdr	%r1,%f0
    67		MOVD	$0x3FF0000000000000, R6
    68		SRAD	$48, R1, R1
    69		MOVD	$0x40F03E8000000000, R8
    70		SUBW	R1, R4
    71		WORD	$0xEC2420BB	//risbg	%r2,%r4,32,128+59,0
    72		BYTE	$0x00
    73		BYTE	$0x55
    74		WORD	$0xEC62000F	//risbgn	%r6,%r2,64-64+0,64-64+0+16-1,64-0-16
    75		BYTE	$0x30
    76		BYTE	$0x59
    77		WORD	$0xEC82101F	//risbgn	%r8,%r2,64-64+16,64-64+16+16-1,64-16-16
    78		BYTE	$0x20
    79		BYTE	$0x59
    80		MOVW	R1, R7
    81		CMPBGT	R7, $22, L17
    82		WORD	$0xB3120000	//ltdbr	%f0,%f0
    83		MOVD	$·logx43f<>+0(SB), R1
    84		FMOVD	0(R1), F2
    85		BLEU	L3
    86		MOVH	$0x8005, R12
    87		MOVH	$0x8405, R0
    88		BR	L15
    89	L7:
    90		WORD	$0xB3120000	//ltdbr	%f0,%f0
    91		BLEU	L3
    92	L15:
    93		FMUL	F2, F0
    94		WORD	$0xB3CD0010	//lgdr	%r1,%f0
    95		SRAD	$48, R1, R1
    96		SUBW	R1, R0, R2
    97		SUBW	R1, R12, R3
    98		BYTE	$0x18	//lr	%r4,%r2
    99		BYTE	$0x42
   100		ANDW	$0xFFFFFFF0, R3
   101		ANDW	$0xFFFFFFF0, R2
   102		BYTE	$0x18	//lr	%r5,%r1
   103		BYTE	$0x51
   104		MOVW	R1, R7
   105		CMPBLE	R7, $22, L7
   106		WORD	$0xEC63000F	//risbgn	%r6,%r3,64-64+0,64-64+0+16-1,64-0-16
   107		BYTE	$0x30
   108		BYTE	$0x59
   109		WORD	$0xEC82101F	//risbgn	%r8,%r2,64-64+16,64-64+16+16-1,64-16-16
   110		BYTE	$0x20
   111		BYTE	$0x59
   112	L2:
   113		MOVH	R5, R5
   114		MOVH	$0x7FEF, R1
   115		CMPW	R5, R1
   116		BGT	L1
   117		WORD	$0xB3C10026	//ldgr	%f2,%r6
   118		FMUL	F2, F0
   119		WORD	$0xEC4439BB	//risbg	%r4,%r4,57,128+59,3
   120		BYTE	$0x03
   121		BYTE	$0x55
   122		FMOVD	80(R9), F2
   123		MOVD	$·logxm<>+0(SB), R7
   124		ADD	R7, R4
   125		FMOVD	72(R9), F4
   126		WORD	$0xED004000	//madb	%f2,%f0,0(%r4)
   127		BYTE	$0x20
   128		BYTE	$0x1E
   129		FMOVD	64(R9), F1
   130		FMOVD	F2, F0
   131		FMOVD	56(R9), F2
   132		WFMADB	V0, V2, V4, V2
   133		WFMDB	V0, V0, V6
   134		FMOVD	48(R9), F4
   135		WFMADB	V0, V2, V4, V2
   136		FMOVD	40(R9), F4
   137		WFMADB	V2, V6, V1, V2
   138		FMOVD	32(R9), F1
   139		WFMADB	V6, V4, V1, V4
   140		FMOVD	24(R9), F1
   141		WFMADB	V6, V2, V1, V2
   142		FMOVD	16(R9), F1
   143		WFMADB	V6, V4, V1, V4
   144		MOVD	$·logxl1<>+0(SB), R1
   145		FMOVD	8(R9), F1
   146		WFMADB	V6, V2, V1, V2
   147		FMOVD	0(R9), F1
   148		WFMADB	V6, V4, V1, V4
   149		FMOVD	8(R4), F1
   150		WFMADB	V0, V2, V4, V2
   151		WORD	$0xB3C10048	//ldgr	%f4,%r8
   152		WFMADB	V6, V2, V0, V2
   153		WORD	$0xED401000	//msdb	%f1,%f4,0(%r1)
   154		BYTE	$0x10
   155		BYTE	$0x1F
   156		MOVD	·logxl2<>+0(SB), R1
   157		WORD	$0xB3130001	//lcdbr	%f0,%f1
   158		WORD	$0xB3C10041	//ldgr	%f4,%r1
   159		WFMADB	V0, V4, V2, V0
   160	L1:
   161		FMOVD	F0, ret+8(FP)
   162		RET
   163	L3:
   164		WORD	$0xB3120000	//ltdbr	%f0,%f0
   165		BEQ	L20
   166		BGE	L1
   167		BVS	L1
   168	
   169		MOVD	$·logxnan<>+0(SB), R1
   170		FMOVD	0(R1), F0
   171		BR	L1
   172	L20:
   173		MOVD	$·logxminf<>+0(SB), R1
   174		FMOVD	0(R1), F0
   175		FMOVD	F0, ret+8(FP)
   176		RET
   177	L17:
   178		BYTE	$0x18	//lr	%r5,%r1
   179		BYTE	$0x51
   180		BR	L2

View as plain text