diff options
Diffstat (limited to 'libgcc')
-rw-r--r-- | libgcc/ChangeLog | 8 | ||||
-rw-r--r-- | libgcc/config/or1k/lib1funcs.S | 6 |
2 files changed, 11 insertions, 3 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index d5fb54b..0a449a7 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,11 @@ +2019-07-22 Stafford Horne <shorne@gmail.com> + + PR target/90362 + * config/or1k/lib1funcs.S (__udivsi3): Change l.sfeqi + to l.sfeq and l.sfltsi to l.sflts equivalents as the immediate + instructions are not available on every processor. Change a + l.bnf to l.bf to fix logic issue. + 2019-07-04 Iain Sandoe <iain@sandoe.co.uk> * config.host: Remove reference to t-darwin8. diff --git a/libgcc/config/or1k/lib1funcs.S b/libgcc/config/or1k/lib1funcs.S index d210392..6d05897 100644 --- a/libgcc/config/or1k/lib1funcs.S +++ b/libgcc/config/or1k/lib1funcs.S @@ -68,18 +68,18 @@ __udivmodsi3_internal: is not clobbered by this routine, and use that as to save a return address without creating a stack frame. */ - l.sfeqi r4, 0 /* division by zero; return 0. */ + l.sfeq r4, r0 /* division by zero; return 0. */ l.ori r11, r0, 0 /* initial quotient */ l.bf 9f l.ori r12, r3, 0 /* initial remainder */ /* Given X/Y, shift Y left until Y >= X. */ l.ori r6, r0, 1 /* mask = 1 */ -1: l.sfltsi r4, 0 /* y has msb set */ +1: l.sflts r4, r0 /* y has msb set */ l.bf 2f l.sfltu r4, r12 /* y < x */ l.add r4, r4, r4 /* y <<= 1 */ - l.bnf 1b + l.bf 1b l.add r6, r6, r6 /* mask <<= 1 */ /* Shift Y back to the right again, subtracting from X. */ |