changeset 245:3c96b5eae94d release_0_9_18

[project @ 2003-04-14 22:23:55 by bellard] update
author bellard
date Mon, 14 Apr 2003 22:23:55 +0000
parents 825ded62893f
children 47e87383dd2b
files Changelog TODO VERSION tcctest.c
diffstat 4 files changed, 30 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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
--- 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
--- 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);