diff options
Diffstat (limited to '')
-rw-r--r-- | dynasm/dasm_arm64.h | 11 |
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; |