diff options
| author | Mike Pall <mike> | 2020-09-12 17:36:04 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2020-09-12 17:36:04 +0200 |
| commit | cc44642cf89198e39aa41067c4e1e9879a82c2f5 (patch) | |
| tree | 3a63234f89cfa00f58f118e67e5365f1afa4b071 /dynasm | |
| parent | 7e94e1c4f197f66c812c483c8a5b2b5aed791cd7 (diff) | |
| parent | 412d5a4039cf2cf9c3817af57fae4df11a38d070 (diff) | |
| download | luajit-cc44642cf89198e39aa41067c4e1e9879a82c2f5.tar.gz luajit-cc44642cf89198e39aa41067c4e1e9879a82c2f5.tar.bz2 luajit-cc44642cf89198e39aa41067c4e1e9879a82c2f5.zip | |
Merge branch 'master' into v2.1
Diffstat (limited to 'dynasm')
| -rw-r--r-- | dynasm/dasm_x86.h | 11 |
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; |
