mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-11 09:56:29 +00:00
94 lines
1.7 KiB
C
94 lines
1.7 KiB
C
#include <stdio.h>
|
|
|
|
/* Simple test to see that basic operators are mapped
|
|
correctly. Uses default rounding mode. */
|
|
|
|
volatile double d1, d2;
|
|
volatile float f1, f2;
|
|
|
|
void fadd8(void)
|
|
{
|
|
printf("%f + %f = %f\n", d1, d2, d1 + d2);
|
|
}
|
|
|
|
void fsub8(void)
|
|
{
|
|
printf("%f - %f = %f\n", d1, d2, d1 - d2);
|
|
}
|
|
|
|
void fmul8(void)
|
|
{
|
|
printf("%f * %f = %f\n", d1, d2, d1 * d2);
|
|
}
|
|
|
|
void fdiv8(void)
|
|
{
|
|
printf("%f / %f = %f\n", d1, d2, d1 / d2);
|
|
}
|
|
|
|
void fadd4(void)
|
|
{
|
|
register float r1 asm("f1") = f1;
|
|
register float r2 asm("f2") = f2;
|
|
|
|
__asm__ volatile ("aebr %[r1],%[r2]\n\t"
|
|
: [r1] "+f"(r1)
|
|
: [r2] "f"(r2) : "cc");
|
|
printf("%f + %f = %f\n", f1, f2, r1);
|
|
}
|
|
|
|
void fsub4(void)
|
|
{
|
|
register float r1 asm("f1") = f1;
|
|
register float r2 asm("f2") = f2;
|
|
|
|
__asm__ volatile ("sebr %[r1],%[r2]\n\t"
|
|
: [r1] "+f"(r1)
|
|
: [r2] "f"(r2) : "cc");
|
|
printf("%f - %f = %f\n", f1, f2, r1);
|
|
}
|
|
|
|
void fmul4(void)
|
|
{
|
|
register float r1 asm("f1") = f1;
|
|
register float r2 asm("f2") = f2;
|
|
|
|
__asm__ volatile ("meebr %[r1],%[r2]\n\t"
|
|
: [r1] "+f"(r1)
|
|
: [r2] "f"(r2) : "cc");
|
|
printf("%f * %f = %f\n", f1, f2, r1);
|
|
}
|
|
|
|
void fdiv4(void)
|
|
{
|
|
register float r1 asm("f1") = f1;
|
|
register float r2 asm("f2") = f2;
|
|
|
|
__asm__ volatile ("debr %[r1],%[r2]\n\t"
|
|
: [r1] "+f"(r1)
|
|
: [r2] "f"(r2) : "cc");
|
|
printf("%f / %f = %f\n", f1, f2, r1);
|
|
}
|
|
|
|
|
|
int main()
|
|
{
|
|
printf("double arithmetic\n");
|
|
d1 = 10.5;
|
|
d2 = 1.25;
|
|
fadd8();
|
|
fsub8();
|
|
fmul8();
|
|
fdiv8();
|
|
|
|
printf("float arithmetic\n");
|
|
f1 = 10.5f;
|
|
f2 = 1.25f;
|
|
fadd4();
|
|
fsub4();
|
|
fmul4();
|
|
fdiv4();
|
|
|
|
return 0;
|
|
}
|