On 05/16/2017 09:54 AM, David Hildenbrand wrote: > On 15.05.2017 11:19, Christian Borntraeger wrote: >> Nice to see somebody doing this for s390x. >> >> >> On 05/12/2017 12:58 PM, David Hildenbrand wrote: >> [...] >> >>> diff --git a/s390x/Makefile b/s390x/Makefile >>> new file mode 100644 >>> index 0000000..f9468bb >>> --- /dev/null >>> +++ b/s390x/Makefile >>> @@ -0,0 +1,32 @@ >>> +all: test_cases >>> + >>> +test_cases: $(tests) >>> + >>> +CFLAGS += -std=gnu99 >>> +CFLAGS += -ffreestanding >>> +CFLAGS += -Wextra >>> +CFLAGS += -I lib >>> +CFLAGS += -O2 >>> +CFLAGS += -msoft-float >> >> >> If you enable the AFP register control bit in your startup code, you can probably >> avoid the soft-float thing. >> > > Looks like we can drop that completely. > > a) no floating point operations are used either way. > > b) adding a very basic division results in > > static void test_fp(void) > { > double a, b; > > b = 6.5; > a = 2.0; > > b = b / a; > > report("test fp", b == 3.25); > } > > (compiled with -O0) > > s390x/selftest.o: In function `test_fp': > /home/dhildenb/git/kvm-unit-tests/s390x/selftest.c:21: undefined > reference to `__divdf3' > /home/dhildenb/git/kvm-unit-tests/s390x/selftest.c:23: undefined > reference to `__eqdf2' > > So we would need a soft float lib (as we're using -nostdlib) > > c) dropping -msoft-float > > A DDB (DIVIDE long BFP) is generated. That seems to work under TCG > without any exception. I assume the check for AFP-register control is > missing. I assume, that test would not pass under KVM. > > > For now I will simply drop -msoft-float. This will allow gcc to spill/fill into floating point registers, which are not all available without afp-register control. It will probably work because the gr->fpr move will not be used for -march=z900, but I suggest to not rely on that.