• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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