mirror of
https://github.com/golang/go
synced 2024-11-19 18:04:40 -07:00
9f7ea61674
Use the FIDBR instruction to round floating-point numbers to integers. name old time/op new time/op delta Ceil 14.1ns ± 0% 3.0ns ± 0% -78.89% (p=0.000 n=10+10) Floor 6.42ns ± 0% 3.03ns ± 0% -52.80% (p=0.000 n=10+10) Trunc 6.67ns ± 0% 3.03ns ± 0% -54.57% (p=0.000 n=10+9) Change-Id: I3b416f6d0bccaaa9b547de86356471365862399c Reviewed-on: https://go-review.googlesource.com/27827 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
27 lines
555 B
ArmAsm
27 lines
555 B
ArmAsm
// Copyright 2016 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
#include "textflag.h"
|
|
|
|
// func Floor(x float64) float64
|
|
TEXT ·Floor(SB),NOSPLIT,$0
|
|
FMOVD x+0(FP), F0
|
|
FIDBR $7, F0, F0
|
|
FMOVD F0, ret+8(FP)
|
|
RET
|
|
|
|
// func Ceil(x float64) float64
|
|
TEXT ·Ceil(SB),NOSPLIT,$0
|
|
FMOVD x+0(FP), F0
|
|
FIDBR $6, F0, F0
|
|
FMOVD F0, ret+8(FP)
|
|
RET
|
|
|
|
// func Trunc(x float64) float64
|
|
TEXT ·Trunc(SB),NOSPLIT,$0
|
|
FMOVD x+0(FP), F0
|
|
FIDBR $5, F0, F0
|
|
FMOVD F0, ret+8(FP)
|
|
RET
|