...
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