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).