Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/arch/x86/math-emu/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 3 kB image not shown  

Quelle  reg_norm.S   Sprache: Sparc

 
/* SPDX-License-Identifier: GPL-2.0 */
/*---------------------------------------------------------------------------+
 |  reg_norm.S                                                               |
 |                                                                           |
 | Copyright (C) 1992,1993,1994,1995,1997                                    |
 |                       W. Metzenthen, 22 Parker St, Ormond, Vic 3163,      |
 |                       Australia.  E-mail billm@suburbia.net               |
 |                                                                           |
 | Normalize the value in a FPU_REG.                                         |
 |                                                                           |
 | Call from C as:                                                           |
 |    int FPU_normalize(FPU_REG *n)                                          |
 |                                                                           |
 |    int FPU_normalize_nuo(FPU_REG *n)                                      |
 |                                                                           |
 |    Return value is the tag of the answer, or-ed with FPU_Exception if     |
 |    one was raised, or -1 on internal error.                               |
 |                                                                           |
 +---------------------------------------------------------------------------*/


#include "fpu_emu.h"


.text
SYM_FUNC_START(FPU_normalize)
 pushl %ebp
 movl %esp,%ebp
 pushl %ebx

 movl PARAM1,%ebx

 movl SIGH(%ebx),%edx
 movl SIGL(%ebx),%eax

 orl %edx,%edx /* ms bits */
 js L_done  /* Already normalized */
 jnz L_shift_1 /* Shift left 1 - 31 bits */

 orl %eax,%eax
 jz L_zero  /* The contents are zero */

 movl %eax,%edx
 xorl %eax,%eax
 subw $32,EXP(%ebx) /* This can cause an underflow */

/* We need to shift left by 1 - 31 bits */
L_shift_1:
 bsrl %edx,%ecx /* get the required shift in %ecx */
 subl $31,%ecx
 negl %ecx
 shld %cl,%eax,%edx
 shl %cl,%eax
 subw %cx,EXP(%ebx) /* This can cause an underflow */

 movl %edx,SIGH(%ebx)
 movl %eax,SIGL(%ebx)

L_done:
 cmpw EXP_OVER,EXP(%ebx)
 jge L_overflow

 cmpw EXP_UNDER,EXP(%ebx)
 jle L_underflow

L_exit_valid:
 movl TAG_Valid,%eax

 /* Convert the exponent to 80x87 form. */
 addw EXTENDED_Ebias,EXP(%ebx)
 andw $0x7fff,EXP(%ebx)

L_exit:
 popl %ebx
 leave
 RET


L_zero:
 movw $0,EXP(%ebx)
 movl TAG_Zero,%eax
 jmp L_exit

L_underflow:
 /* Convert the exponent to 80x87 form. */
 addw EXTENDED_Ebias,EXP(%ebx)
 push %ebx
 call arith_underflow
 pop %ebx
 jmp L_exit

L_overflow:
 /* Convert the exponent to 80x87 form. */
 addw EXTENDED_Ebias,EXP(%ebx)
 push %ebx
 call arith_overflow
 pop %ebx
 jmp L_exit
SYM_FUNC_END(FPU_normalize)



/* Normalise without reporting underflow or overflow */
SYM_FUNC_START(FPU_normalize_nuo)
 pushl %ebp
 movl %esp,%ebp
 pushl %ebx

 movl PARAM1,%ebx

 movl SIGH(%ebx),%edx
 movl SIGL(%ebx),%eax

 orl %edx,%edx /* ms bits */
 js L_exit_nuo_valid /* Already normalized */
 jnz L_nuo_shift_1 /* Shift left 1 - 31 bits */

 orl %eax,%eax
 jz L_exit_nuo_zero  /* The contents are zero */

 movl %eax,%edx
 xorl %eax,%eax
 subw $32,EXP(%ebx) /* This can cause an underflow */

/* We need to shift left by 1 - 31 bits */
L_nuo_shift_1:
 bsrl %edx,%ecx /* get the required shift in %ecx */
 subl $31,%ecx
 negl %ecx
 shld %cl,%eax,%edx
 shl %cl,%eax
 subw %cx,EXP(%ebx) /* This can cause an underflow */

 movl %edx,SIGH(%ebx)
 movl %eax,SIGL(%ebx)

L_exit_nuo_valid:
 movl TAG_Valid,%eax

 popl %ebx
 leave
 RET

L_exit_nuo_zero:
 movl TAG_Zero,%eax
 movw EXP_UNDER,EXP(%ebx)

 popl %ebx
 leave
 RET
SYM_FUNC_END(FPU_normalize_nuo)

Messung V0.5
C=92 H=76 G=83

¤ Dauer der Verarbeitung: 0.4 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.