Question

I am working on a little mini compiler while trying to learn some MIPS here. Here's my issue:

MIPS has an instruction li (load immediate) which would work like this

li $5,100

which would load 100 into register 5.

However, I need to load floats into registers right now and am struggling with figuring out a way to do it...since li $5,2.5 does not work.

Anyone have any advice?

I am working in C, I was thinking I could somehow get the integer representation of the float I am working with (i.e. so the floats binary representation == the ints binary representation) then load the "integer" into the register and treat it like a float from then on.

Maybe its too late but Im stuck right now.

Was it helpful?

Solution

You will need to use the floating point registers to load your floats.

Instead of:

li $5,2.5

Try:

li.s $f5,2.5

Take a look at mfc1 and mtc1 instructions to move between integer and floating point registers.

OTHER TIPS

MARS does not appear to have any instructions/pseudo instructions that load floating point immediate values into floating registers. Instead, you need to put the floating point value in memory and load the register from memory:

.data
fp1: .double 2.5
fp2: .double -0.75

.text   
l.d $f0, fp1
l.d $f2, fp2
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top