fun rmap_read(var src : SrcRef, inum) : unsigned[64]
{
if(src.bypass == 0?cvt(uchar) || src.bypass > inum?cvt(uchar)) {
switch(src.rtype?cvt(ulong)) {
case 0 :
return src.literal?sext(64);
case 1 :
return global_registers[src.regnum];
case 2 :
return register_windows[src.regnum];
case 3 :
return fregs[src.regnum]?ext(64);
case 9 :
if(src.regnum == 0?cvt(uchar))
return CCR?bits(8)?cvt(unsigned[64]);
return CCR?bits(4,7)?cvt(unsigned[64]);
case 10 :
return fcc[src.regnum]?bits(2)?cvt(unsigned[64]);
case 11 :
return Y?ext(64);
}
}
return destq[+(inum?cvt(uchar)-src.bypass)][src.outnum];
}