arch/parisc/math-emu/fcnvff.c
Source file repositories/reference/linux-study-clean/arch/parisc/math-emu/fcnvff.c
File Facts
- System
- Linux kernel
- Corpus path
arch/parisc/math-emu/fcnvff.c- Extension
.c- Size
- 8725 bytes
- Lines
- 297
- Domain
- Architecture Layer
- Bucket
- arch/parisc
- Inferred role
- Architecture Layer: implementation source
- Status
- source implementation candidate
Why This File Exists
CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
Dependency Surface
float.hsgl_float.hdbl_float.hcnv_float.h
Detected Declarations
function Copyrightfunction dbl_to_sgl_fcnvff
Annotated Snippet
if (Sgl_iszero_mantissa(src)) {
/*
* is infinity; want to return double infinity
*/
Dbl_setinfinity_exponentmantissa(resultp1,resultp2);
Dbl_copytoptr(resultp1,resultp2,dstptr);
return(NOEXCEPTION);
}
else {
/*
* is NaN; signaling or quiet?
*/
if (Sgl_isone_signaling(src)) {
/* trap if INVALIDTRAP enabled */
if (Is_invalidtrap_enabled())
return(INVALIDEXCEPTION);
/* make NaN quiet */
else {
Set_invalidflag();
Sgl_set_quiet(src);
}
}
/*
* NaN is quiet, return as double NaN
*/
Dbl_setinfinity_exponent(resultp1);
Sgl_to_dbl_mantissa(src,resultp1,resultp2);
Dbl_copytoptr(resultp1,resultp2,dstptr);
return(NOEXCEPTION);
}
}
/*
* Test for zero or denormalized
*/
if (src_exponent == 0) {
/*
* determine if zero or denormalized
*/
if (Sgl_isnotzero_mantissa(src)) {
/*
* is denormalized; want to normalize
*/
Sgl_clear_signexponent(src);
Sgl_leftshiftby1(src);
Sgl_normalize(src,src_exponent);
Sgl_to_dbl_exponent(src_exponent,resultp1);
Sgl_to_dbl_mantissa(src,resultp1,resultp2);
}
else {
Dbl_setzero_exponentmantissa(resultp1,resultp2);
}
Dbl_copytoptr(resultp1,resultp2,dstptr);
return(NOEXCEPTION);
}
/*
* No special cases, just complete the conversion
*/
Sgl_to_dbl_exponent(src_exponent, resultp1);
Sgl_to_dbl_mantissa(Sgl_mantissa(src), resultp1,resultp2);
Dbl_copytoptr(resultp1,resultp2,dstptr);
return(NOEXCEPTION);
}
/*
* Double Floating-point to Single Floating-point
*/
/*ARGSUSED*/
int
dbl_to_sgl_fcnvff(
dbl_floating_point *srcptr,
unsigned int *_nullptr,
sgl_floating_point *dstptr,
unsigned int *status)
{
register unsigned int srcp1, srcp2, result;
register int src_exponent, dest_exponent, dest_mantissa;
register boolean inexact = FALSE, guardbit = FALSE, stickybit = FALSE;
register boolean lsb_odd = FALSE;
boolean is_tiny = FALSE;
Dbl_copyfromptr(srcptr,srcp1,srcp2);
src_exponent = Dbl_exponent(srcp1);
Sgl_all(result) = Dbl_allp1(srcp1); /* set sign of result */
/*
* Test for NaN or infinity
*/
if (src_exponent == DBL_INFINITY_EXPONENT) {
/*
* determine if NaN or infinity
*/
Annotation
- Immediate include surface: `float.h`, `sgl_float.h`, `dbl_float.h`, `cnv_float.h`.
- Detected declarations: `function Copyright`, `function dbl_to_sgl_fcnvff`.
- Atlas domain: Architecture Layer / arch/parisc.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.