.data
	msga: .asciiz "a = "
	msgb: .asciiz "b = "
	msgc: .asciiz "c = "
	msgd: .asciiz "delta = "
	msgerr: .asciiz "a ou b doit etre non-nuls\n"
	msgfd: .asciiz "Il y a une solution (l'equation est de premier degre):\nX = "
	msgsd: .asciiz "\nIl y a une solution double:\nX0 = "
	msgsr: .asciiz "\nIl y a deux solutions reels:\nX1 = "
	msgsc: .asciiz "\nIl y a deux solutions complexes:\nX1 = "
	msgs2: .asciiz "\nX2 = "
	plus_img: .asciiz " + i"
	minus_img: .asciiz " - i"
	lf: .asciiz "\n"
.text
.globl main
main:
	la $a0, msga
	li $v0, 4
	syscall
	li $v0, 6
	syscall
	mov.s $f1, $f0            # f1 = a
	la $a0, msgb
	li $v0, 4
	syscall
	li $v0, 6
	syscall
	mov.s $f2, $f0            # f2 = b
	la $a0, msgc
	li $v0, 4
	syscall
	li $v0, 6
	syscall
	mov.s $f3, $f0            # f3 = c
	
	sub.s $f7, $f7, $f7       # f7 = f7-f7 = 0.0
	
	c.eq.s $f1, $f7
	bc1t first_degree
	
	div.s $f8, $f1, $f1       # f8 = f1/f1 = 1.0
	add.s $f9, $f8, $f8       # f9 = f8+f8 = 2.0
	add.s $f10, $f9, $f9      # f10 = f9+f9 = 4.0
	
	mul.s $f3, $f3, $f1       # f3 = f3*f1 = c*a
	mul.s $f3, $f3, $f10      # f3 = f3*f10 = c*a*4
	mul.s $f5, $f2, $f2       # f5 = f2*f2 = b*b
	sub.s $f4, $f5, $f3       # f4 = f5-f3 = b*b-c*a*4 = delta
	
	la $a0, msgd
	li $v0, 4
	syscall
	mov.s $f12, $f4
	li $v0, 2
	syscall
	
	mul.s $f1, $f1, $f9       # f1 = f1*f9 = a*2
	div.s $f2, $f2, $f1       # f2 = f2/f1 = b/(a*2)
	sub.s $f2, $f7, $f2       # f2 = f7-f2 = -b/(a*2)
	
	c.eq.s $f4, $f7
	bc1t solution_doublee
	
	mov.s $f11, $f4           # f11 = f4 = delta
	
	abs.s $f4, $f4            # f4 = abs(f4) = |f4|
	sqrt.s $f8, $f4           # f8 = sqrt(delta)
	div.s $f8, $f8, $f1       # f8 = f8/f1 = sqrt(delta)/(2*a)
	abs.s $f9, $f8            # f9 = abs(f8) = |sqrt(delta)/(2*a)|
	c.lt.s $f11, $f7
	bc1t solutions_complexe
	la $a0, msgsr
	li $v0, 4
	syscall
	add.s $f3, $f2, $f8       # f3 = f2+f8 = -b/(2*b) + sqrt(delta)/(2*b)
	sub.s $f4, $f2, $f8       # f3 = f2+f8 = -b/(2*b) - sqrt(delta)/(2*b)
	mov.s $f12, $f3
	li $v0, 2
	syscall
	la $a0, msgs2
	li $v0, 4
	syscall
	mov.s $f12, $f4
	li $v0, 2
	syscall
	j exit
	solutions_complexe:
		la $a0, msgsc
		li $v0, 4
		syscall
		mov.s $f12, $f2
		li $v0, 2
		syscall
		
		la $a0, minus_img
		c.lt.s $f9, $f7
		bc1t print_s1_img
		la $a0, plus_img
		print_s1_img:
			li $v0, 4
			syscall
		mov.s $f12, $f9
		li $v0, 2
		syscall
		
		la $a0, msgs2
		li $v0, 4
		syscall
		mov.s $f12, $f2
		li $v0, 2
		syscall
		
		la $a0, plus_img
		bc1t print_s2_img
		la $a0, minus_img
		print_s2_img:
			li $v0, 4
			syscall
		mov.s $f12, $f9
		li $v0, 2
		syscall
		j exit
	solution_doublee:
		la $a0, msgsd
		li $v0, 4
		syscall
		mov.s $f12, $f2
		li $v0, 2
		syscall
		j exit
	first_degree:
		c.eq.s $f2, $f7
		bc1t err
		la $a0, msgfd
		li $v0, 4
		syscall
		neg.s $f3, $f3        # f3 = -f3 = -c
		div.s $f3, $f3, $f2   # f3 = f3/f2 = -c/b
		mov.s $f12, $f3
		li $v0, 2
		syscall
		j exit
	err:
		la $a0, msgerr
		li $v0, 4
		syscall
		j main
	exit:
		la $a0, lf
		li $v0, 4
		syscall
		li $v0, 10
		syscall
.end main

