mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	gh-91276: remove unused _PyOpcode_RelativeJump (#103156)
This commit is contained in:
		
							parent
							
								
									33822d037a
								
							
						
					
					
						commit
						21bea68e2e
					
				
					 4 changed files with 12 additions and 42 deletions
				
			
		
							
								
								
									
										13
									
								
								Include/internal/pycore_opcode.h
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										13
									
								
								Include/internal/pycore_opcode.h
									
										
									
										generated
									
									
									
								
							|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Irit Katriel
						Irit Katriel