2013年5月1日水曜日

b032.c平方根float


#include <stdio.h>
float fhabs(float a);
float fhabs(float a){
   float b=0.0;
   asm("   push {r4}");
   asm("   mov r4,r0");
   asm("   mov r1,#0");
   asm("   bl  __aeabi_fcmplt");

   asm("   cmp r0,#0");
   asm("   beq F7");
   asm("   eor r4,r4,#-2147483648");
   asm("F7:");
   asm("   mov r0,r4");
   asm("   pop {r4}");

}

main(){
   float a,b,c,g,h,eps=1.0e-6,t=2.0,k=1.0;
   char s1[20]="%s";
   char s2[20]="\n";
   char s3[20]="%f";
   char s4[20]="%f\n";
   char s5[20]="a=";
   char s6[20]="root a=%f\n";
   char s7[20]="jijo a=%f\n";
   char s8[20]="     a=%f\n";
   char s9[20]="%s";

   asm("   sub r0,fp,#64");
   asm("   sub r1,fp,#144");
   asm("   bl  printf");

   asm("   sub r0,fp,#104");
   asm("   sub r1,fp,#44");
   asm("   bl  scanf");

   asm("   ldr r0,[fp,#-44]");
   asm("   bl  __aeabi_f2d");
   asm("   mov r3,r1");

   asm("   mov r2,r0");
   asm("   sub r0,fp,#204");
   asm("   bl  printf");

   asm("   ldr r4,[fp,#-16]");
   asm("   ldr r5,[fp,#-44]");
   asm("   ldr r8,[fp,#-24]");
   asm("   ldr r9,[fp,#-20]");

   asm("   mov r0,r5");
   asm("   mov r1,r4");
   asm("   bl  __aeabi_fdiv");
   asm("   mov r6,r0");

   asm("T1:");

   asm("   mov r0,r4");
   asm("   mov r1,r6");

   asm("   bl  __aeabi_fsub");
   asm("   bl fhabs");
   asm("   mov r1,r8");
   asm("   bl  __aeabi_fcmpge");

   asm("   cmp r0,#0");
   asm("   beq T2");

   asm("   mov r0,r4");
   asm("   mov r1,r6");
   asm("   bl  __aeabi_fadd");
   asm("   mov r1,r9");

   asm("   bl  __aeabi_fdiv");
   asm("   mov r4,r0");
   asm("   mov r0,r5");

   asm("   mov r1,r4");
   asm("   bl  __aeabi_fdiv");
   asm("   mov r6,r0");

   asm("   b   T1");

   asm("T2:");

   asm("   mov r0,r4");
   asm("   mov r1,r6");
   asm("   bl  __aeabi_fadd");
   asm("   mov r1,r9");
   asm("   bl  __aeabi_fdiv");

   asm("   mov r4,r0");
   asm("   bl  __aeabi_f2d");

   asm("   mov r3,r1");
   asm("   mov r2,r0");
   asm("   sub r0,fp,#164");

   asm("   bl  printf");
   asm("   mov r0,r4");
   asm("   mov r1,r4");

   asm("   bl  __aeabi_fmul");
   asm("   bl  __aeabi_f2d");
   asm("   mov r3,r1");

   asm("   mov r2,r0");
   asm("   sub r0,fp,#184");
   asm("   bl  printf");


}

0 件のコメント:

コメントを投稿