1 | */* Truncate argument to nearest integral value not larger than the argument.* |

2 | * Copyright (C) 1997-2017 Free Software Foundation, Inc.* |

3 | * This file is part of the GNU C Library.* |

4 | * Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997 and* |

5 | * Jakub Jelinek <jj@ultra.linux.cz>, 1999.* |

6 | |

7 | * The GNU C Library is free software; you can redistribute it and/or* |

8 | * modify it under the terms of the GNU Lesser General Public* |

9 | * License as published by the Free Software Foundation; either* |

10 | * version 2.1 of the License, or (at your option) any later version.* |

11 | |

12 | * The GNU C Library is distributed in the hope that it will be useful,* |

13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of* |

14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU* |

15 | * Lesser General Public License for more details.* |

16 | |

17 | * You should have received a copy of the GNU Lesser General Public* |

18 | * License along with the GNU C Library; if not, write to the Free* |

19 | * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA* |

20 | * 02111-1307 USA. */* |

21 | |

22 | __#include "quadmath-imp.h"__ |

23 | |

24 | |

25 | **__float128** |

26 | truncq (**__float128** x) |

27 | { |

28 | int32_t j0; |

29 | uint64_t i0, i1, sx; |

30 | |

31 | GET_FLT128_WORDS64 (i0, i1, x); |

32 | sx = i0 & `0x8000000000000000ULL`; |

33 | j0 = ((i0 >> `48`) & `0x7fff`) - `0x3fff`; |

34 | **if** (j0 < `48`) |

35 | { |

36 | **if** (j0 < `0`) |

37 | */* The magnitude of the number is < 1 so the result is +-0. */* |

38 | SET_FLT128_WORDS64 (x, sx, `0`); |

39 | **else** |

40 | SET_FLT128_WORDS64 (x, i0 & ~(`0x0000ffffffffffffLL` >> j0), `0`); |

41 | } |

42 | **else** **if** (j0 > `111`) |

43 | { |

44 | **if** (j0 == `0x4000`) |

45 | */* x is inf or NaN. */* |

46 | **return** x + x; |

47 | } |

48 | **else** |

49 | { |

50 | SET_FLT128_WORDS64 (x, i0, i1 & ~(`0xffffffffffffffffULL` >> (j0 - `48`))); |

51 | } |

52 | |

53 | **return** x; |

54 | } |

55 | |