public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
* [glibc/maskray/grte] Work around clang assembler bug with expressions in .if
@ 2021-08-27 23:22 Fangrui Song
0 siblings, 0 replies; only message in thread
From: Fangrui Song @ 2021-08-27 23:22 UTC (permalink / raw)
To: glibc-cvs
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=85450bb67ade0a23c7a4a5c3973eea6eba7d4b2b
commit 85450bb67ade0a23c7a4a5c3973eea6eba7d4b2b
Author: Stan Shebs <stanshebs@google.com>
Date: Wed Feb 7 12:53:40 2018 -0800
Work around clang assembler bug with expressions in .if
Diff:
---
sysdeps/x86_64/fpu/svml_d_exp_data.S | 3 +++
sysdeps/x86_64/fpu/svml_d_exp_data.h | 6 ++++++
sysdeps/x86_64/fpu/svml_d_log_data.S | 15 +++++++++++++++
sysdeps/x86_64/fpu/svml_d_log_data.h | 3 +++
sysdeps/x86_64/fpu/svml_d_pow_data.S | 15 +++++++++++++++
sysdeps/x86_64/fpu/svml_d_pow_data.h | 6 ++++++
sysdeps/x86_64/fpu/svml_d_trig_data.h | 6 ++++++
sysdeps/x86_64/fpu/svml_s_expf_data.h | 3 +++
sysdeps/x86_64/fpu/svml_s_logf_data.S | 9 +++++++++
sysdeps/x86_64/fpu/svml_s_logf_data.h | 3 +++
sysdeps/x86_64/fpu/svml_s_powf_data.S | 18 ++++++++++++++++++
sysdeps/x86_64/fpu/svml_s_powf_data.h | 6 ++++++
sysdeps/x86_64/fpu/svml_s_trig_data.h | 3 +++
13 files changed, 96 insertions(+)
diff --git a/sysdeps/x86_64/fpu/svml_d_exp_data.S b/sysdeps/x86_64/fpu/svml_d_exp_data.S
index 5e229c9bcc..ec04297ce3 100644
--- a/sysdeps/x86_64/fpu/svml_d_exp_data.S
+++ b/sysdeps/x86_64/fpu/svml_d_exp_data.S
@@ -29,9 +29,12 @@
__svml_dexp_data:
/* Lookup table of 2^(j/2^K): */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dexp_data != __dbT
.err
.endif
+#endif
.quad 0x3ff0000000000000
.quad 0x3ff002c605e2e8cf
.quad 0x3ff0058c86da1c0a
diff --git a/sysdeps/x86_64/fpu/svml_d_exp_data.h b/sysdeps/x86_64/fpu/svml_d_exp_data.h
index a3721ce137..d87e9f26f1 100644
--- a/sysdeps/x86_64/fpu/svml_d_exp_data.h
+++ b/sysdeps/x86_64/fpu/svml_d_exp_data.h
@@ -32,18 +32,24 @@
#define __iDomainRange 8768
.macro double_vector offset value
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dexp_data != \offset
.err
.endif
+#endif
.rept 8
.quad \value
.endr
.endm
.macro float_vector offset value
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dexp_data != \offset
.err
.endif
+#endif
.rept 16
.long \value
.endr
diff --git a/sysdeps/x86_64/fpu/svml_d_log_data.S b/sysdeps/x86_64/fpu/svml_d_log_data.S
index 0514551ccf..bd0e297505 100644
--- a/sysdeps/x86_64/fpu/svml_d_log_data.S
+++ b/sysdeps/x86_64/fpu/svml_d_log_data.S
@@ -30,9 +30,12 @@ __svml_dlog_data:
/* Lookup table in high+low parts and 9-bit index for
-log(mRcp), where mRcp is mantissa of 1/x 9-bit accurate reciprocal: */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dlog_data != _Log_HA_table
.err
.endif
+#endif
.quad 0xc086232bdd7a8300
.quad 0xbe1ce91eef3fb100
.quad 0xc086232fdc7ad828
@@ -1066,9 +1069,12 @@ __svml_dlog_data:
/* Lookup table with 9-bit index for
-log(mRcp), where mRcp is mantissa of 1/x 9-bit accurate reciprocal:
*/
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dlog_data != _Log_LA_table
.err
.endif
+#endif
.quad 0x8000000000000000
.quad 0xbf5ff802a9ab10e6
.quad 0xbf6ff00aa2b10bc0
@@ -1630,9 +1636,12 @@ double_vector _L2 0x3fe62e42fefa39ef
/* General purpose constants:
DP infinities, +/- */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dlog_data != _dInfs
.err
.endif
+#endif
.quad 0x7ff0000000000000
.quad 0xfff0000000000000
.rept 48
@@ -1640,9 +1649,12 @@ double_vector _L2 0x3fe62e42fefa39ef
.endr
/* DP 1.0, +/- */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dlog_data != _dOnes
.err
.endif
+#endif
.quad 0x3ff0000000000000
.quad 0xbff0000000000000
.rept 48
@@ -1650,9 +1662,12 @@ double_vector _L2 0x3fe62e42fefa39ef
.endr
/* DP 0.0, +/- */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dlog_data != _dZeros
.err
.endif
+#endif
.quad 0x0000000000000000
.quad 0x8000000000000000
.rept 48
diff --git a/sysdeps/x86_64/fpu/svml_d_log_data.h b/sysdeps/x86_64/fpu/svml_d_log_data.h
index a317c7b845..a6ae64f680 100644
--- a/sysdeps/x86_64/fpu/svml_d_log_data.h
+++ b/sysdeps/x86_64/fpu/svml_d_log_data.h
@@ -43,9 +43,12 @@
#define _dZeros 13568
.macro double_vector offset value
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dlog_data != \offset
.err
.endif
+#endif
.rept 8
.quad \value
.endr
diff --git a/sysdeps/x86_64/fpu/svml_d_pow_data.S b/sysdeps/x86_64/fpu/svml_d_pow_data.S
index 9e5f99c25e..b2de746a62 100644
--- a/sysdeps/x86_64/fpu/svml_d_pow_data.S
+++ b/sysdeps/x86_64/fpu/svml_d_pow_data.S
@@ -30,9 +30,12 @@
__svml_dpow_data:
/* Lookup log(2) table (for HSW): */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dpow_data != _hsw_log2_table
.err
.endif
+#endif
.quad 0xc08ff00000000000
.quad 0x0000000000000000
.quad 0xc08ff005c3e0ffc2
@@ -1064,9 +1067,12 @@ __svml_dpow_data:
.endr
/* Lookup exp(2) table (for HSW): */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dpow_data != _hsw_dTe
.err
.endif
+#endif
.quad 0x3ff0000000000000
.quad 0x3ff00b1afa5abcbf
.quad 0x3ff0163da9fb3335
@@ -1395,9 +1401,12 @@ double_vector _hsw_dce2 0x3fcebfbdff82c54d
double_vector _hsw_dce1 0x3fe62e42fefa39b9
/* Reciprocal lookup table for log part (non HSW): */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dpow_data != _rcp_t1
.err
.endif
+#endif
.quad 0x3ff7154740000000
.quad 0x3ff70f8340000000
.quad 0x3ff709c240000000
@@ -2429,9 +2438,12 @@ double_vector _hsw_dce1 0x3fe62e42fefa39b9
.endr
/* Log(2) lookup table for log part (non HSW): */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dpow_data != _log2_t1
.err
.endif
+#endif
.rept 2
.quad 0x0000000000000000
.endr
@@ -4489,9 +4501,12 @@ double_vector _hsw_dce1 0x3fe62e42fefa39b9
.endr
/* Exp(2) lookup table for exp part (non HSW) */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dpow_data != _exp2_tbl
.err
.endif
+#endif
.quad 0x3ff0000000000000
.quad 0x0000000000000000
.quad 0x3ff0163da9fb3335
diff --git a/sysdeps/x86_64/fpu/svml_d_pow_data.h b/sysdeps/x86_64/fpu/svml_d_pow_data.h
index 55b573b2a7..4d02c825f4 100644
--- a/sysdeps/x86_64/fpu/svml_d_pow_data.h
+++ b/sysdeps/x86_64/fpu/svml_d_pow_data.h
@@ -84,18 +84,24 @@
#define _jIndexMask 40704
.macro double_vector offset value
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dpow_data != \offset
.err
.endif
+#endif
.rept 8
.quad \value
.endr
.endm
.macro float_vector offset value
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_dpow_data != \offset
.err
.endif
+#endif
.rept 16
.long \value
.endr
diff --git a/sysdeps/x86_64/fpu/svml_d_trig_data.h b/sysdeps/x86_64/fpu/svml_d_trig_data.h
index b9bb5dc6af..ca3697fc9c 100644
--- a/sysdeps/x86_64/fpu/svml_d_trig_data.h
+++ b/sysdeps/x86_64/fpu/svml_d_trig_data.h
@@ -61,9 +61,15 @@
#define __dSignMask __lNZero
.macro double_vector offset value
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_d_trig_data != \offset
.err
.endif
+#endif
+.short 0x1234
+.long .-__svml_d_trig_data
+.short 0x4321
.rept 8
.quad \value
.endr
diff --git a/sysdeps/x86_64/fpu/svml_s_expf_data.h b/sysdeps/x86_64/fpu/svml_s_expf_data.h
index 56a1d8bdf6..62c4df6840 100644
--- a/sysdeps/x86_64/fpu/svml_s_expf_data.h
+++ b/sysdeps/x86_64/fpu/svml_s_expf_data.h
@@ -34,9 +34,12 @@
#define __iDomainRange 768
.macro float_vector offset value
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_sexp_data != \offset
.err
.endif
+#endif
.rept 16
.long \value
.endr
diff --git a/sysdeps/x86_64/fpu/svml_s_logf_data.S b/sysdeps/x86_64/fpu/svml_s_logf_data.S
index 154f98c2e0..bbc5aadbc5 100644
--- a/sysdeps/x86_64/fpu/svml_s_logf_data.S
+++ b/sysdeps/x86_64/fpu/svml_s_logf_data.S
@@ -70,9 +70,12 @@ float_vector _sOne 0x3f800000
float_vector _sLn2 0x3f317218
/* SP infinity, +/- */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_slog_data != _sInfs
.err
.endif
+#endif
.long 0x7f800000
.long 0xff800000
.rept 56
@@ -80,9 +83,12 @@ float_vector _sLn2 0x3f317218
.endr
/* SP one, +/- */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_slog_data != _sOnes
.err
.endif
+#endif
.long 0x3f800000
.long 0xbf800000
.rept 56
@@ -90,9 +96,12 @@ float_vector _sLn2 0x3f317218
.endr
/* SP zero +/- */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_slog_data != _sZeros
.err
.endif
+#endif
.long 0x00000000
.long 0x80000000
.rept 56
diff --git a/sysdeps/x86_64/fpu/svml_s_logf_data.h b/sysdeps/x86_64/fpu/svml_s_logf_data.h
index 82a9903b10..fc5d5a9f0c 100644
--- a/sysdeps/x86_64/fpu/svml_s_logf_data.h
+++ b/sysdeps/x86_64/fpu/svml_s_logf_data.h
@@ -37,9 +37,12 @@
#define _sZeros 960
.macro float_vector offset value
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_slog_data != \offset
.err
.endif
+#endif
.rept 16
.long \value
.endr
diff --git a/sysdeps/x86_64/fpu/svml_s_powf_data.S b/sysdeps/x86_64/fpu/svml_s_powf_data.S
index 74a31abd1e..855185c6f9 100644
--- a/sysdeps/x86_64/fpu/svml_s_powf_data.S
+++ b/sysdeps/x86_64/fpu/svml_s_powf_data.S
@@ -46,9 +46,12 @@ float_vector _ABSMASK 0x7fffffff
float_vector _DOMAINRANGE 0x42ae9a00
/* Log(2) lookup High+Low table for logarithmic part */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_spow_data != _Log_HA_table
.err
.endif
+#endif
.quad 0xc086232bdd7a8300
.quad 0xbe1ce91eef3fb100
.quad 0xc086232fdc7ad828
@@ -1080,9 +1083,12 @@ float_vector _DOMAINRANGE 0x42ae9a00
.endr
/* Log(2) lookup table for logarithmic part */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_spow_data != _Log_LA_table
.err
.endif
+#endif
.quad 0x8000000000000000
.quad 0xbf5ff802a9ab10e6
.quad 0xbf6ff00aa2b10bc0
@@ -1650,9 +1656,12 @@ double_vector _Bias1 0x408ff00000000000
double_vector _L2 0x3fe62e42fefa39ef
/* dInfs = DP infinity, +/- == */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_spow_data != _dInfs
.err
.endif
+#endif
.quad 0x7ff0000000000000
.quad 0xfff0000000000000
.rept 48
@@ -1660,9 +1669,12 @@ double_vector _L2 0x3fe62e42fefa39ef
.endr
/* dOnes = DP one, +/- == */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_spow_data != _dOnes
.err
.endif
+#endif
.quad 0x3ff0000000000000
.quad 0xbff0000000000000
.rept 48
@@ -1670,17 +1682,23 @@ double_vector _L2 0x3fe62e42fefa39ef
.endr
/* dZeros = DP zero +/- == */
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_spow_data != _dZeros
.err
.endif
+#endif
.quad 0x0000000000000000
.quad 0x8000000000000000
.rept 48
.byte 0
.endr
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_spow_data != __dbT
.err
.endif
+#endif
.quad 0x3feffffffc27dd9e
.quad 0x3ff00162f1a4047d
.quad 0x3ff002c603f68252
diff --git a/sysdeps/x86_64/fpu/svml_s_powf_data.h b/sysdeps/x86_64/fpu/svml_s_powf_data.h
index 5d3270cf27..78384f2af6 100644
--- a/sysdeps/x86_64/fpu/svml_s_powf_data.h
+++ b/sysdeps/x86_64/fpu/svml_s_powf_data.h
@@ -56,18 +56,24 @@
#define __iDomainRange 30784
.macro double_vector offset value
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_spow_data != \offset
.err
.endif
+#endif
.rept 8
.quad \value
.endr
.endm
.macro float_vector offset value
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_spow_data != \offset
.err
.endif
+#endif
.rept 16
.long \value
.endr
diff --git a/sysdeps/x86_64/fpu/svml_s_trig_data.h b/sysdeps/x86_64/fpu/svml_s_trig_data.h
index 0faf161c08..a584cf5edf 100644
--- a/sysdeps/x86_64/fpu/svml_s_trig_data.h
+++ b/sysdeps/x86_64/fpu/svml_s_trig_data.h
@@ -20,9 +20,12 @@
#define S_TRIG_DATA_H
.macro float_vector offset value
+/* clang integrated assembler doesn't think subtract yields an absolute, skip. */
+#if !defined(__clang__)
.if .-__svml_s_trig_data != \offset
.err
.endif
+#endif
.rept 16
.long \value
.endr
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-08-27 23:22 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-27 23:22 [glibc/maskray/grte] Work around clang assembler bug with expressions in .if Fangrui Song
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).