/****************************************************************************** Example #20 -- Demonstrate SPARC floating point operations Compute (A*5-B) * (C+D) / 2 and store results at X ******************************************************************************/ .global main .section ".text" .align 4 main: save %sp, -96, %sp set A, %l0 ld [%l0], %f16 ! load value at loc A into register %f16 set B, %l1 ld [%l1], %f17 ! load value at loc B into register %f17 set C, %l2 ld [%l2], %f18 ! load value at loc C into register %f18 set D, %l3 ld [%l3], %f19 ! load value at loc D into register %f19 set con5, %l4 ld [%l4], %f20 ! load 5.0 into register %f20 set con2, %l5 ld [%l5], %f21 ! load 2.0 into register %f21 fmuls %f16, %f20, %f24 ! register %f24 <== A*5 fsubs %f24, %f17, %f25 ! register %f25 <== A*5 - B fadds %f18, %f19, %f26 ! register %f26 <== C+D fmuls %f25, %f26, %f27 ! register %r27 <== (A*5 - B) * (C+D) fdivs %f27, %f21, %f28 ! register %r28 <== (A*5 - B) * (C+D) / 2 set X, %l6 st %f28, [%l6] ! store contents of register %f28 at loc X set main, %o0 ! register %o0 contains first address set main+0x100, %o1 ! register %o1 contains second address call memory ! display memory (from main to main+0xff) nop set A, %o0 ! register %o0 contains first address set X+4, %o1 ! register %o1 contains second address call memory ! display memory (from A to X+3) nop call iu_window ! display IU registers nop call fpu_registers ! display FPU registers nop ret restore con5: .single 0r5.0 con2: .single 0r2.0 .section ".data" .align 4 A: .single 0r15.0 B: .single 0r23.0 C: .single 0r18.0 D: .single 0r29.0 X: .single 0r0.0