Staging
v0.5.1
https://github.com/python/cpython
Raw File
Tip revision: b87d6000f38e6158bbe1d9df5c6136f27aeace12 authored by Ned Deily on 15 August 2016, 20:21:29 UTC
Version bump for 3.6.0a4
Tip revision: b87d600
wordcode_helpers.h
/* 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);
    }
}
back to top