d0ce7e9cfc
The value of CCOUNT special register is calculated as time elapsed since CCOUNT == 0 multiplied by the core frequency. In icount mode time increment between consecutive instructions that don't involve time warps is constant, but unless the result of multiplication of this constant by the core frequency is a whole number the CCOUNT increment between these instructions may not be constant. E.g. with icount=7 each instruction takes 128ns, with core clock of 10MHz CCOUNT values for consecutive instructions are: 502: (128 * 502 * 10000000) / 1000000000 = 642.56 503: (128 * 503 * 10000000) / 1000000000 = 643.84 504: (128 * 504 * 10000000) / 1000000000 = 645.12 I.e.the CCOUNT increments depend on the absolute time. This results in varying CCOUNT differences for consecutive instructions in tests that involve time warps and don't set CCOUNT explicitly. Change frequency of the core used in tests so that clock cycle takes exactly 64ns. Change icount power used in tests to 6, so that each instruction takes exactly 1 clock cycle. With these changes CCOUNT increments only depend on the number of executed instructions and that's what timer tests expect, so they work correctly. Longer story: http://lists.nongnu.org/archive/html/qemu-devel/2018-03/msg04326.html Cc: Pavel Dovgaluk <Pavel.Dovgaluk@ispras.ru> Cc: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
93 lines
2.1 KiB
Makefile
93 lines
2.1 KiB
Makefile
-include ../../../config-host.mak
|
|
|
|
CORE=dc232b
|
|
CROSS=xtensa-$(CORE)-elf-
|
|
|
|
ifndef XT
|
|
SIM = ../../../xtensa-softmmu/qemu-system-xtensa
|
|
SIMFLAGS = -M sim -cpu $(CORE) -nographic -semihosting -icount 6 $(EXTFLAGS) -kernel
|
|
SIMDEBUG = -s -S
|
|
else
|
|
SIM = xt-run
|
|
SIMFLAGS = --xtensa-core=DC_B_232L --exit_with_target_code $(EXTFLAGS)
|
|
SIMDEBUG = --gdbserve=0
|
|
endif
|
|
|
|
HOST_CC = gcc
|
|
CC = $(CROSS)gcc
|
|
AS = $(CROSS)gcc -x assembler-with-cpp
|
|
LD = $(CROSS)ld
|
|
|
|
XTENSA_SRC_PATH = $(SRC_PATH)/tests/tcg/xtensa
|
|
INCLUDE_DIRS = $(XTENSA_SRC_PATH) $(SRC_PATH)/target/xtensa/core-$(CORE)
|
|
XTENSA_INC = $(addprefix -I,$(INCLUDE_DIRS))
|
|
|
|
LDFLAGS = -Tlinker.ld
|
|
|
|
CRT = crt.o vectors.o
|
|
|
|
TESTCASES += test_b.tst
|
|
TESTCASES += test_bi.tst
|
|
#TESTCASES += test_boolean.tst
|
|
TESTCASES += test_break.tst
|
|
TESTCASES += test_bz.tst
|
|
TESTCASES += test_cache.tst
|
|
TESTCASES += test_clamps.tst
|
|
TESTCASES += test_extui.tst
|
|
TESTCASES += test_fail.tst
|
|
TESTCASES += test_interrupt.tst
|
|
TESTCASES += test_loop.tst
|
|
TESTCASES += test_mac16.tst
|
|
TESTCASES += test_max.tst
|
|
TESTCASES += test_min.tst
|
|
TESTCASES += test_mmu.tst
|
|
TESTCASES += test_mul16.tst
|
|
TESTCASES += test_mul32.tst
|
|
TESTCASES += test_nsa.tst
|
|
ifdef XT
|
|
TESTCASES += test_pipeline.tst
|
|
endif
|
|
TESTCASES += test_quo.tst
|
|
TESTCASES += test_rem.tst
|
|
TESTCASES += test_rst0.tst
|
|
TESTCASES += test_s32c1i.tst
|
|
TESTCASES += test_sar.tst
|
|
TESTCASES += test_sext.tst
|
|
TESTCASES += test_shift.tst
|
|
TESTCASES += test_sr.tst
|
|
TESTCASES += test_timer.tst
|
|
TESTCASES += test_windowed.tst
|
|
|
|
all: build
|
|
|
|
linker.ld: $(XTENSA_SRC_PATH)/linker.ld.S
|
|
$(HOST_CC) $(XTENSA_INC) -E -P $< -o $@
|
|
|
|
%.o: $(XTENSA_SRC_PATH)/%.c
|
|
$(CC) $(XTENSA_INC) $(CFLAGS) -c $< -o $@
|
|
|
|
%.o: $(XTENSA_SRC_PATH)/%.S
|
|
$(CC) $(XTENSA_INC) $(ASFLAGS) -c $< -o $@
|
|
|
|
%.tst: %.o linker.ld $(XTENSA_SRC_PATH)/macros.inc $(CRT) Makefile
|
|
$(LD) $(LDFLAGS) $(NOSTDFLAGS) $(CRT) $< -o $@
|
|
|
|
build: $(TESTCASES)
|
|
|
|
check: $(addprefix run-, $(TESTCASES))
|
|
|
|
run-%.tst: %.tst
|
|
$(SIM) $(SIMFLAGS) ./$<
|
|
|
|
run-test_fail.tst: test_fail.tst
|
|
! $(SIM) $(SIMFLAGS) ./$<
|
|
|
|
debug-%.tst: %.tst
|
|
$(SIM) $(SIMDEBUG) $(SIMFLAGS) ./$<
|
|
|
|
host-debug-%.tst: %.tst
|
|
gdb --args $(SIM) $(SIMFLAGS) ./$<
|
|
|
|
clean:
|
|
$(RM) -fr $(TESTCASES) $(CRT) linker.ld
|