aboutsummaryrefslogtreecommitdiff
path: root/i386-tok.h
diff options
context:
space:
mode:
authorgrischka <grischka>2016-11-20 14:50:56 +0100
committergrischka <grischka>2016-11-20 14:50:56 +0100
commit4a3741bf02eb51c377312bdabc979e5ccbf5bf89 (patch)
tree11b4469c57da947e9aa7ab60c8063e85b21fc2ab /i386-tok.h
parent47fd807f9b62945600cb15409c46cc70d3b1fa97 (diff)
downloadtinycc-4a3741bf02eb51c377312bdabc979e5ccbf5bf89.tar.gz
tinycc-4a3741bf02eb51c377312bdabc979e5ccbf5bf89.tar.bz2
x86_64-asm: =m operand fixes
The problem was with tcctest.c: unsigned set; __asm__("btsl %1,%0" : "=m"(set) : "Ir"(20) : "cc"); when with tcc compiled with the HAVE_SELINUX option, run with tcc -run, it would use large addresses far beyond the 32bits range when tcc did not use the pc-relative mode for accessing 'set' in global data memory. In fact the assembler did not know about %rip at all. Changes: - memory operands use (%rax) not (%eax) - conversion from VT_LLOCAL: use type VT_PTR - support 'k' modifier - support %rip register - support X(%rip) pc-relative addresses The test in tcctest.c is from Michael Matz.
Diffstat (limited to 'i386-tok.h')
-rw-r--r--i386-tok.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/i386-tok.h b/i386-tok.h
index fde386f..17d17ce 100644
--- a/i386-tok.h
+++ b/i386-tok.h
@@ -35,6 +35,7 @@
DEF_ASM(rbp)
DEF_ASM(rsi)
DEF_ASM(rdi)
+ DEF_ASM(rip)
#endif
DEF_ASM(mm0)
DEF_ASM(mm1)