Does that work? texkill takes a single destination parameter, and no source parameters; see ps_opcode_table[] in d3dbc.c.
(The documentation claims it takes a source parameter, but that's wrong. How can you tell? The bytecode for "texkill t0" is "0x01000041 0xb00f0000", but would have been "0x01000041 0xb0e40000" if "t0" were a source parameter.)
I didn't notice this.
Surprisingly clip.shader_test passed, but I think that may have been because we are still calling ```shader_parser_get_src_params(&sm1->p, 0)``` when initializing the instruction and `shader_param_allocator_get()` still returns a valid pointer regardless of count being 0, perhaps it should return `NULL` in that case.
Note that there's also a subtle difference between shader model 1 texkill and shader model 2+ texkill: SM2+ texkill always compares all four components of the destination register, while SM1 texkill always compares the first three components of the destination register. See also texkill_test() in Wine's d3d9 tests, and shader_glsl_texkill() in wined3d.
I see, the documentation only mentions the first 3 components. I added the missing 4th component to the check, since we are not supporting SM1.