aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2020-09-12 17:36:04 +0200
committerMike Pall <mike>2020-09-12 17:36:04 +0200
commitcc44642cf89198e39aa41067c4e1e9879a82c2f5 (patch)
tree3a63234f89cfa00f58f118e67e5365f1afa4b071
parent7e94e1c4f197f66c812c483c8a5b2b5aed791cd7 (diff)
parent412d5a4039cf2cf9c3817af57fae4df11a38d070 (diff)
downloadluajit-cc44642cf89198e39aa41067c4e1e9879a82c2f5.tar.gz
luajit-cc44642cf89198e39aa41067c4e1e9879a82c2f5.tar.bz2
luajit-cc44642cf89198e39aa41067c4e1e9879a82c2f5.zip
Merge branch 'master' into v2.1
-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 edaddf54..3a3bcff2 100644
--- a/dynasm/dasm_x86.h
+++ b/dynasm/dasm_x86.h
@@ -305,11 +305,13 @@ int dasm_link(Dst_DECL, size_t *szp)
305 305
306 while (pos != lastpos) { 306 while (pos != lastpos) {
307 dasm_ActList p = D->actionlist + b[pos++]; 307 dasm_ActList p = D->actionlist + b[pos++];
308 int op = 0;
308 while (1) { 309 while (1) {
309 int op, action = *p++; 310 int action = *p++;
310 switch (action) { 311 switch (action) {
311 case DASM_REL_LG: p++; op = p[-3]; goto rel_pc; 312 case DASM_REL_LG: p++;
312 case DASM_REL_PC: op = p[-2]; rel_pc: { 313 /* fallthrough */
314 case DASM_REL_PC: {
313 int shrink = op == 0xe9 ? 3 : ((op&0xf0) == 0x80 ? 4 : 0); 315 int shrink = op == 0xe9 ? 3 : ((op&0xf0) == 0x80 ? 4 : 0);
314 if (shrink) { /* Shrinkable branch opcode? */ 316 if (shrink) { /* Shrinkable branch opcode? */
315 int lofs, lpos = b[pos]; 317 int lofs, lpos = b[pos];
@@ -341,9 +343,10 @@ int dasm_link(Dst_DECL, size_t *szp)
341 case DASM_LABEL_PC: b[pos++] += ofs; break; /* Fix label offset. */ 343 case DASM_LABEL_PC: b[pos++] += ofs; break; /* Fix label offset. */
342 case DASM_ALIGN: ofs -= (b[pos++]+ofs)&*p++; break; /* Adjust ofs. */ 344 case DASM_ALIGN: ofs -= (b[pos++]+ofs)&*p++; break; /* Adjust ofs. */
343 case DASM_EXTERN: p += 2; break; 345 case DASM_EXTERN: p += 2; break;
344 case DASM_ESC: p++; break; 346 case DASM_ESC: op = *p++; break;
345 case DASM_MARK: break; 347 case DASM_MARK: break;
346 case DASM_SECTION: case DASM_STOP: goto stop; 348 case DASM_SECTION: case DASM_STOP: goto stop;
349 default: op = action; break;
347 } 350 }
348 } 351 }
349 stop: (void)0; 352 stop: (void)0;