...

Text file src/math/dim_amd64.s

Documentation: math

     1// Copyright 2010 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#define PosInf 0x7FF0000000000000
     8#define NaN    0x7FF8000000000001
     9#define NegInf 0xFFF0000000000000
    10
    11// func ·archMax(x, y float64) float64
    12TEXT ·archMax(SB),NOSPLIT,$0
    13	// +Inf special cases
    14	MOVQ    $PosInf, AX
    15	MOVQ    x+0(FP), R8
    16	CMPQ    AX, R8
    17	JEQ     isPosInf
    18	MOVQ    y+8(FP), R9
    19	CMPQ    AX, R9
    20	JEQ     isPosInf
    21	// NaN special cases
    22	MOVQ    $~(1<<63), DX // bit mask
    23	MOVQ    $PosInf, AX
    24	MOVQ    R8, BX
    25	ANDQ    DX, BX // x = |x|
    26	CMPQ    AX, BX
    27	JLT     isMaxNaN
    28	MOVQ    R9, CX
    29	ANDQ    DX, CX // y = |y|
    30	CMPQ    AX, CX
    31	JLT     isMaxNaN
    32	// ±0 special cases
    33	ORQ     CX, BX
    34	JEQ     isMaxZero
    35
    36	MOVQ    R8, X0
    37	MOVQ    R9, X1
    38	MAXSD   X1, X0
    39	MOVSD   X0, ret+16(FP)
    40	RET
    41isMaxNaN: // return NaN
    42	MOVQ	$NaN, AX
    43isPosInf: // return +Inf
    44	MOVQ    AX, ret+16(FP)
    45	RET
    46isMaxZero:
    47	MOVQ    $(1<<63), AX // -0.0
    48	CMPQ    AX, R8
    49	JEQ     +3(PC)
    50	MOVQ    R8, ret+16(FP) // return 0
    51	RET
    52	MOVQ    R9, ret+16(FP) // return other 0
    53	RET
    54
    55// func archMin(x, y float64) float64
    56TEXT ·archMin(SB),NOSPLIT,$0
    57	// -Inf special cases
    58	MOVQ    $NegInf, AX
    59	MOVQ    x+0(FP), R8
    60	CMPQ    AX, R8
    61	JEQ     isNegInf
    62	MOVQ    y+8(FP), R9
    63	CMPQ    AX, R9
    64	JEQ     isNegInf
    65	// NaN special cases
    66	MOVQ    $~(1<<63), DX
    67	MOVQ    $PosInf, AX
    68	MOVQ    R8, BX
    69	ANDQ    DX, BX // x = |x|
    70	CMPQ    AX, BX
    71	JLT     isMinNaN
    72	MOVQ    R9, CX
    73	ANDQ    DX, CX // y = |y|
    74	CMPQ    AX, CX
    75	JLT     isMinNaN
    76	// ±0 special cases
    77	ORQ     CX, BX
    78	JEQ     isMinZero
    79
    80	MOVQ    R8, X0
    81	MOVQ    R9, X1
    82	MINSD   X1, X0
    83	MOVSD X0, ret+16(FP)
    84	RET
    85isMinNaN: // return NaN
    86	MOVQ	$NaN, AX
    87isNegInf: // return -Inf
    88	MOVQ    AX, ret+16(FP)
    89	RET
    90isMinZero:
    91	MOVQ    $(1<<63), AX // -0.0
    92	CMPQ    AX, R8
    93	JEQ     +3(PC)
    94	MOVQ    R9, ret+16(FP) // return other 0
    95	RET
    96	MOVQ    R8, ret+16(FP) // return -0
    97	RET
    98

View as plain text