changeset 734:6dcab994ddc3

Fold in mandel's patch for ARM from #106
author Christian Kamm <kamm incasoftware de>
date Mon, 27 Oct 2008 16:36:59 +0100
parents cc8ba72c0350
children eee9efe5b51f
files dmd/constfold.c dmd/mars.c dmd/mars.h
diffstat 3 files changed, 17 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/dmd/constfold.c	Mon Oct 27 01:40:47 2008 +0100
+++ b/dmd/constfold.c	Mon Oct 27 16:36:59 2008 +0100
@@ -487,9 +487,10 @@
 	    c = fmodl(e1->toReal(), r2) + fmodl(e1->toImaginary(), r2) * I;
 #elif defined(IN_GCC)
 	    c = complex_t(e1->toReal() % r2, e1->toImaginary() % r2);
-#elif defined(__FreeBSD__) && __FreeBSD_version < 800000
-        // freebsd is kinda messed up. the STABLE branch doesn't support C99's fmodl !?!
-        c = complex_t(fmod(e1->toReal(), r2), fmod(e1->toImaginary(), r2));
+#elif (defined(__FreeBSD__) && __FreeBSD_version < 800000) || defined(__arm__)
+	// freebsd is kinda messed up. the STABLE branch doesn't support C99's fmodl !?!
+	// arm also doesn't like fmodl
+	    c = complex_t(fmod(e1->toReal(), r2), fmod(e1->toImaginary(), r2));
 #else
 	    c = complex_t(fmodl(e1->toReal(), r2), fmodl(e1->toImaginary(), r2));
 #endif
@@ -501,9 +502,10 @@
 	    c = fmodl(e1->toReal(), i2) + fmodl(e1->toImaginary(), i2) * I;
 #elif defined(IN_GCC)
 	    c = complex_t(e1->toReal() % i2, e1->toImaginary() % i2);
-#elif defined(__FreeBSD__) && __FreeBSD_version < 800000
+#elif (defined(__FreeBSD__) && __FreeBSD_version < 800000) || defined(__arm__)
         // freebsd is kinda messed up. the STABLE branch doesn't support C99's fmodl !?!
-        c = complex_t(fmod(e1->toReal(), i2), fmod(e1->toImaginary(), i2));
+	// arm also doesn't like fmodl
+	    c = complex_t(fmod(e1->toReal(), i2), fmod(e1->toImaginary(), i2));
 #else
 	    c = complex_t(fmodl(e1->toReal(), i2), fmodl(e1->toImaginary(), i2));
 #endif
--- a/dmd/mars.c	Mon Oct 27 01:40:47 2008 +0100
+++ b/dmd/mars.c	Mon Oct 27 16:36:59 2008 +0100
@@ -828,6 +828,8 @@
             global.params.llvmArch = "ppc64";
         else
             global.params.llvmArch = "ppc32";
+    #elif defined(__arm__)
+        global.params.llvmArch = "arm";
     #else
     #error
     #endif
@@ -864,6 +866,12 @@
         global.params.cpu = ARCHppc_64;
         //global.params.data_layout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64";
     }
+    else if (strcmp(global.params.llvmArch,"arm")==0) {
+        VersionCondition::addPredefinedGlobalIdent("ARM");
+        global.params.isLE = true;
+        global.params.is64bit = false;
+        global.params.cpu = ARCHarm;
+    }
     else {
         assert(0 && "Invalid arch");
     }
--- a/dmd/mars.h	Mon Oct 27 01:40:47 2008 +0100
+++ b/dmd/mars.h	Mon Oct 27 16:36:59 2008 +0100
@@ -44,7 +44,8 @@
     ARCHx86,
     ARCHx86_64,
     ARCHppc,
-    ARCHppc_64
+    ARCHppc_64,
+    ARCHarm
 };
 enum OUTPUTFLAG
 {