[
https://issues.apache.org/jira/browse/STDCXX-335?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12471120
]
Martin Sebor commented on STDCXX-335:
-------------------------------------
Here's the IPF assembly for a similar test not involving <algorithm> compiled
and optimized with HP aCC 6.05 at +O2 (test_min_ref calls a by-reference min,
test_min_val calls a by-value min):
_Z12test_min_refii::
add r9 = 0, sp
cmp4.ge.unc p6, p0 = r32, r33
addp4 r8 = 4, r9
add r10 = 4, r9
addp4 r11 = 12, r9
nop.i 0
st4 [r8] = r32
st4 [r11] = r33
addp4 r8 = 12, r9
(p6) add r10 = 0, r8
nop.i 0
addp4 r8 = 0, r10
ld4 r8 = [r8]
nop.m 0
.restore sp
br.ret.sptk.many rp
_Z12test_min_valii::
cmp4.ge.unc p6, p0 = r32, r33
add r8 = 0, r32
(p6) add r8 = 0, r33
nop.m 0
nop.m 0
.restore sp
br.ret.sptk.many rp
> 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
>
> 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.