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

106 lines
5.3 KiB
ArmAsm
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 jsr 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
jmp iefrtnan return a nan for infinity into infinity
* arg1 infinity - return zero with proper sign
iefrtzro jmp iefrtsze return zero with exclusive or'ed sign
* arg2 infinity but not arg1 - return infinity with proper sign
iefrtinf jmp 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
jmp 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
jsr ffpdiv do fast floating point divide
beq iefrtzro if result is zero return a proper sign zero
jmp ieftieee convert result back to ieee format
end
e convert result back to ieee format
end
e convert result back to ieee format
end