This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/82182] New: m68k slow code: u16/u8 division calls divsi3
- From: "cand at gmx dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 11 Sep 2017 18:02:49 +0000
- Subject: [Bug target/82182] New: m68k slow code: u16/u8 division calls divsi3
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82182
Bug ID: 82182
Summary: m68k slow code: u16/u8 division calls divsi3
Product: gcc
Version: 7.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: cand at gmx dot com
Target Milestone: ---
C:
#include <stdint.h>
uint16_t mydiv(const uint16_t a, const uint8_t b) {
return a / b;
}
uint16_t mydiv2(const uint16_t a, const uint16_t b) {
return a / b;
}
Assembly:
#NO_APP
.file "kai.c"
.globl __udivsi3
.globl __divsi3
.text
.align 2
.globl mydiv
.type mydiv, @function
mydiv:
moveq #0,%d0
move.w 6(%sp),%d0
moveq #0,%d1
move.b 11(%sp),%d1
move.l %d1,-(%sp)
move.l %d0,-(%sp)
jsr __divsi3
addq.l #8,%sp
rts
.size mydiv, .-mydiv
.align 2
.globl mydiv2
.type mydiv2, @function
mydiv2:
move.w 6(%sp),%d0
and.l #0xFFFF,%d0
divu.w 10(%sp),%d0
rts
.size mydiv2, .-mydiv2
.ident "GCC: (GNU) 7.2.0"
The hardware division is several times faster than divsi3. Further, I'm baffled
as to why gcc turns the unsigned division to signed, as udivsi3 would be faster
than divsi3.