diff options
Diffstat (limited to 'Include/internal')
| -rw-r--r-- | Include/internal/pycore_code.h | 22 | ||||
| -rw-r--r-- | Include/internal/pycore_opcode.h | 2 |
2 files changed, 22 insertions, 2 deletions
diff --git a/Include/internal/pycore_code.h b/Include/internal/pycore_code.h index 9e59fc9..b53657a 100644 --- a/Include/internal/pycore_code.h +++ b/Include/internal/pycore_code.h @@ -41,7 +41,6 @@ typedef struct { typedef struct { uint16_t counter; - uint16_t mask; } _PyCompareOpCache; #define INLINE_CACHE_ENTRIES_COMPARE_OP CACHE_ENTRIES(_PyCompareOpCache) @@ -477,6 +476,27 @@ _Py_MakeShimCode(const _PyShimCodeDef *code); extern uint32_t _Py_next_func_version; +/* Comparison bit masks. */ + +/* Note this evaluates its arguments twice each */ +#define COMPARISON_BIT(x, y) (1 << (2 * ((x) >= (y)) + ((x) <= (y)))) + +/* + * The following bits are chosen so that the value of + * COMPARSION_BIT(left, right) + * masked by the values below will be non-zero if the + * comparison is true, and zero if it is false */ + +/* This is for values that are unordered, ie. NaN, not types that are unordered, e.g. sets */ +#define COMPARISON_UNORDERED 1 + +#define COMPARISON_LESS_THAN 2 +#define COMPARISON_GREATER_THAN 4 +#define COMPARISON_EQUALS 8 + +#define COMPARISON_NOT_EQUALS (COMPARISON_UNORDERED | COMPARISON_LESS_THAN | COMPARISON_GREATER_THAN) + + #ifdef __cplusplus } #endif diff --git a/Include/internal/pycore_opcode.h b/Include/internal/pycore_opcode.h index 8fdf121..5806d69 100644 --- a/Include/internal/pycore_opcode.h +++ b/Include/internal/pycore_opcode.h @@ -47,7 +47,7 @@ const uint8_t _PyOpcode_Caches[256] = { [FOR_ITER] = 1, [STORE_ATTR] = 4, [LOAD_ATTR] = 9, - [COMPARE_OP] = 2, + [COMPARE_OP] = 1, [LOAD_GLOBAL] = 5, [BINARY_OP] = 1, [CALL] = 4, |
