
| Key: |
STDCXX-335
|
| Type: |
Bug
|
| Status: |
Open
|
| Priority: |
Major
|
| Assignee: |
Unassigned
|
| Reporter: |
Mark Brown
|
| Votes: |
0
|
| Watchers: |
0
|
|
If you were logged in you would be able to see more operations.
|
|
|
|
Time Tracking:
|
|
Original Estimate:
|
4h
|
|
|
Remaining Estimate:
|
4h
|
|
|
Time Spent:
|
Not Specified
|
|
|
|
|
Environment:
|
gcc 3.2.3, x86 Linux
|
|
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
|
|
Description
|
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 |
Show » |
| No work has yet been logged on this issue.
|
|