Skip to content

Commit 2f6603e

Browse files
committed
Silence warnings on Windows
Instead of `int oparg` we now have `uint64_t operand`. In the Tier 2 interpreter, we add `int oparg` and set it to a truncated version of `operand` so instructions can reference it.
1 parent 2254f83 commit 2f6603e

File tree

4 files changed

+19
-17
lines changed

4 files changed

+19
-17
lines changed

Include/internal/pycore_uops.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ extern "C" {
1212

1313
typedef struct {
1414
int opcode;
15-
uintptr_t oparg;
15+
uint64_t operand; // Sometimes oparg, sometimes a cache entry
1616
} _PyUOpInstruction;
1717

1818
typedef struct {

Python/ceval.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2808,10 +2808,12 @@ _PyUopExecute(_PyExecutorObject *executor, _PyInterpreterFrame *frame, PyObject
28082808
_Py_CODEUNIT *ip_offset = (_Py_CODEUNIT *)_PyFrame_GetCode(frame)->co_code_adaptive - 1;
28092809
int pc = 0;
28102810
int opcode;
2811+
uint64_t operand;
28112812
int oparg;
28122813
for (;;) {
28132814
opcode = self->trace[pc].opcode;
2814-
oparg = self->trace[pc].oparg;
2815+
operand = self->trace[pc].operand;
2816+
oparg = (int)operand;
28152817
#ifdef LLTRACE
28162818
if (lltrace >= 3) {
28172819
const char *opname = opcode < 256 ? _PyOpcode_OpName[opcode] : "";

Python/optimizer.c

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -323,35 +323,35 @@ translate_bytecode_to_trace(
323323
code->co_firstlineno,
324324
(long)(instr - (_Py_CODEUNIT *)code->co_code_adaptive));
325325
}
326-
#define ADD_TO_TRACE(OPCODE, OPARG) \
326+
#define ADD_TO_TRACE(OPCODE, OPERAND) \
327327
if (lltrace >= 2) { \
328328
const char *opname = (OPCODE) < 256 ? _PyOpcode_OpName[(OPCODE)] : ""; \
329-
fprintf(stderr, " ADD_TO_TRACE(%s %d, %d)\n", opname, (OPCODE), (OPARG)); \
329+
fprintf(stderr, " ADD_TO_TRACE(%s %d, %llu)\n", opname, (OPCODE), (uint64_t)(OPERAND)); \
330330
} \
331331
trace[trace_length].opcode = (OPCODE); \
332-
trace[trace_length].oparg = (OPARG); \
332+
trace[trace_length].operand = (OPERAND); \
333333
trace_length++;
334334
#else
335-
#define ADD_TO_TRACE(OPCODE, OPARG) \
335+
#define ADD_TO_TRACE(OPCODE, OPERAND) \
336336
trace[trace_length].opcode = (OPCODE); \
337-
trace[trace_length].oparg = (OPARG); \
337+
trace[trace_length].operand = (OPERAND); \
338338
trace_length++;
339339
#endif
340340

341341
int trace_length = 0;
342342
// Always reserve space for one uop, plus SET_UP, plus EXIT_TRACE
343343
while (trace_length + 3 <= max_length) {
344344
int opcode = instr->op.code;
345-
int oparg = instr->op.arg;
345+
uint64_t operand = instr->op.arg;
346346
switch (opcode) {
347347
case LOAD_FAST_LOAD_FAST:
348348
{
349349
// Reserve space for two uops (+ SETUP + EXIT_TRACE)
350350
if (trace_length + 4 > max_length) {
351351
goto done;
352352
}
353-
int oparg1 = oparg >> 4;
354-
int oparg2 = oparg & 15;
353+
uint64_t oparg1 = operand >> 4;
354+
uint64_t oparg2 = operand & 15;
355355
ADD_TO_TRACE(LOAD_FAST, oparg1);
356356
ADD_TO_TRACE(LOAD_FAST, oparg2);
357357
break;
@@ -371,23 +371,23 @@ translate_bytecode_to_trace(
371371
case 0:
372372
break;
373373
case 1:
374-
oparg = read_u16(&instr[offset].cache);
374+
operand = read_u16(&instr[offset].cache);
375375
break;
376376
case 2:
377-
oparg = read_u32(&instr[offset].cache);
377+
operand = read_u32(&instr[offset].cache);
378378
break;
379379
case 4:
380-
oparg = read_u64(&instr[offset].cache);
380+
operand = read_u64(&instr[offset].cache);
381381
break;
382382
default:
383383
fprintf(stderr,
384-
"opcode=%d, oparg=%d; nuops=%d, i=%d; size=%d, offset=%d\n",
385-
opcode, oparg, nuops, i,
384+
"opcode=%d, operand=%llu; nuops=%d, i=%d; size=%d, offset=%d\n",
385+
opcode, operand, nuops, i,
386386
expansion->uops[i].size,
387387
expansion->uops[i].offset);
388388
Py_FatalError("garbled expansion");
389389
}
390-
ADD_TO_TRACE(expansion->uops[i].uop, oparg);
390+
ADD_TO_TRACE(expansion->uops[i].uop, operand);
391391
assert(expansion->uops[0].size == 0); // TODO
392392
}
393393
break;

Tools/cases_generator/generate_cases.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ def write_body(
515515
f"{typ}{ceffect.name} = {func}(&next_instr[{cache_offset}].cache);"
516516
)
517517
else:
518-
out.emit(f"{typ}{ceffect.name} = oparg;")
518+
out.emit(f"{typ}{ceffect.name} = operand;")
519519
cache_offset += ceffect.size
520520
assert cache_offset == self.cache_offset + cache_adjust
521521

0 commit comments

Comments
 (0)