summaryrefslogtreecommitdiffstats
path: root/testasmcomp
diff options
context:
space:
mode:
Diffstat (limited to 'testasmcomp')
-rw-r--r--testasmcomp/Makefile.nt134
-rw-r--r--testasmcomp/i386nt.asm66
-rw-r--r--testasmcomp/mainarith.c6
3 files changed, 203 insertions, 3 deletions
diff --git a/testasmcomp/Makefile.nt b/testasmcomp/Makefile.nt
new file mode 100644
index 000000000..7bea9ca90
--- /dev/null
+++ b/testasmcomp/Makefile.nt
@@ -0,0 +1,134 @@
+!include ..\config\Makefile.nt
+
+CAMLC=..\boot\cslrun ..\boot\cslc -I ..\boot
+COMPFLAGS=$(INCLUDES)
+LINKFLAGS=
+CAMLYACC=..\boot\cslyacc
+YACCFLAGS=
+CAMLLEX=..\boot\cslrun ..\boot\csllex
+CAMLDEP=..\boot\cslrun ..\tools\csldep
+DEPFLAGS=$(INCLUDES)
+CAMLRUN=..\boot\cslrun
+
+CODEGEN=.\codegen
+CC=$(NATIVECC)
+CFLAGS=
+
+PROGS=fib.exe tak.exe quicksort.exe quicksort2.exe soli.exe integr.exe \
+ arith.exe checkbound.exe
+
+all: codegen $(PROGS)
+
+INCLUDES=-I ..\utils -I ..\typing -I ..\asmcomp
+
+OTHEROBJS=..\utils\misc.cmo ..\utils\tbl.cmo \
+ ..\utils\clflags.cmo ..\utils\config.cmo \
+ ..\parsing\location.cmo \
+ ..\typing\ident.cmo ..\typing\path.cmo ..\typing\subst.cmo \
+ ..\typing\primitive.cmo ..\typing\predef.cmo ..\typing\printtyp.cmo \
+ ..\typing\datarepr.cmo ..\typing\env.cmo \
+ ..\bytecomp\lambda.cmo \
+ ..\asmcomp\arch.cmo ..\asmcomp\cmm.cmo ..\asmcomp\printcmm.cmo \
+ ..\asmcomp\clambda.cmo ..\asmcomp\compilenv.cmo \
+ ..\asmcomp\reg.cmo ..\asmcomp\mach.cmo ..\asmcomp\proc.cmo \
+ ..\asmcomp\closure.cmo ..\asmcomp\cmmgen.cmo \
+ ..\asmcomp\printmach.cmo ..\asmcomp\selection.cmo ..\asmcomp\liveness.cmo \
+ ..\asmcomp\spill.cmo ..\asmcomp\split.cmo \
+ ..\asmcomp\interf.cmo ..\asmcomp\coloring.cmo ..\asmcomp\reload.cmo \
+ ..\asmcomp\linearize.cmo ..\asmcomp\scheduling.cmo \
+ ..\asmcomp\printlinear.cmo ..\asmcomp\emitaux.cmo \
+ ..\asmcomp\emit.cmo ..\asmcomp\asmgen.cmo
+
+OBJS=parsecmmaux.cmo parsecmm.cmo lexcmm.cmo main.cmo
+
+codegen: $(OTHEROBJS) $(OBJS)
+ $(CAMLC) $(LINKFLAGS) -o codegen $(OTHEROBJS) $(OBJS)
+clean::
+ rm -f codegen
+
+# The parser
+
+parsecmm.mli parsecmm.ml: parsecmm.mly
+ $(CAMLYACC) $(YACCFLAGS) parsecmm.mly
+
+clean::
+ rm -f parsecmm.mli parsecmm.ml parsecmm.output
+
+beforedepend:: parsecmm.mli parsecmm.ml
+
+# The lexer
+
+lexcmm.ml: lexcmm.mll
+ $(CAMLLEX) lexcmm.mll
+
+clean::
+ rm -f lexcmm.ml
+
+beforedepend:: lexcmm.ml
+
+# The test programs
+
+$(PROGS:.exe=.obj): codegen
+
+fib.exe: main.c fib.obj $(ARCH).obj
+ $(CC) $(CFLAGS) -o fib.exe -DINT_INT -DFUN=fib main.c fib.obj $(ARCH).obj
+
+tak.exe: main.c tak.obj $(ARCH).obj
+ $(CC) $(CFLAGS) -o tak.exe -DUNIT_INT -DFUN=takmain main.c tak.obj $(ARCH).obj
+
+quicksort.exe: main.c quicksort.obj $(ARCH).obj
+ $(CC) $(CFLAGS) -o quicksort.exe -DSORT -DFUN=quicksort main.c quicksort.obj $(ARCH).obj
+
+quicksort2.exe: main.c quicksort2.obj $(ARCH).obj
+ $(CC) $(CFLAGS) -o quicksort2.exe -DSORT -DFUN=quicksort main.c quicksort2.obj $(ARCH).obj
+
+soli.exe: main.c soli.obj $(ARCH).obj
+ $(CC) $(CFLAGS) -o soli.exe -DUNIT_INT -DFUN=solitaire main.c soli.obj $(ARCH).obj
+
+integr.exe: main.c integr.obj $(ARCH).obj
+ $(CC) $(CFLAGS) -o integr.exe -DINT_FLOAT -DFUN=test main.c integr.obj $(ARCH).obj
+
+tagged-fib.exe: main.c tagged-fib.obj $(ARCH).obj
+ $(CC) $(CFLAGS) -o tagged-fib.exe -DINT_INT -DFUN=fib main.c tagged-fib.obj $(ARCH).obj
+
+tagged-tak.exe: main.c tagged-tak.obj $(ARCH).obj
+ $(CC) $(CFLAGS) -o tagged-tak.exe -DUNIT_INT -DFUN=takmain main.c tagged-tak.obj $(ARCH).obj
+
+tagged-quicksort.exe: main.c tagged-quicksort.obj $(ARCH).obj
+ $(CC) $(CFLAGS) -o tagged-quicksort.exe -DSORT -DFUN=quicksort main.c tagged-quicksort.obj $(ARCH).obj
+
+tagged-integr.exe: main.c tagged-integr.obj $(ARCH).obj
+ $(CC) $(CFLAGS) -o tagged-integr.exe -DINT_FLOAT -DFUN=test main.c tagged-integr.obj $(ARCH).obj
+
+arith.exe: mainarith.c arith.obj $(ARCH).obj
+ $(CC) $(CFLAGS) -o arith.exe mainarith.c arith.obj $(ARCH).obj
+
+checkbound.exe: main.c checkbound.obj $(ARCH).obj
+ $(CC) $(CFLAGS) -o checkbound.exe -DCHECKBOUND main.c checkbound.obj $(ARCH).obj
+
+$(ARCH).obj: $(ARCH)nt.asm
+ $(AS) $(ASFLAGS) /c /Fo$(ARCH).obj $(ARCH)nt.asm
+
+.SUFFIXES:
+.SUFFIXES: .cmm .obj .ml .mli .cmo .cmi
+
+.ml.cmo:
+ $(CAMLC) $(COMPFLAGS) -c $<
+
+.mli.cmi:
+ $(CAMLC) $(COMPFLAGS) -c $<
+
+.cmm.obj:
+ $(CAMLRUN) $(CODEGEN) $*.cmm > $*.asm
+ $(AS) $(ASFLAGS) /c $*.asm
+
+clean::
+ rm -f *.exe *.cm* *.obj *~
+ rm -f $(PROGS:.exe=.asm)
+
+$(PROGS:.exe=.obj): $(CODEGEN)
+
+depend: beforedepend
+ $(CAMLDEP) $(DEPFLAGS) *.mli *.ml > .depend
+
+!include .depend
diff --git a/testasmcomp/i386nt.asm b/testasmcomp/i386nt.asm
new file mode 100644
index 000000000..1bcbf84f8
--- /dev/null
+++ b/testasmcomp/i386nt.asm
@@ -0,0 +1,66 @@
+;*********************************************************************
+;
+; Caml Special Light
+;
+; Xavier Leroy, projet Cristal, INRIA Rocquencourt
+;
+; Copyright 1995 Institut National de Recherche en Informatique et
+; Automatique. Distributed only by permission.
+;
+;*********************************************************************
+
+; $Id$
+
+ .386
+ .MODEL FLAT
+
+ .CODE
+ PUBLIC _call_gen_code
+ ALIGN 4
+_call_gen_code:
+ push ebp
+ mov ebp, esp
+ push ebx
+ push esi
+ push edi
+ mov eax, [ebp+12]
+ mov ebx, [ebp+16]
+ mov ecx, [ebp+20]
+ mov edx, [ebp+24]
+ call DWORD PTR [ebp+8]
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+
+ PUBLIC _caml_c_call
+ ALIGN 4
+_caml_c_call:
+ ffree st(0)
+ ffree st(1)
+ ffree st(2)
+ ffree st(3)
+ jmp eax
+
+ PUBLIC _caml_call_gc
+ PUBLIC _caml_alloc
+ PUBLIC _caml_alloc1
+ PUBLIC _caml_alloc2
+ PUBLIC _caml_alloc3
+_caml_call_gc:
+_caml_alloc:
+_caml_alloc1:
+_caml_alloc2:
+_caml_alloc3:
+ int 3
+
+ .DATA
+ PUBLIC _caml_exception_pointer
+_caml_exception_pointer dword 0
+ PUBLIC _young_ptr
+_young_ptr dword 0
+ PUBLIC _young_limit
+_young_limit dword 0
+
+ END
diff --git a/testasmcomp/mainarith.c b/testasmcomp/mainarith.c
index 5290c35a5..af233c889 100644
--- a/testasmcomp/mainarith.c
+++ b/testasmcomp/mainarith.c
@@ -284,9 +284,9 @@ int main(argc, argv)
}
}
weird[0] = 0.0;
- weird[1] = 1.0 / 0.0; /* +infty */
- weird[2] = -1.0 / 0.0; /* -infty */
- weird[3] = 0.0 / 0.0; /* NaN */
+ weird[1] = 1.0 / weird[0]; /* +infty */
+ weird[2] = -1.0 / weird[0]; /* -infty */
+ weird[3] = 0.0 / weird[0]; /* NaN */
for (x = 0; x < 4; x++) {
for (y = 0; y < 4; y++) {
f = weird[x]; g = weird[y]; do_test();