Implement floating point for ARM.

This commit is contained in:
Jack Palevich 2009-07-09 22:00:24 -07:00
parent bab8064203
commit b7718b973c
4 changed files with 815 additions and 240 deletions

File diff suppressed because it is too large Load Diff

View File

@ -38,13 +38,12 @@ void testVars(float arg0, float arg1, double arg2, double arg3) {
* (float*) & f0 = 1.1f;
* (double*) & d0 = 3.3;
printf("cast lval: %g %g %g %g\n", f0, f1, d0, d1);
}
int main() {
printf("int: %d float: %g double: %g\n", 1, 2.2f, 3.3);
printf(" ftoi(1.4f)=%d\n", ftoi(1.4f));
printf(" dtoi(2.4f)=%d\n", dtoi(2.4f));
printf(" dtoi(2.4)=%d\n", dtoi(2.4));
printf(" itof(3)=%g\n", itof(3));
printf(" itod(4)=%g\n", itod(4));
testVars(1.0f, 2.0f, 3.0, 4.0);

View File

@ -4,7 +4,7 @@ void unaryOps() {
// Unary ops
printf("-%g = %g\n", 1.1, -1.1);
printf("!%g = %d\n", 1.2, !1.2);
printf("!%g = %d\n", 0.0, !0,0);
printf("!%g = %d\n", 0.0, !0.0);
}
void binaryOps() {
@ -75,6 +75,7 @@ void comparisonOpsff() {
comparisonTestff(1.0f, 1.0f);
comparisonTestff(2.0f, 1.0f);
}
void comparisonTestid(int a, double b) {
printf("%d op %g: < %d <= %d == %d >= %d > %d != %d\n",
a, b, a < b, a <= b, a == b, a >= b, a > b, a != b);
@ -82,9 +83,9 @@ void comparisonTestid(int a, double b) {
void comparisonOpsid() {
printf("int op double:\n");
comparisonTestid(1, 2.0f);
comparisonTestid(1, 1.0f);
comparisonTestid(2, 1.0f);
comparisonTestid(1, 2.0);
comparisonTestid(1, 1.0);
comparisonTestid(2, 1.0);
}
void comparisonTestdi(double a, int b) {
printf("%g op %d: < %d <= %d == %d >= %d > %d != %d\n",
@ -117,10 +118,34 @@ void testBranching() {
printf("branching: %d %d %d\n", branch(-1.0), branch(0.0), branch(1.0));
}
void testpassi(int a, int b, int c, int d, int e, int f, int g, int h) {
printf("testpassi: %d %d %d %d %d %d %d %d\n", a, b, c, d, e, f, g, h);
}
void testpassf(float a, float b, float c, float d, float e, float f, float g, float h) {
printf("testpassf: %g %g %g %g %g %g %g %g\n", a, b, c, d, e, f, g, h);
}
void testpassd(double a, double b, double c, double d, double e, double f, double g, double h) {
printf("testpassd: %g %g %g %g %g %g %g %g\n", a, b, c, d, e, f, g, h);
}
void testpassidf(int i, double d, float f) {
printf("testpassidf: %d %g %g\n", i, d, f);
}
void testParameterPassing() {
testpassi(1, 2, 3, 4, 5, 6, 7, 8);
testpassf(1, 2, 3, 4, 5, 6, 7, 8);
testpassd(1, 2, 3, 4, 5, 6, 7, 8);
testpassidf(1, 2.0, 3.0f);
}
int main() {
unaryOps();
binaryOps();
comparisonOps();
testBranching();
testParameterPassing();
return 0;
}

View File

@ -118,7 +118,7 @@ class TestACC(unittest.TestCase):
def testRunFloat(self):
self.compileCheck(["-R", "data/float.c"],
"Executing compiled code:\nresult: 0\n",
"int: 1 float: 2.2 double: 3.3\n ftoi(1.4f)=1\n dtoi(2.4f)=2\n itof(3)=3\n itod(4)=4\nglobals: 1 2 3 4\nargs: 1 2 3 4\nlocals: 1 2 3 4\ncast rval: 2 4\ncast lval: 1.1 2 3.3 4\n")
"int: 1 float: 2.2 double: 3.3\n ftoi(1.4f)=1\n dtoi(2.4)=2\n itof(3)=3\n itod(4)=4\nglobals: 1 2 3 4\nargs: 1 2 3 4\nlocals: 1 2 3 4\ncast rval: 2 4\ncast lval: 1.1 2 3.3 4\n")
def testRunFlops(self):
self.compileCheck(["-R", "data/flops.c"],
@ -171,7 +171,12 @@ class TestACC(unittest.TestCase):
"1 op 2: < 1 <= 1 == 0 >= 0 > 0 != 1\n" +
"1 op 1: < 0 <= 1 == 1 >= 1 > 0 != 0\n" +
"2 op 1: < 0 <= 0 == 0 >= 1 > 1 != 1\n" +
"branching: 1 0 1\n")
"branching: 1 0 1\n" +
"testpassi: 1 2 3 4 5 6 7 8\n" +
"testpassf: 1 2 3 4 5 6 7 8\n" +
"testpassd: 1 2 3 4 5 6 7 8\n" +
"testpassidf: 1 2 3\n"
)
def testArmRunReturnVal(self):
self.compileCheckArm(["-R", "/system/bin/accdata/data/returnval-ansi.c"],