linux/arch/mips/math-emu/ieee754d.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Some debug functions
   4 *
   5 * MIPS floating point support
   6 *
   7 * Copyright (C) 1994-2000 Algorithmics Ltd.
   8 *
   9 *  Nov 7, 2000
  10 *  Modified to build and operate in Linux kernel environment.
  11 *
  12 *  Kevin D. Kissell, kevink@mips.com and Carsten Langgaard, carstenl@mips.com
  13 *  Copyright (C) 2000 MIPS Technologies, Inc. All rights reserved.
  14 */
  15
  16#include <linux/types.h>
  17#include <linux/printk.h>
  18#include "ieee754.h"
  19#include "ieee754sp.h"
  20#include "ieee754dp.h"
  21
  22union ieee754dp ieee754dp_dump(char *m, union ieee754dp x)
  23{
  24        int i;
  25
  26        printk("%s", m);
  27        printk("<%08x,%08x>\n", (unsigned) (x.bits >> 32),
  28               (unsigned) x.bits);
  29        printk("\t=");
  30        switch (ieee754dp_class(x)) {
  31        case IEEE754_CLASS_QNAN:
  32        case IEEE754_CLASS_SNAN:
  33                printk("Nan %c", DPSIGN(x) ? '-' : '+');
  34                for (i = DP_FBITS - 1; i >= 0; i--)
  35                        printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0');
  36                break;
  37        case IEEE754_CLASS_INF:
  38                printk("%cInfinity", DPSIGN(x) ? '-' : '+');
  39                break;
  40        case IEEE754_CLASS_ZERO:
  41                printk("%cZero", DPSIGN(x) ? '-' : '+');
  42                break;
  43        case IEEE754_CLASS_DNORM:
  44                printk("%c0.", DPSIGN(x) ? '-' : '+');
  45                for (i = DP_FBITS - 1; i >= 0; i--)
  46                        printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0');
  47                printk("e%d", DPBEXP(x) - DP_EBIAS);
  48                break;
  49        case IEEE754_CLASS_NORM:
  50                printk("%c1.", DPSIGN(x) ? '-' : '+');
  51                for (i = DP_FBITS - 1; i >= 0; i--)
  52                        printk("%c", DPMANT(x) & DP_MBIT(i) ? '1' : '0');
  53                printk("e%d", DPBEXP(x) - DP_EBIAS);
  54                break;
  55        default:
  56                printk("Illegal/Unknown IEEE754 value class");
  57        }
  58        printk("\n");
  59        return x;
  60}
  61
  62union ieee754sp ieee754sp_dump(char *m, union ieee754sp x)
  63{
  64        int i;
  65
  66        printk("%s=", m);
  67        printk("<%08x>\n", (unsigned) x.bits);
  68        printk("\t=");
  69        switch (ieee754sp_class(x)) {
  70        case IEEE754_CLASS_QNAN:
  71        case IEEE754_CLASS_SNAN:
  72                printk("Nan %c", SPSIGN(x) ? '-' : '+');
  73                for (i = SP_FBITS - 1; i >= 0; i--)
  74                        printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0');
  75                break;
  76        case IEEE754_CLASS_INF:
  77                printk("%cInfinity", SPSIGN(x) ? '-' : '+');
  78                break;
  79        case IEEE754_CLASS_ZERO:
  80                printk("%cZero", SPSIGN(x) ? '-' : '+');
  81                break;
  82        case IEEE754_CLASS_DNORM:
  83                printk("%c0.", SPSIGN(x) ? '-' : '+');
  84                for (i = SP_FBITS - 1; i >= 0; i--)
  85                        printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0');
  86                printk("e%d", SPBEXP(x) - SP_EBIAS);
  87                break;
  88        case IEEE754_CLASS_NORM:
  89                printk("%c1.", SPSIGN(x) ? '-' : '+');
  90                for (i = SP_FBITS - 1; i >= 0; i--)
  91                        printk("%c", SPMANT(x) & SP_MBIT(i) ? '1' : '0');
  92                printk("e%d", SPBEXP(x) - SP_EBIAS);
  93                break;
  94        default:
  95                printk("Illegal/Unknown IEEE754 value class");
  96        }
  97        printk("\n");
  98        return x;
  99}
 100