#################################
# FPfcns.asm - floating point functions
#################################

	.data
	.align	4
aa:	.float	1.4
	.align	8
bb:	.double	2.6
cc:	.double 0.0
dd:	.double 0.0
title:	.ascii	"Floating point functions\n"
nl:	.asciiz "\n"

#################################
	.globl	main
	.text
main:
	la	$a0, title
	li	$v0, 4
	syscall

	## display aa and bb

	la	$v0, 2
	l.s	$f12, aa
	syscall
	jal	newline

	la	$v0, 3
	l.d	$f12, bb
	syscall
	jal	newline
	jal	newline

	## call fadd1, display cc

	l.s	$f2, aa
	l.d	$f4, bb
	jal	fadd1
	s.d	$f0, cc

	li	$v0, 3
	l.d	$f12, cc
	syscall
	jal	newline

	## call fadd2, display dd

	addiu	$sp, $sp, -20
	l.s	$f0, aa
	s.s	$f0, 0($sp)
	l.d	$f0, bb
	s.d	$f0, 4($sp)
	jal	fadd2
	l.d	$f0, 12($sp)
	s.d	$f0, dd
	addiu	$sp, $sp, 20

	li	$v0, 3
	l.d	$f12, dd
	syscall
	jal	newline

	la	$v0, 10
	syscall

#################################
#  fadd1:  f0 = f2 + f4
#          dbl  flt  dbl
#################################
fadd1:
	cvt.d.s	$f2, $f2
	add.d	$f0, $f2, $f4
	jr	$ra

#################################
#  fadd2(dd,aa,bb) all on stack
#################################
fadd2:
	l.s	$f2, 0($sp)
	cvt.d.s	$f2, $f2
	l.d	$f4, 4($sp)
	add.d	$f0, $f2, $f4
	s.d	$f0, 12($sp)
	jr	$ra

#################################
#  Display a newline
#################################
newline:
	la	$a0, nl
	li	$v0, 4
	syscall
	jr	$ra

#################################


