diff options
author | Mike Pall <mike> | 2015-01-07 13:17:11 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2015-01-07 13:17:11 +0100 |
commit | 1b1bd08d3c98a936058f4bee9de59dc7505e741c (patch) | |
tree | 5ec7f5986442b1529ff49de03d618e2d879af383 /dynasm | |
parent | 0a5045c34e0d2902e38c1f8f65c5bbc2fdc63535 (diff) | |
download | luajit-1b1bd08d3c98a936058f4bee9de59dc7505e741c.tar.gz luajit-1b1bd08d3c98a936058f4bee9de59dc7505e741c.tar.bz2 luajit-1b1bd08d3c98a936058f4bee9de59dc7505e741c.zip |
DynASM/ARM64: Fix checks for scaled immediates.
Diffstat (limited to 'dynasm')
-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); |