| /* 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); |
| } |
| } |