1#include <stdio.h> 2 3/* Simple test to see that basic operators are mapped 4 correctly. Uses default rounding mode. */ 5 6volatile double d1, d2; 7volatile float f1, f2; 8 9void fadd8(void) 10{ 11 printf("%f + %f = %f\n", d1, d2, d1 + d2); 12} 13 14void fsub8(void) 15{ 16 printf("%f - %f = %f\n", d1, d2, d1 - d2); 17} 18 19void fmul8(void) 20{ 21 printf("%f * %f = %f\n", d1, d2, d1 * d2); 22} 23 24void fdiv8(void) 25{ 26 printf("%f / %f = %f\n", d1, d2, d1 / d2); 27} 28 29void 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 40void 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 51void 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 62void 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 74int 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