From 0d6f8021ee8874f4537e92a3621321086b268e24 Mon Sep 17 00:00:00 2001 From: bellard Date: Mon, 14 Apr 2003 22:23:55 +0000 Subject: [PATCH] update --- Changelog | 8 ++++++++ TODO | 3 --- VERSION | 2 +- tcctest.c | 21 +++++++++++++++++++++ 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/Changelog b/Changelog index a59b0344..a8482664 100644 --- a/Changelog +++ b/Changelog @@ -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 --git a/TODO b/TODO index e4834c7f..37fd5afe 100644 --- a/TODO +++ b/TODO @@ -3,8 +3,6 @@ TODO list: - '-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 @@ TODO list: 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 --git a/VERSION b/VERSION index 60edc91d..e8895e38 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.9.17 \ No newline at end of file +0.9.18 \ No newline at end of file diff --git a/tcctest.c b/tcctest.c index da2f0c17..c49a1a84 100644 --- a/tcctest.c +++ b/tcctest.c @@ -1841,6 +1841,20 @@ static __inline__ __const__ unsigned int swab32(unsigned int x) 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 @@ void asm_test(void) 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); -- 2.11.4.GIT