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..<div><br></div><div>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</div>
<div><br></div><div><br></div><div><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="1038.32">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
</style>


<p class="p1">op_ldpctx</p>
<p class="p1">op_mtpr</p><p class="p1"><br></p><p class="p1">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....</p>
<p class="p1"><br></p><p class="p1"><br></p><p class="p1">-------8<-------8<-------8<-------8<-------8<</p><meta charset="utf-8"><meta charset="utf-8"><meta charset="utf-8"><meta charset="utf-8"><p class="p1">
</p><p class="p1">CC=gcc -O2</p><p class="p1">CFLAGS=-I. -DVM_VAX -DVAX_780 -DUSE_INT64 -DUSE_ADDR64 -I VAX -I PDP11</p><p class="p1"><br></p><p class="p1">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</p>
<p class="p1"><br></p><p class="p1">%.o: %.c </p><p class="p1"><span class="Apple-tab-span" style="white-space:pre">        </span>$(CC) -c -o $@ $< $(CFLAGS)</p><p class="p1"><br></p><p class="p1">vax780:<span class="Apple-tab-span" style="white-space:pre">     </span>$(OBJ) VAX/vax_cpu2.o</p>
<p class="p1"><span class="Apple-tab-span" style="white-space:pre">   </span>gcc -O1 -c -o VAX/vax_cpu2.o VAX/vax_cpu2.c $(CFLAGS)</p><p class="p1"><span class="Apple-tab-span" style="white-space:pre">       </span>gcc -o $@ $^ $(CFLAGS)</p>
<p class="p1">#<span class="Apple-tab-span" style="white-space:pre">  </span>mv vax780 /Users/jsteve/tmp/simh/vax780/work/</p><p class="p1"><br></p><p class="p1">clean:</p><p class="p1"><span class="Apple-tab-span" style="white-space:pre">       </span>find . -name '*.o' -exec rm -rf {} \;</p>
<p class="p1"><span class="Apple-tab-span" style="white-space:pre">   </span>rm vax780</p><div><meta charset="utf-8">-------8<-------8<-------8<-------8<-------8<</div><div><br></div><div><br></div><div>And to verify I built my 'vax_cpu2.c' with -O2 and I got the following:</div>
<div><br></div><div><br></div><div><meta charset="utf-8"><div>-------8<-------8<-------8<-------8<-------8<</div></div><div>Jason-Stevenss-Mac-Pro:work jsteve$ cp /Users/jsteve/src/simh/vax780 .;./vax780  bsd42.ini </div>
<div><div><br></div><div>VAX780 simulator V3.8-1</div><div>loading ra(0,0)boot</div><div>Boot</div><div>: ra(0,0)vmunix</div><div>199488+56036+51360 start 0x11a0</div><div><br></div><div>Process PTE in P0 or P1 space, PC: 80021C5F (XORW3 @-7035(R8),@D0FEC866,@-70B0(R1))</div>
<div>sim> q</div><div>Goodbye</div><div><meta charset="utf-8"><div>-------8<-------8<-------8<-------8<-------8<</div></div><div><br></div><div>And then rebuilt it with -O1 flags...</div><div><br></div><div>
<br></div><div><meta charset="utf-8"><div>-------8<-------8<-------8<-------8<-------8<</div></div><div>Jason-Stevenss-Mac-Pro:work jsteve$ cp /Users/jsteve/src/simh/vax780 .;./vax780  bsd42.ini </div><div>
<br></div><div>VAX780 simulator V3.8-1</div><div>loading ra(0,0)boot</div><div>Boot</div><div>: ra(0,0)vmunix</div><div>199488+56036+51360 start 0x11a0</div><div>4.2 BSD UNIX #9: Wed Nov 2 16:00:29 PST 1983</div><div>real mem  = 8384512</div>
<div>avail mem = 7073792</div><div>using 102 buffers containing 835584 bytes of memory</div><div>mcr0 at tr1</div><div>mcr1 at tr2</div><div>uba0 at tr3</div><div>hk0 at uba0 csr 177440 vec 210, ipl 15</div><div>rk0 at hk0 slave 0</div>
<div>rk1 at hk0 slave 1</div><div>uda0 at uba0 csr 172150 vec 774, ipl 15</div><div>ra0 at uda0 slave 0</div><div>ra1 at uda0 slave 1</div><div>zs0 at uba0 csr 172520 vec 224, ipl 15</div><div>ts0 at zs0 slave 0</div><div>
dz0 at uba0 csr 160100 vec 300, ipl 15</div><div>dz1 at uba0 csr 160110 vec 310, ipl 15</div><div>dz2 at uba0 csr 160120 vec 320, ipl 15</div><div>dz3 at uba0 csr 160130 vec 330, ipl 15</div><div>root on ra0</div><div>WARNING: should run interleaved swap with >= 2Mb</div>
<div>erase ^?, kill ^U, intr ^C</div><div># sync</div><div># sync</div><div># sync</div><div># </div><div>Simulation stopped, PC: 8000162B (MTPR #0,#12)</div><div>sim> q</div><div>Goodbye</div><div>Jason-Stevenss-Mac-Pro:work jsteve$ </div>
</div><div><meta charset="utf-8"><div>-------8<-------8<-------8<-------8<-------8<</div></div><div><br></div><div><br></div><div>which counts for a 'normal' run of the 4.2 miniroot.....</div><div><br>
</div><div><br></div><div>I haven't benchmarked it yet, to see if it really is worth all of the effort...  <br>And I verified that the uVax with a 16mb cpu runs the ka655x.bin without any errors....</div><div><br></div>
<div>Anyways, if you have any questions let me know!</div><div><br></div><div><br></div><div>Jason</div><meta charset="utf-8"><meta charset="utf-8"><meta charset="utf-8"><meta charset="utf-8"><p></p></div>