diff options
| -rw-r--r-- | dynasm/dasm_arm64.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/dynasm/dasm_arm64.h b/dynasm/dasm_arm64.h index 78451bf6..d912e61d 100644 --- a/dynasm/dasm_arm64.h +++ b/dynasm/dasm_arm64.h | |||
| @@ -281,8 +281,9 @@ void dasm_put(Dst_DECL, int start, ...) | |||
| 281 | b[pos++] = ofs; /* Store pass1 offset estimate. */ | 281 | b[pos++] = ofs; /* Store pass1 offset estimate. */ |
| 282 | break; | 282 | break; |
| 283 | case DASM_IMM: | 283 | case DASM_IMM: |
| 284 | #ifdef DASM_CHECKS | ||
| 285 | CK((n & ((1<<((ins>>10)&31))-1)) == 0, RANGE_I); | 284 | CK((n & ((1<<((ins>>10)&31))-1)) == 0, RANGE_I); |
| 285 | n >>= ((ins>>10)&31); | ||
| 286 | #ifdef DASM_CHECKS | ||
| 286 | if ((ins & 0x8000)) | 287 | if ((ins & 0x8000)) |
| 287 | CK(((n + (1<<(((ins>>5)&31)-1)))>>((ins>>5)&31)) == 0, RANGE_I); | 288 | CK(((n + (1<<(((ins>>5)&31)-1)))>>((ins>>5)&31)) == 0, RANGE_I); |
| 288 | else | 289 | else |
| @@ -451,7 +452,7 @@ int dasm_encode(Dst_DECL, void *buffer) | |||
| 451 | break; | 452 | break; |
| 452 | case DASM_LABEL_PC: break; | 453 | case DASM_LABEL_PC: break; |
| 453 | case DASM_IMM: | 454 | case DASM_IMM: |
| 454 | cp[-1] |= ((n>>((ins>>10)&31)) & ((1<<((ins>>5)&31))-1)) << (ins&31); | 455 | cp[-1] |= (n & ((1<<((ins>>5)&31))-1)) << (ins&31); |
| 455 | break; | 456 | break; |
| 456 | case DASM_IMM6: | 457 | case DASM_IMM6: |
| 457 | cp[-1] |= ((n&31) << 19) | ((n&32) << 26); | 458 | cp[-1] |= ((n&31) << 19) | ((n&32) << 26); |
