Regenerate charmonizer.c

Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/6ee57592
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/6ee57592
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/6ee57592

Branch: refs/heads/msvc6
Commit: 6ee57592d3de05fa1f5f0b736aa75aa0de8423b7
Parents: 29339c4
Author: Nick Wellnhofer <[email protected]>
Authored: Sat Nov 10 17:33:34 2012 +0100
Committer: Nick Wellnhofer <[email protected]>
Committed: Sat Nov 10 17:33:34 2012 +0100

----------------------------------------------------------------------
 clownfish/runtime/common/charmonizer.c |   35 +++++++++++++++++++++++++++
 common/charmonizer.c                   |   35 +++++++++++++++++++++++++++
 2 files changed, 70 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy/blob/6ee57592/clownfish/runtime/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/clownfish/runtime/common/charmonizer.c 
b/clownfish/runtime/common/charmonizer.c
index 7810642..12d0e13 100644
--- a/clownfish/runtime/common/charmonizer.c
+++ b/clownfish/runtime/common/charmonizer.c
@@ -3477,6 +3477,17 @@ static const char chaz_Integers_literal64_code[] =
     CHAZ_QUOTE(      return 0;                             )
     CHAZ_QUOTE(  }                                         );
 
+static const char chaz_Integers_u64_to_double_code[] =
+    CHAZ_QUOTE(  #include "_charm.h"                       )
+    CHAZ_QUOTE(  int main()                                )
+    CHAZ_QUOTE(  {                                         )
+    CHAZ_QUOTE(      unsigned __int64 int_num = 0;         )
+    CHAZ_QUOTE(      double float_num;                     )
+    CHAZ_QUOTE(      Charm_Setup;                          )
+    CHAZ_QUOTE(      float_num = (double)int_num;          )
+    CHAZ_QUOTE(      return 0;                             )
+    CHAZ_QUOTE(  }                                         );
+
 void
 chaz_Integers_run(void) {
     char *output;
@@ -3496,6 +3507,7 @@ chaz_Integers_run(void) {
     int has___int64       = false;
     int has_inttypes      = chaz_HeadCheck_check_header("inttypes.h");
     int has_stdint        = chaz_HeadCheck_check_header("stdint.h");
+    int can_convert_u64_to_double = true;
     char i32_t_type[10];
     char i32_t_postfix[10];
     char u32_t_postfix[10];
@@ -3617,6 +3629,15 @@ chaz_Integers_run(void) {
         }
     }
 
+    /* Determine whether conversion of unsigned __int64 to double works */
+    if (has___int64) {
+        output = chaz_CC_capture_output(chaz_Integers_u64_to_double_code,
+                                        &output_len);
+        if (output == NULL) {
+            can_convert_u64_to_double = false;
+        }
+    }
+
     /* Write out some conditional defines. */
     if (has_inttypes) {
         chaz_ConfWriter_add_def("HAS_INTTYPES_H", NULL);
@@ -3804,6 +3825,20 @@ chaz_Integers_run(void) {
         }
     }
 
+    /* Create macro for converting uint64_t to double. */
+    if (can_convert_u64_to_double) {
+        chaz_ConfWriter_add_def("U64_TO_DOUBLE(num)",
+                                "((double)(num))");
+    }
+    else {
+        chaz_ConfWriter_add_def(
+            "U64_TO_DOUBLE(num)",
+            "((num) & CHY_U64_C(0x8000000000000000) ? "
+            "(double)(int64_t)((num) & CHY_U64_C(0x7FFFFFFFFFFFFFFF)) + "
+            "9223372036854775808.0 : "
+            "(double)(int64_t)(num))");
+    }
+
     /* True and false. */
     chaz_ConfWriter_append_conf(
         "#ifndef true\n"

http://git-wip-us.apache.org/repos/asf/lucy/blob/6ee57592/common/charmonizer.c
----------------------------------------------------------------------
diff --git a/common/charmonizer.c b/common/charmonizer.c
index b7c2083..82c3846 100644
--- a/common/charmonizer.c
+++ b/common/charmonizer.c
@@ -3477,6 +3477,17 @@ static const char chaz_Integers_literal64_code[] =
     CHAZ_QUOTE(      return 0;                             )
     CHAZ_QUOTE(  }                                         );
 
+static const char chaz_Integers_u64_to_double_code[] =
+    CHAZ_QUOTE(  #include "_charm.h"                       )
+    CHAZ_QUOTE(  int main()                                )
+    CHAZ_QUOTE(  {                                         )
+    CHAZ_QUOTE(      unsigned __int64 int_num = 0;         )
+    CHAZ_QUOTE(      double float_num;                     )
+    CHAZ_QUOTE(      Charm_Setup;                          )
+    CHAZ_QUOTE(      float_num = (double)int_num;          )
+    CHAZ_QUOTE(      return 0;                             )
+    CHAZ_QUOTE(  }                                         );
+
 void
 chaz_Integers_run(void) {
     char *output;
@@ -3496,6 +3507,7 @@ chaz_Integers_run(void) {
     int has___int64       = false;
     int has_inttypes      = chaz_HeadCheck_check_header("inttypes.h");
     int has_stdint        = chaz_HeadCheck_check_header("stdint.h");
+    int can_convert_u64_to_double = true;
     char i32_t_type[10];
     char i32_t_postfix[10];
     char u32_t_postfix[10];
@@ -3617,6 +3629,15 @@ chaz_Integers_run(void) {
         }
     }
 
+    /* Determine whether conversion of unsigned __int64 to double works */
+    if (has___int64) {
+        output = chaz_CC_capture_output(chaz_Integers_u64_to_double_code,
+                                        &output_len);
+        if (output == NULL) {
+            can_convert_u64_to_double = false;
+        }
+    }
+
     /* Write out some conditional defines. */
     if (has_inttypes) {
         chaz_ConfWriter_add_def("HAS_INTTYPES_H", NULL);
@@ -3804,6 +3825,20 @@ chaz_Integers_run(void) {
         }
     }
 
+    /* Create macro for converting uint64_t to double. */
+    if (can_convert_u64_to_double) {
+        chaz_ConfWriter_add_def("U64_TO_DOUBLE(num)",
+                                "((double)(num))");
+    }
+    else {
+        chaz_ConfWriter_add_def(
+            "U64_TO_DOUBLE(num)",
+            "((num) & CHY_U64_C(0x8000000000000000) ? "
+            "(double)(int64_t)((num) & CHY_U64_C(0x7FFFFFFFFFFFFFFF)) + "
+            "9223372036854775808.0 : "
+            "(double)(int64_t)(num))");
+    }
+
     /* True and false. */
     chaz_ConfWriter_append_conf(
         "#ifndef true\n"

Reply via email to