From a3e4ff9b780cce10b99ed69cd5534597e50d825a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Czerpak?= Date: Mon, 4 Jan 2016 22:03:14 +0100 Subject: [PATCH] 2016-01-04 22:03 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/compiler/gencc.c ! fixed generation of -gc3 code for 64-bit *nixes on 32-bit hosts --- ChangeLog.txt | 4 ++++ src/compiler/gencc.c | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/ChangeLog.txt b/ChangeLog.txt index a04dca9175..0b526615a5 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -10,6 +10,10 @@ * Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment */ +2016-01-04 22:03 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) + * src/compiler/gencc.c + ! fixed generation of -gc3 code for 64-bit *nixes on 32-bit hosts + 2016-01-04 21:25 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl) * src/rtl/hbznet.c * src/rtl/hbzsock.c diff --git a/src/compiler/gencc.c b/src/compiler/gencc.c index 922e64877a..789f7be732 100644 --- a/src/compiler/gencc.c +++ b/src/compiler/gencc.c @@ -1300,12 +1300,23 @@ static HB_GENC_FUNC( hb_p_pushlonglong ) HB_GENC_LABEL(); fprintf( cargo->yyc, "\thb_xvmPushLongLong( %.1f );\n", HB_PCODE_MKLONGLONG( &pFunc->pCode[ nPCodePos + 1 ] ) ); return 9; -#else - HB_LONGLONG llVal, iSkip; +#elif LONG_MAX < LONGLONG_MAX + HB_LONGLONG llVal; char szBuf[ 24 ]; HB_GENC_LABEL(); + llVal = HB_PCODE_MKLONGLONG( &pFunc->pCode[ nPCodePos + 1 ] ); + fprintf( cargo->yyc, "\thb_xvmPushLongLong( HB_LL( %s ) );\n", + hb_numToStr( szBuf, sizeof( szBuf ), llVal ) ); + return 9; +#else + HB_LONGLONG llVal; + char szBuf[ 24 ]; + int iSkip; + + HB_GENC_LABEL(); + fprintf( cargo->yyc, "#if LONG_MAX >= LONGLONG_MAX\n" ); llVal = HB_PCODE_MKLONGLONG( &pFunc->pCode[ nPCodePos + 1 ] ); iSkip = hb_gencc_checkNumAhead( llVal, pFunc, nPCodePos + 9, cargo ); @@ -1314,8 +1325,7 @@ static HB_GENC_FUNC( hb_p_pushlonglong ) fprintf( cargo->yyc, "\thb_xvmPushLong( %ldL );\n", ( long ) llVal ); fprintf( cargo->yyc, "#else\n" ); fprintf( cargo->yyc, "\thb_xvmPushLongLong( HB_LL( %s ) );\n", - hb_numToStr( szBuf, sizeof( szBuf ), - HB_PCODE_MKLONGLONG( &pFunc->pCode[ nPCodePos + 1 ] ) ) ); + hb_numToStr( szBuf, sizeof( szBuf ), llVal ) ); if( iSkip > 0 ) { int iDone = 0;