Files
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

100 lines
4.8 KiB
ArmAsm

ttl ieee format equivalent divide (iefdiv)
***************************************
* (c) copyright 1981 by motorola inc. *
***************************************
*************************************************************
* iefdiv *
* fast floating point ieee format equivalent divide *
* *
* input: d6 - ieee format number divisor (source) *
* d7 - ieee format number dividend (destination) *
* *
* output: d7 - ieee format floating result of register d6 *
* divided into register d7 *
* *
* condition codes: *
* n - result is negative *
* z - result is zero *
* v - result is nan (not-a-number) *
* c - undefined *
* x - undefined *
* *
* all registers transparent *
* *
* maximum stack usage: 24 bytes *
* *
* result matrix: arg 2 *
* others zero infinity nan *
* arg 1 **************************************** *
* others * a * b * c * f * *
* zero * c * d * c * f * *
* infinity * b * b * d * f * *
* nan * e * e * e * f * *
* **************************************** *
* a = return divide result, overflowing to infinity, *
* underflowing to zero with proper sign *
* b = return zero with proper sign *
* c = return infinity with proper sign *
* d = return newly created nan (not-a-number) *
* e = return arg1 (nan) unchanged *
* f = return arg2 (nan) unchanged *
* *
* notes: *
* 1) see the mc68344 user's guide for a description of *
* the possible differences between the results *
* returned here versus those required by the *
* ieee standard. *
* *
*************************************************************
page
iefdiv idnt 1,1 ieee format equivalent divide
opt pcs
xdef iefdiv ieee format equivalent divide
xref iefdop double argument conversion routine
xref iefrtnan create and return nan result routine
xref ieftieee return and convert back to ieee format
xref iefrtsze return signed zero with exclusive or signs
xref iefrtie return infinity with exclusive or signs
xref ffpdiv reference fast floating point divide routine
xref ffpcpyrt copyright notice
section 9
**********************
* divide entry point *
**********************
iefdiv bsr iefdop decode both operands
bra.s iefnrm +0 branch normalized
bra.s iefrtinf +2 branch arg2 infinity
bra.s iefrtzro +4 branch arg1 infinity
* both are infinity - return a nan +6 both are infinity
bra iefrtnan return a nan for infinity into infinity
* arg1 infinity - return zero with proper sign
iefrtzro bra iefrtsze return zero with exclusive or'ed sign
* arg2 infinity but not arg1 - return infinity with proper sign
iefrtinf bra iefrtie return infinity with exclusive or'ed sign
* normalized numbers - test for zeroes
iefnrm tst.l d7 ? dividend zero (arg2)
bne.s ief2nz no, go test divisor for zero
tst.l d6 ? are both zero
bne.s iefrtzro no, just dividend - return a zero
bra iefrtnan return a nan for zero into zero
* dividend (arg2) not zero
ief2nz tst.l d6 ? divisor zero (arg1) but not dividend (arg2)
beq.s iefrtinf yes, return infinity with proper sign
* both arguments non zero and normalized - do the divide
bsr ffpdiv do fast floating point divide
beq iefrtzro if result is zero return a proper sign zero
bra ieftieee convert result back to ieee format
end