- if (*tok == ')')
- {
- tok++;
- AnEXTEN |= EXT_FULLWORD; // Definitely using full extension format, so set bit 8
- AnEXTEN |= EXT_BS; // Base register suppressed
- AnEXTEN |= EXT_BDSIZE0; // Base displacement null
- AnEXTEN |= EXT_IISPOSN; // Indirect Postindexed with Null Outer Displacement
- AnREG = 6 << 3; // stuff 110 to mode field
- AMn = MEMPOST;
- goto AnOK;
- }
- else
- return error("unhandled so far");
+ if (*tok == SYMBOL)
+ {
+ if (expr(AnEXPR, &AnEXVAL, &AnEXATTR, &AnESYM) != OK)
+ return error("scale factor expression must evaluate");
+ switch (AnEXVAL)
+ {
+ case 1:
+ break;
+ case 2:
+ AnIXSIZ |= TIMES2;
+ break;
+ case 4:
+ AnIXSIZ |= TIMES4;
+ break;
+ case 8:
+ AnIXSIZ |= TIMES8;
+ break;
+ default:
+ goto badmode;
+ }
+ }
+ else if (*tok++ != CONST || *tok > 8)
+ goto badmode;
+ else
+ {
+ switch ((int)*tok++)
+ {
+ case 1:
+ break;
+ case 2:
+ AnIXSIZ |= TIMES2;
+ break;
+ case 4:
+ AnIXSIZ |= TIMES4;
+ break;
+ case 8:
+ AnIXSIZ |= TIMES8;
+ break;
+ default:
+ goto badmode;
+ }
+ }
+ }
+
+ if (*tok == ')')
+ {
+ tok++;
+ AnEXTEN |= EXT_FULLWORD; // Definitely using full extension format, so set bit 8
+ AnEXTEN |= EXT_BS; // Base register suppressed
+ AnEXTEN |= EXT_BDSIZE0; // Base displacement null
+ AnEXTEN |= EXT_IISPOSN; // Indirect Postindexed with Null Outer Displacement
+ AnREG = 6 << 3; // stuff 110 to mode field
+ AMn = MEMPOST;
+ goto AnOK;
+ }
+ else if (*tok==',')
+ {
+ tok++; // eat the comma
+ // It might be (Dn[.wl][*scale],od)
+ // Maybe this is wrong and we have to write some code here
+ // instead of reusing that path...
+ goto CHECKODn;
+ }
+ else
+ return error("unhandled so far");