diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 2017-10-02 15:09:21 +0200 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 2017-10-02 15:09:21 +0200 |
commit | 0d839d4b42ff28ab75667500c1a6d396276d0eb8 (patch) | |
tree | 3d253ccb349b6ac603e5fb0dcf481c0ceb672017 | |
parent | b9709db3ff7cc9d6c30310899162a2c5a20fae2e (diff) | |
download | ocaml-tests_asmcomp_revised.tar.gz |
Split tests/asmcomp into tests/asmgen and /tests/asmcomptests_asmcomp_revised
tests/asmgen contains the custom C-- code generator and the tests written in C--
tests/asmcomp contains the tests written in OCaml
The purpose of this split is to make it easier to skip or remove entirely the asmgen tests in the future.
Also: modernize the asm stubs in asmgen and remove the stubs for no-longer-supported architectures.
-rw-r--r-- | .gitignore | 12 | ||||
-rw-r--r-- | testsuite/tests/asmcomp/Makefile | 84 | ||||
-rw-r--r-- | testsuite/tests/asmcomp/alpha.S | 63 | ||||
-rw-r--r-- | testsuite/tests/asmcomp/hppa.S | 161 | ||||
-rw-r--r-- | testsuite/tests/asmcomp/ia64.S | 119 | ||||
-rw-r--r-- | testsuite/tests/asmcomp/m68k.S | 57 | ||||
-rw-r--r-- | testsuite/tests/asmcomp/mips.s | 72 | ||||
-rw-r--r-- | testsuite/tests/asmcomp/sparc.S | 42 | ||||
-rw-r--r-- | testsuite/tests/asmgen/Makefile | 122 | ||||
-rw-r--r-- | testsuite/tests/asmgen/amd64.S (renamed from testsuite/tests/asmcomp/amd64.S) | 5 | ||||
-rw-r--r-- | testsuite/tests/asmgen/arith.cmm (renamed from testsuite/tests/asmcomp/arith.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/arm.S (renamed from testsuite/tests/asmcomp/arm.S) | 8 | ||||
-rw-r--r-- | testsuite/tests/asmgen/arm64.S (renamed from testsuite/tests/asmcomp/arm64.S) | 3 | ||||
-rw-r--r-- | testsuite/tests/asmgen/catch-rec.cmm (renamed from testsuite/tests/asmcomp/catch-rec.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/catch-try.cmm (renamed from testsuite/tests/asmcomp/catch-try.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/checkbound.cmm (renamed from testsuite/tests/asmcomp/checkbound.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/even-odd-spill.cmm (renamed from testsuite/tests/asmcomp/even-odd-spill.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/even-odd.cmm (renamed from testsuite/tests/asmcomp/even-odd.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/fib.cmm (renamed from testsuite/tests/asmcomp/fib.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/i386.S (renamed from testsuite/tests/asmcomp/i386.S) | 9 | ||||
-rw-r--r-- | testsuite/tests/asmgen/i386nt.asm (renamed from testsuite/tests/asmcomp/i386nt.asm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/integr.cmm (renamed from testsuite/tests/asmcomp/integr.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/lexcmm.mli (renamed from testsuite/tests/asmcomp/lexcmm.mli) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/lexcmm.mll (renamed from testsuite/tests/asmcomp/lexcmm.mll) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/main.c (renamed from testsuite/tests/asmcomp/main.c) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/main.ml (renamed from testsuite/tests/asmcomp/main.ml) | 1 | ||||
-rw-r--r-- | testsuite/tests/asmgen/mainarith.c (renamed from testsuite/tests/asmcomp/mainarith.c) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/parsecmm.mly (renamed from testsuite/tests/asmcomp/parsecmm.mly) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/parsecmmaux.ml (renamed from testsuite/tests/asmcomp/parsecmmaux.ml) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/parsecmmaux.mli (renamed from testsuite/tests/asmcomp/parsecmmaux.mli) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/pgcd.cmm (renamed from testsuite/tests/asmcomp/pgcd.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/power.S (renamed from testsuite/tests/asmcomp/power.S) | 3 | ||||
-rw-r--r-- | testsuite/tests/asmgen/quicksort.cmm (renamed from testsuite/tests/asmcomp/quicksort.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/quicksort2.cmm (renamed from testsuite/tests/asmcomp/quicksort2.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/s390x.S (renamed from testsuite/tests/asmcomp/s390x.S) | 3 | ||||
-rw-r--r-- | testsuite/tests/asmgen/soli.cmm (renamed from testsuite/tests/asmcomp/soli.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/tagged-fib.cmm (renamed from testsuite/tests/asmcomp/tagged-fib.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/tagged-integr.cmm (renamed from testsuite/tests/asmcomp/tagged-integr.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/tagged-quicksort.cmm (renamed from testsuite/tests/asmcomp/tagged-quicksort.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/tagged-tak.cmm (renamed from testsuite/tests/asmcomp/tagged-tak.cmm) | 0 | ||||
-rw-r--r-- | testsuite/tests/asmgen/tak.cmm (renamed from testsuite/tests/asmcomp/tak.cmm) | 0 |
41 files changed, 156 insertions, 608 deletions
diff --git a/.gitignore b/.gitignore index 348178dd66..dd41a29eb2 100644 --- a/.gitignore +++ b/.gitignore @@ -244,12 +244,12 @@ _ocamltest /testsuite/_retries -/testsuite/tests/asmcomp/codegen -/testsuite/tests/asmcomp/parsecmm.ml -/testsuite/tests/asmcomp/parsecmm.mli -/testsuite/tests/asmcomp/lexcmm.ml -/testsuite/tests/asmcomp/*.s -/testsuite/tests/asmcomp/*.out.manifest +/testsuite/tests/asmgen/codegen +/testsuite/tests/asmgen/parsecmm.ml +/testsuite/tests/asmgen/parsecmm.mli +/testsuite/tests/asmgen/lexcmm.ml +/testsuite/tests/asmgen/*.s +/testsuite/tests/asmgen/*.out.manifest /testsuite/tests/basic/*.safe-string /testsuite/tests/basic/pr6322.ml diff --git a/testsuite/tests/asmcomp/Makefile b/testsuite/tests/asmcomp/Makefile index 08921d12f0..eeadfa16c6 100644 --- a/testsuite/tests/asmcomp/Makefile +++ b/testsuite/tests/asmcomp/Makefile @@ -17,42 +17,14 @@ BASEDIR=../.. include $(BASEDIR)/../config/Makefile -INCLUDES=\ - -I $(OTOPDIR)/parsing \ - -I $(OTOPDIR)/utils \ - -I $(OTOPDIR)/typing \ - -I $(OTOPDIR)/middle_end \ - -I $(OTOPDIR)/bytecomp \ - -I $(OTOPDIR)/asmcomp - -OTHEROBJS=\ - $(OTOPDIR)/compilerlibs/ocamlcommon.cma \ - $(OTOPDIR)/compilerlibs/ocamloptcomp.cma - -OBJS=parsecmmaux.cmo parsecmm.cmo lexcmm.cmo - -ADD_COMPFLAGS=$(INCLUDES) -w -40 -g - default: @if $(BYTECODE_ONLY) || $(SKIP) ; then $(MAKE) skips ; else \ $(MAKE) all; \ fi all: - @$(MAKE) arch codegen @$(MAKE) tests -main.cmo: parsecmm.cmo - -codegen: parsecmm.ml lexcmm.ml $(OBJS:.cmo=.cmi) $(OBJS) main.cmo - @$(OCAMLC) $(LINKFLAGS) -o codegen $(OTHEROBJS) $(OBJS) main.cmo - -parsecmm.mli parsecmm.ml: parsecmm.mly - @$(OCAMLYACC) -q parsecmm.mly - -lexcmm.ml: lexcmm.mll - @$(OCAMLLEX) -q lexcmm.mll - MLCASES=optargs staticalloc bind_tuples is_static register_typing \ register_typing_switch ARGS_optargs=-g @@ -66,32 +38,10 @@ ARGS_static_float_array_flambda=\ -I $(OTOPDIR)/byterun is_in_static_data.c simple_float_const.ml ARGS_static_float_array_flambda_opaque=\ -I $(OTOPDIR)/byterun is_in_static_data.c -opaque simple_float_const_opaque.ml - -CASES=fib tak quicksort quicksort2 soli \ - arith checkbound tagged-fib tagged-integr tagged-quicksort tagged-tak \ - catch-try catch-rec even-odd even-odd-spill pgcd -ARGS_fib=-DINT_INT -DFUN=fib main.c -ARGS_tak=-DUNIT_INT -DFUN=takmain main.c -ARGS_quicksort=-DSORT -DFUN=quicksort main.c -ARGS_quicksort2=-DSORT -DFUN=quicksort main.c -ARGS_soli=-DUNIT_INT -DFUN=solitaire main.c -ARGS_integr=-DINT_FLOAT -DFUN=test main.c -ARGS_arith=mainarith.c -ARGS_checkbound=-DCHECKBOUND main.c -ARGS_tagged-fib=-DINT_INT -DFUN=fib main.c -ARGS_tagged-integr=-DINT_FLOAT -DFUN=test main.c -ARGS_tagged-quicksort=-DSORT -DFUN=quicksort main.c -ARGS_tagged-tak=-DUNIT_INT -DFUN=takmain main.c ARGS_staticalloc=-I $(OTOPDIR)/utils config.cmx -ARGS_catch-try=-DINT_INT -DFUN=catch_exit main.c -ARGS_catch-rec=-DINT_INT -DFUN=catch_fact main.c -ARGS_even-odd=-DINT_INT -DFUN=is_even main.c -ARGS_even-odd-spill=-DINT_INT -DFUN=is_even main.c -ARGS_pgcd=-DINT_INT -DFUN=pgcd_30030 main.c skips: - @for c in $(CASES) $(MLCASES) $(MLCASES_FLAMBDA) \ - $(MLCASES_FLAMBDA_FLOAT); do \ + @for c in $(MLCASES) $(MLCASES_FLAMBDA) $(MLCASES_FLAMBDA_FLOAT); do \ echo " ... testing '$$c': => skipped"; \ done @@ -107,39 +57,18 @@ one_ml_cond: echo " => skipped"; \ fi -one: - @$(call CCOMP,$(NAME).out $(ARGS_$(NAME)) $(NAME).$(O) $(ARCH).$(O)) \ - && echo " => passed" || echo " => failed" - clean: defaultclean - @rm -f ./codegen *.out *.out.manifest *.$(O) *.exe - @rm -f parsecmm.ml parsecmm.mli lexcmm.ml - @rm -f $(CASES:=.s) include $(BASEDIR)/makefiles/Makefile.common -ifeq "$(CCOMPTYPE)-$(ARCH)" "msvc-amd64" -# these tests are not ported to MSVC64 yet -SKIP=true -else -SKIP=false -endif - ifeq "$(WITH_SPACETIME)" "true" # These tests have not been ported for Spacetime SKIP=true -endif - -ifeq ($(CCOMPTYPE),msvc) -CCOMP=set -o pipefail ; $(CC) $(CFLAGS) /Fe$(1) | tail -n +2 else -CCOMP=$(CC) $(CFLAGS) -o $(1) +SKIP=false endif -tests: $(CASES:=.$(O)) - @for c in $(CASES); do \ - printf " ... testing '$$c':"; \ - $(MAKE) one NAME=$$c; \ - done + +tests: @for c in $(MLCASES); do \ printf " ... testing '$$c':"; \ $(MAKE) one_ml NAME=$$c; \ @@ -156,8 +85,3 @@ tests: $(CASES:=.$(O)) promote: -arch: $(ARCH).$(O) - -i386.obj: i386nt.asm - @set -o pipefail ; \ - $(ASM) $@ $^ | tail -n +2 diff --git a/testsuite/tests/asmcomp/alpha.S b/testsuite/tests/asmcomp/alpha.S deleted file mode 100644 index 4452876996..0000000000 --- a/testsuite/tests/asmcomp/alpha.S +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************/ -/* */ -/* OCaml */ -/* */ -/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */ -/* */ -/* Copyright 1996 Institut National de Recherche en Informatique et */ -/* en Automatique. */ -/* */ -/* All rights reserved. This file is distributed under the terms of */ -/* the GNU Lesser General Public License version 2.1, with the */ -/* special exception on linking described in the file LICENSE. */ -/* */ -/**************************************************************************/ - - .globl call_gen_code - .ent call_gen_code - -call_gen_code: - lda $sp, -80($sp) - stq $26, 0($sp) - stq $9, 8($sp) - stq $10, 16($sp) - stq $11, 24($sp) - stq $12, 32($sp) - stt $f2, 40($sp) - stt $f3, 48($sp) - stt $f4, 56($sp) - stt $f5, 64($sp) - mov $16, $27 - mov $17, $16 - mov $18, $17 - mov $19, $18 - mov $20, $19 - jsr ($27) - ldq $26, 0($sp) - ldq $9, 8($sp) - ldq $10, 16($sp) - ldq $11, 24($sp) - ldq $12, 32($sp) - ldt $f2, 40($sp) - ldt $f3, 48($sp) - ldt $f4, 56($sp) - ldt $f5, 64($sp) - lda $sp, 80($sp) - ret ($26) - - .end call_gen_code - - .globl caml_c_call - .ent caml_c_call -caml_c_call: - lda $sp, -16($sp) - stq $26, 0($sp) - stq $gp, 8($sp) - mov $25, $27 - jsr ($25) - ldq $26, 0($sp) - ldq $gp, 8($sp) - lda $sp, 16($sp) - ret ($26) - - .end caml_c_call diff --git a/testsuite/tests/asmcomp/hppa.S b/testsuite/tests/asmcomp/hppa.S deleted file mode 100644 index 5f7455b7cb..0000000000 --- a/testsuite/tests/asmcomp/hppa.S +++ /dev/null @@ -1,161 +0,0 @@ -;********************************************************************* -;* * -;* OCaml * -;* * -;* Xavier Leroy, projet Cristal, INRIA Rocquencourt * -;* * -;* Copyright 1996 Institut National de Recherche en Informatique et * -;* en Automatique. All rights reserved. This file is distributed * -;* under the terms of the Q Public License version 1.0. * -;* * -;********************************************************************* - -; Must be preprocessed by cpp - -#ifdef SYS_hpux -#define G(x) x -#define CODESPACE .code -#define CODE_ALIGN 4 -#define EXPORT_CODE(x) .export x, entry, priv_lev=3 -#define STARTPROC .proc ! .callinfo frame=0, no_calls ! .entry -#define ENDPROC .exit ! .procend -#endif - -#ifdef SYS_nextstep -#define G(x) _##x -#define CODESPACE .text -#define CODE_ALIGN 2 -#define EXPORT_CODE(x) .globl x -#define STARTPROC -#define ENDPROC -#endif - -#ifdef SYS_hpux - .space $PRIVATE$ - .subspa $DATA$,quad=1,align=8,access=31 - .subspa $BSS$,quad=1,align=8,access=31,zero,sort=82 - .space $TEXT$ - .subspa $LIT$,quad=0,align=8,access=44 - .subspa $CODE$,quad=0,align=8,access=44,code_only - .import $global$, data - .import $$dyncall, millicode -#endif - - CODESPACE - .align CODE_ALIGN - EXPORT_CODE(G(call_gen_code)) -G(call_gen_code): - STARTPROC - stw %r2,-20(%r30) - ldo 256(%r30), %r30 -; Save the callee-save registers - ldo -32(%r30), %r1 - stws,ma %r3, -4(%r1) - stws,ma %r4, -4(%r1) - stws,ma %r5, -4(%r1) - stws,ma %r6, -4(%r1) - stws,ma %r7, -4(%r1) - stws,ma %r8, -4(%r1) - stws,ma %r9, -4(%r1) - stws,ma %r10, -4(%r1) - stws,ma %r11, -4(%r1) - stws,ma %r12, -4(%r1) - stws,ma %r13, -4(%r1) - stws,ma %r14, -4(%r1) - stws,ma %r15, -4(%r1) - stws,ma %r16, -4(%r1) - stws,ma %r17, -4(%r1) - stws,ma %r18, -4(%r1) - fstds,ma %fr12, -8(%r1) - fstds,ma %fr13, -8(%r1) - fstds,ma %fr14, -8(%r1) - fstds,ma %fr15, -8(%r1) - fstds,ma %fr16, -8(%r1) - fstds,ma %fr17, -8(%r1) - fstds,ma %fr18, -8(%r1) - fstds,ma %fr19, -8(%r1) - fstds,ma %fr20, -8(%r1) - fstds,ma %fr21, -8(%r1) - fstds,ma %fr22, -8(%r1) - fstds,ma %fr23, -8(%r1) - fstds,ma %fr24, -8(%r1) - fstds,ma %fr25, -8(%r1) - fstds,ma %fr26, -8(%r1) - fstds,ma %fr27, -8(%r1) - fstds,ma %fr28, -8(%r1) - fstds,ma %fr29, -8(%r1) - fstds,ma %fr30, -8(%r1) - fstds,ma %fr31, -8(%r1) - -; Shuffle the arguments and call - copy %r26, %r22 - copy %r25, %r26 - copy %r24, %r25 - copy %r23, %r24 - fcpy,dbl %fr5, %fr4 -#ifdef SYS_hpux - bl $$dyncall, %r2 - nop -#else - ble 0(4, %r22) - copy %r31, %r2 -#endif -; Shuffle the results - copy %r26, %r28 -; Restore the callee-save registers - ldo -32(%r30), %r1 - ldws,ma -4(%r1), %r3 - ldws,ma -4(%r1), %r4 - ldws,ma -4(%r1), %r5 - ldws,ma -4(%r1), %r6 - ldws,ma -4(%r1), %r7 - ldws,ma -4(%r1), %r8 - ldws,ma -4(%r1), %r9 - ldws,ma -4(%r1), %r10 - ldws,ma -4(%r1), %r11 - ldws,ma -4(%r1), %r12 - ldws,ma -4(%r1), %r13 - ldws,ma -4(%r1), %r14 - ldws,ma -4(%r1), %r15 - ldws,ma -4(%r1), %r16 - ldws,ma -4(%r1), %r17 - ldws,ma -4(%r1), %r18 - fldds,ma -8(%r1), %fr12 - fldds,ma -8(%r1), %fr13 - fldds,ma -8(%r1), %fr14 - fldds,ma -8(%r1), %fr15 - fldds,ma -8(%r1), %fr16 - fldds,ma -8(%r1), %fr17 - fldds,ma -8(%r1), %fr18 - fldds,ma -8(%r1), %fr19 - fldds,ma -8(%r1), %fr20 - fldds,ma -8(%r1), %fr21 - fldds,ma -8(%r1), %fr22 - fldds,ma -8(%r1), %fr23 - fldds,ma -8(%r1), %fr24 - fldds,ma -8(%r1), %fr25 - fldds,ma -8(%r1), %fr26 - fldds,ma -8(%r1), %fr27 - fldds,ma -8(%r1), %fr28 - fldds,ma -8(%r1), %fr29 - fldds,ma -8(%r1), %fr30 - fldds,ma -8(%r1), %fr31 - - ldo -256(%r30), %r30 - ldw -20(%r30), %r2 - bv 0(%r2) - nop - ENDPROC - - .align CODE_ALIGN - EXPORT_CODE(caml_c_call) -G(caml_c_call): - STARTPROC -#ifdef SYS_hpux - bl $$dyncall, %r0 - nop -#else - bv 0(%r22) - nop -#endif - ENDPROC diff --git a/testsuite/tests/asmcomp/ia64.S b/testsuite/tests/asmcomp/ia64.S deleted file mode 100644 index 5c3259428d..0000000000 --- a/testsuite/tests/asmcomp/ia64.S +++ /dev/null @@ -1,119 +0,0 @@ -/**************************************************************************/ -/* */ -/* OCaml */ -/* */ -/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */ -/* */ -/* Copyright 1996 Institut National de Recherche en Informatique et */ -/* en Automatique. */ -/* */ -/* All rights reserved. This file is distributed under the terms of */ -/* the GNU Lesser General Public License version 2.1, with the */ -/* special exception on linking described in the file LICENSE. */ -/* */ -/**************************************************************************/ - -#define ST8OFF(a,b,d) st8 [a] = b, d -#define LD8OFF(a,b,d) ld8 a = [b], d -#define STFDOFF(a,b,d) stfd [a] = b, d -#define LDFDOFF(a,b,d) ldfd a = [b], d -#define STFSPILLOFF(a,b,d) stf.spill [a] = b, d -#define LDFFILLOFF(a,b,d) ldf.fill a = [b], d - - .text - .align 16 - - .global call_gen_code# - .proc call_gen_code# - -call_gen_code: - /* Allocate 64 "out" registers (for the OCaml code) and no locals */ - alloc r3 = ar.pfs, 0, 0, 64, 0 - - /* Save PFS, return address and GP on stack */ - add sp = -368, sp ;; - add r2 = 16, sp ;; - ST8OFF(r2,r3,8) ;; - mov r3 = b0 ;; - ST8OFF(r2,r3,8) ;; - ST8OFF(r2,gp,8) ;; - - /* Save predicates on stack */ - mov r3 = pr ;; - st8 [r2] = r3 - - /* Save callee-save floating-point registers on stack */ - add r2 = 48, sp - add r3 = 64, sp ;; - STFSPILLOFF(r2,f2,16) ;; - STFSPILLOFF(r3,f3,16) ;; - STFSPILLOFF(r2,f4,16) ;; - STFSPILLOFF(r3,f5,16) ;; - STFSPILLOFF(r2,f16,16) ;; - STFSPILLOFF(r3,f17,16) ;; - STFSPILLOFF(r2,f18,16) ;; - STFSPILLOFF(r3,f19,16) ;; - STFSPILLOFF(r2,f20,16) ;; - STFSPILLOFF(r3,f21,16) ;; - STFSPILLOFF(r2,f22,16) ;; - STFSPILLOFF(r3,f23,16) ;; - STFSPILLOFF(r2,f24,16) ;; - STFSPILLOFF(r3,f25,16) ;; - STFSPILLOFF(r2,f26,16) ;; - STFSPILLOFF(r3,f27,16) ;; - STFSPILLOFF(r2,f28,16) ;; - STFSPILLOFF(r3,f29,16) ;; - STFSPILLOFF(r2,f30,16) ;; - STFSPILLOFF(r3,f31,16) ;; - - /* Recover entry point and gp from the function pointer in in0 */ - LD8OFF(r2,r32,8) ;; - ld8 r3 = [r32] ;; - mov b6 = r2 - mov gp = r3 ;; - - /* Shift arguments r33 ... r35 to r32 ... r34 */ - mov r32 = r33 - mov r33 = r34 - mov r34 = r35 - - /* Do the call */ - br.call.sptk b0 = b6 ;; - - /* Restore the saved floating-point registers */ - add r2 = 48, sp - add r3 = 64, sp ;; - LDFFILLOFF(f2,r2,16) ;; - LDFFILLOFF(f3,r3,16) ;; - LDFFILLOFF(f4,r2,16) ;; - LDFFILLOFF(f5,r3,16) ;; - LDFFILLOFF(f16,r2,16) ;; - LDFFILLOFF(f17,r3,16) ;; - LDFFILLOFF(f18,r2,16) ;; - LDFFILLOFF(f19,r3,16) ;; - LDFFILLOFF(f20,r2,16) ;; - LDFFILLOFF(f21,r3,16) ;; - LDFFILLOFF(f22,r2,16) ;; - LDFFILLOFF(f23,r3,16) ;; - LDFFILLOFF(f24,r2,16) ;; - LDFFILLOFF(f25,r3,16) ;; - LDFFILLOFF(f26,r2,16) ;; - LDFFILLOFF(f27,r3,16) ;; - LDFFILLOFF(f28,r2,16) ;; - LDFFILLOFF(f29,r3,16) ;; - LDFFILLOFF(f30,r2,16) ;; - LDFFILLOFF(f31,r3,16) ;; - - /* Restore gp, predicates and return */ - add r2 = 16, sp ;; - LD8OFF(r3,r2,8) ;; - mov ar.pfs = r3 - LD8OFF(r3,r2,8) ;; - mov b0 = r3 - LD8OFF(gp,r2,8) ;; - LD8OFF(r3,r2,8) ;; - mov pr = r3, -1 - - br.ret.sptk.many b0 ;; - - .endp call_gen_code# diff --git a/testsuite/tests/asmcomp/m68k.S b/testsuite/tests/asmcomp/m68k.S deleted file mode 100644 index 4d0f6a3a81..0000000000 --- a/testsuite/tests/asmcomp/m68k.S +++ /dev/null @@ -1,57 +0,0 @@ -|*********************************************************************** -|* * -|* OCaml * -|* * -|* Xavier Leroy, projet Cristal, INRIA Rocquencourt * -|* * -|* Copyright 1996 Institut National de Recherche en Informatique et * -|* en Automatique. All rights reserved. This file is distributed * -|* under the terms of the Q Public License version 1.0. * -|* * -|*********************************************************************** - -| call_gen_code is used with the following types: -| unit -> int -| int -> int -| int -> double -| int * int * address -> void -| int * int -> void -| unit -> unit -| Hence arg1 -> d0, arg2 -> d1, arg3 -> a0, -| and we need a special case for int -> double - - .text - .globl _call_gen_code -_call_gen_code: - link a6, #0 - movem d2-d7/a2-a6, a7@- - fmovem fp2-fp7, a7@- - movel a6@(8), a1 - movel a6@(12), d0 - movel a6@(16), d1 - movel a6@(20), a0 - jsr a1@ - fmovem a7@+, fp2-fp7 - movem a7@+, d2-d7/a2-a6 - unlk a6 - rts - - .globl _call_gen_code_float -_call_gen_code_float: - link a6, #0 - moveml d2-d7/a2-a6, a7@- - fmovem fp2-fp7, a7@- - movel a6@(8), a1 - movel a6@(12), d0 - jsr a1@ - fmoved fp0, a7@- - movel a7@+, d0 - movel a7@+, d1 - fmovem a7@+, fp2-fp7 - moveml a7@+, d2-d7/a2-a6 - unlk a6 - rts - - .globl _caml_c_call -_caml_c_call: - jmp a0@ diff --git a/testsuite/tests/asmcomp/mips.s b/testsuite/tests/asmcomp/mips.s deleted file mode 100644 index 1549dc0ae1..0000000000 --- a/testsuite/tests/asmcomp/mips.s +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************/ -/* */ -/* OCaml */ -/* */ -/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */ -/* */ -/* Copyright 1996 Institut National de Recherche en Informatique et */ -/* en Automatique. */ -/* */ -/* All rights reserved. This file is distributed under the terms of */ -/* the GNU Lesser General Public License version 2.1, with the */ -/* special exception on linking described in the file LICENSE. */ -/* */ -/**************************************************************************/ - - .globl call_gen_code - .ent call_gen_code -call_gen_code: - subu $sp, $sp, 0x90 - sd $31, 0x88($sp) - /* Save all callee-save registers */ - sd $16, 0x0($sp) - sd $17, 0x8($sp) - sd $18, 0x10($sp) - sd $19, 0x18($sp) - sd $20, 0x20($sp) - sd $21, 0x28($sp) - sd $22, 0x30($sp) - sd $23, 0x38($sp) - sd $30, 0x40($sp) - s.d $f20, 0x48($sp) - s.d $f22, 0x50($sp) - s.d $f24, 0x58($sp) - s.d $f26, 0x60($sp) - s.d $f28, 0x68($sp) - s.d $f30, 0x70($sp) - /* Shuffle arguments */ - move $8, $5 - move $9, $6 - move $10, $7 - move $25, $4 - jal $4 - /* Restore registers */ - ld $31, 0x88($sp) - ld $16, 0x0($sp) - ld $17, 0x8($sp) - ld $18, 0x10($sp) - ld $19, 0x18($sp) - ld $20, 0x20($sp) - ld $21, 0x28($sp) - ld $22, 0x30($sp) - ld $23, 0x38($sp) - ld $30, 0x40($sp) - l.d $f20, 0x48($sp) - l.d $f22, 0x50($sp) - l.d $f24, 0x58($sp) - l.d $f26, 0x60($sp) - l.d $f28, 0x68($sp) - l.d $f30, 0x70($sp) - addu $sp, $sp, 0x90 - j $31 - - .end call_gen_code - -/* Call a C function */ - - .globl caml_c_call - .ent caml_c_call -caml_c_call: - move $25, $24 - j $24 - .end caml_c_call diff --git a/testsuite/tests/asmcomp/sparc.S b/testsuite/tests/asmcomp/sparc.S deleted file mode 100644 index 5fd797b36f..0000000000 --- a/testsuite/tests/asmcomp/sparc.S +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************/ -/* */ -/* OCaml */ -/* */ -/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */ -/* */ -/* Copyright 1996 Institut National de Recherche en Informatique et */ -/* en Automatique. */ -/* */ -/* All rights reserved. This file is distributed under the terms of */ -/* the GNU Lesser General Public License version 2.1, with the */ -/* special exception on linking described in the file LICENSE. */ -/* */ -/**************************************************************************/ - -#if defined(SYS_solaris) || defined(SYS_linux) -#define Call_gen_code call_gen_code -#define Caml_c_call caml_c_call -#else -#define Call_gen_code _call_gen_code -#define Caml_c_call _caml_c_call -#endif - - .global Call_gen_code -Call_gen_code: - save %sp, -96, %sp - mov %i0, %l0 - mov %i1, %i0 - mov %i2, %i1 - mov %i3, %i2 - mov %i4, %i3 - mov %i5, %i4 - call %l0 - nop - mov %o0, %i0 - ret - restore - - .global Caml_c_call -Caml_c_call: - jmp %g4 - nop diff --git a/testsuite/tests/asmgen/Makefile b/testsuite/tests/asmgen/Makefile new file mode 100644 index 0000000000..f6d0c238ff --- /dev/null +++ b/testsuite/tests/asmgen/Makefile @@ -0,0 +1,122 @@ +#************************************************************************** +#* * +#* OCaml * +#* * +#* Xavier Clerc, SED, INRIA Rocquencourt * +#* * +#* Copyright 2010 Institut National de Recherche en Informatique et * +#* en Automatique. * +#* * +#* All rights reserved. This file is distributed under the terms of * +#* the GNU Lesser General Public License version 2.1, with the * +#* special exception on linking described in the file LICENSE. * +#* * +#************************************************************************** + +BASEDIR=../.. + +include $(BASEDIR)/../config/Makefile + +INCLUDES=\ + -I $(OTOPDIR)/parsing \ + -I $(OTOPDIR)/utils \ + -I $(OTOPDIR)/typing \ + -I $(OTOPDIR)/middle_end \ + -I $(OTOPDIR)/bytecomp \ + -I $(OTOPDIR)/asmcomp + +OTHEROBJS=\ + $(OTOPDIR)/compilerlibs/ocamlcommon.cma \ + $(OTOPDIR)/compilerlibs/ocamloptcomp.cma + +OBJS=parsecmmaux.cmo parsecmm.cmo lexcmm.cmo + +ADD_COMPFLAGS=$(INCLUDES) -w -40 -g + +default: + @if $(BYTECODE_ONLY) || $(SKIP) ; then $(MAKE) skips ; else \ + $(MAKE) all; \ + fi + +all: + @$(MAKE) arch codegen + @$(MAKE) tests + +main.cmo: parsecmm.cmo + +codegen: parsecmm.ml lexcmm.ml $(OBJS:.cmo=.cmi) $(OBJS) main.cmo + @$(OCAMLC) $(LINKFLAGS) -o codegen $(OTHEROBJS) $(OBJS) main.cmo + +parsecmm.mli parsecmm.ml: parsecmm.mly + @$(OCAMLYACC) -q parsecmm.mly + +lexcmm.ml: lexcmm.mll + @$(OCAMLLEX) -q lexcmm.mll + +CASES=fib tak quicksort quicksort2 soli \ + arith checkbound tagged-fib tagged-integr tagged-quicksort tagged-tak \ + catch-try catch-rec even-odd even-odd-spill pgcd +ARGS_fib=-DINT_INT -DFUN=fib main.c +ARGS_tak=-DUNIT_INT -DFUN=takmain main.c +ARGS_quicksort=-DSORT -DFUN=quicksort main.c +ARGS_quicksort2=-DSORT -DFUN=quicksort main.c +ARGS_soli=-DUNIT_INT -DFUN=solitaire main.c +ARGS_integr=-DINT_FLOAT -DFUN=test main.c +ARGS_arith=mainarith.c +ARGS_checkbound=-DCHECKBOUND main.c +ARGS_tagged-fib=-DINT_INT -DFUN=fib main.c +ARGS_tagged-integr=-DINT_FLOAT -DFUN=test main.c +ARGS_tagged-quicksort=-DSORT -DFUN=quicksort main.c +ARGS_tagged-tak=-DUNIT_INT -DFUN=takmain main.c +ARGS_catch-try=-DINT_INT -DFUN=catch_exit main.c +ARGS_catch-rec=-DINT_INT -DFUN=catch_fact main.c +ARGS_even-odd=-DINT_INT -DFUN=is_even main.c +ARGS_even-odd-spill=-DINT_INT -DFUN=is_even main.c +ARGS_pgcd=-DINT_INT -DFUN=pgcd_30030 main.c + +skips: + @for c in $(CASES); do \ + echo " ... testing '$$c': => skipped"; \ + done + +one: + @$(call CCOMP,$(NAME).out $(ARGS_$(NAME)) $(NAME).$(O) $(ARCH).$(O)) \ + && echo " => passed" || echo " => failed" + +clean: defaultclean + @rm -f ./codegen *.out *.out.manifest *.$(O) *.exe + @rm -f parsecmm.ml parsecmm.mli lexcmm.ml + @rm -f $(CASES:=.s) + +include $(BASEDIR)/makefiles/Makefile.common + +ifeq "$(CCOMPTYPE)-$(ARCH)" "msvc-amd64" +# these tests are not ported to MSVC64 yet +SKIP=true +else +SKIP=false +endif + +ifeq "$(WITH_SPACETIME)" "true" +# These tests have not been ported for Spacetime +SKIP=true +endif + +ifeq ($(CCOMPTYPE),msvc) +CCOMP=set -o pipefail ; $(CC) $(CFLAGS) /Fe$(1) | tail -n +2 +else +CCOMP=$(CC) $(CFLAGS) -o $(1) +endif +tests: $(CASES:=.$(O)) + @for c in $(CASES); do \ + printf " ... testing '$$c':"; \ + $(MAKE) one NAME=$$c; \ + done + +promote: + +arch: $(ARCH).$(O) + +i386.obj: i386nt.asm + @set -o pipefail ; \ + $(ASM) $@ $^ | tail -n +2 diff --git a/testsuite/tests/asmcomp/amd64.S b/testsuite/tests/asmgen/amd64.S index bb4f9b5c0b..fb87307df0 100644 --- a/testsuite/tests/asmcomp/amd64.S +++ b/testsuite/tests/asmgen/amd64.S @@ -76,3 +76,8 @@ CAML_ABSF_MASK: .quad 0x7FFFFFFFFFFFFFFF, 0 .comm young_limit, 8 + +#if defined(SYS_linux) + /* Mark stack as non-executable */ + .section .note.GNU-stack,"",%progbits +#endif diff --git a/testsuite/tests/asmcomp/arith.cmm b/testsuite/tests/asmgen/arith.cmm index 09156568a9..09156568a9 100644 --- a/testsuite/tests/asmcomp/arith.cmm +++ b/testsuite/tests/asmgen/arith.cmm diff --git a/testsuite/tests/asmcomp/arm.S b/testsuite/tests/asmgen/arm.S index fbbe276359..da6d9ee74f 100644 --- a/testsuite/tests/asmcomp/arm.S +++ b/testsuite/tests/asmgen/arm.S @@ -28,8 +28,7 @@ call_gen_code: mov r0, r1 mov r1, r2 mov r2, r3 - mov lr, pc - mov pc, r4 + blx r4 ldmea fp, {r4, r5, r6, r7, r8, r9, fp, sp, pc} .global caml_c_call @@ -37,4 +36,7 @@ call_gen_code: .align 0 caml_c_call: @ function to call is in r10 - mov pc, r10 + bx r10 + +/* Mark stack as non-executable */ + .section .note.GNU-stack,"",%progbits diff --git a/testsuite/tests/asmcomp/arm64.S b/testsuite/tests/asmgen/arm64.S index fa49f1aee1..4b803d20b1 100644 --- a/testsuite/tests/asmcomp/arm64.S +++ b/testsuite/tests/asmgen/arm64.S @@ -53,3 +53,6 @@ call_gen_code: .align 2 caml_c_call: br x15 + +/* Mark stack as non-executable */ + .section .note.GNU-stack,"",%progbits diff --git a/testsuite/tests/asmcomp/catch-rec.cmm b/testsuite/tests/asmgen/catch-rec.cmm index 69208f5f4a..69208f5f4a 100644 --- a/testsuite/tests/asmcomp/catch-rec.cmm +++ b/testsuite/tests/asmgen/catch-rec.cmm diff --git a/testsuite/tests/asmcomp/catch-try.cmm b/testsuite/tests/asmgen/catch-try.cmm index bbbdc387b1..bbbdc387b1 100644 --- a/testsuite/tests/asmcomp/catch-try.cmm +++ b/testsuite/tests/asmgen/catch-try.cmm diff --git a/testsuite/tests/asmcomp/checkbound.cmm b/testsuite/tests/asmgen/checkbound.cmm index 35206f25bb..35206f25bb 100644 --- a/testsuite/tests/asmcomp/checkbound.cmm +++ b/testsuite/tests/asmgen/checkbound.cmm diff --git a/testsuite/tests/asmcomp/even-odd-spill.cmm b/testsuite/tests/asmgen/even-odd-spill.cmm index 0c5f05589c..0c5f05589c 100644 --- a/testsuite/tests/asmcomp/even-odd-spill.cmm +++ b/testsuite/tests/asmgen/even-odd-spill.cmm diff --git a/testsuite/tests/asmcomp/even-odd.cmm b/testsuite/tests/asmgen/even-odd.cmm index db79f1cab8..db79f1cab8 100644 --- a/testsuite/tests/asmcomp/even-odd.cmm +++ b/testsuite/tests/asmgen/even-odd.cmm diff --git a/testsuite/tests/asmcomp/fib.cmm b/testsuite/tests/asmgen/fib.cmm index 49de4ba12e..49de4ba12e 100644 --- a/testsuite/tests/asmcomp/fib.cmm +++ b/testsuite/tests/asmgen/fib.cmm diff --git a/testsuite/tests/asmcomp/i386.S b/testsuite/tests/asmgen/i386.S index 6da92f2a3c..26dc83fcac 100644 --- a/testsuite/tests/asmcomp/i386.S +++ b/testsuite/tests/asmgen/i386.S @@ -47,12 +47,13 @@ G(call_gen_code): .globl G(caml_c_call) .align FUNCTION_ALIGN G(caml_c_call): - ffree %st(0) - ffree %st(1) - ffree %st(2) - ffree %st(3) jmp *%eax .comm G(caml_exception_pointer), 4 .comm G(young_ptr), 4 .comm G(young_start), 4 + +#if defined(SYS_linux_elf) + /* Mark stack as non-executable */ + .section .note.GNU-stack,"",%progbits +#endif diff --git a/testsuite/tests/asmcomp/i386nt.asm b/testsuite/tests/asmgen/i386nt.asm index 618d41c949..618d41c949 100644 --- a/testsuite/tests/asmcomp/i386nt.asm +++ b/testsuite/tests/asmgen/i386nt.asm diff --git a/testsuite/tests/asmcomp/integr.cmm b/testsuite/tests/asmgen/integr.cmm index c82d60b247..c82d60b247 100644 --- a/testsuite/tests/asmcomp/integr.cmm +++ b/testsuite/tests/asmgen/integr.cmm diff --git a/testsuite/tests/asmcomp/lexcmm.mli b/testsuite/tests/asmgen/lexcmm.mli index f9fe6afadf..f9fe6afadf 100644 --- a/testsuite/tests/asmcomp/lexcmm.mli +++ b/testsuite/tests/asmgen/lexcmm.mli diff --git a/testsuite/tests/asmcomp/lexcmm.mll b/testsuite/tests/asmgen/lexcmm.mll index a946f6aa62..a946f6aa62 100644 --- a/testsuite/tests/asmcomp/lexcmm.mll +++ b/testsuite/tests/asmgen/lexcmm.mll diff --git a/testsuite/tests/asmcomp/main.c b/testsuite/tests/asmgen/main.c index 5f305731f0..5f305731f0 100644 --- a/testsuite/tests/asmcomp/main.c +++ b/testsuite/tests/asmgen/main.c diff --git a/testsuite/tests/asmcomp/main.ml b/testsuite/tests/asmgen/main.ml index c9eb2dca31..6970f99a93 100644 --- a/testsuite/tests/asmcomp/main.ml +++ b/testsuite/tests/asmgen/main.ml @@ -6,7 +6,6 @@ let compile_file filename = let out_name = Filename.chop_extension filename ^ ".s" in Emitaux.output_channel := open_out out_name end; (* otherwise, stdout *) - Clflags.dlcode := false; Compilenv.reset "test"; Emit.begin_assembly(); let ic = open_in filename in diff --git a/testsuite/tests/asmcomp/mainarith.c b/testsuite/tests/asmgen/mainarith.c index de876bfead..de876bfead 100644 --- a/testsuite/tests/asmcomp/mainarith.c +++ b/testsuite/tests/asmgen/mainarith.c diff --git a/testsuite/tests/asmcomp/parsecmm.mly b/testsuite/tests/asmgen/parsecmm.mly index 52a6dfad1d..52a6dfad1d 100644 --- a/testsuite/tests/asmcomp/parsecmm.mly +++ b/testsuite/tests/asmgen/parsecmm.mly diff --git a/testsuite/tests/asmcomp/parsecmmaux.ml b/testsuite/tests/asmgen/parsecmmaux.ml index db55527354..db55527354 100644 --- a/testsuite/tests/asmcomp/parsecmmaux.ml +++ b/testsuite/tests/asmgen/parsecmmaux.ml diff --git a/testsuite/tests/asmcomp/parsecmmaux.mli b/testsuite/tests/asmgen/parsecmmaux.mli index f5478579ee..f5478579ee 100644 --- a/testsuite/tests/asmcomp/parsecmmaux.mli +++ b/testsuite/tests/asmgen/parsecmmaux.mli diff --git a/testsuite/tests/asmcomp/pgcd.cmm b/testsuite/tests/asmgen/pgcd.cmm index e75a149ac0..e75a149ac0 100644 --- a/testsuite/tests/asmcomp/pgcd.cmm +++ b/testsuite/tests/asmgen/pgcd.cmm diff --git a/testsuite/tests/asmcomp/power.S b/testsuite/tests/asmgen/power.S index d13035a46e..71c692f97b 100644 --- a/testsuite/tests/asmcomp/power.S +++ b/testsuite/tests/asmgen/power.S @@ -195,3 +195,6 @@ FUNCTION(caml_c_call) #error "wrong MODEL" #endif bctr + +/* Mark stack as non-executable */ + .section .note.GNU-stack,"",%progbits diff --git a/testsuite/tests/asmcomp/quicksort.cmm b/testsuite/tests/asmgen/quicksort.cmm index b08594154b..b08594154b 100644 --- a/testsuite/tests/asmcomp/quicksort.cmm +++ b/testsuite/tests/asmgen/quicksort.cmm diff --git a/testsuite/tests/asmcomp/quicksort2.cmm b/testsuite/tests/asmgen/quicksort2.cmm index 96c1fc12e7..96c1fc12e7 100644 --- a/testsuite/tests/asmcomp/quicksort2.cmm +++ b/testsuite/tests/asmgen/quicksort2.cmm diff --git a/testsuite/tests/asmcomp/s390x.S b/testsuite/tests/asmgen/s390x.S index d0b4b3c8df..99eeca2704 100644 --- a/testsuite/tests/asmcomp/s390x.S +++ b/testsuite/tests/asmgen/s390x.S @@ -62,3 +62,6 @@ CAML_ABSF_MASK: .quad 0x7FFFFFFFFFFFFFFF, 0 .comm young_limit, 8 + +/* Mark stack as non-executable */ + .section .note.GNU-stack,"",%progbits diff --git a/testsuite/tests/asmcomp/soli.cmm b/testsuite/tests/asmgen/soli.cmm index c8ffc5d684..c8ffc5d684 100644 --- a/testsuite/tests/asmcomp/soli.cmm +++ b/testsuite/tests/asmgen/soli.cmm diff --git a/testsuite/tests/asmcomp/tagged-fib.cmm b/testsuite/tests/asmgen/tagged-fib.cmm index d83afaa487..d83afaa487 100644 --- a/testsuite/tests/asmcomp/tagged-fib.cmm +++ b/testsuite/tests/asmgen/tagged-fib.cmm diff --git a/testsuite/tests/asmcomp/tagged-integr.cmm b/testsuite/tests/asmgen/tagged-integr.cmm index b89bd50863..b89bd50863 100644 --- a/testsuite/tests/asmcomp/tagged-integr.cmm +++ b/testsuite/tests/asmgen/tagged-integr.cmm diff --git a/testsuite/tests/asmcomp/tagged-quicksort.cmm b/testsuite/tests/asmgen/tagged-quicksort.cmm index 59293aa2ed..59293aa2ed 100644 --- a/testsuite/tests/asmcomp/tagged-quicksort.cmm +++ b/testsuite/tests/asmgen/tagged-quicksort.cmm diff --git a/testsuite/tests/asmcomp/tagged-tak.cmm b/testsuite/tests/asmgen/tagged-tak.cmm index 30c98a00bf..30c98a00bf 100644 --- a/testsuite/tests/asmcomp/tagged-tak.cmm +++ b/testsuite/tests/asmgen/tagged-tak.cmm diff --git a/testsuite/tests/asmcomp/tak.cmm b/testsuite/tests/asmgen/tak.cmm index 2750fff334..2750fff334 100644 --- a/testsuite/tests/asmcomp/tak.cmm +++ b/testsuite/tests/asmgen/tak.cmm |