Files
Digital-Research-Source-Code/CPM OPERATING SYSTEMS/CPM 68K/1.2 SOURCE/7/FFPPWR.S
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

83 lines
3.9 KiB
ArmAsm
Raw 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 fast floating point power (ffppwr)
***************************************
* (c) copyright 1981 by motorola inc. *
***************************************
*************************************************
* ffppwr *
* fast floating point power function *
* *
* input: d6 - floating point exponent value *
* d7 - floating point argument value *
* *
* output: d7 - result of the value taken to *
* the power specified *
* *
* all registers but d7 are transparent *
* *
* code size: 36 bytes stack work: 42 bytes *
* *
* calls subroutines: ffplog, ffpexp and ffpmul2 *
* *
* condition codes: *
* z - set if the result is zero *
* n - cleared *
* v - set if overflow occurred or base *
* value argument was negative *
* c - undefined *
* x - undefined *
* *
* notes: *
* 1) a negative base value will force the use*
* if its absolute value. the "v" bit will*
* be set upon function return. *
* 2) if the result overflows then the *
* maximum size value is returned with the *
* "v" bit set in the condition code. *
* 3) spot checks show at least six digit *
* precision for 80 percent of the cases. *
* *
* time: (8mhz no wait states assumed) *
* *
* the timing is very data sensitive with *
* test samples ranging from 720 to *
* 1206 microseconds *
* *
*************************************************
page
ffppwr idnt 1,1 ffp power
opt pcs
section 9
xdef ffppwr entry point
xref ffplog,ffpexp exponent and log functions
xref ffpmul2 multiply function
xref ffpcpyrt copyright stub
*****************
* power entry *
*****************
* take the logorithm of the base value
ffppwr tst.b d7 ? negative base value
bpl.s fpppos branch positive
and.b #$7f,d7 take absolute value
bsr.s fpppos find result using that
* or.b #$02,ccr force "v" bit on for negative argument
dc.l $003c0002 *****assembler error*****
rts return to caller
fpppos jsr ffplog find log of the number to be used
movem.l d3-d5,-(sp) save multiply work registers
jsr ffpmul2 multiply by the exponent
movem.l (sp)+,d3-d5 restore multiply work registers
* if overflowed, ffpexp will set "v" bit and return desired result anyway
jmp ffpexp result is exponent
end
 end
 end