Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
floor_amd64.s77 linesDownload Raw Back to math
1// Copyright 2012 The Go Authors. All rights reserved.2// Use of this source code is governed by a BSD-style3// license that can be found in the LICENSE file.4 5#include "textflag.h"6 7#define Big		0x4330000000000000 // 2**528 9// func archFloor(x float64) float6410TEXT ·archFloor(SB),NOSPLIT,$011	MOVQ	x+0(FP), AX12	MOVQ	$~(1<<63), DX // sign bit mask13	ANDQ	AX,DX // DX = |x|14	SUBQ	$1,DX15	MOVQ    $(Big - 1), CX // if |x| >= 2**52-1 or IsNaN(x) or |x| == 0, return x16	CMPQ	DX,CX17	JAE     isBig_floor18	MOVQ	AX, X0 // X0 = x19	CVTTSD2SQ	X0, AX20	CVTSQ2SD	AX, X1 // X1 = float(int(x))21	CMPSD	X1, X0, 1 // compare LT; X0 = 0xffffffffffffffff or 022	MOVSD	$(-1.0), X223	ANDPD	X2, X0 // if x < float(int(x)) {X0 = -1} else {X0 = 0}24	ADDSD	X1, X025	MOVSD	X0, ret+8(FP)26	RET27isBig_floor:28	MOVQ    AX, ret+8(FP) // return x29	RET30 31// func archCeil(x float64) float6432TEXT ·archCeil(SB),NOSPLIT,$033	MOVQ	x+0(FP), AX34	MOVQ	$~(1<<63), DX // sign bit mask35	MOVQ	AX, BX // BX = copy of x36	ANDQ    DX, BX // BX = |x|37	MOVQ    $Big, CX // if |x| >= 2**52 or IsNaN(x), return x38	CMPQ    BX, CX39	JAE     isBig_ceil40	MOVQ	AX, X0 // X0 = x41	MOVQ	DX, X2 // X2 = sign bit mask42	CVTTSD2SQ	X0, AX43	ANDNPD	X0, X2 // X2 = sign44	CVTSQ2SD	AX, X1	// X1 = float(int(x))45	CMPSD	X1, X0, 2 // compare LE; X0 = 0xffffffffffffffff or 046	ORPD	X2, X1 // if X1 = 0.0, incorporate sign47	MOVSD	$1.0, X348	ANDNPD	X3, X049	ORPD	X2, X0 // if float(int(x)) <= x {X0 = 1} else {X0 = -0}50	ADDSD	X1, X051	MOVSD	X0, ret+8(FP)52	RET53isBig_ceil:54	MOVQ	AX, ret+8(FP)55	RET56 57// func archTrunc(x float64) float6458TEXT ·archTrunc(SB),NOSPLIT,$059	MOVQ	x+0(FP), AX60	MOVQ	$~(1<<63), DX // sign bit mask61	MOVQ	AX, BX // BX = copy of x62	ANDQ    DX, BX // BX = |x|63	MOVQ    $Big, CX // if |x| >= 2**52 or IsNaN(x), return x64	CMPQ    BX, CX65	JAE     isBig_trunc66	MOVQ	AX, X067	MOVQ	DX, X2 // X2 = sign bit mask68	CVTTSD2SQ	X0, AX69	ANDNPD	X0, X2 // X2 = sign70	CVTSQ2SD	AX, X0 // X0 = float(int(x))71	ORPD	X2, X0 // if X0 = 0.0, incorporate sign72	MOVSD	X0, ret+8(FP)73	RET74isBig_trunc:75	MOVQ    AX, ret+8(FP) // return x76	RET77