]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
PPC: Fix range check for scaled immediates in DynASM.
authorMike Pall <mike>
Fri, 1 Jul 2011 22:43:19 +0000 (00:43 +0200)
committerMike Pall <mike>
Fri, 1 Jul 2011 22:43:19 +0000 (00:43 +0200)
dynasm/dasm_ppc.h

index e928ffedd3882e33c61468913c07978c134ac543..1c8580fb8568397689de8afce0ad68874059e87b 100644 (file)
@@ -233,6 +233,9 @@ void dasm_put(Dst_DECL, int start, ...)
       case DASM_IMM:
 #ifdef DASM_CHECKS
        CK((n & ((1<<((ins>>10)&31))-1)) == 0, RANGE_I);
+#endif
+       n >>= ((ins>>10)&31);
+#ifdef DASM_CHECKS
        if (ins & 0x8000)
          CK(((n + (1<<(((ins>>5)&31)-1)))>>((ins>>5)&31)) == 0, RANGE_I);
        else
@@ -360,7 +363,7 @@ int dasm_encode(Dst_DECL, void *buffer)
          break;
        case DASM_LABEL_PC: break;
        case DASM_IMM:
-         cp[-1] |= ((n>>((ins>>10)&31)) & ((1<<((ins>>5)&31))-1)) << (ins&31);
+         cp[-1] |= (n & ((1<<((ins>>5)&31))-1)) << (ins&31);
          break;
        default: *cp++ = ins; break;
        }