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
fadd8(void)9 void fadd8(void)
10 {
11 printf("%f + %f = %f\n", d1, d2, d1 + d2);
12 }
13
fsub8(void)14 void fsub8(void)
15 {
16 printf("%f - %f = %f\n", d1, d2, d1 - d2);
17 }
18
fmul8(void)19 void fmul8(void)
20 {
21 printf("%f * %f = %f\n", d1, d2, d1 * d2);
22 }
23
fdiv8(void)24 void fdiv8(void)
25 {
26 printf("%f / %f = %f\n", d1, d2, d1 / d2);
27 }
28
fadd4(void)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
fsub4(void)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
fmul4(void)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
fdiv4(void)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
main()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