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 | |
| parent | 0a5045c34e0d2902e38c1f8f65c5bbc2fdc63535 (diff) | |
| download | luajit-1b1bd08d3c98a936058f4bee9de59dc7505e741c.tar.gz luajit-1b1bd08d3c98a936058f4bee9de59dc7505e741c.tar.bz2 luajit-1b1bd08d3c98a936058f4bee9de59dc7505e741c.zip | |
DynASM/ARM64: Fix checks for scaled immediates.
| -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); |
