mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
Fix bytecode dump for certain number constants.
This commit is contained in:
parent
d72d758a11
commit
8e524d437e
@ -219,13 +219,19 @@ static void bcwrite_knum(BCWriteCtx *ctx, GCproto *pt)
|
|||||||
k = lj_num2int(num);
|
k = lj_num2int(num);
|
||||||
if (num == (lua_Number)k) { /* -0 is never a constant. */
|
if (num == (lua_Number)k) { /* -0 is never a constant. */
|
||||||
save_int:
|
save_int:
|
||||||
bcwrite_uleb128(ctx, 2*(uint32_t)k);
|
bcwrite_uleb128(ctx, 2*(uint32_t)k | ((uint32_t)k & 0x80000000u));
|
||||||
if (k < 0) ctx->sb.buf[ctx->sb.n-1] |= 0x10;
|
if (k < 0) {
|
||||||
|
char *p = &ctx->sb.buf[ctx->sb.n-1];
|
||||||
|
*p = (*p & 7) | ((k>>27) & 0x18);
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bcwrite_uleb128(ctx, 1+2*o->u32.lo);
|
bcwrite_uleb128(ctx, 1+(2*o->u32.lo | (o->u32.lo & 0x80000000u)));
|
||||||
if (o->u32.lo >= 0x80000000u) ctx->sb.buf[ctx->sb.n-1] |= 0x10;
|
if (o->u32.lo >= 0x80000000u) {
|
||||||
|
char *p = &ctx->sb.buf[ctx->sb.n-1];
|
||||||
|
*p = (*p & 7) | ((o->u32.lo>>27) & 0x18);
|
||||||
|
}
|
||||||
bcwrite_uleb128(ctx, o->u32.hi);
|
bcwrite_uleb128(ctx, o->u32.hi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user