- case 9: /* *(r)+ */
- printc('*');
- case 8: /* (r)+ */
- if (r==(regname+0xF)) {
- printc('$');
- if (mode==9){ /* PC absolute, always 4 bytes*/
- d = snarf(4, idsp);
- goto disp;
- }
- switch(*ap&7){
- case TYPB:
- d = snarf(1, idsp);
- goto disp;
- case TYPW:
- d = snarf(2, idsp);
- goto disp;
- case TYPL:
- d = snarf(4, idsp);
- goto disp;
- case TYPQ:
- d = snarf(4, idsp);
- printquad(d, snarf(4, idsp));
- break;
- case TYPF:
- printfloating(TYPF, snarf(4, idsp), 0);
- break;
- case TYPD:
- d = snarf(4, idsp);
- printfloating(TYPQ, d, snarf(4, idsp));
- break;
- } /*end of type switch */
- /*
- * here only for TYPQ, TYPf, TYPD
- * others went to disp
- */
- } else { /*it's not PC immediate or abs*/
- printf("(%s)+",*r);
- }
- break;
- case 0xB: /* byte displacement defferred*/
- printc('*');
- case 0xA: /* byte displacement */
- d = snarf(1, idsp);
- goto disp;
- case 0xD: /* word displacement deferred */
- printc('*');
- case 0xC: /* word displacement */
- d = snarf(2, idsp);
- goto disp;
- case 0xF: /* long displacement deferred */
- printc('*');
- case 0xE: /* long displacement */
- d = snarf(4, idsp);
- goto disp;
- disp:
- var[argno]=d;
- if (r==(regname+0xF) && mode>=0xA){
- /* PC offset addressing */
- var[argno] += dot+incp;
- }
- psymoff(var[argno],type,"");
- if (r != regname+0xF)
- printf("(%s)",*r);