mirror of https://github.com/python/cpython
gh-91276: remove unused _PyOpcode_RelativeJump (#103156)
This commit is contained in:
parent
33822d037a
commit
21bea68e2e
|
@ -12,8 +12,6 @@ extern "C" {
|
||||||
|
|
||||||
#include "opcode.h"
|
#include "opcode.h"
|
||||||
|
|
||||||
extern const uint32_t _PyOpcode_RelativeJump[9];
|
|
||||||
|
|
||||||
extern const uint32_t _PyOpcode_Jump[9];
|
extern const uint32_t _PyOpcode_Jump[9];
|
||||||
|
|
||||||
extern const uint8_t _PyOpcode_Caches[256];
|
extern const uint8_t _PyOpcode_Caches[256];
|
||||||
|
@ -21,17 +19,6 @@ extern const uint8_t _PyOpcode_Caches[256];
|
||||||
extern const uint8_t _PyOpcode_Deopt[256];
|
extern const uint8_t _PyOpcode_Deopt[256];
|
||||||
|
|
||||||
#ifdef NEED_OPCODE_TABLES
|
#ifdef NEED_OPCODE_TABLES
|
||||||
const uint32_t _PyOpcode_RelativeJump[9] = {
|
|
||||||
0U,
|
|
||||||
0U,
|
|
||||||
536870912U,
|
|
||||||
135020544U,
|
|
||||||
4163U,
|
|
||||||
0U,
|
|
||||||
0U,
|
|
||||||
0U,
|
|
||||||
48U,
|
|
||||||
};
|
|
||||||
const uint32_t _PyOpcode_Jump[9] = {
|
const uint32_t _PyOpcode_Jump[9] = {
|
||||||
0U,
|
0U,
|
||||||
0U,
|
0U,
|
||||||
|
|
|
@ -8,7 +8,7 @@ extern "C" {
|
||||||
# error "this header requires Py_BUILD_CORE define"
|
# error "this header requires Py_BUILD_CORE define"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "pycore_opcode.h" // _PyOpcode_RelativeJump
|
#include "pycore_opcode.h" // _PyOpcode_Jump
|
||||||
|
|
||||||
|
|
||||||
#define MAX_REAL_OPCODE 254
|
#define MAX_REAL_OPCODE 254
|
||||||
|
@ -85,9 +85,6 @@ is_bit_set_in_table(const uint32_t *table, int bitindex) {
|
||||||
#undef LOG_BITS_PER_INT
|
#undef LOG_BITS_PER_INT
|
||||||
#undef MASK_LOW_LOG_BITS
|
#undef MASK_LOW_LOG_BITS
|
||||||
|
|
||||||
#define IS_RELATIVE_JUMP(opcode) (is_bit_set_in_table(_PyOpcode_RelativeJump, opcode))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,12 +42,6 @@ is_block_push(cfg_instr *i)
|
||||||
return IS_BLOCK_PUSH_OPCODE(i->i_opcode);
|
return IS_BLOCK_PUSH_OPCODE(i->i_opcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
|
||||||
is_relative_jump(cfg_instr *i)
|
|
||||||
{
|
|
||||||
return IS_RELATIVE_JUMP(i->i_opcode);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
is_jump(cfg_instr *i)
|
is_jump(cfg_instr *i)
|
||||||
{
|
{
|
||||||
|
@ -199,8 +193,7 @@ blocksize(basicblock *b)
|
||||||
static void
|
static void
|
||||||
dump_instr(cfg_instr *i)
|
dump_instr(cfg_instr *i)
|
||||||
{
|
{
|
||||||
const char *jrel = (is_relative_jump(i)) ? "jrel " : "";
|
const char *jump = is_jump(i) ? "jump " : "";
|
||||||
const char *jabs = (is_jump(i) && !is_relative_jump(i))? "jabs " : "";
|
|
||||||
|
|
||||||
char arg[128];
|
char arg[128];
|
||||||
|
|
||||||
|
@ -211,8 +204,8 @@ dump_instr(cfg_instr *i)
|
||||||
if (HAS_TARGET(i->i_opcode)) {
|
if (HAS_TARGET(i->i_opcode)) {
|
||||||
sprintf(arg, "target: %p [%d] ", i->i_target, i->i_oparg);
|
sprintf(arg, "target: %p [%d] ", i->i_target, i->i_oparg);
|
||||||
}
|
}
|
||||||
fprintf(stderr, "line: %d, opcode: %d %s%s%s\n",
|
fprintf(stderr, "line: %d, opcode: %d %s%s\n",
|
||||||
i->i_loc.lineno, i->i_opcode, arg, jabs, jrel);
|
i->i_loc.lineno, i->i_opcode, arg, jump);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
|
@ -500,25 +493,20 @@ resolve_jump_offsets(basicblock *entryblock)
|
||||||
for (int i = 0; i < b->b_iused; i++) {
|
for (int i = 0; i < b->b_iused; i++) {
|
||||||
cfg_instr *instr = &b->b_instr[i];
|
cfg_instr *instr = &b->b_instr[i];
|
||||||
int isize = _PyCfg_InstrSize(instr);
|
int isize = _PyCfg_InstrSize(instr);
|
||||||
/* Relative jumps are computed relative to
|
/* jump offsets are computed relative to
|
||||||
the instruction pointer after fetching
|
* the instruction pointer after fetching
|
||||||
the jump instruction.
|
* the jump instruction.
|
||||||
*/
|
*/
|
||||||
bsize += isize;
|
bsize += isize;
|
||||||
if (is_jump(instr)) {
|
if (is_jump(instr)) {
|
||||||
instr->i_oparg = instr->i_target->b_offset;
|
instr->i_oparg = instr->i_target->b_offset;
|
||||||
if (is_relative_jump(instr)) {
|
if (instr->i_oparg < bsize) {
|
||||||
if (instr->i_oparg < bsize) {
|
assert(IS_BACKWARDS_JUMP_OPCODE(instr->i_opcode));
|
||||||
assert(IS_BACKWARDS_JUMP_OPCODE(instr->i_opcode));
|
instr->i_oparg = bsize - instr->i_oparg;
|
||||||
instr->i_oparg = bsize - instr->i_oparg;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
assert(!IS_BACKWARDS_JUMP_OPCODE(instr->i_opcode));
|
|
||||||
instr->i_oparg -= bsize;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
assert(!IS_BACKWARDS_JUMP_OPCODE(instr->i_opcode));
|
assert(!IS_BACKWARDS_JUMP_OPCODE(instr->i_opcode));
|
||||||
|
instr->i_oparg -= bsize;
|
||||||
}
|
}
|
||||||
if (_PyCfg_InstrSize(instr) != isize) {
|
if (_PyCfg_InstrSize(instr) != isize) {
|
||||||
extended_arg_recompile = 1;
|
extended_arg_recompile = 1;
|
||||||
|
|
|
@ -130,12 +130,10 @@ def main(opcode_py, outfile='Include/opcode.h', internaloutfile='Include/interna
|
||||||
for name, op in specialized_opmap.items():
|
for name, op in specialized_opmap.items():
|
||||||
fobj.write(DEFINE.format(name, op))
|
fobj.write(DEFINE.format(name, op))
|
||||||
|
|
||||||
iobj.write("\nextern const uint32_t _PyOpcode_RelativeJump[9];\n")
|
|
||||||
iobj.write("\nextern const uint32_t _PyOpcode_Jump[9];\n")
|
iobj.write("\nextern const uint32_t _PyOpcode_Jump[9];\n")
|
||||||
iobj.write("\nextern const uint8_t _PyOpcode_Caches[256];\n")
|
iobj.write("\nextern const uint8_t _PyOpcode_Caches[256];\n")
|
||||||
iobj.write("\nextern const uint8_t _PyOpcode_Deopt[256];\n")
|
iobj.write("\nextern const uint8_t _PyOpcode_Deopt[256];\n")
|
||||||
iobj.write("\n#ifdef NEED_OPCODE_TABLES\n")
|
iobj.write("\n#ifdef NEED_OPCODE_TABLES\n")
|
||||||
write_int_array_from_ops("_PyOpcode_RelativeJump", opcode['hasjrel'], iobj)
|
|
||||||
write_int_array_from_ops("_PyOpcode_Jump", opcode['hasjrel'] + opcode['hasjabs'], iobj)
|
write_int_array_from_ops("_PyOpcode_Jump", opcode['hasjrel'] + opcode['hasjabs'], iobj)
|
||||||
|
|
||||||
iobj.write("\nconst uint8_t _PyOpcode_Caches[256] = {\n")
|
iobj.write("\nconst uint8_t _PyOpcode_Caches[256] = {\n")
|
||||||
|
|
Loading…
Reference in New Issue