sync with my cvs
authorbrian <brian@brianweb.net>
Tue, 30 Mar 2004 23:48:09 +0000 (15:48 -0800)
committerbrian <brian@brianweb.net>
Tue, 30 Mar 2004 23:48:09 +0000 (15:48 -0800)
darcs-hash:20040330234809-24bed-e4e4b034a8aaef10bde74b9561d56d6ada084154.gz

Makefile
src/org/xwt/mips/ClassFileCompiler.java
src/org/xwt/mips/JavaSourceCompiler.java
src/tests/SpeedTest.java

index eef9f3c..db01b55 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,13 +1,7 @@
-# 
+ # 
 # What to build
 #
 
 # What to build
 #
 
-doc/nestedvm.ivme04.pdf: doc/nestedvm.ivme04.tex doc/acmconf.cls
-       cd doc; pdflatex nestedvm.ivme04.tex && ./pst2pdf && pdflatex nestedvm.ivme04.tex
-
-pdf: doc/nestedvm.ivme04.pdf
-       open doc/nestedvm.ivme04.pdf
-
 # Java sources that are part of the compiler/interpreter
 java_sources = $(wildcard src/org/xwt/mips/*.java) $(wildcard src/org/xwt/mips/util/*.java)
 
 # Java sources that are part of the compiler/interpreter
 java_sources = $(wildcard src/org/xwt/mips/*.java) $(wildcard src/org/xwt/mips/util/*.java)
 
@@ -33,12 +27,13 @@ MIPS_CXX = mips-unknown-elf-g++
 # Be VERY careful about changing any of these as they can break binary 
 # compatibility and create hard to find bugs
 mips_optflags = -O3 -g \
 # Be VERY careful about changing any of these as they can break binary 
 # compatibility and create hard to find bugs
 mips_optflags = -O3 -g \
-       -fno-rename-registers -freduce-all-givs \
-       -fno-peephole -fno-peephole2 -fmove-all-movables -fno-schedule-insns \
-       -fno-delayed-branch \
        -mmemcpy \
        -ffunction-sections -fdata-sections \
        -mmemcpy \
        -ffunction-sections -fdata-sections \
-       -falign-functions=512
+       -falign-functions=512 \
+       -fno-rename-registers \
+       -fno-schedule-insns \
+       -fno-delayed-branch \
+       -freduce-all-givs
 
 MIPS_CFLAGS = $(mips_optflags) $(flags) -I. -Wall -Wno-unused -Werror
 MIPS_LD = mips-unknown-elf-gcc
 
 MIPS_CFLAGS = $(mips_optflags) $(flags) -I. -Wall -Wno-unused -Werror
 MIPS_LD = mips-unknown-elf-gcc
@@ -56,7 +51,8 @@ else
        JAVAC_NODEBUG_FLAGS = -g:none
 endif
 
        JAVAC_NODEBUG_FLAGS = -g:none
 endif
 
-CLASSPATH = build:upstream/build/bcel/bcel-5.1.jar
+bcel_jar = upstream/build/bcel-5.1/bcel-5.1.jar
+classpath = build:$(bcel_jar)
 
 GCJ = gcj
 EXE_EXT = 
 
 GCJ = gcj
 EXE_EXT = 
@@ -106,22 +102,22 @@ build/org/xwt/mips/util/.Dummy.class:
 $(java_classes): build/org/xwt/mips/util/.Dummy.class
 endif
 
 $(java_classes): build/org/xwt/mips/util/.Dummy.class
 endif
 
-$(java_classes): $(tasks)/unpack_bcel $(java_sources) $(java_gen_sources)
-       $(JAVAC) -classpath $(CLASSPATH) -d build $(java_sources) $(java_gen_sources)
+$(java_classes): $(java_sources) $(java_gen_sources) $(bcel_jar)
+       $(JAVAC) -classpath $(classpath) -d build $(java_sources) $(java_gen_sources)
 
 build/org/xwt/mips/UsermodeConstants.java: src/org/xwt/mips/syscalls.h $(errno_h) $(unistd_h)
        @mkdir -p `dirname $@`
 
 build/org/xwt/mips/UsermodeConstants.java: src/org/xwt/mips/syscalls.h $(errno_h) $(unistd_h)
        @mkdir -p `dirname $@`
-       cat $^ |\
-               (FILE=org.xwt.mips.UsermodeConstants;\
-                C="`echo $$FILE | sed 's/.*\.\([^\.]*\)$$/\1/;'`";\
-                P="`echo $$FILE | sed -n 's/\(.*\)\..*/\1/p;'`";\
-                [ -n "$$P" ] && echo "package $$P;";\
-                echo "public interface $$C {";\
-                tr '\t' ' ' | sed -n ';\
-                s/  */ /g;\
-                s/ *\# *define \([A-Z_][A-Za-z0-9_]*\) \([0-9][0-9x]*\)/    public static final int \1 = \2;/p';\
-                echo "}") > $@
+       cat $^ | ( \
+               echo "package org.xwt.mips;"; \
+               echo "public interface UsermodeConstants {"; \
+               tr '\t' ' ' | sed -n ' \
+                       s/  */ /g; \
+                       s/ *# *define \([A-Z_][A-Za-z0-9_]*\) \([0-9][0-9x]*\)/    public static final int \1 = \2;/p'; \
+               echo "}"; \
+       ) > $@
+       
+$(bcel_jar): upstream/tasks/extract_bcel
+       @true
 
 # FIXME: We're cramming more than we need into the binary here
 build/mips2java$(EXE_EXT): $(java_sources) $(java_gen_sources)
 
 # FIXME: We're cramming more than we need into the binary here
 build/mips2java$(EXE_EXT): $(java_sources) $(java_gen_sources)
@@ -156,15 +152,15 @@ build/%.mips.stripped: build/%.mips
 # MIPS Compiler generated class compilation
 ifdef DO_JAVASOURCE
 
 # MIPS Compiler generated class compilation
 ifdef DO_JAVASOURCE
 
-build/%.java: build/%.mips build/org/xwt/mips/JavaSourceCompiler.class $(tasks)/unpack_bcel 
-       $(JAVA) -cp $(CLASSPATH) org.xwt.mips.Compiler -outformat javasource $(compiler_flags) $($(notdir $*)_COMPILERFLAGS) $(subst /,.,$*) $< > build/$*.java
+build/%.java: build/%.mips build/org/xwt/mips/JavaSourceCompiler.class
+       $(JAVA) -cp $(classpath) org.xwt.mips.Compiler -outformat javasource $(compiler_flags) $($(notdir $*)_COMPILERFLAGS) $(subst /,.,$*) $< > build/$*.java
 
 build/%.class: build/%.java build/org/xwt/mips/Runtime.class
        $(JAVAC) $(JAVAC_NODEBUG_FLAGS) -classpath build -d build $<
 else
 
 
 build/%.class: build/%.java build/org/xwt/mips/Runtime.class
        $(JAVAC) $(JAVAC_NODEBUG_FLAGS) -classpath build -d build $<
 else
 
-build/%.class: build/%.mips build/org/xwt/mips/ClassFileCompiler.class $(tasks)/unpack_bcel 
-       $(JAVA) -cp $(CLASSPATH) org.xwt.mips.Compiler -outformat class -outfile $@ $(compiler_flags) $($(notdir $*)_COMPILERFLAGS) $(subst /,.,$*) $<
+build/%.class: build/%.mips build/org/xwt/mips/ClassFileCompiler.class
+       $(JAVA) -cp $(classpath) org.xwt.mips.Compiler -outformat class -outfile $@ $(compiler_flags) $($(notdir $*)_COMPILERFLAGS) $(subst /,.,$*) $<
 
 
 endif
 
 
 endif
@@ -179,7 +175,7 @@ clean:
 #
 # env.sh
 #
 #
 # env.sh
 #
-env.sh: Makefile $(tasks)/full_toolchain build/org/xwt/mips/Compiler.class $(tasks)/unpack_bcel 
+env.sh: Makefile $(tasks)/full_toolchain build/org/xwt/mips/Compiler.class
        @rm -f "$@~"
        @echo 'PATH="$(mips2java_root)/build:$(mips2java_root)/upstream/install/bin:$$PATH"; export PATH' >> $@~
        @echo 'CC=mips-unknown-elf-gcc; export CC' >> $@~
        @rm -f "$@~"
        @echo 'PATH="$(mips2java_root)/build:$(mips2java_root)/upstream/install/bin:$$PATH"; export PATH' >> $@~
        @echo 'CC=mips-unknown-elf-gcc; export CC' >> $@~
@@ -190,7 +186,7 @@ env.sh: Makefile $(tasks)/full_toolchain build/org/xwt/mips/Compiler.class $(tas
        @echo 'CFLAGS="$(mips_optflags)"; export CFLAGS' >> $@~
        @echo 'CXXFLAGS="$(mips_optflags)"; export CXXFLAGS' >> $@~
        @echo 'LDFLAGS="$(MIPS_LDFLAGS)"; export LDFLAGS' >> $@~
        @echo 'CFLAGS="$(mips_optflags)"; export CFLAGS' >> $@~
        @echo 'CXXFLAGS="$(mips_optflags)"; export CXXFLAGS' >> $@~
        @echo 'LDFLAGS="$(MIPS_LDFLAGS)"; export LDFLAGS' >> $@~
-       @echo 'CLASSPATH=$(mips2java_root)/build:$(mips2java_root)/upstream/build/bcel/bcel-5.1.jar:.; export CLASSPATH' >> $@~
+       @echo 'CLASSPATH=$(mips2java_root)/build:$(mips2java_root)/$(bcel_jar):.; export CLASSPATH' >> $@~
        @mv "$@~" "$@"
        @echo "$@ created successfully"
 
        @mv "$@~" "$@"
        @echo "$@ created successfully"
 
@@ -247,7 +243,7 @@ Paranoia_CFLAGS = "-Wno-error"
 Paranoia_LDFLAGS = -lm
 paranoiatest: build/tests/Paranoia.class
        $(JAVA) -cp build tests.Paranoia
 Paranoia_LDFLAGS = -lm
 paranoiatest: build/tests/Paranoia.class
        $(JAVA) -cp build tests.Paranoia
-
+       
 #
 # Freetype Stuff
 #
 #
 # Freetype Stuff
 #
@@ -296,7 +292,7 @@ BusyBox_COMPILERFLAGS = -o unixruntime
 build/tests/BusyBox.mips: $(mips_object) $(tasks)/build_busybox
        @mkdir -p `dirname $@`
        cp upstream/build/busybox/busybox $@
 build/tests/BusyBox.mips: $(mips_object) $(tasks)/build_busybox
        @mkdir -p `dirname $@`
        cp upstream/build/busybox/busybox $@
-
+       
 busyboxtest: build/tests/BusyBox.class
        $(JAVA) -cp build tests.BusyBox ash
 
 busyboxtest: build/tests/BusyBox.class
        $(JAVA) -cp build tests.BusyBox ash
 
@@ -325,6 +321,18 @@ oldspeedtest: build/tests/DJpeg.class tmp/thebride_1280.jpg
        bash -c "time $(JAVA) -cp build tests.DJpeg -targa -outfile tmp/thebride_1280.tga tmp/thebride_1280.jpg"
        @echo "e90f6b915aee2fc0d2eb9fc60ace6203  tmp/thebride_1280.tga" | md5sum -c && echo "MD5 is OK"
 
        bash -c "time $(JAVA) -cp build tests.DJpeg -targa -outfile tmp/thebride_1280.tga tmp/thebride_1280.jpg"
        @echo "e90f6b915aee2fc0d2eb9fc60ace6203  tmp/thebride_1280.tga" | md5sum -c && echo "MD5 is OK"
 
+djpegspeedtest: build/tests/SpeedTest.class build/tests/DJpeg.class tmp/thebride_1280.jpg
+       @echo "Running DJpeg test..."
+       @$(JAVA) -cp build tests.SpeedTest tests.DJpeg 8 -targa -outfile tmp/thebride_1280.tga tmp/thebride_1280.jpg
+
+mspackspeedtest: build/tests/SpeedTest.class build/tests/MSPackBench.class
+       @if [ -e tmp/mspack/comic32.exe ]; then \
+               echo "Running MSPackBench test..."; \
+               cd tmp/mspack && $(JAVA) -cp ../../build tests.SpeedTest tests.MSPackBench 20 *32.exe; \
+       else \
+               echo "Run \"make check\" to get the MS True Type fonts for the MSPackBench test"; \
+       fi
+
 speedtest: build/tests/SpeedTest.class build/tests/DJpeg.class build/tests/FTBench.class tmp/thebride_1280.jpg build/tests/MSPackBench.class
        @echo "Running DJpeg test..."
        @$(JAVA) -cp build tests.SpeedTest tests.DJpeg 10 -targa -outfile tmp/thebride_1280.tga tmp/thebride_1280.jpg
 speedtest: build/tests/SpeedTest.class build/tests/DJpeg.class build/tests/FTBench.class tmp/thebride_1280.jpg build/tests/MSPackBench.class
        @echo "Running DJpeg test..."
        @$(JAVA) -cp build tests.SpeedTest tests.DJpeg 10 -targa -outfile tmp/thebride_1280.tga tmp/thebride_1280.jpg
@@ -334,7 +342,7 @@ speedtest: build/tests/SpeedTest.class build/tests/DJpeg.class build/tests/FTBen
        else \
                echo "Run \"make check\" to get Arial.TTF for the FTBench test"; \
        fi
        else \
                echo "Run \"make check\" to get Arial.TTF for the FTBench test"; \
        fi
-       @if [ -e tmp/mspack/comic32.exe ]; then \
+       @if false && [ -e tmp/mspack/comic32.exe ]; then \
                echo "Running MSPackBench test..."; \
                cd tmp/mspack && $(JAVA) -cp ../../build tests.SpeedTest tests.MSPackBench 10 *32.exe; \
        else \
                echo "Running MSPackBench test..."; \
                cd tmp/mspack && $(JAVA) -cp ../../build tests.SpeedTest tests.MSPackBench 10 *32.exe; \
        else \
@@ -355,3 +363,10 @@ check: $(patsubst %,build/tests/%.class, FTBench MSPackBench DJpeg GCTest) tmp/t
 compiletests: $(patsubst %,build/tests/%.class,FTBench MSPackBench DJpeg Test FreeTypeDemoHelper MSPackHelper EchoHelper BusyBox GCTest Fork)
        @true
 
 compiletests: $(patsubst %,build/tests/%.class,FTBench MSPackBench DJpeg Test FreeTypeDemoHelper MSPackHelper EchoHelper BusyBox GCTest Fork)
        @true
 
+
+# IVME Paper
+doc/nestedvm.ivme04.pdf: doc/nestedvm.ivme04.tex doc/acmconf.cls
+       cd doc; pdflatex nestedvm.ivme04.tex && ./pst2pdf && pdflatex nestedvm.ivme04.tex
+
+pdf: doc/nestedvm.ivme04.pdf
+       open doc/nestedvm.ivme04.pdf
index 6619777..fe212c3 100644 (file)
@@ -148,7 +148,7 @@ public class ClassFileCompiler extends Compiler implements org.apache.bcel.Const
         a(InstructionConstants.IUSHR);
         
         int beg = text.addr >>> methodShift;
         a(InstructionConstants.IUSHR);
         
         int beg = text.addr >>> methodShift;
-        int end = ((text.addr + text.size) >>> methodShift) + 1;
+        int end = ((text.addr + text.size) >>> methodShift);
 
         // This data is redundant but BCEL wants it
         int[] matches = new int[end-beg];
 
         // This data is redundant but BCEL wants it
         int[] matches = new int[end-beg];
@@ -1822,7 +1822,10 @@ public class ClassFileCompiler extends Compiler implements org.apache.bcel.Const
         return field;
     }
     
         return field;
     }
     
-    private boolean doLocal(int reg) { return reg == R+2 || reg == R+3 || reg == R+4 || reg == R+29; }
+    private boolean doLocal(int reg) {
+        //return false;
+        return reg == R+2 || reg == R+3 || reg == R+4 || reg == R+29;
+    }
     
     private InstructionHandle pushRegWZ(int reg) {
         if(reg == R+0) {
     
     private InstructionHandle pushRegWZ(int reg) {
         if(reg == R+0) {
index 5bf7e5d..85295e6 100644 (file)
@@ -104,6 +104,7 @@ public class JavaSourceCompiler extends Compiler {
         p("while(state == RUNNING) {");
         indent++;
         p("switch(pc>>>" + methodShift+ ") {");
         p("while(state == RUNNING) {");
         indent++;
         p("switch(pc>>>" + methodShift+ ") {");
+        //p("switch(pc&" + toHex(methodMask) + ") {");
         indent++;
         pblock(runs);
         p("default: throw new ExecutionException(\"invalid address 0x\" + Long.toString(this.pc&0xffffffffL,16) + \": r2: \" + r2);");
         indent++;
         pblock(runs);
         p("default: throw new ExecutionException(\"invalid address 0x\" + Long.toString(this.pc&0xffffffffL,16) + \": r2: \" + r2);");
@@ -207,6 +208,8 @@ public class JavaSourceCompiler extends Compiler {
         endOfMethod = addr + maxBytesPerMethod;
         String methodName = "run_" + Long.toString(addr & 0xffffffffL, 16);
         runs.append(indents[4] + "case " + toHex(addr>>>methodShift) + ": " + methodName + "(); break; \n");
         endOfMethod = addr + maxBytesPerMethod;
         String methodName = "run_" + Long.toString(addr & 0xffffffffL, 16);
         runs.append(indents[4] + "case " + toHex(addr>>>methodShift) + ": " + methodName + "(); break; \n");
+        //runs.append(indents[4] + "case " + toHex(addr&methodMask) + ": " + methodName + "(); break; \n");
+        
         p("private final void " + methodName + "() throws ExecutionException { /"+"* " + toHex(addr) + " - " + toHex(endOfMethod) + " *" + "/");
         indent++;
         p("int addr, tmp;");
         p("private final void " + methodName + "() throws ExecutionException { /"+"* " + toHex(addr) + " - " + toHex(endOfMethod) + " *" + "/");
         indent++;
         p("int addr, tmp;");
index 5362961..46b0f76 100644 (file)
@@ -37,22 +37,24 @@ class SpeedTest {
             System.out.println("c.newInstance() took " + d + "sec");
             
             if(!Runtime.class.isAssignableFrom(c)) { System.err.println(className + " isn't a MIPS compiled class"); System.exit(1); }
             System.out.println("c.newInstance() took " + d + "sec");
             
             if(!Runtime.class.isAssignableFrom(c)) { System.err.println(className + " isn't a MIPS compiled class"); System.exit(1); }
+        } else {
+            throw new Error("Interpreter not supported in speedtest");
         }
             
         float times[] = new float[runs];
         
         for(int i=0;i<runs;i++) {
         }
             
         float times[] = new float[runs];
         
         for(int i=0;i<runs;i++) {
-            Runtime runtime = binary ? new Interpreter(className) : (Runtime) c.newInstance();
+            //Runtime runtime = binary ? new Interpreter(className) : (Runtime) c.newInstance();
+            Runtime runtime = (Runtime) c.newInstance();
             System.gc();
             start();
             int status = runtime.run(appArgs);
             if(status != 0) { System.err.println(className + " failed with exit status: " + status); System.exit(1); }
             end();
             times[i] = diff();
             System.gc();
             start();
             int status = runtime.run(appArgs);
             if(status != 0) { System.err.println(className + " failed with exit status: " + status); System.exit(1); }
             end();
             times[i] = diff();
+            System.err.println("Run " + (i+1) + ": " + times[i] + " sec");
         }
         
         }
         
-        for(int i=0;i<runs;i++)
-            System.out.println("Run " + (i+1) + ": " + times[i] + " sec");
         java.util.Arrays.sort(times);
         
         System.out.println("Best: " + times[0]);
         java.util.Arrays.sort(times);
         
         System.out.println("Best: " + times[0]);