...

Text file src/math/floor_386.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// func archCeil(x float64) float64
     8TEXT ·archCeil(SB),NOSPLIT,$0
     9	FMOVD   x+0(FP), F0  // F0=x
    10	FSTCW   -2(SP)       // save old Control Word
    11	MOVW    -2(SP), AX
    12	ANDW    $0xf3ff, AX
    13	ORW     $0x0800, AX  // Rounding Control set to +Inf
    14	MOVW    AX, -4(SP)   // store new Control Word
    15	FLDCW   -4(SP)       // load new Control Word
    16	FRNDINT              // F0=Ceil(x)
    17	FLDCW   -2(SP)       // load old Control Word
    18	FMOVDP  F0, ret+8(FP)
    19	RET
    20
    21// func archFloor(x float64) float64
    22TEXT ·archFloor(SB),NOSPLIT,$0
    23	FMOVD   x+0(FP), F0  // F0=x
    24	FSTCW   -2(SP)       // save old Control Word
    25	MOVW    -2(SP), AX
    26	ANDW    $0xf3ff, AX
    27	ORW     $0x0400, AX  // Rounding Control set to -Inf
    28	MOVW    AX, -4(SP)   // store new Control Word
    29	FLDCW   -4(SP)       // load new Control Word
    30	FRNDINT              // F0=Floor(x)
    31	FLDCW   -2(SP)       // load old Control Word
    32	FMOVDP  F0, ret+8(FP)
    33	RET
    34
    35// func archTrunc(x float64) float64
    36TEXT ·archTrunc(SB),NOSPLIT,$0
    37	FMOVD   x+0(FP), F0  // F0=x
    38	FSTCW   -2(SP)       // save old Control Word
    39	MOVW    -2(SP), AX
    40	ORW     $0x0c00, AX  // Rounding Control set to truncate
    41	MOVW    AX, -4(SP)   // store new Control Word
    42	FLDCW   -4(SP)       // load new Control Word
    43	FRNDINT              // F0=Trunc(x)
    44	FLDCW   -2(SP)       // load old Control Word
    45	FMOVDP  F0, ret+8(FP)
    46	RET

View as plain text