aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tccgen.c5
-rw-r--r--tests/Makefile9
-rw-r--r--tests/asmtest.S2
3 files changed, 12 insertions, 4 deletions
diff --git a/tccgen.c b/tccgen.c
index 2376848..398e165 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -1948,7 +1948,10 @@ static void force_charshort_cast(int t)
vpushi((1 << bits) - 1);
gen_op('&');
} else {
- bits = 32 - bits;
+ if ((vtop->type.t & VT_BTYPE) == VT_LLONG)
+ bits = 64 - bits;
+ else
+ bits = 32 - bits;
vpushi(bits);
gen_op(TOK_SHL);
/* result must be signed or the SAR is converted to an SHL
diff --git a/tests/Makefile b/tests/Makefile
index 78b5644..50b3a8c 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -21,7 +21,7 @@ TESTS = \
BTESTS = test1b test3b btest
# test4 -- problem with -static
-# asmtest -- minor differences with gcc
+# asmtest / asmtest2 -- minor differences with gcc
# btest -- works on i386 (including win32)
# bounds-checking is supported only on i386
@@ -173,12 +173,15 @@ asmtest.ref: asmtest.S
$(CC) -Wa,-W -o asmtest.ref.o -c asmtest.S
objdump -D asmtest.ref.o > asmtest.ref
-asmtest: asmtest.ref
+asmtest asmtest2: asmtest.ref
@echo ------------ $@ ------------
- $(TCC) -c asmtest.S
+ $(TCC) $(MAYBE_RUN_TCC) -c asmtest.S
objdump -D asmtest.o > asmtest.out
@if diff -u --ignore-matching-lines="file format" asmtest.ref asmtest.out ; then echo "ASM Auto Test OK"; fi
+# test assembler with tcc compiled by itself
+asmtest2: MAYBE_RUN_TCC = $(RUN_TCC)
+
# Check that code generated by libtcc is binary compatible with
# that generated by CC
abitest-cc$(EXESUF): abitest.c $(LIBTCC)
diff --git a/tests/asmtest.S b/tests/asmtest.S
index fd0629c..d7d6800 100644
--- a/tests/asmtest.S
+++ b/tests/asmtest.S
@@ -696,6 +696,7 @@ int $0x10
inc %eax
#endif
+#ifndef _WIN32
ft1: ft2: ft3: ft4: ft5: ft6: ft7: ft8: ft9:
xor %eax, %eax
ret
@@ -708,6 +709,7 @@ ft1: ft2: ft3: ft4: ft5: ft6: ft7: ft8: ft9:
.type ft6,@function
.type ft7,%function
.type ft8,"function"
+#endif
pause
.rept 6