Another virtual register question

Edward Z. Yang ezyang at MIT.EDU
Sat Feb 19 17:36:28 CET 2011


I have the following tail call from the old code generator that
uses R2 despite this being i686 (which only has one vanilla
register.)

 so0_ret()
         { [const 3;, const 32;]
         }
     cqR:
         _cqS::I32 = R1 & 3;
         if (_cqS::I32 >= 2) goto cqT;
         R1 = I32[Sp + 12];
         Sp = Sp + 16;
         R1 = R1 & (-4);
         jump I32[R1] ();
     cqT:
         R2 = I32[Sp + 4];
         I32[Sp - 4] = I32[Sp + 8];
         I32[Sp + 0] = so3_info;
         Sp = Sp - 4;
         jump mergePairs_smo_info ();
 }

I'm trying to determine where it came from, but it looks like
CgTailCall is a good citizen and uses real registers.

Cheers,
Edward



More information about the Cvs-ghc mailing list