220 41381 <CADvuK0+1ZC60c+9ScSKNtu2id34E6wVnXzQ7WP61cKhu+eYARg@mail.gmail.com> article
Path: news.gmane.org!.POSTED.ciao.gmane.org!not-for-mail
From: "Arthur O'Dwyer" <arthur.j.odwyer@gmail.com>
Newsgroups: gmane.comp.lang.c++.isocpp.proposals
Subject: Re: Re: Optimizing Power Function for Integral Types
Date: Tue, 22 Jan 2019 12:52:39 -0500
Approved: news@gmane.org
Message-ID: <CADvuK0+1ZC60c+9ScSKNtu2id34E6wVnXzQ7WP61cKhu+eYARg@mail.gmail.com>
References: <fbfec82c-5416-4c96-b53b-ef3d4309b613@isocpp.org>
 <c5128f98-b764-4576-90fc-eda8d40d980e@isocpp.org> <1d2bd16a-c2f9-4baa-b2d3-4b0241de8992@isocpp.org>
 <CADvuK0LeMK-uYS5WPMEMxKjfGAA6TFybpFJD_Yqh12wkOP4FcQ@mail.gmail.com> <7801bc16-e087-43ed-ab4f-5b5f907c125f@isocpp.org>
Reply-To: std-proposals@isocpp.org
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="000000000000d94f3f05800fa4c0"
Injection-Info: ciao.gmane.org; posting-host="ciao.gmane.org:195.159.176.228";
	logging-data="63752"; mail-complaints-to="usenet@ciao.gmane.org"
To: "ISO C++ Standard - Future Proposals" <std-proposals@isocpp.org>
Original-X-From: std-proposals+bncBDLZJYWNDQIOXME54ICRUBBFCPMHS@isocpp.org Tue Jan 22 18:52:47 2019
Return-path: <std-proposals+bncBDLZJYWNDQIOXME54ICRUBBFCPMHS@isocpp.org>
Envelope-to: gclcip-std-proposals@m.gmane.org
Original-Received: from mail-wr1-f72.google.com ([209.85.221.72])
	by ciao.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
	(Exim 4.89)
	(envelope-from <std-proposals+bncBDLZJYWNDQIOXME54ICRUBBFCPMHS@isocpp.org>)
	id 1gm0E9-000GRW-J2
	for gclcip-std-proposals@m.gmane.org; Tue, 22 Jan 2019 18:52:45 +0100
Original-Received: by mail-wr1-f72.google.com with SMTP id m4sf12798695wrr.4
        for <gclcip-std-proposals@m.gmane.org>; Tue, 22 Jan 2019 09:52:45 -0800 (PST)
ARC-Seal: i=2; a=rsa-sha256; t=1548179564; cv=pass;
        d=google.com; s=arc-20160816;
        b=Y4545nci/5LZRd7+pcdaypOWBIHB7wh/VnBCPETcUTV5tWg9EmmSRuTas/b12o/QGM
         XWC28C9/QX2vCLvPlpT0t2qX7z8wU5RTvJFrTQje4njIQG99tGFS9A8yDaY30rCL93O+
         JyM8gmmlW+6Cj+IWWyWlIfCHKoQWwlQOEv0hmUo1fMhOGrY6Be3BH30s4CVK0Jq27aJD
         3oWqSoPOiNGSBI0nwII/fVVJGDG6fGIYSiysDwagl37qOwvvgkUPH6glkjxKKoM9Bdox
         7PiTWH2IXdAYqyGAgRMZwpOE7HCaiC6A9EwdgGs5QLMKlatW+yj7kf79IOiHzRzxm2cV
         aOqw==
ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
        h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post
         :list-id:mailing-list:precedence:reply-to:to:subject:message-id:date
         :from:in-reply-to:references:mime-version:dkim-signature;
        bh=xcR1uS+RHiTWcVw7Tu2mmWAXIGIEmc9RjPQYey++8rA=;
        b=diyikFVczpM9HNEOMS3g6v3207g7ck8GFthib2Ru49HlBhiKqSebSY4FJlmvzhHa/N
         0zOzFvEcb+unLZzT7VSQj/iNVHahmrc+iAZyG1EkDF7oi09KEHXTmXn5bASm3Pcqxe8r
         d6XVvO3Ml7EdrWAbBBF4jfWcpbrGRVO2SufNsJdYJWgfEdFaTisOl431EVG94UVvP7aH
         vhZ5/jvnlomDpoMcBCyvPrLZHY6vj2Hn3Zvfq9Tt7gYFFQnkyWswTh0dw3ENdAtixL8K
         yXTkXiXHLKDRU5teXscimnZkRYHNfMBB+/TQwRa3OU2IkiRLUWeyw9yAMNogK+1PnuEN
         Hkmg==
ARC-Authentication-Results: i=2; mx.google.com;
       dkim=pass header.i=@gmail.com header.s=20161025 header.b=dVc1nXcx;
       spf=pass (google.com: domain of arthur.j.odwyer@gmail.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=arthur.j.odwyer@gmail.com;
       dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=isocpp-org.20150623.gappssmtp.com; s=20150623;
        h=mime-version:references:in-reply-to:from:date:message-id:subject:to
         :x-original-sender:x-original-authentication-results:reply-to
         :precedence:mailing-list:list-id:list-post:list-help:list-archive
         :list-subscribe:list-unsubscribe;
        bh=xcR1uS+RHiTWcVw7Tu2mmWAXIGIEmc9RjPQYey++8rA=;
        b=whAIT6yCehOEnoPASVbqEUuUx/2+ARbPGUfOBha3UjE+6toDMy7WtocHiTfBAi7t6c
         2fXUjhkzOp76IVI4dxeR0LtUt55SaXf7hqVEbyzYwc+nVwOZk3P78TosAwcZmIKQDS3A
         njvPqRh1/yZy6tjW7HopaIrRJ4YkPo4CRO8zJIDBMs0yjvoBBRfIn9pBzX36Odbb+ScV
         0ttIO/crWswOZooHrK3IeqgilicQxOOljhGI9gqoUYQFfQZAkMGeSKI61ihzZ1Aa8xh3
         1y7dG1VNnqmLzOme8N0xfiJnjVnbexmQnEQvNxlSOJMdSxsXclswjryq3VYw2v0CZIm/
         WnWw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:mime-version:references:in-reply-to:from:date
         :message-id:subject:to:x-original-sender
         :x-original-authentication-results:reply-to:precedence:mailing-list
         :list-id:x-spam-checked-in-group:list-post:list-help:list-archive
         :list-subscribe:list-unsubscribe;
        bh=xcR1uS+RHiTWcVw7Tu2mmWAXIGIEmc9RjPQYey++8rA=;
        b=WOOCp4Qjy9cKpLia/E9U1OlCVshiS4BiFnrLSDbiuvBlIuGPG/GaStWncoLv9vmW/F
         y8HL8+wUXpEInsR4PVseOfJiTdJYAYFyQg8OuuT6mQbSxM2f7XguV/EOrDMAneUsvPyO
         ZasUs6HAQStQLIqa9RhYlmgpuyB65E2gUZFYrUc/tLZC8a1Ki6en/TJ1YqyI18e+ySr2
         mJbGbDMsotub29z+U5W077HZcGQG+R2zaInDMJ1lRX4cdZBS4Q+ij06y9PF3t5xJCnxY
         HAywnDvqPhFP7HxExaK1+jJIgKr8SzaNJfMHSYlqCQoHmhswx7cTRwREYp8iyUPuwlRI
         +/Sw==
X-Gm-Message-State: AJcUukf8Yc6xec78Yont45UZAEkqmvO6i7CX0jNm0xnJ+pDisxjg3QqP
	YkZYjRTVzHAt2UierqBaVT+ICw==
X-Google-Smtp-Source: ALg8bN4Ih4LW5WlnFzAuk5bIOg23j3qNzRW9zgFeg8hJoiCctLfYR5jw5Q/CxAfKfT/MXq8gdbiZ3w==
X-Received: by 2002:a1c:6708:: with SMTP id b8mr174351wmc.5.1548179564697;
        Tue, 22 Jan 2019 09:52:44 -0800 (PST)
X-BeenThere: std-proposals@isocpp.org
Original-Received: by 2002:adf:dc8e:: with SMTP id r14ls5651384wrj.2.gmail; Tue, 22 Jan
 2019 09:52:43 -0800 (PST)
X-Received: by 2002:adf:c042:: with SMTP id c2mr35087562wrf.158.1548179563005;
        Tue, 22 Jan 2019 09:52:43 -0800 (PST)
ARC-Seal: i=1; a=rsa-sha256; t=1548179563; cv=none;
        d=google.com; s=arc-20160816;
        b=OoLEZNAjfiaYqiJeYB25hVRafq522f/JFXVJ0bPxMQeLKZDLdvPka++Qtv4P8k50xb
         BD3yrjvIeCum0UAKHX+4xX2Y8bJNXUtNt5g1pScsbjLt1MXF/blGPdFP+uI4WnpSCsvg
         6Fh0oDzGkaLSUguSsSSQVlz+z78MEv2YficBGW7GEqtCI6fgLrwvrG6CJRHiroxwSfXF
         BIro6wHSpve97sLABCzzvQldTmXJBwYf/opzJf2aTPm5qD0A6KFD7IHrCwF0G8rLz/Zs
         68CaCN+yXuCEtD5Nx6bPCaKF294JpyMIDEU+fRfT4WOiTgx+TeDDlyHN7aKZNcz9vHhH
         E4cQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816;
        h=to:subject:message-id:date:from:in-reply-to:references:mime-version
         :dkim-signature;
        bh=11TXMEGG3mTb12ED+0NAuB4I7DbQY4mrURoQ30VEhbs=;
        b=KIXHUaEFXPGgmZLW6m7HkV39ZLbsfBU2I/mSQptuVEpXzlhqh/BDmXY5O+9Vyjjf1h
         7FAZFIxEEf4LXSlvip3jbnnbeteVaYJobiVnWWO1czopTk5mOfStKd0peIPS5qyRDG7Y
         fj84can4F6/FpZ++eocTKjEJuVzLcukTAI5L0xnayjz01v00UmjDBBzWhtSmrxr6befN
         Os9p07A6MuuBfz80kBpAwNxAPhTVjbANwbfk1wybn7oe6id0kz297GKuViulwtQKxIVp
         bLn5NTM62iPoVzdRZmcnN8gCsEB1mTNCzqOQGUtZH61U7iPVo3CcT+AmslL0C61L+Hed
         leIQ==
ARC-Authentication-Results: i=1; mx.google.com;
       dkim=pass header.i=@gmail.com header.s=20161025 header.b=dVc1nXcx;
       spf=pass (google.com: domain of arthur.j.odwyer@gmail.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=arthur.j.odwyer@gmail.com;
       dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com
Original-Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41])
        by mx.google.com with SMTPS id 69sor34303465wmy.3.2019.01.22.09.52.42
        for <std-proposals@isocpp.org>
        (Google Transport Security);
        Tue, 22 Jan 2019 09:52:42 -0800 (PST)
Received-SPF: pass (google.com: domain of arthur.j.odwyer@gmail.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41;
X-Received: by 2002:a1c:bdc5:: with SMTP id n188mr4957826wmf.69.1548179562121;
 Tue, 22 Jan 2019 09:52:42 -0800 (PST)
In-Reply-To: <7801bc16-e087-43ed-ab4f-5b5f907c125f@isocpp.org>
X-Original-Sender: arthur.j.odwyer@gmail.com
X-Original-Authentication-Results: mx.google.com;       dkim=pass
 header.i=@gmail.com header.s=20161025 header.b=dVc1nXcx;       spf=pass
 (google.com: domain of arthur.j.odwyer@gmail.com designates 209.85.220.41 as
 permitted sender) smtp.mailfrom=arthur.j.odwyer@gmail.com;       dmarc=pass
 (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com
Precedence: list
Mailing-list: list std-proposals@isocpp.org; contact std-proposals+owners@isocpp.org
List-ID: <std-proposals.isocpp.org>
X-Google-Group-Id: 399137483710
List-Post: <https://groups.google.com/a/isocpp.org/group/std-proposals/post>, <mailto:std-proposals@isocpp.org>
List-Help: <https://support.google.com/a/isocpp.org/bin/topic.py?topic=25838>, <mailto:std-proposals+help@isocpp.org>
List-Archive: <https://groups.google.com/a/isocpp.org/group/std-proposals/>
List-Subscribe: <https://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>,
 <mailto:std-proposals+subscribe@isocpp.org>
List-Unsubscribe: <mailto:googlegroups-manage+399137483710+unsubscribe@googlegroups.com>,
 <https://groups.google.com/a/isocpp.org/group/std-proposals/subscribe>
Xref: news.gmane.org gmane.comp.lang.c++.isocpp.proposals:41381
Archived-At: <http://permalink.gmane.org/gmane.comp.lang.c++.isocpp.proposals/41381>

--000000000000d94f3f05800fa4c0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Why don't you just post your benchmark code? Why all the graphs and "oops
here's the new graph" and so on?

On Tue, Jan 22, 2019 at 12:51 PM <joel.g.hemphill@gmail.com> wrote:

> I wasn't aware of Google Benchmark before now. I will attempt to
> familiarize myself with it, so that I can get more accurate timings. In t=
he
> meanwhile, below is my implementation of what I hope to propose. If the
> results from Google Benchmark don't align with what I have presented, I
> sincerely apologize for the misinformation.
>
> __declspec(naked) __int32 __fastcall powi(__int32 base, __int32 exponent)
> {
>   __asm {
>   // No Stack Usage
>   /*------- Prolog ---------*/
>   //push ebp
>   //mov ebp, esp
>   //sub esp, __LOCAL_SIZE
>   /*------------------------*/
>
>
>   // Entry Register Values
>   //------------------------
>   // EAX =3D UNDEFINED
>   // EBX =3D UNDEFINED
>   // ECX =3D base
>   // EDX =3D exponent
>   // ESI =3D UNDEFINED
>   // EDI =3D UNDEFINED
>   //------------------------
>
>
>   // eax =3D 0
>   xor eax, eax;
>
>
>   // if(exponent =3D=3D 0) { return 1; }
>   test edx, edx;
>   jnz if_zero_exp;
>   inc eax; // Set eax to 1
>   jmp powi_exit;
> if_zero_exp:
>
>   // if(base =3D=3D 0) { return 0; }
>   test ecx, ecx;
>   jz powi_exit;
>
>
>   // ebx =3D base
>   // ecx =3D exponent
>   mov ebx, ecx;
>   mov ecx, edx;
>
>
>
>   // ecx =3D abs(exponent)
>   // edx =3D sign(exponent)
>   sar edx, 31;
>   xor ecx, edx;
>   sub ecx, edx;
>
>
>   // Create a copy of the base, and move it to a temporary register
>   mov esi, ebx;
>
>   /* find abs(base) */
>   mov eax, ebx; // Copy the base to the accumulator
>   sar eax, 31;  // Fill with sign bit
>   xor ebx, eax; // Not the value, if sign bit is set
>   sub ebx, eax; // Subtract the sign bit, giving the absolute value
>
>   // Return the copy to the accumulator
>   mov eax, esi;
>
>
>   // EAX =3D base
>   // EBX =3D abs(base)
>   // ECX =3D abs(exponent)
>   // EDX =3D sign(exponent)
>
>
>   // if exponent is negative
>   /*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D*/
>   test edx, edx;
>   jz if_exp_sign_eq_0;
>
>
>   // if abs(base) =3D=3D 1
>   /*----------------------------*/
>   cmp ebx, 1;
>   jg if_base_gt_1;
>   // ecx =3D exponent & 1
>   and ecx, ebx;
>
>   // eax =3D exponent & 1 ? (base < 0 ? -1 : 1) : 0
>   imul ecx;
>
>
>   // ecx =3D exponent & 1 ? 0 : 1
>   xor ecx, ebx;
>
>
>   // eax =3D exponent & 1 ? (base < 0 ? -1 : 1) : 1
>   add eax, ecx;
>
>
>   // Return exponent & 1 ? (base < 0 ? -1 : 1) : 1
>   jmp powi_exit;
> if_base_gt_1:
>   /*----------------------------*/
>
>   // Return 0
>   xor eax, eax;
>   jmp powi_exit;
>
>
> if_exp_sign_eq_0:
>   /*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D*/
>
>
>   /* if exponent =3D=3D 1, return base */
>   dec ecx;
>   jz powi_exit;
>
>
>   // If base =3D=3D 2
>   //cmp ebx, 2;
>   //jne if_base_2;
>   // sal eax, cl;
>   // ret;
>   //if_base_2:
>
>
>   /* Exponentiate the multiplication */
>   mov ebx, eax;
> multiply:
>   shr ecx, 1;    // Shift and check the first bit of the loop counter
>   jnc noMulByEBX
>   imul ebx;  // Multiply by the current multiplier
> noMulByEBX:
>   imul ebx, ebx; // Square the multiplier
>   test ecx, ecx; // Test if this was the last itteration
>   jnz multiply;
>
>
>   /* Exit the function, returning the value of eax */
> powi_exit :
>   // No stack usage
>   /*------- Epilog ---------*/
>   //mov esp, ebp;
>   //pop ebp;
>   /*------------------------*/
>   ret;
>   }
> }
>
>
> On Friday, January 18, 2019 at 10:59:21 PM UTC-8, Arthur O'Dwyer wrote:
>>
>> On Fri, Jan 18, 2019 at 8:12 PM <joel.g....@gmail.com> wrote:
>>
>>> The case you pointed out of using the double-type of the return for
>>> 'pow(int, int)' would be a major concern. Perhaps a workaround would be=
 the
>>> requirement of an explicit template? i.e. "double x =3D std::pow(10, 20=
);"
>>> would use overload 7, whereas "std::pow<int, int>(10, 20)" would return
>>> int? Alternatively, as Jake Arkinstall suggested, a new syntax for 'pow=
' as
>>> 'power' might be in order, in which case, such contingencies wouldn't b=
e as
>>> large a concern. I would also argue that the above code segment is poor
>>> practice, as it is relying upon the pow function to convert the two
>>> integers to doubles. More explicit typing would be preferred in most co=
ding
>>> environments. Another solution, as is implemented with powl and powf, i=
s to
>>> use a single-letter abbreviation to explicitly define the types used. i=
..e.
>>> powi.
>>>
>>> As for the graph; I mentioned in a reply to my original posting that I
>>> have since found an issue with the testing method I used for graphing t=
he
>>> execution times for pow and powi. I have since done other tests as show=
n
>>> below [avg. of 20000 runs for powi, and 500 for pow (since the executio=
n is
>>> longer, I decided to neglect the sample-count somewhat)]:
>>>
>>> [image: Untitled2.png]
>>>
>>> As you can see, powi does experience a gradual increase in execution
>>> length with the increasing exponents (since it needs to do at worst [if=
 an
>>> implementation were to use a simple linear approach, O(n) multiplicatio=
ns]).
>>>
>> But really O(lg n) multiplications, right?
>> That graph looks a lot better (flatter), but I'd still have to see the
>> code before I believe it. You say your data was
>>
>> > gathered using "std::chrono::high_resolution_clock::now()" surrounding
>> for-loops executing the functions
>>
>> which pointedly omits any reference to e.g. Google Benchmark
>> <https://github.com/google/benchmark> or ClobberMemory/DoNotOptimize.
>> Which suggests that your benchmark might not have been measuring anythin=
g
>> meaningful.
>>
>> =E2=80=93Arthur
>>
> --
> You received this message because you are subscribed to a topic in the
> Google Groups "ISO C++ Standard - Future Proposals" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/a/isocpp.org/d/topic/std-proposals/y9qMRNKrS2E/=
unsubscribe
> .
> To unsubscribe from this group and all its topics, send an email to
> std-proposals+unsubscribe@isocpp.org.
> To post to this group, send email to std-proposals@isocpp.org.
> To view this discussion on the web visit
> https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/7801bc16-e08=
7-43ed-ab4f-5b5f907c125f%40isocpp.org
> <https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/7801bc16-e0=
87-43ed-ab4f-5b5f907c125f%40isocpp.org?utm_medium=3Demail&utm_source=3Dfoot=
er>
> .
>

--=20
You received this message because you are subscribed to the Google Groups "=
ISO C++ Standard - Future Proposals" group.
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to std-proposals+unsubscribe@isocpp.org.
To post to this group, send email to std-proposals@isocpp.org.
To view this discussion on the web visit https://groups.google.com/a/isocpp=
..org/d/msgid/std-proposals/CADvuK0%2B1ZC60c%2B9ScSKNtu2id34E6wVnXzQ7WP61cKh=
u%2BeYARg%40mail.gmail.com.

--000000000000d94f3f05800fa4c0
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Why don&#39;t you just post your benchmark code? Why all t=
he graphs and &quot;oops here&#39;s the new graph&quot; and so on?</div><br=
><div class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Tue, J=
an 22, 2019 at 12:51 PM &lt;<a href=3D"mailto:joel.g.hemphill@gmail.com">jo=
el.g.hemphill@gmail.com</a>&gt; wrote:<br></div><blockquote class=3D"gmail_=
quote" style=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-=
style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir=
=3D"ltr">I wasn&#39;t aware of Google Benchmark before now. I will attempt =
to familiarize myself with it, so that I can get more accurate timings. In =
the meanwhile, below is my implementation of what I hope to propose. If the=
 results from Google Benchmark don&#39;t align with what I have presented, =
I sincerely apologize for the misinformation.<div><br></div><div><div class=
=3D"gmail-m_-1637743423785989120prettyprint" style=3D"background-color:rgb(=
250,250,250);border:1px solid rgb(187,187,187)"><code class=3D"gmail-m_-163=
7743423785989120prettyprint"><div class=3D"gmail-m_-1637743423785989120subp=
rettyprint"><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-163774342378=
5989120styled-by-prettify">__declspec</span><span style=3D"color:rgb(102,10=
2,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">(</span><spa=
n style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by=
-prettify">naked</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-=
m_-1637743423785989120styled-by-prettify">)</span><span style=3D"color:rgb(=
0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"> __int32 _=
_fastcall powi</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_=
-1637743423785989120styled-by-prettify">(</span><span style=3D"color:rgb(0,=
0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">__int32 </sp=
an><span style=3D"color:rgb(0,0,136)" class=3D"gmail-m_-1637743423785989120=
styled-by-prettify">base</span><span style=3D"color:rgb(102,102,0)" class=
=3D"gmail-m_-1637743423785989120styled-by-prettify">,</span><span style=3D"=
color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">=
 __int32 exponent</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail=
-m_-1637743423785989120styled-by-prettify">)</span><span style=3D"color:rgb=
(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"> </span><=
span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120st=
yled-by-prettify">{</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m=
_-1637743423785989120styled-by-prettify"><br>=C2=A0 __asm </span><span styl=
e=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-p=
rettify">{</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743=
423785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"color:rgb(=
136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">// No St=
ack Usage</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-16377434=
23785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"color:rgb(1=
36,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">/*-------=
 Prolog ---------*/</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m=
_-1637743423785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"c=
olor:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"=
>//push ebp</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-163774=
3423785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"color:rgb=
(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">//mov e=
bp, esp</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423=
785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"color:rgb(136=
,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">//sub esp, =
__LOCAL_SIZE</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-16377=
43423785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"color:rg=
b(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">/*----=
--------------------*/</span><span style=3D"color:rgb(0,0,0)" class=3D"gmai=
l-m_-1637743423785989120styled-by-prettify"><br><br><br>=C2=A0 </span><span=
 style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-b=
y-prettify">// Entry Register Values</span><span style=3D"color:rgb(0,0,0)"=
 class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=A0 </span=
><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120st=
yled-by-prettify">//------------------------</span><span style=3D"color:rgb=
(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=
=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-16377434237=
85989120styled-by-prettify">// EAX =3D UNDEFINED</span><span style=3D"color=
:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=
=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-16377434=
23785989120styled-by-prettify">// EBX =3D UNDEFINED</span><span style=3D"co=
lor:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><b=
r>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-163774=
3423785989120styled-by-prettify">// ECX =3D base</span><span style=3D"color=
:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=
=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-16377434=
23785989120styled-by-prettify">// EDX =3D exponent</span><span style=3D"col=
or:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br=
>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-1637743=
423785989120styled-by-prettify">// ESI =3D UNDEFINED</span><span style=3D"c=
olor:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><=
br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-16377=
43423785989120styled-by-prettify">// EDI =3D UNDEFINED</span><span style=3D=
"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"=
><br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-163=
7743423785989120styled-by-prettify">//------------------------</span><span =
style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-p=
rettify"><br><br><br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=
=3D"gmail-m_-1637743423785989120styled-by-prettify">// eax =3D 0</span><spa=
n style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by=
-prettify"><br>=C2=A0 xor eax</span><span style=3D"color:rgb(102,102,0)" cl=
ass=3D"gmail-m_-1637743423785989120styled-by-prettify">,</span><span style=
=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-pretti=
fy"> eax</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-16377=
43423785989120styled-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" =
class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br><br><br>=C2=A0=
 </span><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-16377434237859=
89120styled-by-prettify">// if(exponent =3D=3D 0) { return 1; }</span><span=
 style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-=
prettify"><br>=C2=A0 test edx</span><span style=3D"color:rgb(102,102,0)" cl=
ass=3D"gmail-m_-1637743423785989120styled-by-prettify">,</span><span style=
=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-pretti=
fy"> edx</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-16377=
43423785989120styled-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" =
class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=A0 jnz if_=
zero_exp</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-16377=
43423785989120styled-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" =
class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=A0 inc eax=
</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785=
989120styled-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" class=3D=
"gmail-m_-1637743423785989120styled-by-prettify"> </span><span style=3D"col=
or:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">/=
/ Set eax to 1</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-163=
7743423785989120styled-by-prettify"><br>=C2=A0 jmp powi_exit</span><span st=
yle=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by=
-prettify">;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-16377=
43423785989120styled-by-prettify"><br>if_zero_exp</span><span style=3D"colo=
r:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">=
:</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989=
120styled-by-prettify"><br>=C2=A0<br>=C2=A0 </span><span style=3D"color:rgb=
(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">// if(b=
ase =3D=3D 0) { return 0; }</span><span style=3D"color:rgb(0,0,0)" class=3D=
"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=A0 test ecx</span>=
<span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120s=
tyled-by-prettify">,</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-=
m_-1637743423785989120styled-by-prettify"> ecx</span><span style=3D"color:r=
gb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">;</=
span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120=
styled-by-prettify"><br>=C2=A0 jz powi_exit</span><span style=3D"color:rgb(=
102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">;</spa=
n><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120sty=
led-by-prettify"><br><br><br>=C2=A0 </span><span style=3D"color:rgb(136,0,0=
)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">// ebx =3D base=
</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-16377434237859891=
20styled-by-prettify"><br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" =
class=3D"gmail-m_-1637743423785989120styled-by-prettify">// ecx =3D exponen=
t</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989=
120styled-by-prettify"><br>=C2=A0 mov ebx</span><span style=3D"color:rgb(10=
2,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">,</span>=
<span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120style=
d-by-prettify"> ecx</span><span style=3D"color:rgb(102,102,0)" class=3D"gma=
il-m_-1637743423785989120styled-by-prettify">;</span><span style=3D"color:r=
gb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=
=A0 mov ecx</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-16=
37743423785989120styled-by-prettify">,</span><span style=3D"color:rgb(0,0,0=
)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"> edx</span><spa=
n style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120style=
d-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1=
637743423785989120styled-by-prettify"><br><br><br>=C2=A0<br>=C2=A0 </span><=
span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styl=
ed-by-prettify">// ecx =3D abs(exponent)</span><span style=3D"color:rgb(0,0=
,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=A0 </=
span><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-16377434237859891=
20styled-by-prettify">// edx =3D sign(exponent)</span><span style=3D"color:=
rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=
=C2=A0 sar edx</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_=
-1637743423785989120styled-by-prettify">,</span><span style=3D"color:rgb(0,=
0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"> </span><spa=
n style=3D"color:rgb(0,102,102)" class=3D"gmail-m_-1637743423785989120style=
d-by-prettify">31</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail=
-m_-1637743423785989120styled-by-prettify">;</span><span style=3D"color:rgb=
(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=
=A0 xor ecx</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-16=
37743423785989120styled-by-prettify">,</span><span style=3D"color:rgb(0,0,0=
)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"> edx</span><spa=
n style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120style=
d-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1=
637743423785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"colo=
r:rgb(0,0,136)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">su=
b</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989=
120styled-by-prettify"> ecx</span><span style=3D"color:rgb(102,102,0)" clas=
s=3D"gmail-m_-1637743423785989120styled-by-prettify">,</span><span style=3D=
"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"=
> edx</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-16377434=
23785989120styled-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" cla=
ss=3D"gmail-m_-1637743423785989120styled-by-prettify"><br><br><br>=C2=A0 </=
span><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-16377434237859891=
20styled-by-prettify">// Create a copy of the base, and move it to a tempor=
ary register</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-16377=
43423785989120styled-by-prettify"><br>=C2=A0 mov esi</span><span style=3D"c=
olor:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettif=
y">,</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785=
989120styled-by-prettify"> ebx</span><span style=3D"color:rgb(102,102,0)" c=
lass=3D"gmail-m_-1637743423785989120styled-by-prettify">;</span><span style=
=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-pretti=
fy"><br>=C2=A0<br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D=
"gmail-m_-1637743423785989120styled-by-prettify">/* find abs(base) */</span=
><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styl=
ed-by-prettify"><br>=C2=A0 mov eax</span><span style=3D"color:rgb(102,102,0=
)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">,</span><span s=
tyle=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-pr=
ettify"> ebx</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1=
637743423785989120styled-by-prettify">;</span><span style=3D"color:rgb(0,0,=
0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"> </span><span =
style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by=
-prettify">// Copy the base to the accumulator</span><span style=3D"color:r=
gb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=
=A0 sar eax</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-16=
37743423785989120styled-by-prettify">,</span><span style=3D"color:rgb(0,0,0=
)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"> </span><span s=
tyle=3D"color:rgb(0,102,102)" class=3D"gmail-m_-1637743423785989120styled-b=
y-prettify">31</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_=
-1637743423785989120styled-by-prettify">;</span><span style=3D"color:rgb(0,=
0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"> =C2=A0</spa=
n><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120s=
tyled-by-prettify">// Fill with sign bit</span><span style=3D"color:rgb(0,0=
,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=A0 xo=
r ebx</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-16377434=
23785989120styled-by-prettify">,</span><span style=3D"color:rgb(0,0,0)" cla=
ss=3D"gmail-m_-1637743423785989120styled-by-prettify"> eax</span><span styl=
e=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-p=
rettify">;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743=
423785989120styled-by-prettify"> </span><span style=3D"color:rgb(136,0,0)" =
class=3D"gmail-m_-1637743423785989120styled-by-prettify">// Not the value, =
if sign bit is set</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_=
-1637743423785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"co=
lor:rgb(0,0,136)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">=
sub</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-16377434237859=
89120styled-by-prettify"> ebx</span><span style=3D"color:rgb(102,102,0)" cl=
ass=3D"gmail-m_-1637743423785989120styled-by-prettify">,</span><span style=
=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-pretti=
fy"> eax</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-16377=
43423785989120styled-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" =
class=3D"gmail-m_-1637743423785989120styled-by-prettify"> </span><span styl=
e=3D"color:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-pre=
ttify">// Subtract the sign bit, giving the absolute value</span><span styl=
e=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prett=
ify"><br>=C2=A0<br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=
=3D"gmail-m_-1637743423785989120styled-by-prettify">// Return the copy to t=
he accumulator</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-163=
7743423785989120styled-by-prettify"><br>=C2=A0 mov eax</span><span style=3D=
"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-prett=
ify">,</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-16377434237=
85989120styled-by-prettify"> esi</span><span style=3D"color:rgb(102,102,0)"=
 class=3D"gmail-m_-1637743423785989120styled-by-prettify">;</span><span sty=
le=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-pret=
tify"><br><br><br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D=
"gmail-m_-1637743423785989120styled-by-prettify">// EAX =3D base</span><spa=
n style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by=
-prettify"><br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D"gm=
ail-m_-1637743423785989120styled-by-prettify">// EBX =3D abs(base)</span><s=
pan style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-=
by-prettify"><br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D"=
gmail-m_-1637743423785989120styled-by-prettify">// ECX =3D abs(exponent)</s=
pan><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120s=
tyled-by-prettify"><br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" cla=
ss=3D"gmail-m_-1637743423785989120styled-by-prettify">// EDX =3D sign(expon=
ent)</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785=
989120styled-by-prettify"><br><br><br>=C2=A0 </span><span style=3D"color:rg=
b(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">// if =
exponent is negative</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-=
m_-1637743423785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"=
color:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify=
">/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D*/</span><span style=3D"color:rgb(0,0,0)" class=
=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=A0 test edx</sp=
an><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-16377434237859891=
20styled-by-prettify">,</span><span style=3D"color:rgb(0,0,0)" class=3D"gma=
il-m_-1637743423785989120styled-by-prettify"> edx</span><span style=3D"colo=
r:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">=
;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989=
120styled-by-prettify"><br>=C2=A0 jz if_exp_sign_eq_0</span><span style=3D"=
color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-pretti=
fy">;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-163774342378=
5989120styled-by-prettify"><br><br><br>=C2=A0 </span><span style=3D"color:r=
gb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">// if=
 abs(base) =3D=3D 1</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m=
_-1637743423785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"c=
olor:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"=
>/*----------------------------*/</span><span style=3D"color:rgb(0,0,0)" cl=
ass=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=A0 cmp ebx</=
span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-163774342378598=
9120styled-by-prettify">,</span><span style=3D"color:rgb(0,0,0)" class=3D"g=
mail-m_-1637743423785989120styled-by-prettify"> </span><span style=3D"color=
:rgb(0,102,102)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">1=
</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785=
989120styled-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" class=3D=
"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=A0 jg if_base_gt_1=
</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785=
989120styled-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" class=3D=
"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=A0 </span><span st=
yle=3D"color:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-p=
rettify">// ecx =3D exponent &amp; 1</span><span style=3D"color:rgb(0,0,0)"=
 class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=A0 </span=
><span style=3D"color:rgb(0,0,136)" class=3D"gmail-m_-1637743423785989120st=
yled-by-prettify">and</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail=
-m_-1637743423785989120styled-by-prettify"> ecx</span><span style=3D"color:=
rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">,<=
/span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-163774342378598912=
0styled-by-prettify"> ebx</span><span style=3D"color:rgb(102,102,0)" class=
=3D"gmail-m_-1637743423785989120styled-by-prettify">;</span><span style=3D"=
color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">=
<br>=C2=A0<br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D"gma=
il-m_-1637743423785989120styled-by-prettify">// eax =3D exponent &amp; 1 ? =
(base &lt; 0 ? -1 : 1) : 0</span><span style=3D"color:rgb(0,0,0)" class=3D"=
gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=A0 imul ecx</span><=
span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120st=
yled-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m=
_-1637743423785989120styled-by-prettify"><br><br><br>=C2=A0 </span><span st=
yle=3D"color:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-p=
rettify">// ecx =3D exponent &amp; 1 ? 0 : 1</span><span style=3D"color:rgb=
(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=
=A0 xor ecx</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-16=
37743423785989120styled-by-prettify">,</span><span style=3D"color:rgb(0,0,0=
)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"> ebx</span><spa=
n style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120style=
d-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1=
637743423785989120styled-by-prettify"><br><br><br>=C2=A0 </span><span style=
=3D"color:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-pret=
tify">// eax =3D exponent &amp; 1 ? (base &lt; 0 ? -1 : 1) : 1</span><span =
style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-p=
rettify"><br>=C2=A0 add eax</span><span style=3D"color:rgb(102,102,0)" clas=
s=3D"gmail-m_-1637743423785989120styled-by-prettify">,</span><span style=3D=
"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"=
> ecx</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-16377434=
23785989120styled-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" cla=
ss=3D"gmail-m_-1637743423785989120styled-by-prettify"><br><br><br>=C2=A0 </=
span><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-16377434237859891=
20styled-by-prettify">// Return exponent &amp; 1 ? (base &lt; 0 ? -1 : 1) :=
 1</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-163774342378598=
9120styled-by-prettify"><br>=C2=A0 jmp powi_exit</span><span style=3D"color=
:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">;=
</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-16377434237859891=
20styled-by-prettify"><br>if_base_gt_1</span><span style=3D"color:rgb(102,1=
02,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">:</span><sp=
an style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-b=
y-prettify"><br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D"g=
mail-m_-1637743423785989120styled-by-prettify">/*--------------------------=
--*/</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785=
989120styled-by-prettify"><br>=C2=A0<br>=C2=A0 </span><span style=3D"color:=
rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">// R=
eturn 0</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423=
785989120styled-by-prettify"><br>=C2=A0 xor eax</span><span style=3D"color:=
rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">,<=
/span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-163774342378598912=
0styled-by-prettify"> eax</span><span style=3D"color:rgb(102,102,0)" class=
=3D"gmail-m_-1637743423785989120styled-by-prettify">;</span><span style=3D"=
color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">=
<br>=C2=A0 jmp powi_exit</span><span style=3D"color:rgb(102,102,0)" class=
=3D"gmail-m_-1637743423785989120styled-by-prettify">;</span><span style=3D"=
color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">=
<br><br><br>if_exp_sign_eq_0</span><span style=3D"color:rgb(102,102,0)" cla=
ss=3D"gmail-m_-1637743423785989120styled-by-prettify">:</span><span style=
=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-pretti=
fy"><br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-=
1637743423785989120styled-by-prettify">/*=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D*/</span><sp=
an style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-b=
y-prettify"><br><br><br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" cl=
ass=3D"gmail-m_-1637743423785989120styled-by-prettify">/* if exponent =3D=
=3D 1, return base */</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail=
-m_-1637743423785989120styled-by-prettify"><br>=C2=A0 dec ecx</span><span s=
tyle=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-b=
y-prettify">;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637=
743423785989120styled-by-prettify"><br>=C2=A0 jz powi_exit</span><span styl=
e=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-p=
rettify">;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743=
423785989120styled-by-prettify"><br><br><br>=C2=A0 </span><span style=3D"co=
lor:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">=
// If base =3D=3D 2</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m=
_-1637743423785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"c=
olor:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"=
>//cmp ebx, 2;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-163=
7743423785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"color:=
rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">//jn=
e if_base_2;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-16377=
43423785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"color:rg=
b(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">// sal=
 eax, cl;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-16377434=
23785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"color:rgb(1=
36,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">// ret;</=
span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120=
styled-by-prettify"><br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" cl=
ass=3D"gmail-m_-1637743423785989120styled-by-prettify">//if_base_2:</span><=
span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled=
-by-prettify"><br><br><br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" =
class=3D"gmail-m_-1637743423785989120styled-by-prettify">/* Exponentiate th=
e multiplication */</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m=
_-1637743423785989120styled-by-prettify"><br>=C2=A0 mov ebx</span><span sty=
le=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-=
prettify">,</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-163774=
3423785989120styled-by-prettify"> eax</span><span style=3D"color:rgb(102,10=
2,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">;</span><spa=
n style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by=
-prettify"><br>multiply</span><span style=3D"color:rgb(102,102,0)" class=3D=
"gmail-m_-1637743423785989120styled-by-prettify">:</span><span style=3D"col=
or:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br=
>=C2=A0 shr ecx</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m=
_-1637743423785989120styled-by-prettify">,</span><span style=3D"color:rgb(0=
,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"> </span><sp=
an style=3D"color:rgb(0,102,102)" class=3D"gmail-m_-1637743423785989120styl=
ed-by-prettify">1</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail=
-m_-1637743423785989120styled-by-prettify">;</span><span style=3D"color:rgb=
(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"> =C2=A0 =
=C2=A0</span><span style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-163774342=
3785989120styled-by-prettify">// Shift and check the first bit of the loop =
counter</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423=
785989120styled-by-prettify"><br>=C2=A0 jnc noMulByEBX<br>=C2=A0 imul ebx</=
span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-163774342378598=
9120styled-by-prettify">;</span><span style=3D"color:rgb(0,0,0)" class=3D"g=
mail-m_-1637743423785989120styled-by-prettify"> =C2=A0</span><span style=3D=
"color:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettif=
y">// Multiply by the current multiplier</span><span style=3D"color:rgb(0,0=
,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>noMulByEB=
X</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-163774342378=
5989120styled-by-prettify">:</span><span style=3D"color:rgb(0,0,0)" class=
=3D"gmail-m_-1637743423785989120styled-by-prettify"><br>=C2=A0 imul ebx</sp=
an><span style=3D"color:rgb(102,102,0)" class=3D"gmail-m_-16377434237859891=
20styled-by-prettify">,</span><span style=3D"color:rgb(0,0,0)" class=3D"gma=
il-m_-1637743423785989120styled-by-prettify"> ebx</span><span style=3D"colo=
r:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">=
;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989=
120styled-by-prettify"> </span><span style=3D"color:rgb(136,0,0)" class=3D"=
gmail-m_-1637743423785989120styled-by-prettify">// Square the multiplier</s=
pan><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120s=
tyled-by-prettify"><br>=C2=A0 test ecx</span><span style=3D"color:rgb(102,1=
02,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">,</span><sp=
an style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-b=
y-prettify"> ecx</span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-=
m_-1637743423785989120styled-by-prettify">;</span><span style=3D"color:rgb(=
0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"> </span><s=
pan style=3D"color:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120style=
d-by-prettify">// Test if this was the last itteration</span><span style=3D=
"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"=
><br>=C2=A0 jnz multiply</span><span style=3D"color:rgb(102,102,0)" class=
=3D"gmail-m_-1637743423785989120styled-by-prettify">;</span><span style=3D"=
color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">=
<br><br><br>=C2=A0 </span><span style=3D"color:rgb(136,0,0)" class=3D"gmail=
-m_-1637743423785989120styled-by-prettify">/* Exit the function, returning =
the value of eax */</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m=
_-1637743423785989120styled-by-prettify"><br>powi_exit </span><span style=
=3D"color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-pr=
ettify">:</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-16377434=
23785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"color:rgb(1=
36,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">// No sta=
ck usage</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-163774342=
3785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"color:rgb(13=
6,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">/*------- =
Epilog ---------*/</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_=
-1637743423785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"co=
lor:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">=
//mov esp, ebp;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-16=
37743423785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"color=
:rgb(136,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">//p=
op ebp;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423=
785989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"color:rgb(136=
,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">/*---------=
---------------*/</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-=
1637743423785989120styled-by-prettify"><br>=C2=A0 ret</span><span style=3D"=
color:rgb(102,102,0)" class=3D"gmail-m_-1637743423785989120styled-by-pretti=
fy">;</span><span style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-163774342378=
5989120styled-by-prettify"><br>=C2=A0 </span><span style=3D"color:rgb(102,1=
02,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify">}</span><sp=
an style=3D"color:rgb(0,0,0)" class=3D"gmail-m_-1637743423785989120styled-b=
y-prettify"><br></span><span style=3D"color:rgb(102,102,0)" class=3D"gmail-=
m_-1637743423785989120styled-by-prettify">}</span><span style=3D"color:rgb(=
0,0,0)" class=3D"gmail-m_-1637743423785989120styled-by-prettify"><br></span=
></div></code></div><br><br>On Friday, January 18, 2019 at 10:59:21 PM UTC-=
8, Arthur O&#39;Dwyer wrote:<blockquote class=3D"gmail_quote" style=3D"marg=
in:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-l=
eft-color:rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"l=
tr">On Fri, Jan 18, 2019 at 8:12 PM &lt;<a rel=3D"nofollow">joel.g....@gmai=
l.com</a>&gt; wrote:<br></div><div class=3D"gmail_quote"><blockquote class=
=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left-width:1px;bo=
rder-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">=
<div dir=3D"ltr">The case you pointed out of using the double-type of the r=
eturn for &#39;pow(int, int)&#39; would be a major concern. Perhaps a worka=
round would be the requirement of an explicit template? i.e. &quot;double x=
 =3D std::pow(10, 20);&quot; would use overload 7, whereas &quot;std::pow&l=
t;int, int&gt;(10, 20)&quot; would return int? Alternatively, as Jake Arkin=
stall suggested, a new syntax for &#39;pow&#39; as &#39;power&#39; might be=
 in order, in which case, such contingencies wouldn&#39;t be as large a con=
cern. I would also argue that the above code segment is poor practice, as i=
t is relying upon the pow function to convert the two integers to doubles. =
More explicit typing would be preferred in most coding environments. Anothe=
r solution, as is implemented with powl and powf, is to use a single-letter=
 abbreviation to explicitly define the types used. i.e. powi.<div><br></div=
><div>As for the graph; I mentioned in a reply to my original posting that =
I have since found an issue with the testing method I used for graphing the=
 execution times for pow and powi. I have since done other tests as shown b=
elow [avg. of 20000 runs for powi, and 500 for pow (since the execution is =
longer, I decided to neglect the sample-count somewhat)]:</div><div><br></d=
iv><p style=3D"text-align:left;clear:both"><img src=3D"https://groups.googl=
e.com/a/isocpp.org/group/std-proposals/attach/146b13439f6332/Untitled2.png?=
part=3D0.1&amp;view=3D1&amp;authuser=3D2" alt=3D"Untitled2.png" width=3D"32=
0" height=3D"183" style=3D"margin-left: 1em; margin-right: 1em;"></p><p sty=
le=3D"text-align:left;clear:both">As you can see, powi does experience a gr=
adual increase in execution length with the increasing exponents (since it =
needs to do at worst [if an implementation were to use a simple linear appr=
oach, O(n) multiplications]).<br></p></div></blockquote><div>But really O(l=
g n) multiplications, right?</div><div>That graph looks a lot better (flatt=
er), but I&#39;d still have to see the code before I believe it. You say yo=
ur data was</div><div><br></div><div>&gt; gathered using &quot;std::chrono:=
:high_resolution_clock::now()&quot; surrounding for-loops executing the fun=
ctions</div><div><br></div><div>which pointedly omits any reference to e.g.=
 <a href=3D"https://github.com/google/benchmark" rel=3D"nofollow" target=3D=
"_blank">Google Benchmark</a> or ClobberMemory/DoNotOptimize. Which suggest=
s that your benchmark might not have been measuring anything meaningful.</d=
iv><div><br></div><div>=E2=80=93Arthur</div></div></div>
</blockquote></div></div>

<p></p>

-- <br>
You received this message because you are subscribed to a topic in the Goog=
le Groups &quot;ISO C++ Standard - Future Proposals&quot; group.<br>
To unsubscribe from this topic, visit <a href=3D"https://groups.google.com/=
a/isocpp.org/d/topic/std-proposals/y9qMRNKrS2E/unsubscribe" target=3D"_blan=
k">https://groups.google.com/a/isocpp.org/d/topic/std-proposals/y9qMRNKrS2E=
/unsubscribe</a>.<br>
To unsubscribe from this group and all its topics, send an email to <a href=
=3D"mailto:std-proposals+unsubscribe@isocpp.org" target=3D"_blank">std-prop=
osals+unsubscribe@isocpp.org</a>.<br>
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org" target=3D"_blank">std-proposals@isocpp.org</a>.<br>
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/7801bc16-e087-43ed-ab4f-5b5f907c125f%=
40isocpp.org?utm_medium=3Demail&amp;utm_source=3Dfooter" target=3D"_blank">=
https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/7801bc16-e087-=
43ed-ab4f-5b5f907c125f%40isocpp.org</a>.<br>
</blockquote></div>

<p></p>

-- <br />
You received this message because you are subscribed to the Google Groups &=
quot;ISO C++ Standard - Future Proposals&quot; group.<br />
To unsubscribe from this group and stop receiving emails from it, send an e=
mail to <a href=3D"mailto:std-proposals+unsubscribe@isocpp.org">std-proposa=
ls+unsubscribe@isocpp.org</a>.<br />
To post to this group, send email to <a href=3D"mailto:std-proposals@isocpp=
..org">std-proposals@isocpp.org</a>.<br />
To view this discussion on the web visit <a href=3D"https://groups.google.c=
om/a/isocpp.org/d/msgid/std-proposals/CADvuK0%2B1ZC60c%2B9ScSKNtu2id34E6wVn=
XzQ7WP61cKhu%2BeYARg%40mail.gmail.com?utm_medium=3Demail&utm_source=3Dfoote=
r">https://groups.google.com/a/isocpp.org/d/msgid/std-proposals/CADvuK0%2B1=
ZC60c%2B9ScSKNtu2id34E6wVnXzQ7WP61cKhu%2BeYARg%40mail.gmail.com</a>.<br />

--000000000000d94f3f05800fa4c0--

.
