From: Stan Shebs Date: Wed, 7 Feb 2018 20:53:40 +0000 (-0800) Subject: Work around clang assembler bug with expressions in .if X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9a54bf0a7a990c16d208ad62def4258fc28327d1;p=thirdparty%2Fglibc.git Work around clang assembler bug with expressions in .if --- diff --git a/sysdeps/x86_64/fpu/svml_d_exp_data.S b/sysdeps/x86_64/fpu/svml_d_exp_data.S index 5e229c9bccd..ec04297ce37 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 a3721ce1375..d87e9f26f15 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 0514551ccf7..bd0e2975050 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 a317c7b8450..a6ae64f6809 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 9e5f99c25e1..b2de746a62f 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 55b573b2a7b..4d02c825f42 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 b9bb5dc6afa..ca3697fc9c8 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 56a1d8bdf6f..62c4df68407 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 154f98c2e0c..bbc5aadbc58 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 82a9903b100..fc5d5a9f0cb 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 74a31abd1ec..855185c6f92 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 5d3270cf278..78384f2af69 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 0faf161c08a..a584cf5edfc 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