...
Run Format

Text file src/math/cbrt_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 coefficients and other constants
     8	DATA ·cbrtrodataL9<> + 0(SB)/8, $-.00016272731015974436E+00
     9	DATA ·cbrtrodataL9<> + 8(SB)/8, $0.66639548758285293179E+00
    10	DATA ·cbrtrodataL9<> + 16(SB)/8, $0.55519402697349815993E+00
    11	DATA ·cbrtrodataL9<> + 24(SB)/8, $0.49338566048766782004E+00
    12	DATA ·cbrtrodataL9<> + 32(SB)/8, $0.45208160036325611486E+00
    13	DATA ·cbrtrodataL9<> + 40(SB)/8, $0.43099892837778637816E+00
    14	DATA ·cbrtrodataL9<> + 48(SB)/8, $1.000244140625
    15	DATA ·cbrtrodataL9<> + 56(SB)/8, $0.33333333333333333333E+00
    16	DATA ·cbrtrodataL9<> + 64(SB)/8, $79228162514264337593543950336.
    17	GLOBL ·cbrtrodataL9<> + 0(SB), RODATA, $72
    18	
    19	// Index tables
    20	DATA ·cbrttab32069<> + 0(SB)/8, $0x404030303020202
    21	DATA ·cbrttab32069<> + 8(SB)/8, $0x101010101000000
    22	DATA ·cbrttab32069<> + 16(SB)/8, $0x808070706060605
    23	DATA ·cbrttab32069<> + 24(SB)/8, $0x505040404040303
    24	DATA ·cbrttab32069<> + 32(SB)/8, $0xe0d0c0c0b0b0b0a
    25	DATA ·cbrttab32069<> + 40(SB)/8, $0xa09090908080808
    26	DATA ·cbrttab32069<> + 48(SB)/8, $0x11111010100f0f0f
    27	DATA ·cbrttab32069<> + 56(SB)/8, $0xe0e0e0e0e0d0d0d
    28	DATA ·cbrttab32069<> + 64(SB)/8, $0x1515141413131312
    29	DATA ·cbrttab32069<> + 72(SB)/8, $0x1212111111111010
    30	GLOBL ·cbrttab32069<> + 0(SB), RODATA, $80
    31	
    32	DATA ·cbrttab22068<> + 0(SB)/8, $0x151015001420141
    33	DATA ·cbrttab22068<> + 8(SB)/8, $0x140013201310130
    34	DATA ·cbrttab22068<> + 16(SB)/8, $0x122012101200112
    35	DATA ·cbrttab22068<> + 24(SB)/8, $0x111011001020101
    36	DATA ·cbrttab22068<> + 32(SB)/8, $0x10000f200f100f0
    37	DATA ·cbrttab22068<> + 40(SB)/8, $0xe200e100e000d2
    38	DATA ·cbrttab22068<> + 48(SB)/8, $0xd100d000c200c1
    39	DATA ·cbrttab22068<> + 56(SB)/8, $0xc000b200b100b0
    40	DATA ·cbrttab22068<> + 64(SB)/8, $0xa200a100a00092
    41	DATA ·cbrttab22068<> + 72(SB)/8, $0x91009000820081
    42	DATA ·cbrttab22068<> + 80(SB)/8, $0x80007200710070
    43	DATA ·cbrttab22068<> + 88(SB)/8, $0x62006100600052
    44	DATA ·cbrttab22068<> + 96(SB)/8, $0x51005000420041
    45	DATA ·cbrttab22068<> + 104(SB)/8, $0x40003200310030
    46	DATA ·cbrttab22068<> + 112(SB)/8, $0x22002100200012
    47	DATA ·cbrttab22068<> + 120(SB)/8, $0x11001000020001
    48	GLOBL ·cbrttab22068<> + 0(SB), RODATA, $128
    49	
    50	DATA ·cbrttab12067<> + 0(SB)/8, $0x53e1529051324fe1
    51	DATA ·cbrttab12067<> + 8(SB)/8, $0x4e904d324be14a90
    52	DATA ·cbrttab12067<> + 16(SB)/8, $0x493247e146904532
    53	DATA ·cbrttab12067<> + 24(SB)/8, $0x43e1429041323fe1
    54	DATA ·cbrttab12067<> + 32(SB)/8, $0x3e903d323be13a90
    55	DATA ·cbrttab12067<> + 40(SB)/8, $0x393237e136903532
    56	DATA ·cbrttab12067<> + 48(SB)/8, $0x33e1329031322fe1
    57	DATA ·cbrttab12067<> + 56(SB)/8, $0x2e902d322be12a90
    58	DATA ·cbrttab12067<> + 64(SB)/8, $0xd3e1d290d132cfe1
    59	DATA ·cbrttab12067<> + 72(SB)/8, $0xce90cd32cbe1ca90
    60	DATA ·cbrttab12067<> + 80(SB)/8, $0xc932c7e1c690c532
    61	DATA ·cbrttab12067<> + 88(SB)/8, $0xc3e1c290c132bfe1
    62	DATA ·cbrttab12067<> + 96(SB)/8, $0xbe90bd32bbe1ba90
    63	DATA ·cbrttab12067<> + 104(SB)/8, $0xb932b7e1b690b532
    64	DATA ·cbrttab12067<> + 112(SB)/8, $0xb3e1b290b132afe1
    65	DATA ·cbrttab12067<> + 120(SB)/8, $0xae90ad32abe1aa90
    66	GLOBL ·cbrttab12067<> + 0(SB), RODATA, $128
    67	
    68	// Cbrt returns the cube root of the argument.
    69	//
    70	// Special cases are:
    71	//      Cbrt(±0) = ±0
    72	//      Cbrt(±Inf) = ±Inf
    73	//      Cbrt(NaN) = NaN
    74	// The algorithm used is minimax polynomial approximation
    75	// with coefficients determined with a Remez exchange algorithm.
    76	
    77	TEXT	·cbrtAsm(SB), NOSPLIT, $0-16
    78		FMOVD	x+0(FP), F0
    79		MOVD	$·cbrtrodataL9<>+0(SB), R9
    80		WORD	$0xB3CD0020	//lgdr %r2, %f0
    81		WORD	$0xC039000F	//iilf	%r3,1048575
    82		BYTE	$0xFF
    83		BYTE	$0xFF
    84		SRAD	$32, R2
    85		WORD	$0xB9170012	//llgtr	%r1,%r2
    86		MOVW	R1, R6
    87		MOVW	R3, R7
    88		CMPBLE	R6, R7, L2
    89		WORD	$0xC0397FEF	//iilf	%r3,2146435071
    90		BYTE	$0xFF
    91		BYTE	$0xFF
    92		MOVW	R3, R7
    93		CMPBLE	R6, R7, L8
    94	L1:
    95		FMOVD	F0, ret+8(FP)
    96		RET
    97	L3:
    98	L2:
    99		WORD	$0xB3120000	//ltdbr	%f0,%f0
   100		BEQ	L1
   101		FMOVD	F0, F2
   102		WORD	$0xED209040	//mdb	%f2,.L10-.L9(%r9)
   103		BYTE	$0x00
   104		BYTE	$0x1C
   105		MOVH	$0x200, R4
   106		WORD	$0xB3CD0022	//lgdr %r2, %f2
   107		SRAD	$32, R2
   108	L4:
   109		WORD	$0xEC3239BE	//risbg	%r3,%r2,57,128+62,64-25
   110		BYTE	$0x27
   111		BYTE	$0x55
   112		MOVD	$·cbrttab12067<>+0(SB), R1
   113		WORD	$0x48131000	//lh	%r1,0(%r3,%r1)
   114		WORD	$0xEC3239BE	//risbg	%r3,%r2,57,128+62,64-19
   115		BYTE	$0x2D
   116		BYTE	$0x55
   117		MOVD	$·cbrttab22068<>+0(SB), R5
   118		WORD	$0xEC223CBF	//risbgn	%r2,%r2,64-4,128+63,64+44+4
   119		BYTE	$0x70
   120		BYTE	$0x59
   121		WORD	$0x4A135000	//ah	%r1,0(%r3,%r5)
   122		BYTE	$0x18	//lr	%r3,%r1
   123		BYTE	$0x31
   124		MOVD	$·cbrttab32069<>+0(SB), R1
   125		FMOVD	56(R9), F1
   126		FMOVD	48(R9), F5
   127		WORD	$0xEC23393B	//rosbg	%r2,%r3,57,59,4
   128		BYTE	$0x04
   129		BYTE	$0x56
   130		WORD	$0xE3121000	//llc	%r1,0(%r2,%r1)
   131		BYTE	$0x00
   132		BYTE	$0x94
   133		ADDW	R3, R1
   134		ADDW	R4, R1
   135		SLW	$16, R1, R1
   136		SLD	$32, R1, R1
   137		WORD	$0xB3C10021	//ldgr	%f2,%r1
   138		WFMDB	V2, V2, V4
   139		WFMDB	V4, V0, V6
   140		WFMSDB	V4, V6, V2, V4
   141		FMOVD	40(R9), F6
   142		FMSUB	F1, F4, F2
   143		FMOVD	32(R9), F4
   144		WFMDB	V2, V2, V3
   145		FMOVD	24(R9), F1
   146		FMUL	F3, F0
   147		FMOVD	16(R9), F3
   148		WFMADB	V2, V0, V5, V2
   149		FMOVD	8(R9), F5
   150		FMADD	F6, F2, F4
   151		WFMADB	V2, V1, V3, V1
   152		WFMDB	V2, V2, V6
   153		FMOVD	0(R9), F3
   154		WFMADB	V4, V6, V1, V4
   155		WFMADB	V2, V5, V3, V2
   156		FMADD	F4, F6, F2
   157		FMADD	F2, F0, F0
   158		FMOVD	F0, ret+8(FP)
   159		RET
   160	L8:
   161		MOVH	$0x0, R4
   162		BR	L4

View as plain text