GH-91719: Make MSVC generate somewhat faster switch code (#91718)

Apparently a switch on an 8-bit quantity where all cases are
present generates a more efficient jump (doing only one indexed
memory load instead of two).

So we make opcode and use_tracing uint8_t, and generate a macro
full of extra `case NNN:` lines for all unused opcodes.

See https://github.com/faster-cpython/ideas/issues/321#issuecomment-1103263673
This commit is contained in:
Guido van Rossum 2022-04-21 11:53:57 -07:00 committed by GitHub
parent d44815cabc
commit f8dc6186d1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 90 additions and 3 deletions

78
Include/opcode.h generated
View file

@ -707,6 +707,84 @@ static const char *const _PyOpcode_OpName[256] = {
};
#endif
#define EXTRA_CASES \
case 180: \
case 181: \
case 182: \
case 183: \
case 184: \
case 185: \
case 186: \
case 187: \
case 188: \
case 189: \
case 190: \
case 191: \
case 192: \
case 193: \
case 194: \
case 195: \
case 196: \
case 197: \
case 198: \
case 199: \
case 200: \
case 201: \
case 202: \
case 203: \
case 204: \
case 205: \
case 206: \
case 207: \
case 208: \
case 209: \
case 210: \
case 211: \
case 212: \
case 213: \
case 214: \
case 215: \
case 216: \
case 217: \
case 218: \
case 219: \
case 220: \
case 221: \
case 222: \
case 223: \
case 224: \
case 225: \
case 226: \
case 227: \
case 228: \
case 229: \
case 230: \
case 231: \
case 232: \
case 233: \
case 234: \
case 235: \
case 236: \
case 237: \
case 238: \
case 239: \
case 240: \
case 241: \
case 242: \
case 243: \
case 244: \
case 245: \
case 246: \
case 247: \
case 248: \
case 249: \
case 250: \
case 251: \
case 252: \
case 253: \
case 254: \
;
#define HAS_ARG(op) ((op) >= HAVE_ARGUMENT)
/* Reserve some bytecodes for internal use in the compiler.