DynASM/x86: Fix VREG support.

This commit is contained in:
Mike Pall 2020-09-12 17:32:30 +02:00
parent 90e65514dd
commit 412d5a4039

View File

@ -299,11 +299,13 @@ int dasm_link(Dst_DECL, size_t *szp)
while (pos != lastpos) { while (pos != lastpos) {
dasm_ActList p = D->actionlist + b[pos++]; dasm_ActList p = D->actionlist + b[pos++];
int op = 0;
while (1) { while (1) {
int op, action = *p++; int action = *p++;
switch (action) { switch (action) {
case DASM_REL_LG: p++; op = p[-3]; goto rel_pc; case DASM_REL_LG: p++;
case DASM_REL_PC: op = p[-2]; rel_pc: { /* fallthrough */
case DASM_REL_PC: {
int shrink = op == 0xe9 ? 3 : ((op&0xf0) == 0x80 ? 4 : 0); int shrink = op == 0xe9 ? 3 : ((op&0xf0) == 0x80 ? 4 : 0);
if (shrink) { /* Shrinkable branch opcode? */ if (shrink) { /* Shrinkable branch opcode? */
int lofs, lpos = b[pos]; int lofs, lpos = b[pos];
@ -335,9 +337,10 @@ int dasm_link(Dst_DECL, size_t *szp)
case DASM_LABEL_PC: b[pos++] += ofs; break; /* Fix label offset. */ case DASM_LABEL_PC: b[pos++] += ofs; break; /* Fix label offset. */
case DASM_ALIGN: ofs -= (b[pos++]+ofs)&*p++; break; /* Adjust ofs. */ case DASM_ALIGN: ofs -= (b[pos++]+ofs)&*p++; break; /* Adjust ofs. */
case DASM_EXTERN: p += 2; break; case DASM_EXTERN: p += 2; break;
case DASM_ESC: p++; break; case DASM_ESC: op = *p++; break;
case DASM_MARK: break; case DASM_MARK: break;
case DASM_SECTION: case DASM_STOP: goto stop; case DASM_SECTION: case DASM_STOP: goto stop;
default: op = action; break;
} }
} }
stop: (void)0; stop: (void)0;