* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: sqrt.S,v 1.1 2002/08/30 11:53:44 diwil Exp $
+ * $Id: sqrt.S,v 1.1.2.1 2009/01/26 15:47:13 sb-sf Exp $
*/
+ #include "../core_common.inc"
.file "sqrt.S"
-
+
.text
.p2align 1,0
.global sqrt
tst r15
jn .Lsqrt_err
- push argsave_lo
- push argsave_hi
- push y_lo
- push y_hi
- push yprev_lo
- push yprev_hi
+#if defined(__MSP430X__)
+ XPUSHM #6, r11
+#else
+ push yprev_hi
+ push yprev_lo
+ push y_hi
+ push y_lo
+ push argsave_hi
+ push argsave_lo
+#endif
mov r14, argsave_lo
mov r15, argsave_hi
mov y_hi, r13
mov argsave_lo, r14 ; arg/y
mov argsave_hi, r15
- call #__divsf3
+ XCALL #__divsf3
mov y_lo, r12 ; +y
mov y_hi, r13
- call #__addsf3
+ XCALL #__addsf3
mov #llo(0x3f000000), r12 ; *0.5
mov #lhi(0x3f000000), r13
call #__mulsf3
mov y_lo, r14
mov y_hi, r15
- pop yprev_hi
- pop yprev_lo
- pop y_hi
- pop y_lo
- pop argsave_hi
- pop argsave_lo
- ret
+#if defined(__MSP430X__)
+ XPOPM #6, r11
+ XRET
+#elif defined(__MSP430_SAVE_PROLOGUE__)
+ br #__epilogue_restorer + 2 * 2
+#else
+ pop argsave_lo
+ pop argsave_hi
+ pop y_lo
+ pop y_hi
+ pop yprev_lo
+ pop yprev_hi
+ ret
+#endif
.Lsqrt_err:
mov #0xffff, r14