Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b7718b97 authored by Jack Palevich's avatar Jack Palevich
Browse files

Implement floating point for ARM.

parent bab80642
Loading
Loading
Loading
Loading
+778 −232

File changed.

Preview size limit exceeded, changes collapsed.

+1 −2
Original line number Diff line number Diff line
@@ -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);
+29 −4
Original line number Diff line number Diff line
@@ -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;
}
+7 −2
Original line number Diff line number Diff line
@@ -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"],