aboutsummaryrefslogtreecommitdiff
path: root/dynasm/dasm_arm64.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--dynasm/dasm_arm64.h11
1 files changed, 9 insertions, 2 deletions
diff --git a/dynasm/dasm_arm64.h b/dynasm/dasm_arm64.h
index 30bc3f95..4a9a49bc 100644
--- a/dynasm/dasm_arm64.h
+++ b/dynasm/dasm_arm64.h
@@ -22,7 +22,7 @@ enum {
22 DASM_ALIGN, DASM_REL_LG, DASM_LABEL_LG, 22 DASM_ALIGN, DASM_REL_LG, DASM_LABEL_LG,
23 /* The following actions also have an argument. */ 23 /* The following actions also have an argument. */
24 DASM_REL_PC, DASM_LABEL_PC, 24 DASM_REL_PC, DASM_LABEL_PC,
25 DASM_IMM, DASM_IMM12, DASM_IMM13W, DASM_IMM13X, DASM_IMML, 25 DASM_IMM, DASM_IMM6, DASM_IMM12, DASM_IMM13W, DASM_IMM13X, DASM_IMML,
26 DASM__MAX 26 DASM__MAX
27}; 27};
28 28
@@ -290,6 +290,10 @@ void dasm_put(Dst_DECL, int start, ...)
290#endif 290#endif
291 b[pos++] = n; 291 b[pos++] = n;
292 break; 292 break;
293 case DASM_IMM6:
294 CK((n >> 6) == 0, RANGE_I);
295 b[pos++] = n;
296 break;
293 case DASM_IMM12: 297 case DASM_IMM12:
294 CK(dasm_imm12((unsigned int)n) != -1, RANGE_I); 298 CK(dasm_imm12((unsigned int)n) != -1, RANGE_I);
295 b[pos++] = n; 299 b[pos++] = n;
@@ -369,7 +373,7 @@ int dasm_link(Dst_DECL, size_t *szp)
369 case DASM_ALIGN: ofs -= (b[pos++] + ofs) & (ins & 255); break; 373 case DASM_ALIGN: ofs -= (b[pos++] + ofs) & (ins & 255); break;
370 case DASM_REL_LG: case DASM_REL_PC: pos++; break; 374 case DASM_REL_LG: case DASM_REL_PC: pos++; break;
371 case DASM_LABEL_LG: case DASM_LABEL_PC: b[pos++] += ofs; break; 375 case DASM_LABEL_LG: case DASM_LABEL_PC: b[pos++] += ofs; break;
372 case DASM_IMM: case DASM_IMM12: case DASM_IMM13W: 376 case DASM_IMM: case DASM_IMM6: case DASM_IMM12: case DASM_IMM13W:
373 case DASM_IMML: pos++; break; 377 case DASM_IMML: pos++; break;
374 case DASM_IMM13X: pos += 2; break; 378 case DASM_IMM13X: pos += 2; break;
375 } 379 }
@@ -449,6 +453,9 @@ int dasm_encode(Dst_DECL, void *buffer)
449 case DASM_IMM: 453 case DASM_IMM:
450 cp[-1] |= ((n>>((ins>>10)&31)) & ((1<<((ins>>5)&31))-1)) << (ins&31); 454 cp[-1] |= ((n>>((ins>>10)&31)) & ((1<<((ins>>5)&31))-1)) << (ins&31);
451 break; 455 break;
456 case DASM_IMM6:
457 cp[-1] |= ((n&31) << 19) | ((n&32) << 26);
458 break;
452 case DASM_IMM12: 459 case DASM_IMM12:
453 cp[-1] |= (dasm_imm12((unsigned int)n) << 10); 460 cp[-1] |= (dasm_imm12((unsigned int)n) << 10);
454 break; 461 break;