<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=us-ascii" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.18999"></HEAD>
<BODY>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=831550315-02012011>Good job narrowing things down.</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=831550315-02012011></SPAN></FONT> </DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=831550315-02012011>Hmmm, somewhat curious.  The gnu assembler syntax 
is a bit odd wrt 0x80000000; I wonder if there's an overflow where it displays 
"<FONT color=#000000 size=3 face="Times New Roman">$-8388608".  
</FONT></SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=831550315-02012011>(This is -0x80000000).  But given this 
localization, I went back to first principles and looked at what the emulation 
is trying to do.</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=831550315-02012011></SPAN></FONT> </DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=831550315-02012011>Independent of this compiler matter, it looks to me 
like the test for P1BR is wrong.</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=831550315-02012011></SPAN></FONT> </DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=831550315-02012011>In my copy of <FONT color=#000000>DEC STD 032 Section 
4.6.2 P1 Region paragraphs 2 & 3</FONT> say:</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=831550315-02012011> ...</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT size=2 face=Arial><SPAN 
class=831550315-02012011>    The address in P1BR is not 
necessarily an address in system space, but all the 
addresses</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT size=2 face=Arial><SPAN 
class=831550315-02012011>    of PTEs must be in system 
space.</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT size=2 face=Arial><SPAN 
class=831550315-02012011></SPAN></FONT> </DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=831550315-02012011>    ,,,<FONT color=#000000>An attempt to 
load P1BR with a value less than 2**31 - 2**23 (7F800000 hex) or 
greater</FONT></SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT size=2 face=Arial><SPAN 
class=831550315-02012011>       than 2**31 + 
2**30 - 2**23 - 4 results in a reserved operand fault in some 
implementations.</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=831550315-02012011></SPAN></FONT> </DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=831550315-02012011>(This all has to do with the fact that P1PT is defined 
as the PTEs that <STRONG>don't </STRONG>exist, v.s. P0PT 
which</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=831550315-02012011>is defined as the ones that <STRONG>do</STRONG>.) 
So, simh's test appears to me to be too strict.</SPAN></FONT></DIV>
<DIV><FONT color=#0000ff size=2 face=Arial></FONT> </DIV>
<DIV><SPAN class=831550315-02012011><FONT color=#0000ff size=2 face=Arial>PxBR 
contain (page-aligned) virtual addresses; in the case of P0BR, a 
<STRONG>system</STRONG> virtual address.</FONT></SPAN></DIV>
<DIV><SPAN class=831550315-02012011><FONT color=#0000ff size=2 face=Arial>So the 
addition of 0x80000000 seems bogus.  It will always overflow in the P0BR 
case, and either overflow or corrupt the value in the P1BR case.  Overflow 
of a signed number is undefined in C; unsigned the carry is ignored.  You 
said that t is an int32; so both compilers could be right.</FONT></SPAN></DIV>
<DIV><SPAN class=831550315-02012011><FONT color=#0000ff size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=831550315-02012011><FONT color=#0000ff size=2 face=Arial>And 
sure enough, it doesn't exist in earlier versions of simh.  But let's get 
back to what the emulator should really be doing.</FONT></SPAN></DIV>
<DIV><SPAN class=831550315-02012011><FONT color=#0000ff size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=831550315-02012011><FONT color=#0000ff size=2 
face=Arial>op_ldpctx and op_mtpr both seem confused about the correct 
tests.  I'm not sure which tests the 780 implemented, but it appears that 
this got confused when the 780 code was added.  Assuming a test is 
required, what's there appears to be wrong. (<FONT 
color=#ff0000><STRONG>Bob, do you have/can you check the 780 
ucode?)</STRONG></FONT></FONT></SPAN></DIV>
<DIV><SPAN class=831550315-02012011><FONT color=#0000ff size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=831550315-02012011><FONT color=#0000ff size=2 
face=Arial>Further:</FONT></SPAN></DIV>
<DIV><SPAN class=831550315-02012011><FONT size=2><FONT face=Arial>Section 4.6.1 
P0 Region paragraph 4<FONT color=#0000ff> says:</FONT></FONT></FONT>
<DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN 
class=831550315-02012011>    ,,,<FONT color=#000000>An attempt to 
load P0BR with a value less than 2**31 or greater</FONT></SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT size=2 face=Arial><SPAN 
class=831550315-02012011>       than 2**31 + 
2**30 - 4 results in a reserved operand fault in some 
implementations.</SPAN></FONT></DIV>
<DIV dir=ltr align=left><FONT size=2 face=Arial><SPAN 
class=831550315-02012011></SPAN></FONT> </DIV></SPAN></DIV>
<DIV><SPAN class=831550315-02012011><FONT color=#0000ff size=2 face=Arial>It 
looks to me as though ML_PXBR_TEST should be renamed ML_P0BR_TEST and applied 
only to P0BR values.  So we have:</FONT></SPAN></DIV>
<DIV><SPAN class=831550315-02012011><FONT color=#0000ff size=2 
face=Arial></FONT><FONT color=#0000ff size=2 
face=Arial></FONT></SPAN> </DIV><SPAN class=831550315-02012011><FONT 
color=#0000ff size=2 face=Arial>
<DIV><SPAN class=831550315-02012011><SPAN><FONT color=#000000 size=3 
face="Courier New">#define ML_P0BR_TEST(r)  if ((((uint32)(r)) < 
0x80000000u) || 
\ <BR>                             (((uint32)(r)) 
> 0xbffffffcu)) RSVD_OPND_FAULT<BR></FONT></SPAN></SPAN></DIV>
<DIV> </DIV>
<DIV> </DIV>
<DIV>Then we implement another test for P1BR.<SPAN class=831550315-02012011> 
</SPAN>ML_P1BR_TEST woudl be something like (untested):</FONT></SPAN></DIV>
<DIV><SPAN class=831550315-02012011><FONT color=#0000ff size=2 
face=Arial></FONT></SPAN> </DIV>
<DIV><SPAN class=831550315-02012011><SPAN><FONT color=#000000 size=3 
face="Courier New">#define ML_P1BR_TEST(r)  if ((((uint32)(r)) < 
0x7f800000u) || 
\ <BR>                             (((uint32)(r)) 
> 0xbf7ffffcu)) RSVD_OPND_FAULT<BR></FONT></SPAN></SPAN></DIV>
<DIV><!-- Converted from text/plain format --><SPAN 
class=831550315-02012011></SPAN><FONT face=Arial><FONT color=#0000ff><FONT 
size=2>Then the </FONT></FONT></FONT></DIV>
<DIV><FONT size=2><FONT face="Courier New"><SPAN 
class=831550315-02012011>    </SPAN>ML_PXBR_TEST (t + 0x800000); 
/* validate P1BR */</FONT></FONT></DIV>
<DIV><SPAN class=831550315-02012011></SPAN><SPAN 
class=831550315-02012011></SPAN><FONT face=Arial><FONT color=#0000ff 
size=2>in <FONT 
color=#000000>op_ldpctx</FONT> becomes:</FONT></FONT></DIV>
<P><FONT face=Arial><FONT size=2><SPAN class=831550315-02012011> <FONT 
face="Courier New">  </FONT></SPAN><FONT face="Courier New">ML_P<SPAN 
class=831550315-02012011>1</SPAN>BR_TEST (t); /* validate P1BR 
*/</FONT></FONT></FONT></P>
<DIV><SPAN class=831550315-02012011></SPAN><SPAN 
class=831550315-02012011></SPAN><FONT size=2><FONT face=Arial><FONT 
color=#0000ff>a<SPAN class=831550315-02012011>nd the same change in <FONT 
color=#000000>op_mtpr</FONT> (<FONT color=#000000>case 
MT_P1BR:</FONT>)</SPAN></FONT></FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Arial><FONT color=#0000ff><SPAN 
class=831550315-02012011></SPAN></FONT></FONT></FONT> </DIV>
<DIV><FONT size=2><FONT face=Arial><FONT color=#0000ff><SPAN 
class=831550315-02012011>The TB refill code already handles the check that the 
calculated PTE address is in system space.</SPAN></FONT></FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Arial><FONT color=#0000ff><SPAN 
class=831550315-02012011></SPAN></FONT></FONT></FONT> </DIV>
<DIV><FONT size=2><FONT face=Arial><FONT color=#0000ff><SPAN 
class=831550315-02012011>You'll note that I don't check for page alignment - the 
operation of the processor in kernel mode is UNDEFINED if PxBR<8:0> is 
non-zero.</SPAN></FONT></FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Arial><FONT color=#0000ff><SPAN 
class=831550315-02012011>We could add</SPAN></FONT></FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Arial><FONT color=#0000ff><SPAN 
class=831550315-02012011></SPAN></FONT></FONT></FONT> </DIV>
<DIV><FONT size=2><FONT face=Arial><FONT color=#0000ff><SPAN 
class=831550315-02012011><FONT color=#000000 size=3 
face="Courier New">                             (((uint32)(r)) & 
0x0001FFu) || \</FONT></SPAN></FONT></FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Arial><FONT color=#0000ff><SPAN 
class=831550315-02012011>to both macros, though I don't know if this matches any 
processor or if there's any software that would 
break.</SPAN></FONT></FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Arial><FONT color=#0000ff><SPAN 
class=831550315-02012011>Since UNDEFINED includes "it might work as you expect", 
I wouldn't do this in the simulator (though I would in 
ucode!).</SPAN></FONT></FONT></FONT></DIV>
<DIV><FONT size=2><FONT face=Arial><FONT color=#0000ff><SPAN 
class=831550315-02012011></SPAN></FONT></FONT></FONT> </DIV>
<DIV><FONT size=2><FONT face=Arial><FONT color=#0000ff><SPAN 
class=831550315-02012011>Give the new tests a whirl (in both environments) & 
let us know what happens.</SPAN></FONT></FONT></DIV>
<DIV><FONT color=#0000ff face=Arial></FONT><BR></DIV></FONT>
<P><FONT 
size=2>---------------------------------------------------------<BR>This 
communication may not represent my employer's views,<BR>if any, on the matters 
discussed.<BR> </FONT> </P>
<DIV> </DIV><BR>
<DIV dir=ltr lang=en-us class=OutlookMessageHeader align=left>
<HR tabIndex=-1>
<FONT size=2 face=Tahoma><B>From:</B> Peter Allan 
[mailto:petermallan@googlemail.com] <BR><B>Sent:</B> Sunday, January 02, 2011 
09:13<BR><B>To:</B> Timothe Litt<BR><B>Cc:</B> 
simh@trailing-edge.com<BR><B>Subject:</B> Re: [Simh] O2 optimization on Linux 
(was: VMS 4.6 crashes on Linux)<BR></FONT><BR></DIV>
<DIV></DIV>
<DIV>Timothe,</DIV>
<DIV> </DIV>
<DIV>I just tried your suggestion, but it does not help. I have got the 
assembler outputs on the two systems. It is of course very long, so I am putting 
what I reckon to be the relevant parts here. I can send you the full listings if 
you need them.</DIV>
<DIV> </DIV>
<DIV>I say these are the relevant parts based on: </DIV>
<DIV> </DIV>
<DIV>
<DIV>The 780 emulator works if I comment out the line</DIV>
<DIV> </DIV>
<DIV>   ML_PXBR_TEST (t + 0x800000);</DIV>
<DIV> </DIV>
<DIV>from vax_cpu1.c</DIV>
<DIV> </DIV>
<DIV>It also works if I change the line</DIV>
<DIV> </DIV>
<DIV>   ML_PXBR_TEST (t + 0x800000);</DIV>
<DIV> </DIV>
<DIV>to</DIV>
<DIV> </DIV>
<DIV>   t2 = t + 0x800000;<BR>   ML_PXBR_TEST (t2);</DIV>
<DIV> </DIV>
<DIV>having defined t2 to be int32, since t is defined to be int32.</DIV></DIV>
<DIV> </DIV>
<DIV>It looks like the macro is not handling the addition of 0x800000 correctly. 
There is another part of the code where this is done. I did not need to change 
that to get the emulator to work, but perhaps what I am doing does not exercise 
that part of the code.</DIV>
<DIV> </DIV>
<DIV>--- C code extracted from vax_cpu1.c<BR></DIV>
<DIV>ASTLVL = 
t;                                             
/* restore AST */<BR>t = ReadLP (pcbpa + 88);<BR>ML_PXBR_TEST (t + 
0x800000);                            
/* validate P1BR */</DIV>
<DIV><BR>--- Extract from vax_cpu1.s compiled on Fedora Core 14  -- This is 
what works</DIV>
<DIV> </DIV>
<DIV>.L318:<BR>        movl    
-32(%rbp), %eax<BR>        
movl    %eax, 
ASTLVL(%rip)<BR>        
movl    -20(%rbp), 
%eax<BR>        addl    $88, 
%eax<BR>        movl    %eax, 
%edi<BR>        call    
ReadLP<BR>        movl    
%eax, -32(%rbp)<BR>        
movl    -32(%rbp), 
%eax<BR>        addl    
$8388608, %eax<BR>        testl   
%eax, %eax<BR>        
jns     .L319<BR>        
movl    -32(%rbp), 
%eax<BR>        addl    
$8388608, %eax<BR>        
andl    $3, %eax<BR>        
testl   %eax, %eax<BR>        
je      
.L320<BR>.L319:<BR>        
movl    $-24, %esi<BR>        
movl    $save_env, 
%edi<BR>        call    
longjmp<BR>.L320:<BR>        
movl    -32(%rbp), %eax</DIV>
<DIV><BR>--- Extract from vax_cpu1.s compiled on CentOS 5.5  --  This 
is what fails</DIV>
<DIV> </DIV>
<DIV>.L540:<BR>        movl    
-4(%rbp), %eax<BR>        
movl    %eax, 
ASTLVL(%rip)<BR>        
movl    -8(%rbp), 
%eax<BR>        addl    $88, 
%eax<BR>        movl    %eax, 
%edi<BR>        call    
ReadLP<BR>        movl    
%eax, -4(%rbp)<BR>        
cmpl    $-8388608, 
-4(%rbp)<BR>        
jge     .L542<BR>        
movl    -4(%rbp), 
%eax<BR>        addl    
$8388608, %eax<BR>        
andl    $3, %eax<BR>        
testl   %eax, %eax<BR>        
je      
.L544<BR>.L542:<BR>        
movl    $-24, %esi<BR>        
movl    $save_env, 
%edi<BR>        call    
longjmp<BR>.L544:<BR>        
movl    -4(%rbp), %eax</DIV>
<DIV>----------</DIV>
<DIV><BR>My assembler is a bit rusty, but there are clear differences between 
the two.</DIV>
<DIV> </DIV>
<DIV>Peter Allan</DIV>
<DIV><BR> </DIV>
<DIV class=gmail_quote>On 31 December 2010 18:07, Timothe Litt <SPAN 
dir=ltr><<A href="mailto:litt@ieee.org">litt@ieee.org</A>></SPAN> 
wrote:<BR>
<BLOCKQUOTE 
style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
class=gmail_quote>
  <DIV>
  <DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN>This test 
  appears to be implementing the constraint that p0/1 base register values must 
  be in in system space (bit 31 set) & longword aligned (bits 0,1 
  clear).</SPAN></FONT></DIV>
  <DIV dir=ltr align=left><FONT color=#0000ff size=2 
  face=Arial><SPAN></SPAN></FONT> </DIV>
  <DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN>I don't 
  think it's parens; there seem to be enough.  </SPAN></FONT></DIV>
  <DIV dir=ltr align=left><FONT color=#0000ff size=2 
  face=Arial><SPAN></SPAN></FONT> </DIV>
  <DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN>If this is 
  a 64-bit environment, you might be seeing a sign extension / unsigned 
  promotion issue in the complier.</SPAN></FONT></DIV>
  <DIV dir=ltr align=left><FONT color=#0000ff size=2 
  face=Arial><SPAN></SPAN></FONT> </DIV>
  <DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN>You might 
  try this to make what's desired explicit:</SPAN></FONT></DIV>
  <DIV dir=ltr align=left><FONT color=#0000ff size=2 
  face=Arial><SPAN></SPAN></FONT> </DIV>
  <DIV dir=ltr align=left><FONT color=#0000ff size=2 face=Arial><SPAN><FONT 
  color=#000000 size=3 face="Times New Roman">#define ML_PXBR_TEST(r)  if 
  (((((uint32)(r))&  0x80000000u) == 0) || \ 
  <DIV class=im><BR>                
             ((r)&  0x00000003)) 
  RSVD_OPND_FAULT</DIV></FONT><BR></SPAN></FONT></DIV>
  <DIV><SPAN><FONT color=#0000ff size=2 face=Arial>But it would really help to 
  see the assembler generated for the two cases - especially the one that 
  fails.</FONT></SPAN></DIV><BR>
  <P><FONT 
  size=2>---------------------------------------------------------<BR>This 
  communication may not represent my employer's views,<BR>if any, on the matters 
  discussed.<BR> </FONT> </P>
  <DIV> </DIV><BR>
  <DIV dir=ltr lang=en-us align=left>
  <HR>
  <FONT size=2 face=Tahoma><B>From:</B> <A 
  href="mailto:simh-bounces@trailing-edge.com" 
  target=_blank>simh-bounces@trailing-edge.com</A> [mailto:<A 
  href="mailto:simh-bounces@trailing-edge.com" 
  target=_blank>simh-bounces@trailing-edge.com</A>] <B>On Behalf Of </B>Peter 
  Allan<BR><B>Sent:</B> Friday, December 31, 2010 12:32<BR><B>To:</B> <A 
  href="mailto:simh@trailing-edge.com" 
  target=_blank>simh@trailing-edge.com</A><BR><B>Subject:</B> Re: [Simh] O2 
  optimization on Linux (was: VMS 4.6 crashes on Linux)<BR></FONT><BR></DIV>
  <DIV>
  <DIV></DIV>
  <DIV class=h5>
  <DIV></DIV><BR><BR>
  <DIV class=gmail_quote>On 28 December 2010 22:00, Bob Supnik <SPAN 
  dir=ltr><<A href="mailto:bob@supnik.org" 
  target=_blank>bob@supnik.org</A>></SPAN> wrote:<BR>
  <BLOCKQUOTE 
  style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" 
  class=gmail_quote>Jason Stevens wrote:<BR><BR>You didn't build it with -O2 
    on linux did you?  There is some weird<BR>things with GCC and SIMH's 
    VAX...  I can only speak to 4.X BSD, but I<BR>was able to identify two 
    procedures that when optimized with -O2 break<BR>4BSD on SIMH....<BR><BR>I 
    kind of detailed it here:<BR><BR><A 
    href="http://www.mail-archive.com/simh@trailing-edge.com/msg00463.html" 
    target=_blank>http://www.mail-archive.com/simh@trailing-edge.com/msg00463.html</A><BR><BR>And 
    the procedures in question 
    were:<BR><BR>op_ldpctx<BR>op_mtpr<BR><BR>---<BR><BR>Interestingly, those 
    routines are the ONLY places in the VAX simulator where these macros are 
    used:<BR><BR>/* Machine specific reserved operand tests (all NOPs) 
    */<BR><BR>#define ML_PA_TEST(r)<BR>#define ML_LR_TEST(r)<BR>#define 
    ML_SBR_TEST(r)<BR>#define ML_PXBR_TEST(r)<BR>#define 
    LP_AST_TEST(r)<BR>#define LP_MBZ84_TEST(r)<BR>#define 
    LP_MBZ92_TEST(r)<BR><BR>On the 780, they are real tests:<BR><BR>/* Machine 
    specific reserved operand tests */<BR><BR>#define ML_LR_TEST(r)   
     if ((uint32)((r)&  0xFFFFFF)>  0x200000) 
    RSVD_OPND_FAULT<BR>#define ML_PXBR_TEST(r)  if ((((r)& 
     0x80000000) == 0) || \<BR>            
                   ((r)& 
     0x00000003)) RSVD_OPND_FAULT<BR>#define ML_SBR_TEST(r)   if 
    ((r)&  0x00000003) RSVD_OPND_FAULT<BR>#define ML_PA_TEST(r)   
     if ((r)&  0x00000003) RSVD_OPND_FAULT<BR>#define 
    LP_AST_TEST(r)   if ((r)>  AST_MAX) RSVD_OPND_FAULT<BR>#define 
    LP_MBZ84_TEST(r) if ((r)&  0xF8C00000) RSVD_OPND_FAULT<BR>#define 
    LP_MBZ92_TEST(r) if ((r)&  0x7FC00000) 
    RSVD_OPND_FAULT<BR><BR>---<BR><BR>One (or more) of those six tests is the 
    smoking gun, and if I had to put my money on it, I think it's this 
    one:<BR><BR>#define ML_LR_TEST(r)    if ((uint32)((r)& 
     0xFFFFFF)>  0x200000) RSVD_OPND_FAULT<BR><BR>Try adding an 
    extra level of parentheses:<BR><BR>if (((uint32)((r)& 
     0xFFFFFF))>  0x200000) RSVD_OPND_FAULT<BR><BR><BR>just to be 
    sure that the uint32 cast isn't be applied to the whole comparison, instead 
    of just the first term.<BR><BR>If that fails to get it running, then try 
    "no-oping" all of the macros to see if VMS 4.6 will boot.  If it does, 
    then enable each of the macros in turn, to see where the simulator 
    fails.<BR><BR>/Bob<BR><BR><BR>_______________________________________________<BR>Simh 
    mailing list<BR><A href="mailto:Simh@trailing-edge.com" 
    target=_blank>Simh@trailing-edge.com</A><BR><A 
    href="http://mailman.trailing-edge.com/mailman/listinfo/simh" 
    target=_blank>http://mailman.trailing-edge.com/mailman/listinfo/simh</A><BR></BLOCKQUOTE></DIV>
  <DIV><BR>Bob,</DIV>
  <DIV> </DIV>
  <DIV>I tried removing the macro definitions one by one. The one that 
  causes the problem is ML_PXBR_TEST, i.e. if this is defined as nothing and the 
  rest are left as per vax780_defs.h, then the 780 emulator works on CentOS 5.5. 
  This is the macro with two comparisons in it. I wonder if that is 
  significant?</DIV>
  <DIV> </DIV>
  <DIV>I tried putting in some extra parentheses, but this did not help. </DIV>
  <DIV> </DIV>
  <DIV>Of course, it all still works on Fedora Core 14. I will see if I can 
  compare the assembler that is generated for vax_cpu1.c on the two 
  systems.</DIV>
  <DIV> </DIV>
  <DIV>Peter Allan</DIV>
  <DIV> </DIV></DIV></DIV></DIV></BLOCKQUOTE></DIV><BR></BODY></HTML>