mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 16:34:07 +00:00
88 lines
3.8 KiB
ArmAsm
88 lines
3.8 KiB
ArmAsm
ttl ieee format equivalent square root (iefsqrt)
|
|
*******************************************
|
|
* (c) copyright 1981 by motorola inc. *
|
|
*******************************************
|
|
|
|
*************************************************
|
|
* iefsqrt *
|
|
* ieee format equivalent square root *
|
|
* *
|
|
* input: *
|
|
* d7 - ieee format argument *
|
|
* *
|
|
* output: *
|
|
* d7 - ieee format square root *
|
|
* *
|
|
* condition codes: *
|
|
* *
|
|
* if the result is valid - *
|
|
* n - cleared *
|
|
* z - set if result is zero *
|
|
* v - cleared *
|
|
* c - undefined *
|
|
* x - undefined *
|
|
* *
|
|
* if the result is invalid due to a *
|
|
* negative non-zero or nan input argument- *
|
|
* n - undefined *
|
|
* z - cleared *
|
|
* v - set *
|
|
* c - undefined *
|
|
* x - undefined *
|
|
* *
|
|
* all registers are transparent *
|
|
* *
|
|
* maximum stack used: 24 bytes *
|
|
* *
|
|
* notes: *
|
|
* 1) valid results are obtained unless *
|
|
* the input argument was a negative *
|
|
* non-zero number or nan (not-a- *
|
|
* number) which can be determined by *
|
|
* the "v" bit setting in the ccr. *
|
|
* 2) see the mc68344 user's guide for *
|
|
* details on the ranges handled by *
|
|
* the fast floating point equivalent *
|
|
* routines. *
|
|
* *
|
|
*************************************************
|
|
page
|
|
iefsqrt idnt 1,1 ieee format equivalent square root
|
|
|
|
section 9
|
|
|
|
xdef iefsqrt entry point
|
|
|
|
xref ffpsqrt fast floating point square root routine
|
|
xref iefsop single operand front-end handler
|
|
xref ieftieee back-end handler to return ieee format
|
|
xref iefrtnan error handler to return a nan (not-a-number)
|
|
xref iefrtod7 return original caller's d7
|
|
xref ffpcpyrt copyright notice
|
|
|
|
*********************
|
|
* square root entry *
|
|
*********************
|
|
iefsqrt jsr iefsop convert the operand
|
|
bra.s iefnrm branch both normalized
|
|
* argument was infinity - return a nan if minus
|
|
* bmi iefrtnan return nan if it is minus infinity
|
|
bmi dobranch
|
|
jmp iefrtod7 just return input argument if plus infinity
|
|
|
|
* argument was normalized
|
|
* iefnrm bmi iefrtnan return nan for invalid negative argument
|
|
iefnrm bmi dobranch
|
|
move.l 16(sp),d5 insure was not a negative very small number
|
|
bpl.s iefsdoit branch was positive
|
|
add.l d5,d5 rid sign byte to check if was negative zero
|
|
* bne iefrtnan return nan for very small negative numbers also
|
|
bne dobranch
|
|
iefsdoit jsr ffpsqrt perform square root
|
|
jmp ieftieee and return ieee format back to caller
|
|
dobranch:
|
|
jmp iefrtnan 16-bit no MMU stuff
|
|
|
|
end
|
|
|