1 Star 0 Fork 161

junhe_arm/glibc

forked from src-openEuler/glibc 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0021-Sw64-Add-test_numdouble.h-and-test_numfloat.h.patch 4.53 KB
一键复制 编辑 原始数据 按行查看 历史
swcompiler 提交于 2024-12-17 04:02 +08:00 . Sw64: Add Sw64 ISA support
From 46d5d9e55be7604efec5bfedfb963da94faba543 Mon Sep 17 00:00:00 2001
From: swcompiler <lc@wxiat.com>
Date: Fri, 29 Nov 2024 17:24:01 +0800
Subject: [PATCH 21/23] Sw64: Add test_numdouble.h and test_numfloat.h
---
sysdeps/sw_64/include/test_numdouble.h | 106 +++++++++++++++++++++++++
sysdeps/sw_64/include/test_numfloat.h | 100 +++++++++++++++++++++++
2 files changed, 206 insertions(+)
create mode 100644 sysdeps/sw_64/include/test_numdouble.h
create mode 100644 sysdeps/sw_64/include/test_numfloat.h
diff --git a/sysdeps/sw_64/include/test_numdouble.h b/sysdeps/sw_64/include/test_numdouble.h
new file mode 100644
index 00000000..30131862
--- /dev/null
+++ b/sysdeps/sw_64/include/test_numdouble.h
@@ -0,0 +1,106 @@
+
+#ifndef _TEST_NUMDOUBLE_H
+
+typedef double DATATYPE;
+
+typedef unsigned long _TYPE; // 8 byte
+// typedef unsigned int _TYPE; //4 byte
+
+# define _EXP_BITS 11
+# define _Fraction_BITS 52
+
+// The highest bit in the decimal part is used to distinguish between QNaN and SNaN
+# define FRACTION_HIGH_BIT \
+ (((_TYPE) 1) << (sizeof (_TYPE) * 8 - _EXP_BITS - 2))
+// Significant bits
+# define DIGITS_BITS (sizeof (_TYPE) * 8 - _EXP_BITS)
+// exponent offset
+# define FLOAT_EXP_OFF ((((int) 1) << (_EXP_BITS - 1)) - 1)
+
+// IEEE 754 double format
+typedef struct
+{
+ _TYPE m_nFraction : sizeof (_TYPE) * 8 - _EXP_BITS - 1;
+ _TYPE m_nExp : _EXP_BITS;
+ _TYPE m_nSign : 1;
+} _DATA;
+
+// +0.0 and -0.0
+DATATYPE
+Zero (int sign)
+{
+ DATATYPE rv = 0.0;
+ _DATA *p = (_DATA *) &rv;
+ p->m_nSign = sign;
+ p->m_nExp = 0;
+ p->m_nFraction = 0;
+
+ return rv;
+}
+
+//+subnormal and -subnormal
+DATATYPE
+SubNormal (int sign)
+{
+ DATATYPE rv = 0.0;
+ _DATA *p = (_DATA *) &rv;
+ p->m_nSign = sign;
+ p->m_nExp = 0;
+ p->m_nFraction = 1;
+
+ return rv;
+}
+
+// quiet NaN
+DATATYPE
+QNaN ()
+{
+ DATATYPE rv = 0.0;
+ _DATA *p = (_DATA *) &rv;
+ p->m_nSign = 0;
+ p->m_nExp = -1;
+ p->m_nFraction = FRACTION_HIGH_BIT;
+
+ return rv;
+}
+
+// Signal NaN
+DATATYPE
+CQNaN ()
+{
+ DATATYPE rv = 0.0;
+ _DATA *p = (_DATA *) &rv;
+ p->m_nSign = 1;
+ p->m_nExp = -1;
+ p->m_nFraction = 1;
+
+ return rv;
+}
+
+// +infinite and -infinite
+DATATYPE
+Infinite (int sign)
+{
+ DATATYPE rv = 0.0;
+ _DATA *p = (_DATA *) &rv;
+ p->m_nSign = sign;
+ p->m_nExp = -1;
+ p->m_nFraction = 0;
+
+ return rv;
+}
+
+// get any float
+/*DATATYPE anyf(int nSign,int nExp,long nFraction)
+{
+ DATATYPE rv=0.0;
+ _DATA *p=(_DATA *)&rv;
+ p->m_nSign = nSign;
+ p->m_nExp = nExp;
+ p->m_nFraction = nFraction;
+
+ return rv;
+
+}*/
+
+#endif
diff --git a/sysdeps/sw_64/include/test_numfloat.h b/sysdeps/sw_64/include/test_numfloat.h
new file mode 100644
index 00000000..82a99773
--- /dev/null
+++ b/sysdeps/sw_64/include/test_numfloat.h
@@ -0,0 +1,100 @@
+typedef float DATATYPE;
+
+// typedef unsigned long _TYPE; //8 byte
+typedef unsigned int _TYPE; // 4 byte
+
+#define _EXP_BITS 8
+#define _Fraction_BITS 23
+
+// The highest bit in the decimal part is used to distinguish between QNaN and SNaN
+#define FRACTION_HIGH_BIT (((_TYPE) 1) << (sizeof (_TYPE) * 8 - _EXP_BITS - 2))
+// Significant bits
+#define DIGITS_BITS (sizeof (_TYPE) * 8 - _EXP_BITS)
+// exponent offset
+#define FLOAT_EXP_OFF ((((int) 1) << (_EXP_BITS - 1)) - 1)
+
+// IEEE 754 float format
+typedef struct
+{
+ _TYPE m_nFraction : sizeof (_TYPE) * 8 - _EXP_BITS - 1;
+ _TYPE m_nExp : _EXP_BITS;
+ _TYPE m_nSign : 1;
+} _DATA;
+
+// +0.0 and -0.0
+DATATYPE
+Zero (int sign)
+{
+ DATATYPE rv = 0.0;
+ _DATA *p = (_DATA *) &rv;
+ p->m_nSign = sign;
+ p->m_nExp = 0;
+ p->m_nFraction = 0;
+
+ return rv;
+}
+
+// +subnormal and-subnormal
+DATATYPE
+SubNormal (int sign)
+{
+ DATATYPE rv = 0.0;
+ _DATA *p = (_DATA *) &rv;
+ p->m_nSign = sign;
+ p->m_nExp = 0;
+ p->m_nFraction = 1;
+
+ return rv;
+}
+
+// quiet NaN
+DATATYPE
+QNaN ()
+{
+ DATATYPE rv = 0.0;
+ _DATA *p = (_DATA *) &rv;
+ p->m_nSign = 0;
+ p->m_nExp = -1;
+ p->m_nFraction = FRACTION_HIGH_BIT;
+
+ return rv;
+}
+
+// Signal NaN
+DATATYPE
+CQNaN ()
+{
+ DATATYPE rv = 0.0;
+ _DATA *p = (_DATA *) &rv;
+ p->m_nSign = 1;
+ p->m_nExp = -1;
+ p->m_nFraction = 1;
+
+ return rv;
+}
+
+// +infinite and -infinite
+DATATYPE
+Infinite (int sign)
+{
+ DATATYPE rv = 0.0;
+ _DATA *p = (_DATA *) &rv;
+ p->m_nSign = sign;
+ p->m_nExp = -1;
+ p->m_nFraction = 0;
+
+ return rv;
+}
+
+// build a float
+DATATYPE
+anyf (int nSign, int nExp, long nFraction)
+{
+ DATATYPE rv = 0.0;
+ _DATA *p = (_DATA *) &rv;
+ p->m_nSign = nSign;
+ p->m_nExp = nExp;
+ p->m_nFraction = nFraction;
+
+ return rv;
+}
--
2.25.1
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/junhe_arm/glibc.git
git@gitee.com:junhe_arm/glibc.git
junhe_arm
glibc
glibc
master

搜索帮助