# KOS_OP_OBJECT_COMPARE - **Style**: CMPCOUNT. Arg packs a KosCompare selector (high byte) with the reducing count (low byte). - **Stack**: `[..., a1, ..., aN] → [..., result]`. Chain-compare `N` stack values under the selector and push the result (`N >= 2`; raises `TypeError` otherwise). - **Semantics**: The richcompare six (LT/LE/EQ/NE/GT/GE, ordinals 0-5, matching CPython's Py_LT..Py_GE) chain left-to-right and push the last richcompare result. The extended selectors push a bool. IS / IS_NOT / IN / NOT_IN are strictly binary. IS_INSTANCE / IS_SUBCLASS test the first operand against each operand after it and hold on the first match; a tuple operand is opened one level and each item tested, and a tuple inside it raises `TypeError`. - **Compiler form:** Emitted by the comparison, predicate, and type-check specials with a `(selector, count)` pair, merged to the packed uint16 at normalize. When immediately followed by `JUMP_FALSE`, `compress` fuses the pair into `CHECK_COMPARE`. **Example:** `(instance? x int float)` -- value plus two types. The literal `(instance? x #(int float))` compiles to the same instructions, the tuple spliced at compile time. | index | opcode | arg | arg view | comment | |------:|----------------|------|--------------------|---------| | 0 | FAST | 0 | 0 (x) | stack: [..., x] | | 1 | FAST | 1 | 1 (int) | stack: [..., x, int] | | 2 | FAST | 2 | 2 (float) | stack: [..., x, int, float] | | 3 | OBJECT_COMPARE | 2563 | (IS_INSTANCE x3) | stack: [..., bool] |