diff options
author | Guido van Rossum <guido@python.org> | 2022-04-21 18:53:57 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-21 18:53:57 (GMT) |
commit | f8dc6186d1857a19edd182277a9d78e6d6cc3787 (patch) | |
tree | e85e859c1999d95ce7cc6402068f84efad807e1f /Include/opcode.h | |
parent | d44815cabc0a8d9932df2fa95cb374eadddb7c17 (diff) | |
download | cpython-f8dc6186d1857a19edd182277a9d78e6d6cc3787.zip cpython-f8dc6186d1857a19edd182277a9d78e6d6cc3787.tar.gz cpython-f8dc6186d1857a19edd182277a9d78e6d6cc3787.tar.bz2 |
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
Diffstat (limited to 'Include/opcode.h')
-rw-r--r-- | Include/opcode.h | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/Include/opcode.h b/Include/opcode.h index 8db4238..89f56e2 100644 --- a/Include/opcode.h +++ b/Include/opcode.h @@ -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. |