Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/arch/sh/lib/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  udivsi3_i4i-Os.S   Sprache: Sparc

 
/* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
 *
 * Copyright (C) 2006 Free Software Foundation, Inc.
 */


/* Moderately Space-optimized libgcc routines for the Renesas SH /
   STMicroelectronics ST40 CPUs.
   Contributed by J"orn Rennecke joern.rennecke@st.com.  */


/* Size: 186 bytes jointly for udivsi3_i4i and sdivsi3_i4i
   sh4-200 run times:
   udiv small divisor: 55 cycles
   udiv large divisor: 52 cycles
   sdiv small divisor, positive result: 59 cycles
   sdiv large divisor, positive result: 56 cycles
   sdiv small divisor, negative result: 65 cycles (*)
   sdiv large divisor, negative result: 62 cycles (*)
   (*): r2 is restored in the rts delay slot and has a lingering latency
        of two more cycles.  */

 .balign 4
 .global __udivsi3_i4i
 .global __udivsi3_i4
 .set __udivsi3_i4, __udivsi3_i4i
 .type __udivsi3_i4i, @function
 .type __sdivsi3_i4i, @function
__udivsi3_i4i:
 sts pr,r1
 mov.l r4,@-r15
 extu.w r5,r0
 cmp/eq r5,r0
 swap.w r4,r0
 shlr16 r4
 bf/s large_divisor
 div0u
 mov.l r5,@-r15
 shll16 r5
sdiv_small_divisor:
 div1 r5,r4
 bsr div6
 div1 r5,r4
 div1 r5,r4
 bsr div6
 div1 r5,r4
 xtrct r4,r0
 xtrct r0,r4
 bsr div7
 swap.w r4,r4
 div1 r5,r4
 bsr div7
 div1 r5,r4
 xtrct r4,r0
 mov.l @r15+,r5
 swap.w r0,r0
 mov.l @r15+,r4
 jmp @r1
 rotcl r0
div7:
 div1 r5,r4
div6:
             div1 r5,r4; div1 r5,r4; div1 r5,r4
 div1 r5,r4; div1 r5,r4; rts;        div1 r5,r4

divx3:
 rotcl r0
 div1 r5,r4
 rotcl r0
 div1 r5,r4
 rotcl r0
 rts
 div1 r5,r4

large_divisor:
 mov.l r5,@-r15
sdiv_large_divisor:
 xor r4,r0
 .rept 4
 rotcl r0
 bsr divx3
 div1 r5,r4
 .endr
 mov.l @r15+,r5
 mov.l @r15+,r4
 jmp @r1
 rotcl r0

 .global __sdivsi3_i4i
 .global __sdivsi3_i4
 .global __sdivsi3
 .set __sdivsi3_i4, __sdivsi3_i4i
 .set __sdivsi3, __sdivsi3_i4i
__sdivsi3_i4i:
 mov.l r4,@-r15
 cmp/pz r5
 mov.l r5,@-r15
 bt/s pos_divisor
 cmp/pz r4
 neg r5,r5
 extu.w r5,r0
 bt/s neg_result
 cmp/eq r5,r0
 neg r4,r4
pos_result:
 swap.w r4,r0
 bra sdiv_check_divisor
 sts pr,r1
pos_divisor:
 extu.w r5,r0
 bt/s pos_result
 cmp/eq r5,r0
 neg r4,r4
neg_result:
 mova negate_result,r0
 ;
 mov r0,r1
 swap.w r4,r0
 lds r2,macl
 sts pr,r2
sdiv_check_divisor:
 shlr16 r4
 bf/s sdiv_large_divisor
 div0u
 bra sdiv_small_divisor
 shll16 r5
 .balign 4
negate_result:
 neg r0,r0
 jmp @r2
 sts macl,r2

Messung V0.5
C=96 H=99 G=97

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.