From patchwork Fri Nov 4 22:02:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Steve Ellcey X-Patchwork-Id: 17206 Received: (qmail 73080 invoked by alias); 4 Nov 2016 22:02:25 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 73067 invoked by uid 89); 4 Nov 2016 22:02:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: =?ISO-8859-1?Q?No, score=-1.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=to=c2?= X-HELO: NAM01-BN3-obe.outbound.protection.outlook.com Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Steve.Ellcey@cavium.com; Message-ID: <1478296927.4630.32.camel@caviumnetworks.com> Subject: Re: [PATCH] Speed up math/test-tgmath2.c From: Steve Ellcey To: Joseph Myers CC: Date: Fri, 4 Nov 2016 15:02:07 -0700 In-Reply-To: References: <1477354555.8523.78.camel@caviumnetworks.com> <1478280156.4630.18.camel@caviumnetworks.com> <1478293571.4630.29.camel@caviumnetworks.com> MIME-Version: 1.0 X-ClientProxiedBy: CY1PR1101CA0040.namprd11.prod.outlook.com (10.169.17.50) To SN2PR0701MB1072.namprd07.prod.outlook.com (10.160.59.18) X-MS-Office365-Filtering-Correlation-Id: 11a076b3-9c6f-4030-b2ca-08d404fe3adb X-Microsoft-Exchange-Diagnostics: 1; SN2PR0701MB1072; 2:hBkdfHOQe/LxYGketQB1w17lFfUlJ5/IKgHzc1wu85fYH1yE52JxHSqJzNs919Fia4Thm5H3AHibEFYuzQMWlGBM16VjXrwCnXR1xcOce01wxd+thLrUDLYaGvsMD3ISUmMTtyt3HVSn7d6sYK0jJkEqPlV2KkyG+DfXGx4OtJ/A7X25KYqqrjRSq4GSrAyRQxABCyv4j4mrGK6YDMijzQ==; 3:7Ef2OT8PBgO+ns6f9v2NcB72JHw/UZLzs7c1ZpG7PKTPfXrjBZ1jqN+kw8xejCp4FezVTDMoxPqZKGpHhZ7jwt4qgYgEHgIr4d/RWuKTF0+grNjWvNZ5aQMCYg13UMNQY0snYSe1OvGEWCHrzhw4Vg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:SN2PR0701MB1072; X-Microsoft-Exchange-Diagnostics: 1; SN2PR0701MB1072; 25:lZYpoKcx7TXnaZGqabJVS/agLx4uz+knq8rEyRNeOr86yR0uQ8oIN/FknXGX3l+9iYFVv7H81qqrvpgT0LZJhueQLdGwZa+mRcZljvldrYcghWJXL51BrCZwE2Fm6Wi3X/CPRCxfc5mtXoKzCIVoHX9sT5nQbJ8A9/0ajtSf6iiZ1+9C47IJ2MwLfO/VeEnOabyUJJhKVGMLSyDbcJTmWUxoehCM5bmQffFestbqfuVfuMGCPk5cgm4loxJ3AjBrabCIAT/VOHcjoAVIDge/fstYXW5IObCaY+pu8UeaWGNm4cmNKJmPhHfSpSrC4YxDkxL8R3LyKzPwaEyaWr7QgkLoncTUIEDC6oe5rxqWv67SktHXXALb8D6ZeSfwJ2DLIs1h9nOVi0Q9qqxRFxRTesqjZbf4AcKzMKZGJyhMq98pNzm8ylX3MLm9/aktIuY+BaRND3xtydZpuC1TNf7MVaKPcBR+kcDEXJRjMIJ9yYW6WZYkAjmfVsK/DIsFj8jqoyKzvyyG7v7Pa+wHS6eDdsEOxaMTZYV8fedvcgYiNsOz3p9cJUMkxbsPW+AjxXP543g5VumTmfQUJsfoqZupql2bude6mVCm6n1nCxhqSELuR46r4K/wUSR6RnH16nhMeGtR8vjuszAPXvdYlRFvholHOr5v/Y/57vq8fW98l9xjx4fCeicsE6QjU3vxeTDzHKhuBJ52jjbh9JB8gV6X4fbMGwl22pDbM/sqWPiEZMcn377Ip3GFiMpgOzuoqu/VJb6tvQ9DcS4Yd2vgWKkjGSVgkVmKVbRt7r9xGGEf+9gfbNA7eT21d1QNXjK05npC3L3hxApABeTEelXofyz2fQ== X-Microsoft-Exchange-Diagnostics: 1; SN2PR0701MB1072; 31:wHUgjPB0sUqCWU0TUoupEbIP28H19pQg5GHG997GqrJ8KYlsVFBkwl3zY8U2dy9K2V7mKGMKO4O28rFqnZf08b8YwKgrx8wb+1Lt35Gk0U/sLJOnzgSTO2Ro3pkaCr++FwQywHAjYlFqsbmW4LDGUVQeVhh7BWgNQQKmJxAj6qzC6kLQBy8xf10XFxkADAGLiE/q4Pjqf9TIkOrK4gB8ma2ho+Tj3Ig+eJbWyKOxrswxiS6rQj+mqGQHvOoxIdHjr1WMoe0QnR1gm9JdKwJRZra117Pa7lfhn1bZAiCoL7U=; 20:vf8chJVn/RD8W6c5i2ChF8keoLBLhJVtFArsrgqd9vlYcqavN5n07JOntUEiq+2075S9BlGtw/DnHVMIj55uNf88YyKjSiDcQkdpjAmbEbpXOk+16/7+EVpUmQ/aZrbKGq3j6tbZJohFcikvTIThiPmHrFcnlKGgpdkw4xOixYYlpm4xiIYLMWRosEN3rAC63WMCdkEflifpLcgQNKklx+8Jxxi5DOiMlO+UbZWq6xpztY9mcEMV4lnLZnmlJ71M4wBd74jP0Osdtkq2w5+ST3ZNwzvEkHxTPD1Qsy+EPZJ0qJuX+9b+655i3H2FYfesnkTS/EnDStOqMPAz8/k8Yq9B/MYOYllbcmHaItw1k+lpzWFTBBpEdZ89gNRDjEIsHk+QuMIQnKeUvF0y+LKF1eMvlbbxGlopL3UFl8b+/XTW8DK6m1QC1sEUATdNO7g6zwH9yE5YDxO9D/RO7yWPohNqxyDd8OJEFD94TppSJ3YLXXXlpFvElOZsCTwEV4BmNNTRNFk9ZF/8n16RLoRCJV05FdFoQ06bdvAA3SoIMdxCwhDwKju8K9+f2NpAnwronKdE0Bs3x5JxdeiKDGEocItPhiBUiXSaE9MKHkPBIu4= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(102415321)(6040176)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046); SRVR:SN2PR0701MB1072; BCL:0; PCL:0; RULEID:; SRVR:SN2PR0701MB1072; X-Microsoft-Exchange-Diagnostics: 1; SN2PR0701MB1072; 4:BfYoERdDHfTj11iLykFP5JxolOiiM9brvIULSxOuNIM/WbszE0PL1ufvdUNexAZOuguT20n6pLZDfBDRPCYUfRXsBpuDxtsV6fyY8Mx0A0FmCRvWDk/ceZhpBu2R3ASdSyarezf0g4VOpaDkea01HMKXqsUn2DEy3FNgYMpd59ZqkDtO7r8ulzVa8Yph3slUjs05XAPadENkufOXVWs6/S82AfDfamPdVY7FmzTM34JDUtUqb0YbAIRUOCw1hA+zR1WvAB5ruwyFFFapVtwf4A0+5UrlG685JREKROcD0ksVTqqxWko8fuxjnLUSR4P3zNNsygeI1apW0uQkQ1q1Bo3WWovFUC6/bXP9puKWXxuXDvdgMvZeapRtNgjQrAde+6o08Pw/Yk4/AhEzpcpnqaOcE4yukxPfXNwfi5lxTqE= X-Forefront-PRVS: 01165471DB X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(199003)(24454002)(189002)(377424004)(42186005)(66066001)(97736004)(101416001)(103116003)(6916009)(4610100001)(76176999)(2950100002)(50986999)(105586002)(2906002)(42882006)(5000100001)(6666003)(512874002)(93886004)(84326002)(69596002)(110136003)(6116002)(3846002)(2476003)(50226002)(189998001)(53416004)(4326007)(33646002)(5660300001)(36756003)(8676002)(568964002)(92566002)(7736002)(586003)(77096005)(106356001)(5890100001)(7846002)(19580395003)(19580405001)(81156014)(81166006)(305945005)(68736007)(99106002); DIR:OUT; SFP:1101; SCL:1; SRVR:SN2PR0701MB1072; H:sellcey-lt.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN2PR0701MB1072; 23:M8zv7K3HoqAhpbXUQwJx8nH6yk+PIVKPrhMkKmb?= =?us-ascii?Q?HpxlZvs53E0UVMF2Hc2UpqWTbNS0pK4YR5VSGOKaaU8rW0GIj5hxvLLv8Bxy?= =?us-ascii?Q?xyM3KbuHk37y5DVYvbSwez59snu3R9UVZu3gTJvryR13BqqJJd4rX2z2O9o1?= =?us-ascii?Q?RBmqt2M00NOFrYNxdz4t9439GH9bGq4i6PnIxErxMYZlRZ6qnV6hyYYVXs4F?= =?us-ascii?Q?NYCm0gLAhUVE4MG379YcIhenOLoQzg9ADdHnmxCkkSFYwlmE/FI8HhN2rcQg?= =?us-ascii?Q?odGcNzwlj83rXzD7sLOt5z1HeGovE4Mnevycfrwd3d6ktIpTWi20AofwDW58?= =?us-ascii?Q?EUFRyiYioVYKU9aPduUaFlu//5q8WObimm4ITZFARStcWQ6ZUXU1soiB3bpo?= =?us-ascii?Q?HVpE2kyGJDBtDbYwcuhb/BLr8QNU5RDyn8HWrKALIy1UShyNCXnYtTtIo7U9?= =?us-ascii?Q?Ko4vLDUE72B69cu6u3qTYlJPKoQnRxfzko2KYdEmpl86GHf2CXVk04bqNoJL?= =?us-ascii?Q?wsg7nNLcrvAOu9bvldHxOuHBYQZybzX5UbXdJHH8wVgBVMmNMVCFaUDFnbSq?= =?us-ascii?Q?uE1MvHifmOa9fyZsx1K9vW8MuyDe/2MmLfYxKbgtlKwGB3qtj6zT1u2P8jM8?= =?us-ascii?Q?KodfjJ6+NhvvNR9dVr3ojs+YbgBN3cjfQxQ2r+D+quIIKRZ5UgG6uDPg+nhK?= =?us-ascii?Q?gwfmQk5wOfJEmvhSzikq77FElDp+EcemwNaG9CDnjjwQE/pwgrxXUHgAzhrw?= =?us-ascii?Q?4MmwOSvPmw9n4v2K0wdYdfbujr0TUaXbxrDErESd95lvMOR2DeMmzzgJKTwX?= =?us-ascii?Q?bZ6kVDgQr3p29gMxNEq1sSRgKQNcKtKd/qAMDsdCtITmERZeH6Uuqhk4J+Hk?= =?us-ascii?Q?F0u+r2DCmh/s87rtO/hb6R+R9brnC9s7Vd9nscBU7QkP+/XdBKWVGzKZomjm?= =?us-ascii?Q?erGE5bpbbxGUXz9cxKXp5ZPIRgLftxQFFt/bMCtY02mDC7iVXf44lS110Nd+?= =?us-ascii?Q?qWnhip6eGjrwAJcVDXpdvnGEcBJO6k1a72r8/vGWucHsCAoei1KtjkKka+tR?= =?us-ascii?Q?rhiOZ7MB6yYZdmyYS2xUPXD3KZthjOac/gWTC3uvs3CYg5CQr1DQrUcMuY9d?= =?us-ascii?Q?VMxiaLaZydD8ForXV559b97a4+e/MyAiBDXgWkW40aF/Ue5iUvtOtJhjmSa4?= =?us-ascii?Q?wDYryUkiLr2pHkkiUZpkeYU/LgU7JCvKSu1jUdmcAx7mrvpIxj9gfUelCu29?= =?us-ascii?Q?k46TcHNftXEiga6rosWkj/QcJt0lHh64RU5OsulKgTtveMcxJu2xi5tlGOfv?= =?us-ascii?Q?nVkaD4GpOPBtbkqXi8TqYpyM=3D?= X-Microsoft-Exchange-Diagnostics: 1; SN2PR0701MB1072; 6:cl6EbrHii8sqrHDhaFtBIPVlWXNqqilGjhf9t0Fc2De56er+4EjR5CLBC9eXntPaA6fYHFKqkxJd1/0UvvUiYiM7EoDEJAnEHsrNdUl0TFMUNr8TpAQWqN28AaHoDJrHg+fvP8kqydi0uF52mdc8T2ciTayE9h92Yxe6yjU7j8WwBDIhRGLPBICstJVseEh9to7a4iNKTa/OQzfadbjcps3gw/eJ6HnHXVtRTNiZ/3STGf8Hx5N2QLRINOiOHnAN/Mq4iuqvq6FCLPAla/FTJNLUlSQZcRpSJGehwSU9F6TlXmfuOHE147PJ6MqiamFh; 5:CPHREk27Zu0BtPqAhlT0MAxjQlLlAaPboRayUBHHdeKFRHAPOijUdgtzEmVpEWOdLAgDFxbfnoManhzm5+aaQsCdcooSXibKCFb2wv5dF4z8Z/rNk6ARuMzyechuwenVq6/332C45bpD0Y8kIUIgf7NmPjb0QZeoelBtzV/j/nk=; 24:S/CyfDVTTQInyqvPFFEhFIRBzxjU5tjwnzF5rFMK+OQFn9IdJfPBbZvAwLyAID/fmoxPoW2ZLqlLSBYJ5iQvncMhivkl3wrh9sGO1DnpsOE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN2PR0701MB1072; 7:h2gjuKO8g+Zg7UUTdoRjvcE5toz3S5sJiBshZBUUEjYohBgyRouCuslPAbPtrwuywtpJOWsWiOj+ilcxZs3eKwDjtl6ye4cfmuIfPzW0vhSepsfzKiTTtKFPTecAzMXny7S+hZLIByervGPVkqbxw+IPYtpB0ghXpIh6Vgv51dK7XbXY/pSXPke8ibiUgbJnEm1GeWS+Bd3KaZpP2tC03n2ehVsbJ6DGIsbrTqDtX2LYyHirZWo8yDoQvvZ+CwvtpvgWE4gAgAV7WbgNitmcupZ5/psDIQ9j/ruUI5IylvRG6CjHt/2D6RY5UO7NTzw9mhCYgyTCrurjDNH7GnkckKRqsgasfbQAZzmYaxCoFpc= X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2016 22:02:11.9131 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN2PR0701MB1072 On Fri, 2016-11-04 at 21:26 +0000, Joseph Myers wrote: > On Fri, 4 Nov 2016, Steve Ellcey wrote: > > > > > Here is a modified and retested patch. > The expression ORing together lots of function call results has  > indeterminate order of evaluation.  While the test should work > running the  > test functions in any order, on the whole I think it would be better > to  > make the order determinate, by doing > > result = test_cos (vint1, vllong1); > result |= test_fabs (vint1, vllong1); > > etc. Having a determinate order of execution would make it easier when analyzing a failure.  Here is a new version. Steve Ellcey sellcey@caviumnetworks.com 2016-11-04  Steve Ellcey   * math/test-tgmath2.c: Split up test function. diff --git a/math/test-tgmath2.c b/math/test-tgmath2.c index b376fd6..5919159 100644 --- a/math/test-tgmath2.c +++ b/math/test-tgmath2.c @@ -89,12 +89,6 @@ enum int count; int counts[Tlast][C_last]; -int -test (const int Vint4, const long long int Vllong4) -{ - int result = 0; - int quo = 0; - #define FAIL(str) \ do \ { \ @@ -138,6 +132,11 @@ test (const int Vint4, const long long int Vllong4) while (0) #define TEST(expr, type, fn) TEST2(expr, type, type, fn) +int +test_cos (const int Vint4, const long long int Vllong4) +{ + int result = 0; + TEST (cos (vfloat1), float, cos); TEST (cos (vdouble1), double, cos); TEST (cos (vldouble1), ldouble, cos); @@ -155,6 +154,14 @@ test (const int Vint4, const long long int Vllong4) TEST (cos (Vcdouble1), cdouble, cos); TEST (cos (Vcldouble1), cldouble, cos); + return result; +} + +int +test_fabs (const int Vint4, const long long int Vllong4) +{ + int result = 0; + TEST (fabs (vfloat1), float, fabs); TEST (fabs (vdouble1), double, fabs); TEST (fabs (vldouble1), ldouble, fabs); @@ -180,6 +187,13 @@ test (const int Vint4, const long long int Vllong4) TEST (fabs (Vcdouble1), double, cabs); TEST (fabs (Vcldouble1), ldouble, cabs); + return result; +} + +int +test_conj (const int Vint4, const long long int Vllong4) +{ + int result = 0; TEST (conj (vfloat1), cfloat, conj); TEST (conj (vdouble1), cdouble, conj); TEST (conj (vldouble1), cldouble, conj); @@ -197,6 +211,14 @@ test (const int Vint4, const long long int Vllong4) TEST (conj (Vcdouble1), cdouble, conj); TEST (conj (Vcldouble1), cldouble, conj); + return result; +} + +int +test_expm1 (const int Vint4, const long long int Vllong4) +{ + int result = 0; + TEST (expm1 (vfloat1), float, expm1); TEST (expm1 (vdouble1), double, expm1); TEST (expm1 (vldouble1), ldouble, expm1); @@ -208,6 +230,13 @@ test (const int Vint4, const long long int Vllong4) TEST (expm1 (Vint1), double, expm1); TEST (expm1 (Vllong1), double, expm1); + return result; +} + +int +test_lrint (const int Vint4, const long long int Vllong4) +{ + int result = 0; TEST2 (lrint (vfloat1), float, long int, lrint); TEST2 (lrint (vdouble1), double, long int, lrint); TEST2 (lrint (vldouble1), ldouble, long int, lrint); @@ -219,6 +248,14 @@ test (const int Vint4, const long long int Vllong4) TEST2 (lrint (Vint1), double, long int, lrint); TEST2 (lrint (Vllong1), double, long int, lrint); + return result; +} + +int +test_ldexp (const int Vint4, const long long int Vllong4) +{ + int result = 0; + TEST (ldexp (vfloat1, 6), float, ldexp); TEST (ldexp (vdouble1, 6), double, ldexp); TEST (ldexp (vldouble1, 6), ldouble, ldexp); @@ -230,6 +267,9 @@ test (const int Vint4, const long long int Vllong4) TEST (ldexp (Vint1, 6), double, ldexp); TEST (ldexp (Vllong1, 6), double, ldexp); + return result; +} + #define FIRST(x, y) (y, x) #define SECOND(x, y) (x, y) #define NON_LDBL_TEST(fn, argm, arg, type, fnt) \ @@ -307,25 +347,82 @@ test (const int Vint4, const long long int Vllong4) NON_LDBL_CTEST (fn, FIRST, Vcdouble2, cdouble, fnt); \ NON_LDBL_CTEST (fn, SECOND, Vcdouble2, cdouble, fnt); +int +test_atan2 (const int Vint4, const long long int Vllong4) +{ + int result = 0; + BINARY_TEST (atan2, atan2); + return result; +} + +int +test_remquo (const int Vint4, const long long int Vllong4) +{ + int result = 0; + int quo = 0; + #define my_remquo(x, y) remquo (x, y, &quo) BINARY_TEST (my_remquo, remquo); #undef my_remquo + return result; +} + +int +test_pow (const int Vint4, const long long int Vllong4) +{ + int result = 0; + BINARY_CTEST (pow, pow); - /* Testing all arguments of fma would be just too expensive, - so test just some. */ + return result; +} + +/* Testing all arguments of fma would be just too expensive, + so test just some. */ + +int +test_fma_1 (const int Vint4, const long long int Vllong4) +{ + int result = 0; + #define my_fma(x, y) fma (x, y, vfloat3) BINARY_TEST (my_fma, fma); #undef my_fma + + return result; +} + +int +test_fma_2 (const int Vint4, const long long int Vllong4) +{ + int result = 0; + #define my_fma(x, y) fma (x, vfloat3, y) BINARY_TEST (my_fma, fma); #undef my_fma + + return result; +} + +int +test_fma_3 (const int Vint4, const long long int Vllong4) +{ + int result = 0; + #define my_fma(x, y) fma (Vfloat3, x, y) BINARY_TEST (my_fma, fma); #undef my_fma + + return result; +} + +int +test_fma_4 (const int Vint4, const long long int Vllong4) +{ + int result = 0; TEST (fma (vdouble1, Vdouble2, vllong3), double, fma); TEST (fma (vint1, Vint2, vint3), double, fma); TEST (fma (Vldouble1, vldouble2, Vldouble3), ldouble, fma); @@ -337,7 +434,23 @@ test (const int Vint4, const long long int Vllong4) static int do_test (void) { - return test (vint1, vllong1); + int result; + + result = test_cos (vint1, vllong1); + result |= test_fabs (vint1, vllong1); + result |= test_conj (vint1, vllong1); + result |= test_expm1 (vint1, vllong1); + result |= test_lrint (vint1, vllong1); + result |= test_ldexp (vint1, vllong1); + result |= test_atan2 (vint1, vllong1); + result |= test_remquo (vint1, vllong1); + result |= test_pow (vint1, vllong1); + result |= test_fma_1 (vint1, vllong1); + result |= test_fma_2 (vint1, vllong1); + result |= test_fma_3 (vint1, vllong1); + result |= test_fma_4 (vint1, vllong1); + + return result; } /* Now generate the three functions. */