aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2020-09-12 17:32:30 +0200
committerMike Pall <mike>2020-09-12 17:32:30 +0200
commit412d5a4039cf2cf9c3817af57fae4df11a38d070 (patch)
tree3743418d19275725658446f6291b8242baba06dd
parent90e65514dda3994253c1e3007f63da7ace8f6b7b (diff)
downloadluajit-412d5a4039cf2cf9c3817af57fae4df11a38d070.tar.gz
luajit-412d5a4039cf2cf9c3817af57fae4df11a38d070.tar.bz2
luajit-412d5a4039cf2cf9c3817af57fae4df11a38d070.zip
DynASM/x86: Fix VREG support.
-rw-r--r--dynasm/dasm_x86.h11
1 files changed, 7 insertions, 4 deletions
diff --git a/dynasm/dasm_x86.h b/dynasm/dasm_x86.h
index 84b9d17f..feb84c14 100644
--- a/dynasm/dasm_x86.h
+++ b/dynasm/dasm_x86.h
@@ -299,11 +299,13 @@ int dasm_link(Dst_DECL, size_t *szp)
299 299
300 while (pos != lastpos) { 300 while (pos != lastpos) {
301 dasm_ActList p = D->actionlist + b[pos++]; 301 dasm_ActList p = D->actionlist + b[pos++];
302 int op = 0;
302 while (1) { 303 while (1) {
303 int op, action = *p++; 304 int action = *p++;
304 switch (action) { 305 switch (action) {
305 case DASM_REL_LG: p++; op = p[-3]; goto rel_pc; 306 case DASM_REL_LG: p++;
306 case DASM_REL_PC: op = p[-2]; rel_pc: { 307 /* fallthrough */
308 case DASM_REL_PC: {
307 int shrink = op == 0xe9 ? 3 : ((op&0xf0) == 0x80 ? 4 : 0); 309 int shrink = op == 0xe9 ? 3 : ((op&0xf0) == 0x80 ? 4 : 0);
308 if (shrink) { /* Shrinkable branch opcode? */ 310 if (shrink) { /* Shrinkable branch opcode? */
309 int lofs, lpos = b[pos]; 311 int lofs, lpos = b[pos];
@@ -335,9 +337,10 @@ int dasm_link(Dst_DECL, size_t *szp)
335 case DASM_LABEL_PC: b[pos++] += ofs; break; /* Fix label offset. */ 337 case DASM_LABEL_PC: b[pos++] += ofs; break; /* Fix label offset. */
336 case DASM_ALIGN: ofs -= (b[pos++]+ofs)&*p++; break; /* Adjust ofs. */ 338 case DASM_ALIGN: ofs -= (b[pos++]+ofs)&*p++; break; /* Adjust ofs. */
337 case DASM_EXTERN: p += 2; break; 339 case DASM_EXTERN: p += 2; break;
338 case DASM_ESC: p++; break; 340 case DASM_ESC: op = *p++; break;
339 case DASM_MARK: break; 341 case DASM_MARK: break;
340 case DASM_SECTION: case DASM_STOP: goto stop; 342 case DASM_SECTION: case DASM_STOP: goto stop;
343 default: op = action; break;
341 } 344 }
342 } 345 }
343 stop: (void)0; 346 stop: (void)0;