[ https://issues.apache.org/jira/browse/STDCXX-335?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Martin Sebor updated STDCXX-335: -------------------------------- Fix Version/s: 4.3 Not sure we'll be able to do anything about this w/o the blessing of the committee since changing the signature of the function would be easily detectable even for fundamental types. See the test case below. Scheduled for 4.3. #include <cassert> #include <algorithm> int main () { int x = 0; int y = 2; const int &z = std::min (x, y); x = 1; assert (&z == &x); assert (z == 1); } > std::min() suboptimal > --------------------- > > Key: STDCXX-335 > URL: https://issues.apache.org/jira/browse/STDCXX-335 > Project: C++ Standard Library > Issue Type: Bug > Components: 25. Algorithms > Affects Versions: 4.1.3 > Environment: gcc 3.2.3, x86 Linux > Reporter: Mark Brown > Fix For: 4.3 > > > I don't know if it's the compiler that's generating worse code for the stdcxx > version of min or if the function is not implemented as efficiently as it > could be but the disassembly for the two functions below shows that my_min() > is one instruction shorter than test_min(): > #include <algorithm> > int test_min (int x, int y) { return std::min (x, y); } > int my_min (int x, int y) { return x < y ? x : y; } > _Z8test_minii: > pushl %ebp > movl %esp, %ebp > movl 12(%ebp), %eax > cmpl %eax, 8(%ebp) > jg .L2 > leal 8(%ebp), %eax <<< extra load? > .L4: > movl (%eax), %eax > leave > ret > _Z6my_minii: > pushl %ebp > movl %esp, %ebp > movl 12(%ebp), %eax > cmpl 8(%ebp), %eax > jle .L6 > movl 8(%ebp), %eax > .L6: > leave > ret -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.