floor_386.s raw

   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
   8  TEXT ·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
  22  TEXT ·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
  36  TEXT ·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
  47