...

Text file src/math/dim_loong64.s

Documentation: math

     1// Copyright 2024 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
    11TEXT ·archMax(SB),NOSPLIT,$0
    12	MOVD	x+0(FP), F0
    13	MOVD	y+8(FP), F1
    14	FCLASSD	F0, F2
    15	FCLASSD	F1, F3
    16
    17	// combine x and y categories together to judge
    18	MOVV	F2, R4
    19	MOVV	F3, R5
    20	OR	R5, R4
    21
    22	// +Inf special cases
    23	AND	$64, R4, R5
    24	BNE	R5, isPosInf
    25
    26	// NaN special cases
    27	AND	$2, R4, R5
    28	BNE	R5, isMaxNaN
    29
    30	// normal case
    31	FMAXD	F0, F1, F0
    32	MOVD	F0, ret+16(FP)
    33	RET
    34
    35isMaxNaN:
    36	MOVV	$NaN, R6
    37	MOVV	R6, ret+16(FP)
    38	RET
    39
    40isPosInf:
    41	MOVV	$PosInf, R6
    42	MOVV	R6, ret+16(FP)
    43	RET
    44
    45TEXT ·archMin(SB),NOSPLIT,$0
    46	MOVD	x+0(FP), F0
    47	MOVD	y+8(FP), F1
    48	FCLASSD	F0, F2
    49	FCLASSD	F1, F3
    50
    51	// combine x and y categories together to judge
    52	MOVV	F2, R4
    53	MOVV	F3, R5
    54	OR	R5, R4
    55
    56	// -Inf special cases
    57	AND	$4, R4, R5
    58	BNE	R5, isNegInf
    59
    60	// NaN special cases
    61	AND	$2, R4, R5
    62	BNE	R5, isMinNaN
    63
    64	// normal case
    65	FMIND	F0, F1, F0
    66	MOVD	F0, ret+16(FP)
    67	RET
    68
    69isMinNaN:
    70	MOVV	$NaN, R6
    71	MOVV	R6, ret+16(FP)
    72	RET
    73
    74isNegInf:
    75	MOVV	$NegInf, R6
    76	MOVV	R6, ret+16(FP)
    77	RET

View as plain text