# HG changeset patch # User bellard # Date 1050359035 0 # Node ID 3c96b5eae94d59d3cdfec023caa702423ae94669 # Parent 825ded62893f0f47456ecab0ad7f6f562c9b6d6b [project @ 2003-04-14 22:23:55 by bellard] update diff -r 825ded62893f -r 3c96b5eae94d Changelog --- a/Changelog Mon Apr 14 22:23:36 2003 +0000 +++ b/Changelog Mon Apr 14 22:23:55 2003 +0000 @@ -1,3 +1,11 @@ +version 0.9.18: + +- header fix (time.h) +- fixed inline asm without operand case +- fixed 'default:' or 'case x:' with '}' after (incorrect C construct accepted + by gcc) +- added 'A' inline asm constraint. + version 0.9.17: - PLT generation fix diff -r 825ded62893f -r 3c96b5eae94d TODO --- a/TODO Mon Apr 14 22:23:36 2003 +0000 +++ b/TODO Mon Apr 14 22:23:55 2003 +0000 @@ -3,8 +3,6 @@ - '-b' bug. - atexit (Nigel Horne) - see -lxxx bug (Michael Charity). -- empty 'default:' in switch. -- fix asm without input/output (no % preprocessing) - handle inline functions as macros. - see transparent union pb in /urs/include/sys/socket.h - precise behaviour of typeof with arrays ? (__put_user macro) @@ -14,7 +12,6 @@ variable initialization (',' is considered incorrectly as separator in preparser) : change func argument code generator ? - function pointers/lvalues in ? : (linux kernel net/core/dev.c) -- add A x86 asm constraint (linux asm-i386/div64.h) - transform functions to function pointers in function parameters (net/ipv4/ip_output.c) - fix function pointer type display - fix bound exit on RedHat 7.3 diff -r 825ded62893f -r 3c96b5eae94d VERSION --- a/VERSION Mon Apr 14 22:23:36 2003 +0000 +++ b/VERSION Mon Apr 14 22:23:55 2003 +0000 @@ -1,1 +1,1 @@ -0.9.17 \ No newline at end of file +0.9.18 \ No newline at end of file diff -r 825ded62893f -r 3c96b5eae94d tcctest.c --- a/tcctest.c Mon Apr 14 22:23:36 2003 +0000 +++ b/tcctest.c Mon Apr 14 22:23:55 2003 +0000 @@ -1841,6 +1841,20 @@ return x; } +static __inline__ unsigned long long mul64(unsigned int a, unsigned int b) +{ + unsigned long long res; + __asm__("mull %2" : "=A" (res) : "a" (a), "r" (b)); + return res; +} + +static __inline__ unsigned long long inc64(unsigned long long a) +{ + unsigned long long res; + __asm__("addl $1, %%eax ; adcl $0, %%edx" : "=A" (res) : "A" (a)); + return res; +} + unsigned int set; void asm_test(void) @@ -1849,10 +1863,17 @@ unsigned int val; printf("inline asm:\n"); + /* test the no operand case */ + asm volatile ("xorl %eax, %eax"); + memcpy1(buf, "hello", 6); strncat1(buf, " worldXXXXX", 3); printf("%s\n", buf); + /* 'A' constraint test */ + printf("mul64=0x%Lx\n", mul64(0x12345678, 0xabcd1234)); + printf("inc64=0x%Lx\n", inc64(0x12345678ffffffff)); + set = 0xff; sigdelset1(&set, 2); sigaddset1(&set, 16);