[Simh] VAX cpu optimizations.... (re -O1 vs -O2)

Jason Stevens neozeed at gmail.com
Sun Nov 7 15:51:04 EST 2010


Well I had a few hours to kill so I started to do some variations in
compiling vax_cpu1.c to see exactly what breaks when it's compiled with -O2
flags with GCC..

I don't claim to be all that of a great C guy but I've isolated the
following procedures that break under O2 optimizations with 4BSD


   op_ldpctx

op_mtpr


So I just copied vax_cpu1.c into vax_cpu2.c and isolated it to only have the
two procedures, and declare last_chm as an external, then I had to build a
makefile to do my selective O2/O0 optimization....



-------8<-------8<-------8<-------8<-------8<

CC=gcc -O2

CFLAGS=-I. -DVM_VAX -DVAX_780 -DUSE_INT64 -DUSE_ADDR64 -I VAX -I PDP11


OBJ = VAX/vax_cpu.o VAX/vax_cpu1.o VAX/vax_fpa.o VAX/vax_cis.o
VAX/vax_octa.o  VAX/vax_cmode.o VAX/vax_mmu.o VAX/vax_sys.o  VAX/vax_syscm.o
VAX/vax780_stddev.o VAX/vax780_sbi.o VAX/vax780_mem.o VAX/vax780_uba.o
VAX/vax780_mba.o VAX/vax780_fload.o VAX/vax780_syslist.o PDP11/pdp11_rl.o
PDP11/pdp11_rq.o PDP11/pdp11_ts.o PDP11/pdp11_dz.o PDP11/pdp11_lp.o
PDP11/pdp11_tq.o PDP11/pdp11_xu.o PDP11/pdp11_ry.o PDP11/pdp11_cr.o
PDP11/pdp11_rp.o PDP11/pdp11_tu.o PDP11/pdp11_hk.o PDP11/pdp11_io_lib.o
scp.o sim_console.o sim_fio.o sim_timer.o sim_sock.o sim_tmxr.o sim_ether.o
sim_tape.o


%.o: %.c

$(CC) -c -o $@ $< $(CFLAGS)


vax780: $(OBJ) VAX/vax_cpu2.o

gcc -O1 -c -o VAX/vax_cpu2.o VAX/vax_cpu2.c $(CFLAGS)

gcc -o $@ $^ $(CFLAGS)

# mv vax780 /Users/jsteve/tmp/simh/vax780/work/


clean:

find . -name '*.o' -exec rm -rf {} \;

rm vax780
-------8<-------8<-------8<-------8<-------8<


And to verify I built my 'vax_cpu2.c' with -O2 and I got the following:


-------8<-------8<-------8<-------8<-------8<
Jason-Stevenss-Mac-Pro:work jsteve$ cp /Users/jsteve/src/simh/vax780
.;./vax780  bsd42.ini

VAX780 simulator V3.8-1
loading ra(0,0)boot
Boot
: ra(0,0)vmunix
199488+56036+51360 start 0x11a0

Process PTE in P0 or P1 space, PC: 80021C5F (XORW3
@-7035(R8), at D0FEC866, at -70B0(R1))
sim> q
Goodbye
-------8<-------8<-------8<-------8<-------8<

And then rebuilt it with -O1 flags...


-------8<-------8<-------8<-------8<-------8<
Jason-Stevenss-Mac-Pro:work jsteve$ cp /Users/jsteve/src/simh/vax780
.;./vax780  bsd42.ini

VAX780 simulator V3.8-1
loading ra(0,0)boot
Boot
: ra(0,0)vmunix
199488+56036+51360 start 0x11a0
4.2 BSD UNIX #9: Wed Nov 2 16:00:29 PST 1983
real mem  = 8384512
avail mem = 7073792
using 102 buffers containing 835584 bytes of memory
mcr0 at tr1
mcr1 at tr2
uba0 at tr3
hk0 at uba0 csr 177440 vec 210, ipl 15
rk0 at hk0 slave 0
rk1 at hk0 slave 1
uda0 at uba0 csr 172150 vec 774, ipl 15
ra0 at uda0 slave 0
ra1 at uda0 slave 1
zs0 at uba0 csr 172520 vec 224, ipl 15
ts0 at zs0 slave 0
dz0 at uba0 csr 160100 vec 300, ipl 15
dz1 at uba0 csr 160110 vec 310, ipl 15
dz2 at uba0 csr 160120 vec 320, ipl 15
dz3 at uba0 csr 160130 vec 330, ipl 15
root on ra0
WARNING: should run interleaved swap with >= 2Mb
erase ^?, kill ^U, intr ^C
# sync
# sync
# sync
#
Simulation stopped, PC: 8000162B (MTPR #0,#12)
sim> q
Goodbye
Jason-Stevenss-Mac-Pro:work jsteve$
-------8<-------8<-------8<-------8<-------8<


which counts for a 'normal' run of the 4.2 miniroot.....


I haven't benchmarked it yet, to see if it really is worth all of the
effort...
And I verified that the uVax with a 16mb cpu runs the ka655x.bin without any
errors....

Anyways, if you have any questions let me know!


Jason
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.trailing-edge.com/pipermail/simh/attachments/20101107/847959f2/attachment-0002.html>


More information about the Simh mailing list