summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbellard <bellard>2003-04-14 22:23:55 +0000
committerbellard <bellard>2003-04-14 22:23:55 +0000
commit0d6f8021ee8874f4537e92a3621321086b268e24 (patch)
treee9d4aaf2bbd334707c9a3bedde3838fad0cd85b5
parentc5ab452d6493499e7f550d69d9e8486da6460105 (diff)
-rw-r--r--Changelog8
-rw-r--r--TODO3
-rw-r--r--VERSION2
-rw-r--r--tcctest.c21
4 files changed, 30 insertions, 4 deletions
diff --git a/Changelog b/Changelog
index a59b034..a848266 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 e4834c7..37fd5af 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 60edc91..e8895e3 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 da2f0c1..c49a1a8 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);