Blame view

kernel/linux-rt-4.4.41/arch/mips/math-emu/dp_2008class.c 1.11 KB
5113f6f70   김현기   kernel add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
  /*
   * IEEE754 floating point arithmetic
   * double precision: CLASS.f
   * FPR[fd] = class(FPR[fs])
   *
   * MIPS floating point support
   * Copyright (C) 2015 Imagination Technologies, Ltd.
   * Author: Markos Chandras <markos.chandras@imgtec.com>
   *
   *  This program is free software; you can distribute it and/or modify it
   *  under the terms of the GNU General Public License as published by the
   *  Free Software Foundation; version 2 of the License.
   */
  
  #include "ieee754dp.h"
  
  int ieee754dp_2008class(union ieee754dp x)
  {
  	COMPXDP;
  
  	EXPLODEXDP;
  
  	/*
  	 * 10 bit mask as follows:
  	 *
  	 * bit0 = SNAN
  	 * bit1 = QNAN
  	 * bit2 = -INF
  	 * bit3 = -NORM
  	 * bit4 = -DNORM
  	 * bit5 = -ZERO
  	 * bit6 = INF
  	 * bit7 = NORM
  	 * bit8 = DNORM
  	 * bit9 = ZERO
  	 */
  
  	switch(xc) {
  	case IEEE754_CLASS_SNAN:
  		return 0x01;
  	case IEEE754_CLASS_QNAN:
  		return 0x02;
  	case IEEE754_CLASS_INF:
  		return 0x04 << (xs ? 0 : 4);
  	case IEEE754_CLASS_NORM:
  		return 0x08 << (xs ? 0 : 4);
  	case IEEE754_CLASS_DNORM:
  		return 0x10 << (xs ? 0 : 4);
  	case IEEE754_CLASS_ZERO:
  		return 0x20 << (xs ? 0 : 4);
  	default:
  		pr_err("Unknown class: %d
  ", xc);
  		return 0;
  	}
  }