<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
Tony, currently I have atomic.compare_and_exchange generating e.g.:<BR>
 <BR>
 <BR>
 load_address      gv.2[_MM_Main] 56<BR> 0000018E: 8D3538000000        LEA ESI gv.2[_MM_Main]+56<BR> load_address      gv.2[_MM_Main] 152<BR> 00000194: 8D3D98000000        LEA EDI gv.2[_MM_Main]+152<BR> load              gv.2[_MM_Main] 156 Int.32 Int.32<BR> compare_exchange   Int.32 Int.32 Int.32<BR> 0000019A: 8BC7                MOV EAX EDI<BR> 0000019C: 8B1D9C000000        MOV EBX gv.2[_MM_Main]+156<BR> declare_temp      4 4 Addr F tv.35[T$35] -4<BR> 000001A2: 8975FC              MOV tv.35[T$35] ESI<BR> 000001A5: F00FB15DFC          LOCK CMPXCHG  tv.35[T$35]:Addr EBX<BR>
 <BR>
<BR>This might not be correct, but it is close.<BR>
 <BR>
<BR>Now, the thing is, the eax register is special to lock cmpxchg.<BR>  It always holds the comparison value.<BR>
<BR>The point is, if cg.compare_exchange took its parameters as<BR>parameters instead of on the stack, it could chose the<BR>right register right away, instead of as above where it<BR>choses the wrong one and then must mov it.<BR>
 <BR>
Easy to change it like that?<BR>
 <BR>
<BR>I realize this is an m3back deficiency.<BR>It does the register allocation too early.<BR>
<BR> - Jay<BR><BR><BR>                                       </body>
</html>