summaryrefslogtreecommitdiffstats
path: root/Python/wordcode_helpers.h
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2016-05-24 06:15:14 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2016-05-24 06:15:14 (GMT)
commitb0f80b0312a99ca46323efc0e4d09b567553ed46 (patch)
tree323c414ce867d58fe60e127b4275e9931855a72f /Python/wordcode_helpers.h
parentc35f491a06bb55cba097ddcd9fcbc9452ec21fb1 (diff)
downloadcpython-b0f80b0312a99ca46323efc0e4d09b567553ed46.zip
cpython-b0f80b0312a99ca46323efc0e4d09b567553ed46.tar.gz
cpython-b0f80b0312a99ca46323efc0e4d09b567553ed46.tar.bz2
Issue #26647: Python interpreter now uses 16-bit wordcode instead of bytecode.
Patch by Demur Rumed.
Diffstat (limited to 'Python/wordcode_helpers.h')
-rw-r--r--Python/wordcode_helpers.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/Python/wordcode_helpers.h b/Python/wordcode_helpers.h
new file mode 100644
index 0000000..b61ba33
--- /dev/null
+++ b/Python/wordcode_helpers.h
@@ -0,0 +1,38 @@
+/* This file contains code shared by the compiler and the peephole
+ optimizer.
+ */
+
+/* Minimum number of bytes necessary to encode instruction with EXTENDED_ARGs */
+static int
+instrsize(unsigned int oparg)
+{
+ return oparg <= 0xff ? 2 :
+ oparg <= 0xffff ? 4 :
+ oparg <= 0xffffff ? 6 :
+ 8;
+}
+
+/* Spits out op/oparg pair using ilen bytes. codestr should be pointed at the
+ desired location of the first EXTENDED_ARG */
+static void
+write_op_arg(unsigned char *codestr, unsigned char opcode,
+ unsigned int oparg, int ilen)
+{
+ switch (ilen) {
+ case 8:
+ *codestr++ = EXTENDED_ARG;
+ *codestr++ = (oparg >> 24) & 0xff;
+ case 6:
+ *codestr++ = EXTENDED_ARG;
+ *codestr++ = (oparg >> 16) & 0xff;
+ case 4:
+ *codestr++ = EXTENDED_ARG;
+ *codestr++ = (oparg >> 8) & 0xff;
+ case 2:
+ *codestr++ = opcode;
+ *codestr++ = oparg & 0xff;
+ break;
+ default:
+ assert(0);
+ }
+}