1 #include <stdio.h> 2 3 /* Simple test to see that basic operators are mapped 4 correctly. Uses default rounding mode. */ 5 6 volatile double d1, d2; 7 volatile float f1, f2; 8 9 void fadd8(void) 10 { 11 printf("%f + %f = %f\n", d1, d2, d1 + d2); 12 } 13 14 void fsub8(void) 15 { 16 printf("%f - %f = %f\n", d1, d2, d1 - d2); 17 } 18 19 void fmul8(void) 20 { 21 printf("%f * %f = %f\n", d1, d2, d1 * d2); 22 } 23 24 void fdiv8(void) 25 { 26 printf("%f / %f = %f\n", d1, d2, d1 / d2); 27 } 28 29 void fadd4(void) 30 { 31 register float r1 asm("f1") = f1; 32 register float r2 asm("f2") = f2; 33 34 __asm__ volatile ("aebr %[r1],%[r2]\n\t" 35 : [r1] "+f"(r1) 36 : [r2] "f"(r2) : "cc"); 37 printf("%f + %f = %f\n", f1, f2, r1); 38 } 39 40 void fsub4(void) 41 { 42 register float r1 asm("f1") = f1; 43 register float r2 asm("f2") = f2; 44 45 __asm__ volatile ("sebr %[r1],%[r2]\n\t" 46 : [r1] "+f"(r1) 47 : [r2] "f"(r2) : "cc"); 48 printf("%f - %f = %f\n", f1, f2, r1); 49 } 50 51 void fmul4(void) 52 { 53 register float r1 asm("f1") = f1; 54 register float r2 asm("f2") = f2; 55 56 __asm__ volatile ("meebr %[r1],%[r2]\n\t" 57 : [r1] "+f"(r1) 58 : [r2] "f"(r2) : "cc"); 59 printf("%f * %f = %f\n", f1, f2, r1); 60 } 61 62 void fdiv4(void) 63 { 64 register float r1 asm("f1") = f1; 65 register float r2 asm("f2") = f2; 66 67 __asm__ volatile ("debr %[r1],%[r2]\n\t" 68 : [r1] "+f"(r1) 69 : [r2] "f"(r2) : "cc"); 70 printf("%f / %f = %f\n", f1, f2, r1); 71 } 72 73 74 int main() 75 { 76 printf("double arithmetic\n"); 77 d1 = 10.5; 78 d2 = 1.25; 79 fadd8(); 80 fsub8(); 81 fmul8(); 82 fdiv8(); 83 84 printf("float arithmetic\n"); 85 f1 = 10.5f; 86 f2 = 1.25f; 87 fadd4(); 88 fsub4(); 89 fmul4(); 90 fdiv4(); 91 92 return 0; 93 } 94