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/8e075841 Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/8e075841 Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/8e075841 Branch: refs/heads/master Commit: 8e075841da823912d28af20b51efab6678f846dc Parents: c9466bf Author: Nick Wellnhofer <[email protected]> Authored: Sat Nov 10 17:33:34 2012 +0100 Committer: Nick Wellnhofer <[email protected]> Committed: Mon Nov 12 21:07:27 2012 +0100 ---------------------------------------------------------------------- clownfish/compiler/common/charmonizer.c | 50 +++++++++++++++++++++---- clownfish/runtime/common/charmonizer.c | 50 +++++++++++++++++++++---- common/charmonizer.c | 50 +++++++++++++++++++++---- 3 files changed, 126 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucy/blob/8e075841/clownfish/compiler/common/charmonizer.c ---------------------------------------------------------------------- diff --git a/clownfish/compiler/common/charmonizer.c b/clownfish/compiler/common/charmonizer.c index 030e5d9..b03a1c1 100644 --- a/clownfish/compiler/common/charmonizer.c +++ b/clownfish/compiler/common/charmonizer.c @@ -2425,6 +2425,18 @@ 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( printf("%%f\n", float_num); ) + CHAZ_QUOTE( return 0; ) + CHAZ_QUOTE( } ); + void chaz_Integers_run(void) { char *output; @@ -2444,6 +2456,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]; @@ -2565,6 +2578,13 @@ chaz_Integers_run(void) { } } + /* Determine whether conversion of unsigned __int64 to double works */ + if (has___int64) { + if (!chaz_CC_test_compile(chaz_Integers_u64_to_double_code)) { + can_convert_u64_to_double = false; + } + } + /* Write out some conditional defines. */ if (has_inttypes) { chaz_ConfWriter_add_def("HAS_INTTYPES_H", NULL); @@ -2616,22 +2636,22 @@ chaz_Integers_run(void) { * uint64_t */ if (has_8) { - chaz_ConfWriter_add_typedef("signed char", "int8_t"); - chaz_ConfWriter_add_typedef("unsigned char", "uint8_t"); + chaz_ConfWriter_add_global_typedef("signed char", "int8_t"); + chaz_ConfWriter_add_global_typedef("unsigned char", "uint8_t"); } if (has_16) { - chaz_ConfWriter_add_typedef("signed short", "int16_t"); - chaz_ConfWriter_add_typedef("unsigned short", "uint16_t"); + chaz_ConfWriter_add_global_typedef("signed short", "int16_t"); + chaz_ConfWriter_add_global_typedef("unsigned short", "uint16_t"); } if (has_32) { - chaz_ConfWriter_add_typedef(i32_t_type, "int32_t"); + chaz_ConfWriter_add_global_typedef(i32_t_type, "int32_t"); sprintf(scratch, "unsigned %s", i32_t_type); - chaz_ConfWriter_add_typedef(scratch, "uint32_t"); + chaz_ConfWriter_add_global_typedef(scratch, "uint32_t"); } if (has_64) { - chaz_ConfWriter_add_typedef(i64_t_type, "int64_t"); + chaz_ConfWriter_add_global_typedef(i64_t_type, "int64_t"); sprintf(scratch, "unsigned %s", i64_t_type); - chaz_ConfWriter_add_typedef(scratch, "uint64_t"); + chaz_ConfWriter_add_global_typedef(scratch, "uint64_t"); } } if (has_8) { @@ -2752,6 +2772,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/8e075841/clownfish/runtime/common/charmonizer.c ---------------------------------------------------------------------- diff --git a/clownfish/runtime/common/charmonizer.c b/clownfish/runtime/common/charmonizer.c index 5e5df1f..e1f7568 100644 --- a/clownfish/runtime/common/charmonizer.c +++ b/clownfish/runtime/common/charmonizer.c @@ -3472,6 +3472,18 @@ 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( printf("%%f\n", float_num); ) + CHAZ_QUOTE( return 0; ) + CHAZ_QUOTE( } ); + void chaz_Integers_run(void) { char *output; @@ -3491,6 +3503,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]; @@ -3612,6 +3625,13 @@ chaz_Integers_run(void) { } } + /* Determine whether conversion of unsigned __int64 to double works */ + if (has___int64) { + if (!chaz_CC_test_compile(chaz_Integers_u64_to_double_code)) { + can_convert_u64_to_double = false; + } + } + /* Write out some conditional defines. */ if (has_inttypes) { chaz_ConfWriter_add_def("HAS_INTTYPES_H", NULL); @@ -3663,22 +3683,22 @@ chaz_Integers_run(void) { * uint64_t */ if (has_8) { - chaz_ConfWriter_add_typedef("signed char", "int8_t"); - chaz_ConfWriter_add_typedef("unsigned char", "uint8_t"); + chaz_ConfWriter_add_global_typedef("signed char", "int8_t"); + chaz_ConfWriter_add_global_typedef("unsigned char", "uint8_t"); } if (has_16) { - chaz_ConfWriter_add_typedef("signed short", "int16_t"); - chaz_ConfWriter_add_typedef("unsigned short", "uint16_t"); + chaz_ConfWriter_add_global_typedef("signed short", "int16_t"); + chaz_ConfWriter_add_global_typedef("unsigned short", "uint16_t"); } if (has_32) { - chaz_ConfWriter_add_typedef(i32_t_type, "int32_t"); + chaz_ConfWriter_add_global_typedef(i32_t_type, "int32_t"); sprintf(scratch, "unsigned %s", i32_t_type); - chaz_ConfWriter_add_typedef(scratch, "uint32_t"); + chaz_ConfWriter_add_global_typedef(scratch, "uint32_t"); } if (has_64) { - chaz_ConfWriter_add_typedef(i64_t_type, "int64_t"); + chaz_ConfWriter_add_global_typedef(i64_t_type, "int64_t"); sprintf(scratch, "unsigned %s", i64_t_type); - chaz_ConfWriter_add_typedef(scratch, "uint64_t"); + chaz_ConfWriter_add_global_typedef(scratch, "uint64_t"); } } if (has_8) { @@ -3799,6 +3819,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/8e075841/common/charmonizer.c ---------------------------------------------------------------------- diff --git a/common/charmonizer.c b/common/charmonizer.c index ea6f684..4b587d2 100644 --- a/common/charmonizer.c +++ b/common/charmonizer.c @@ -3472,6 +3472,18 @@ 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( printf("%%f\n", float_num); ) + CHAZ_QUOTE( return 0; ) + CHAZ_QUOTE( } ); + void chaz_Integers_run(void) { char *output; @@ -3491,6 +3503,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]; @@ -3612,6 +3625,13 @@ chaz_Integers_run(void) { } } + /* Determine whether conversion of unsigned __int64 to double works */ + if (has___int64) { + if (!chaz_CC_test_compile(chaz_Integers_u64_to_double_code)) { + can_convert_u64_to_double = false; + } + } + /* Write out some conditional defines. */ if (has_inttypes) { chaz_ConfWriter_add_def("HAS_INTTYPES_H", NULL); @@ -3663,22 +3683,22 @@ chaz_Integers_run(void) { * uint64_t */ if (has_8) { - chaz_ConfWriter_add_typedef("signed char", "int8_t"); - chaz_ConfWriter_add_typedef("unsigned char", "uint8_t"); + chaz_ConfWriter_add_global_typedef("signed char", "int8_t"); + chaz_ConfWriter_add_global_typedef("unsigned char", "uint8_t"); } if (has_16) { - chaz_ConfWriter_add_typedef("signed short", "int16_t"); - chaz_ConfWriter_add_typedef("unsigned short", "uint16_t"); + chaz_ConfWriter_add_global_typedef("signed short", "int16_t"); + chaz_ConfWriter_add_global_typedef("unsigned short", "uint16_t"); } if (has_32) { - chaz_ConfWriter_add_typedef(i32_t_type, "int32_t"); + chaz_ConfWriter_add_global_typedef(i32_t_type, "int32_t"); sprintf(scratch, "unsigned %s", i32_t_type); - chaz_ConfWriter_add_typedef(scratch, "uint32_t"); + chaz_ConfWriter_add_global_typedef(scratch, "uint32_t"); } if (has_64) { - chaz_ConfWriter_add_typedef(i64_t_type, "int64_t"); + chaz_ConfWriter_add_global_typedef(i64_t_type, "int64_t"); sprintf(scratch, "unsigned %s", i64_t_type); - chaz_ConfWriter_add_typedef(scratch, "uint64_t"); + chaz_ConfWriter_add_global_typedef(scratch, "uint64_t"); } } if (has_8) { @@ -3799,6 +3819,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"
