...

Text file src/math/floor_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// derived from math/floor_riscv64.s
     6
     7#include "textflag.h"
     8
     9#define ROUNDFN(NAME, FUNC)	\
    10TEXT NAME(SB),NOSPLIT,$0;	\
    11	MOVD	x+0(FP), F0;	\
    12	MOVV	F0, R11;	\
    13	/* 1023: bias of exponent, [-2^53, 2^53]: exactly integer represent range */;	\
    14	MOVV	$1023+53, R12;	\
    15	/* Drop all fraction bits */;	\
    16	SRLV	$52, R11, R11;	\
    17	/* Remove sign bit */;	\
    18	AND	$0x7FF, R11, R11;	\
    19	BLTU	R12, R11, isExtremum;	\
    20normal:;	\
    21	FUNC	F0, F2;	\
    22	MOVV	F2, R10;	\
    23	BEQ	R10, R0, is0;	\
    24	FFINTDV	F2, F0;	\
    25/* Return either input is +-Inf, NaN(0x7FF) or out of precision limitation */;	\
    26isExtremum:;	\
    27	MOVD	F0, ret+8(FP);	\
    28	RET;	\
    29is0:;	\
    30	FCOPYSGD	F0, F2, F2;	\
    31	MOVD	F2, ret+8(FP);	\
    32	RET
    33
    34// func archFloor(x float64) float64
    35ROUNDFN(·archFloor, FTINTRMVD)
    36
    37// func archCeil(x float64) float64
    38ROUNDFN(·archCeil, FTINTRPVD)
    39
    40// func archTrunc(x float64) float64
    41ROUNDFN(·archTrunc, FTINTRZVD)

View as plain text