From patchwork Fri Nov 4 21:06:11 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Steve Ellcey X-Patchwork-Id: 17204 Received: (qmail 78062 invoked by alias); 4 Nov 2016 21:06:31 -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 78038 invoked by uid 89); 4 Nov 2016 21:06:30 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: 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= X-HELO: NAM02-SN1-obe.outbound.protection.outlook.com Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Steve.Ellcey@cavium.com; Message-ID: <1478293571.4630.29.camel@caviumnetworks.com> Subject: Re: [PATCH] Speed up math/test-tgmath2.c From: Steve Ellcey To: Joseph Myers CC: Date: Fri, 4 Nov 2016 14:06:11 -0700 In-Reply-To: References: <1477354555.8523.78.camel@caviumnetworks.com> <1478280156.4630.18.camel@caviumnetworks.com> MIME-Version: 1.0 X-ClientProxiedBy: CO2PR06CA015.namprd06.prod.outlook.com (10.141.242.15) To CO2PR0701MB1064.namprd07.prod.outlook.com (10.160.8.143) X-MS-Office365-Filtering-Correlation-Id: e3832a37-b14b-438b-f794-08d404f66af0 X-Microsoft-Exchange-Diagnostics: 1; CO2PR0701MB1064; 2:VxTP2qNEUtGtNKTyFqTXO9sS9kx0QJ7QSei0JjxRfubhcGI8qSsI6kGsa0OrzetTYcMtDflGQnWYBSxo8+iDGeLtJOv14HnAy3Lxe9m6MtKS/VBTmU3x6p9CZ8EedJnuNngPgYsqALrNrfHgs5JNXx/kvI+dZKHDDzEzlJbDRNGQTv+/2KZ0vsjNDgpBQ51kEFqSJl6sIYWdGKrhkSjhrw==; 3:XKQSzfm8OlXVg//p4u1CoW2OlPKx3bWObLAqT9lXiZUvyd5K888sQtKG5K4Lh4AOzWo/kc5A0CX+osBzKrd2oxKTSkCns1O/dUDb5+wVa+ZDNzwpaGbxXFQIq38LqL4zN9sRAxY8PQe1msZyq2mRrg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CO2PR0701MB1064; X-Microsoft-Exchange-Diagnostics: 1; CO2PR0701MB1064; 25:YM9iRQ9JZoff6pTx/U69sfwNDL/caDafxJQxzwFBSJ1W9UVLs+EbjRnYV3q/k4G6uHMEVp5+e+k6DW7MbjRxBhBKvKIjhsV8g1hobwhyrMqB2s+KRzZBH0TeGeLeBmAiNtpe/7JGDvuYqKdsirhabWRYRQGyHnpGzlxBWuHbbmMyshuNHcb5n0DrjfJWLnspQ+B26rvDu7+xrB98tmYKMqwUXfJhAUtpCiunvEWuvEO7DU2zMOMLyVV9dnXVCuuQ7DbRJfAQPctaFtoeVUyRieh4fEctwrvN1YQhQQFtsb1Fa+1zEQTX53yOHatDhyqHT4y/1a+DcZvKb61+44yew6dZEIHjT0XmpKsQNMyO1Bv9UjrsOaq7DsT496Ub/IHVnZQyqD5/ExtUpDQa5oOzqneatetzpWXxDeG4RY2r7EAzHQj5Fp4MF8gM9ojpY1oTjdO9K+2wK6pCy5wyIWTZ66KJrK4Zq1+uKVW8ZbVyN77E43m2M76moaxhJl6JFAP9WwSmhMWU2n24fDSdqR8EoMvJB5TH26anBPuW6xOwaP13tgTJHIKRLcBNh1UzfXyRQ5KgePgN8eFxyIVr9NBb1NKdB2Azet9U/5ifva1PQZr1MP5MPmo23YJUd7zjYpbuNp8JhO8CKhvJD1FEHEtOV46Tpq3BHfQN2qrcc/zk/AfEax5SYCgvloAkYacCXk064uXDX+bt+wylvj/KLGBdl0NlDWssbSy9clmvAhjfgFx/i2tZ5RNqhLVQEyeRZj6ni+rGOV78OgPMeeuGAD4VzeMuMfpUaA58tp0isQqe4godfz23atV/Yx+IOnXZ9Poj8SeHub9x10z1uExOGafWFw== X-Microsoft-Exchange-Diagnostics: 1; CO2PR0701MB1064; 31:xcOUEr8x0zG0Gmt5fRIrhyAo0z/jZLgFDt+F1cfJwkgysdgDEmxUh7yWR9QNIvr3brFNz8V85MjUwk8j8ZWsvkAfl2yZ5p4AubXX0ofKz5VEtJF2bXtIzxuWDHwZVAbOALmhOiie3TWJodo+aos0oS20BG2cxkOIvMEftb0Ag07MTvLq4w0/z4830FplRsgaDU/vUVr+tYVK6zk7cXRVGenGrHdlmc2MzzQoceKoloBVXmXHG1er7v/8pt4yl4jiq8Hql0qHbP/nmANu3LS4dD32a8SvUJQnc3UBeqEeHdO+GwwGmrssQiosIQMlaArd; 20:PBJVmZRh5193YaoHJ7i87ed0nvztqLX2XXHlwaAdali3Nh84dTfSU29hyP8YH8PYRLjwnhEzBhCI7kfwwP3sj1t1JBxXIWU/BksDgKJUmnt50iaM4VSytohUaPjij1ADH9fFKzKnm9kpI5OfvhDSVzxwQvhX/WfOxnl1WFyJv9zvhX6TeeIe0doXA43n/7vE/SWLVmwELlB0z/aqdOt+RZg/JoHaG5Y6PsG6LoF/1BiNaVY26En+BUTDjl+TksE/+IxUn3qpO17lJhd8aYdDMmFIl1qjaEFRY14eXNE5gW/zD2WkS1aL1F7PFRNez/QqRvQPxKIRfqil+t/YF872F61P7wnRaFWY4i+28yi0BDxUKH5Ed6mDEBGJRaCcjv9zVbx2K+LIX7PraOv/UspKYXA33klYFNQhJEzy5RcHRljMjMfbPBicX3uEuPztlJdbDipPQAImrcCaYATx8C/10Dnr5SR/9ee003bXTl/BVhJWEXJt5GoeqGd1kIW8YU6YgfyionyyKXRk9BhTojOODoJ1Y1Tji8WRIkt2JA05D+5qys5n5oX6NJm9bmIWfZrIjmJc/YQPK6X/kvhtPufIYXFg/1fQxUzoO/XDYON5OKI= 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:CO2PR0701MB1064; BCL:0; PCL:0; RULEID:; SRVR:CO2PR0701MB1064; X-Microsoft-Exchange-Diagnostics: 1; CO2PR0701MB1064; 4:AkTd3YId0ZjxarFoxWV11pN20xvnnDKYpVazV5aASSkkGxbGBgpTT07XvLZm0l3M0x90iylNtSFYkAJPCqW5GRVqvTiid15Q0Yj0vfF3P/n1r8/m7aARAqdO9Uc1KHMjz6UY4/c5M56aOq/QNFOwiAPj1y3LPv+qe8FYNlKprwc6WFFuck/5Ql7UhBIhoHH4kvvFcyv88dl+E7cLKFDDwK2/AWdm3v0G2KW1y7Ayy+ZuPFVIrPz3tHWMu0hfN48ii70LNdja/gbfjI/u0xE1V0HHifWUbaSRK8yj6/q9elEN6yldYn2cb+Lz/tILFelfjEVBHq4IZt9hiXClhW6Sb2LIO+zft0hnXvPL3c1odpZqJVXXR/0Zi8g34+PyhPeFyE68iP20KDmJOEelut1WnwkW0UWDtmmweI//7mpcs38= X-Forefront-PRVS: 01165471DB X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(7916002)(199003)(24454002)(189002)(377424004)(33646002)(189998001)(69596002)(81166006)(92566002)(81156014)(84326002)(305945005)(66066001)(8676002)(19580395003)(5890100001)(103116003)(586003)(110136003)(7736002)(106356001)(19580405001)(7846002)(36756003)(53416004)(68736007)(2950100002)(42186005)(512874002)(5660300001)(2906002)(6916009)(568964002)(105586002)(50986999)(4326007)(3846002)(4610100001)(97736004)(101416001)(50226002)(6116002)(76176999)(77096005)(2476003)(42882006)(6666003)(99106002); DIR:OUT; SFP:1101; SCL:1; SRVR:CO2PR0701MB1064; 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; CO2PR0701MB1064; 23:IiKnLvWl1sWKi+demoEfCN6bUpQINdnf/c3QfSR?= =?us-ascii?Q?1sfZCri9uQcbatgTW34BmTHuFbwLlrp2+AQuWeni84U5m2lA3PJvOUtTYmj0?= =?us-ascii?Q?EXIPxizjVx/hXEyZu62cyNvXQTRRO67qPMgmTm2LYOHwIPO7iHzwr8faGKXX?= =?us-ascii?Q?tGIYDj+Akp80d634ujHtbvT1lINzIhbqrlU51WZ6hZ6pM37/IGpcXCbJ0p4W?= =?us-ascii?Q?jI1ESCqwIXwv0oXYrQqk24vXDyk3X7TOyO42RJeXuIqUUKAbO+wQyWs6kIpr?= =?us-ascii?Q?girJRBnRkkonpxOc/jLLTyROF6aBWy4PoroaWxIBV2pB7L8wBzT+e660558J?= =?us-ascii?Q?7PVZi9ZzudseGBJ+0HkqqUqHc+Ol1n0xUlUQ+0OafST9xubSi09W5RcxLSkw?= =?us-ascii?Q?g0E9CF2Xk3uJRAp50F4+/WoFAZuY+3CJ+RtppLYPUMxn5g6gWpXmngo/ssiq?= =?us-ascii?Q?zyhGbRAWQLzs8GyYZazasxBwoaZDeRPA9+qhyRNzT05EeQJqo8nhRI0PEu5K?= =?us-ascii?Q?55l/VG6pTkxCg0/rEdsL8h/BLByMPjMbteeFTj0PKunzIUrRH7XO7/+q31Wa?= =?us-ascii?Q?cCDPmMNov2ujF906YD4cgOH3ArZ91VKppdoE1/jXPy7XbHHE7ylijYL+uiq9?= =?us-ascii?Q?pOpjTCjMQO6GsPfo/sUPJbmP7o/EC0bYH7NOdgVGH7e3aUBliitz1tIHXGnC?= =?us-ascii?Q?OoFo93KFpVUV6dZGgVI61FthXA/ig4qWONcKhucvuCJ12VlBPAZNtWU17oP0?= =?us-ascii?Q?CRrrOAyorQmFSpluQ1DRRVnwosYmi4jGH6TW+cHtDladGGqdJ0/3IEfAssqw?= =?us-ascii?Q?U6IeqUg+eaHuP7dSp11H9X+MBd+GbFnj9PJ8FkUeCFqxudU1Ma0EJkaeZqsI?= =?us-ascii?Q?N1VRlTU0ye63VQdVQHR7bp0I1S6vhBhAK9OppGNLD+HlyablU5XPeqRZA7Zt?= =?us-ascii?Q?laIwUsnb29xNTquHKu5nEXgSKIHEhQS+7hLVOmFh/8arX4Z+XcL0LGsd8c5/?= =?us-ascii?Q?XEGZtUJ/kbrj4kyVXQD9FfKL4E8v4wXkFxHjALu4M+qqpIi13r0/E+/ip8TB?= =?us-ascii?Q?dvaD14Dcv3HvPOD8WRecy71jTeyyS5v8V/dwKHbeHCK/NIt/M3rWOrIFmxoK?= =?us-ascii?Q?lcojho9YtvR0v/0ZPE5hgfDZ3tw5hqdA3N4JG52twxkDAfp3zmIdA9i+6kYO?= =?us-ascii?Q?ZC1ddZuFE2k2gSvejuAW9Yd1cUPM9x0csuC7ijRKSZycZs2wHA/aQbkYW8zp?= =?us-ascii?Q?RuqQts3Wc8Tu/YaGJ/jypbYaL80/gXaXos9wCJpTH?= X-Microsoft-Exchange-Diagnostics: 1; CO2PR0701MB1064; 6:zngtMB5F5KB9p626yyGvIuKae4nwNt2NbhfxPjRhm9A+NTyR05C/9WuZWYYUwd/DcKf+iga2paDE9df7u05ZwcobsIf1y3RRwcnb1bA293NVd7vvCyo1G2Tbjuuj8+pxK2nVanfGxr1M3unRMdgw/uXbnzpw4362CLK2MK8cLt+v8VLyVdRUFI3YVxaOwIuQaktDkX0GivK9ZoWt+yHUd07JNXiE0nd/p0kAjDvL1/avstpcFZ2bpjd/Kp1CIOZDXbf64Irlw5Vidt8WuhJj85+0fAG+XaT74V8n3wDa94wPj4hUxwxEH7mcxCKCS9s3; 5:1tuefdXrfNc1eNcY06tUMn/yf0xEBeOjPfeaqInEZbd4l9HtGeis0x/YIiUMdzzHcRzZ5DkiFF50i1zRfmr4h6wtPWp8Vgad0MSGEDK4ZwLfe4DNf7w3Xtzy43/llODc+T2VDa1/heNqLtR8JyIjtw==; 24:eoXnj7Vf8iQSIqm5woyatmSJbZIug108Fdhp7IxakuzGh6phxbekvgAvckV/uXnwfBGyT2GUFx15VE2OJ3lkDHCLj3GqDEvXnMaH2FLbR3w= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CO2PR0701MB1064; 7:0VEjI9daftyKOUsZT8hy0qsUIZYn7lOSWxUQAlFeDYGOix2ojoDwIqsRh7dScNIri6WKZYWVbhyido61aHVi1S91bow6R7Kn0hRKtU7LpNDJp90PLogeUtRpFUQH9dD07+kwB8qs+o73zjoZZtdhvWZmolBwSL/RX0eyLTLlJHanpotMxG8i27s+ma3Mi5qzSeOdtUzzIzv9hCWXgNydiz6T0Gr0KKTozf5iBuNJtqO/xsRTRCP7y/MCY3INzOgiZ+k9/82duN0Nh1REbJFbHegaVSJyoMPXkdPgOG8DnwSDxXggTi5IBCqDN+jV+Sk8UbnHjvDui6EbA6w8S84Yf6qgkvoAJwWCqug6aR6GK/M= X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2016 21:06:16.7304 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO2PR0701MB1064 On Fri, 2016-11-04 at 17:25 +0000, Joseph Myers wrote: > On Fri, 4 Nov 2016, Steve Ellcey wrote: > > > > > > > > > +  return test_cos (vint1, vllong1) > > > +  + test_fabs (vint1, vllong1) > > > +  + test_conj (vint1, vllong1) > > > +  + test_expm1 (vint1, vllong1) > > > +  + test_lrint (vint1, vllong1) > > > +  + test_ldexp (vint1, vllong1) > > > +  + test_atan2 (vint1, vllong1) > > > +  + test_remquo (vint1, vllong1) > > > +  + test_pow (vint1, vllong1) > > > +  + test_fma_1 (vint1, vllong1) > > > +  + test_fma_2 (vint1, vllong1) > > > +  + test_fma_3 (vint1, vllong1) > > > +  + test_fma_4 (vint1, vllong1); > You don't want to add up test results like that; you should OR them  > together instead, to avoid the potential for test results adding up > to 77  > and wrongly becoming UNSUPPORTED.  (In this case of course there > aren't  > enough tests to get to 77, but the principle applies that you should > avoid  > the test return being a count of something.) Here is a modified and retested patch. 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..b2cff6b 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,19 @@ test (const int Vint4, const long long int Vllong4) static int do_test (void) { - return test (vint1, vllong1); + return test_cos (vint1, vllong1) + | test_fabs (vint1, vllong1) + | test_conj (vint1, vllong1) + | test_expm1 (vint1, vllong1) + | test_lrint (vint1, vllong1) + | test_ldexp (vint1, vllong1) + | test_atan2 (vint1, vllong1) + | test_remquo (vint1, vllong1) + | test_pow (vint1, vllong1) + | test_fma_1 (vint1, vllong1) + | test_fma_2 (vint1, vllong1) + | test_fma_3 (vint1, vllong1) + | test_fma_4 (vint1, vllong1); } /* Now generate the three functions. */